diff -r 90bee31628dc -r 18f90044c777 CookBook/Recipes/Antiquotes.thy --- a/CookBook/Recipes/Antiquotes.thy Thu Mar 12 08:11:02 2009 +0100 +++ b/CookBook/Recipes/Antiquotes.thy Thu Mar 12 14:25:35 2009 +0000 @@ -46,13 +46,13 @@ text {* - Note that the parser @{ML "(Scan.lift Args.name)"} in line 9 parses a string, + The parser @{ML "(Scan.lift Args.name)"} in line 9 parses a string, in this case the code. As mentioned before, the code is sent to the ML-compiler in the line 4 using the function @{ML ml_val}, which constructs the appropriate ML-expression. If the code is ``approved'' by the compiler, then the output function @{ML "ThyOutput.output"} in the next line pretty prints the - code. This function expects that the code is a list of strings where each + code. This function expects that the code is a list of (pretty)strings where each string correspond to a line in the output. Therefore the use of @{ML "(space_explode \"\\n\" txt)" for txt} which produces this list according to linebreaks. There are a number of options @@ -69,7 +69,7 @@ can improve the code above slightly by writing *} -ML%linenosgray{*fun output_ml {context = ctxt, ...} (code_txt,pos) = +ML%linenosgray{*fun output_ml {context = ctxt, ...} (code_txt, pos) = (ML_Context.eval_in (SOME ctxt) false pos (ml_val code_txt); ThyOutput.output (map Pretty.str (space_explode "\n" code_txt))) @@ -77,7 +77,9 @@ (Scan.lift (OuterParse.position Args.name)) output_ml *} text {* - where in Lines 1 and 2 the positional information is properly treated. + where in Lines 1 and 2 the positional information is properly treated. The + parser @{ML OuterParse.position} encodes the positional information in the + result. We can now write in a document @{text "@{ML_checked \"2 + 3\"}"} in order to obtain @{ML_checked "2 + 3"} and be sure that this code compiles until