src/Pure/Syntax/printer.ML
changeset 80951 4d6ce43b663c
parent 80905 47793a46d06c
child 80952 a61ed25ba155
equal deleted inserted replaced
80950:b4a6bee4621a 80951:4d6ce43b663c
   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