Hi Mike, I frequently use ocaml+twt and really got used to my quicker to type and easier to read sources. Be blessed for writing it ! The only inconvenience I found is that column numbers in compiler errors do not match the original source which sometimes makes debugging quite a pain. Find attached a version which will put all the 'begins', 'ends' and parentheses at the end of the lines which also makes the generated code more pleasant to read. I briefly tested my version on some simple code I had on hand. I didn't test any complicated syntax. If you find any bugs just tell me - I'm willing to review the changes again. I just used the following vim commands to alter your code (v0.85). You may want to just apply these in case you already have a new version. '400' is the line number where 'OCaml syntax formation' starts. :%s/" *\(begin\|end\|(\|)\|;;\) *"/" \1"/g :%s/\^ *"\\n"/\^ endl/g :%s/ *\^ *endl / /g :400,$s/^\([ \t]*\)\([a-z]*line .*\)/\1endl \^ \2/g :400,$s/-> *\([a-z]*line .*\)/-> endl \^ \1/g :400,$s/\([^l ] *\^ *\)\([a-z]*line \)/\1endl \^ \2/g :%s/(printer syntax)/( Str.replace_first (Str.regexp "\\n") "" (printer syntax) )/g Cheers Ingo -- Ingo Bormuth, voicebox & telefax: +49-12125-10226517 '(~o-o~)' public key 86326EC9, http://ibormuth.efil.de/contact --ooO--(.)--Ooo--