# HG changeset patch # User wenzelm # Date 1727263236 -7200 # Node ID 47eb251187d6dd9e4e1ced69baf8436fc0dc8262 # Parent 501f55047387340227886d3ef8169f761875f217 tuned; diff -r 501f55047387 -r 47eb251187d6 src/Pure/Syntax/printer.ML --- a/src/Pure/Syntax/printer.ML Wed Sep 25 13:20:24 2024 +0200 +++ b/src/Pure/Syntax/printer.ML Wed Sep 25 13:20:36 2024 +0200 @@ -131,43 +131,46 @@ (* xprod_to_fmt *) +local + +fun make_arg (s, p) = + (if s = "type" then TypArg else Arg) + (if Lexicon.is_terminal s then 1000 else p); + +fun make_string s = String ([], s); +fun make_literal s = String (Lexicon.literal_markup s, s); + +in + fun xprod_to_fmt (Syntax_Ext.XProd (_, _, "", _)) = NONE | xprod_to_fmt (Syntax_Ext.XProd (_, xsymbs, const, pri)) = let - fun arg (s, p) = - (if s = "type" then TypArg else Arg) - (if Lexicon.is_terminal s then 1000 else p); - - fun make_symbs (Syntax_Ext.Delim s :: xsyms) = - apfst (cons (String (Lexicon.literal_markup s, s))) (make_symbs xsyms) - | make_symbs (Syntax_Ext.Argument s_p :: xsyms) = - apfst (cons (arg s_p)) (make_symbs xsyms) - | make_symbs (Syntax_Ext.Space s :: xsyms) = - apfst (cons (String ([], s))) (make_symbs xsyms) + fun make_symbs (Syntax_Ext.Delim s :: xsyms) = make_symbs xsyms |>> cons (make_literal s) + | make_symbs (Syntax_Ext.Argument a :: xsyms) = make_symbs xsyms |>> cons (make_arg a) + | make_symbs (Syntax_Ext.Space s :: xsyms) = make_symbs xsyms |>> cons (make_string s) | make_symbs (Syntax_Ext.Bg block :: xsyms) = let val (bsyms, xsyms') = make_symbs xsyms; val (syms, xsyms'') = make_symbs xsyms'; - in - (Block (block, bsyms) :: syms, xsyms'') - end - | make_symbs (Syntax_Ext.Brk i :: xsyms) = - apfst (cons (Break i)) (make_symbs xsyms) + in (Block (block, bsyms) :: syms, xsyms'') end + | make_symbs (Syntax_Ext.Brk i :: xsyms) = make_symbs xsyms |>> cons (Break i) | make_symbs (Syntax_Ext.En :: xsyms) = ([], xsyms) | make_symbs [] = ([], []); - fun nargs (Arg _ :: syms) = nargs syms + 1 - | nargs (TypArg _ :: syms) = nargs syms + 1 - | nargs (String _ :: syms) = nargs syms - | nargs (Break _ :: syms) = nargs syms - | nargs (Block (_, bsyms) :: syms) = nargs syms + nargs bsyms - | nargs [] = 0; + fun count_args (Arg _ :: syms) = Integer.add 1 #> count_args syms + | count_args (TypArg _ :: syms) = Integer.add 1 #> count_args syms + | count_args (String _ :: syms) = count_args syms + | count_args (Break _ :: syms) = count_args syms + | count_args (Block (_, bsyms) :: syms) = count_args syms #> count_args bsyms + | count_args [] = I; in (case make_symbs xsymbs of - (symbs, []) => SOME (const, (symbs, nargs symbs, pri)) + (symbs, []) => SOME (const, (symbs, count_args symbs 0, pri)) | _ => raise Fail "Unbalanced pretty-printing blocks") end; +end; + (* empty, extend, merge prtabs *)