On Thu, 23 Sep 2010, Jasmin Christian Blanchette wrote:

I found a couple of ad hoc solutions to this problem. One way is to set the print mode to "input":

   Print_Mode.setmp (Print_Mode.input ::
       filter (curry (op =) Symbol.xsymbolsN) (print_mode_value ()))
       (Syntax.string_of_term ctxt) @{term "str"}

Note that the Print_Mode.input never has any effect on output, it is filtered out from the print_mode_value. So there is no point of adding it to the list.


The business with filter is there to respect the user's "xsymbols" preference. You probably don't need it.

There might be more user preferences that are getting lost here. Under normal circumstances the default print mode should not be filtered.


You might need to follow this with

   String.translate (fn c => if Char.isPrint c then str c else "")

which I have in my code.

As explained in the Isabelle/Isar implementation manual, Isabelle/ML lacks type char altogether -- the smallest textual unit is Symbol.symbol. Char operations may only be used in rare circumstances involving external tools, never for regular Isabelle text manipulation.


The other solution is to strip away the YXML tags, using the following function:

   val unyxml = XML.content_of o YXML.parse_body

These are the solutions I found in those rare cases where I needed this.

This is better. The above form requires some more recent repositoy version like 3810834690c4 (as usual there can be some non-monotonic fluctioations on non-release versions of Isabelle.)


        Makarius

_______________________________________________
Isabelle-dev mailing list
[email protected]
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to