136 let |
136 let |
137 fun arg (s, p) = |
137 fun arg (s, p) = |
138 (if s = "type" then TypArg else Arg) |
138 (if s = "type" then TypArg else Arg) |
139 (if Lexicon.is_terminal s then 1000 else p); |
139 (if Lexicon.is_terminal s then 1000 else p); |
140 |
140 |
141 fun xsyms_to_syms (Syntax_Ext.Delim s :: xsyms) = |
141 fun make_symbs (Syntax_Ext.Delim s :: xsyms) = |
142 apfst (cons (String (not (Lexicon.suppress_literal_markup s), s))) |
142 apfst (cons (String (not (Lexicon.suppress_literal_markup s), s))) |
143 (xsyms_to_syms xsyms) |
143 (make_symbs xsyms) |
144 | xsyms_to_syms (Syntax_Ext.Argument s_p :: xsyms) = |
144 | make_symbs (Syntax_Ext.Argument s_p :: xsyms) = |
145 apfst (cons (arg s_p)) (xsyms_to_syms xsyms) |
145 apfst (cons (arg s_p)) (make_symbs xsyms) |
146 | xsyms_to_syms (Syntax_Ext.Space s :: xsyms) = |
146 | make_symbs (Syntax_Ext.Space s :: xsyms) = |
147 apfst (cons (String (false, s))) (xsyms_to_syms xsyms) |
147 apfst (cons (String (false, s))) (make_symbs xsyms) |
148 | xsyms_to_syms (Syntax_Ext.Bg block :: xsyms) = |
148 | make_symbs (Syntax_Ext.Bg block :: xsyms) = |
149 let |
149 let |
150 val (bsyms, xsyms') = xsyms_to_syms xsyms; |
150 val (bsyms, xsyms') = make_symbs xsyms; |
151 val (syms, xsyms'') = xsyms_to_syms xsyms'; |
151 val (syms, xsyms'') = make_symbs xsyms'; |
152 in |
152 in |
153 (Block (block, bsyms) :: syms, xsyms'') |
153 (Block (block, bsyms) :: syms, xsyms'') |
154 end |
154 end |
155 | xsyms_to_syms (Syntax_Ext.Brk i :: xsyms) = |
155 | make_symbs (Syntax_Ext.Brk i :: xsyms) = |
156 apfst (cons (Break i)) (xsyms_to_syms xsyms) |
156 apfst (cons (Break i)) (make_symbs xsyms) |
157 | xsyms_to_syms (Syntax_Ext.En :: xsyms) = ([], xsyms) |
157 | make_symbs (Syntax_Ext.En :: xsyms) = ([], xsyms) |
158 | xsyms_to_syms [] = ([], []); |
158 | make_symbs [] = ([], []); |
159 |
159 |
160 fun nargs (Arg _ :: syms) = nargs syms + 1 |
160 fun nargs (Arg _ :: syms) = nargs syms + 1 |
161 | nargs (TypArg _ :: syms) = nargs syms + 1 |
161 | nargs (TypArg _ :: syms) = nargs syms + 1 |
162 | nargs (String _ :: syms) = nargs syms |
162 | nargs (String _ :: syms) = nargs syms |
163 | nargs (Break _ :: syms) = nargs syms |
163 | nargs (Break _ :: syms) = nargs syms |
164 | nargs (Block (_, bsyms) :: syms) = nargs syms + nargs bsyms |
164 | nargs (Block (_, bsyms) :: syms) = nargs syms + nargs bsyms |
165 | nargs [] = 0; |
165 | nargs [] = 0; |
166 in |
166 in |
167 (case xsyms_to_syms xsymbs of |
167 (case make_symbs xsymbs of |
168 (symbs, []) => SOME (const, (symbs, nargs symbs, pri)) |
168 (symbs, []) => SOME (const, (symbs, nargs symbs, pri)) |
169 | _ => raise Fail "Unbalanced pretty-printing blocks") |
169 | _ => raise Fail "Unbalanced pretty-printing blocks") |
170 end; |
170 end; |
171 |
171 |
172 |
172 |