Re: how to invoke SML/NJ's built-in pretty printer from a program?

Joe Wells <[email protected]> Sun, 22 Mar 2009 11:54:33 +0000
Newsgroups gmane.comp.lang.sml.smlnj
Message-ID <[email protected]>
Sm9lIFdlbGxzIDxqYndAbWFjcy5ody5hYy51az4gd3JpdGVzOgoKPiBIZXJlIGFyZSBzb21lIHRo
b3VnaHRzIHRoYXQgb2NjdXIgdG8gbWUgYmFzZWQgb24gd2hhdCBJIG5lZWRlZCB0bwo+IGRvLgo+
Cj4gMS4gSXQgd291bGQgYmUgaGVscGZ1bCBpZiB0aGVyZSB3YXMgc29tZSBlYXN5IHdheSB0byBm
b3JjZSB0aGUKPiAgICBkZWNsYXJhdGlvbnMgYWxyZWFkeSBwcm9jZXNzZWQgaW4gYSBmaWxlIHRv
IGJlIGNvbnRyaWJ1dGVkIHRvIHRoZQo+ICAgIGdsb2JhbCBlbnZpcm9ubWVudCBzbyB0aGF0IOKA
nHVzZeKAnSBjYW4gdXNlIHRoZW0uICBSaWdodCBub3cgSSBoYXZlCj4gICAgdG8gc3BsaXQgbXkg
U01MIGludG8gdHdvIGZpbGVzIGJvdGggcHJvY2Vzc2VkIHdpdGggdXNlRmlsZSAoYnkKPiAgICB0
aGUgY29tbWFuZC1saW5lIHByb2Nlc3NpbmcpLiAgTm90IG9ubHkgaXMgdGhpcyBhd2t3YXJkLCBi
dXQgaXQKPiAgICBpbnRlcmZlcmVzIHdpdGggbW9kdWxhcml0eSBiZWNhdXNlIGFueSBwb3J0aW9u
IG9mIGEgbGFyZ2UgcHJvZ3JhbQo+ICAgIHRoYXQgd2FudHMgdG8gdXNlIHByZXR0eSBwcmludGlu
ZyB3aWxsIGhhdmUgdG8gY29udHJpYnV0ZQo+ICAgIHNvbWV0aGluZyB0byB0aGUgZmlyc3QgZmls
ZSB0aGF0IGdldHMgbG9hZGVkLgoKT2theSwgSSBub3cgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5k
aW5nIG9mIHRoaXMgaXNzdWUuCgpXaGF0IEkgd2FzIGRvaW5nIGluIG15IHByZXZpb3VzIG1lc3Nh
Z2UgaW52b2x2ZWQgdGhpcyBhcnJhbmdlbWVudCBvZgpuZXN0ZWQgZnVuY3Rpb24gY2FsbHM6Cgog
IHByb2NDbWRMaW5lIChDTSdzIGZ1bmN0aW9uIHRvIGhhbmRsZSBjb21tYW5kLWxpbmUgYXJndW1l
bnRzKQogICB8CiAgICstdXNlRmlsZQogICB8CiAgICstdXNlRmlsZQogICAgICB8CiAgICAgICst
ZXZhbFN0cmVhbSAodGhlIG9uZSBmcm9tIEludGVyYWN0LCBub3QgdGhlIG9uZSBmcm9tIEV2YWxM
b29wKQoKQmVjYXVzZSBvZiBzb21lIGZhaWx1cmVzIEkgZW5jb3VudGVyZWQsIEkgaGFkIGdhaW5l
ZCB0aGUgd3JvbmcKdW5kZXJzdGFuZGluZyB0aGF0IGRlY2xhcmF0aW9ucyBwcm9jZXNzZWQgYnkg
YW4gaW52b2NhdGlvbiBvZiB1c2VGaWxlCndvdWxkIG5vdCBiZSBhdmFpbGFibGUgdG8gYSBuZXN0
ZWQgdXNlRmlsZS4gIFRoYXQgaXMsIGdpdmVuIGEgc3RhY2sgb2YKZnVuY3Rpb24gY2FsbHMgbGlr
ZQoKICB1c2VGaWxlICJhLnNtbCIKICAgfAogICArLXVzZUZpbGUgImIuc21sIgoKSSBoYWQgcmVh
Y2hlZCB0aGUgd3JvbmcgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBkZWNsYXJhdGlvbnMgaW4gYi5z
bWwKd291bGQgbm90IGJlIGFibGUgdG8gdXNlIGRhdGF0eXBlcyBvciB2YWx1ZSBpZGVudGlmaWVy
cyBkZWNsYXJlZCBpbgphLnNtbCBwcmlvciB0byB0aGUgaW52b2NhdGlvbiBvZiB1c2VGaWxlLgoK
SSBrbm93IHRoYXQgdGhpcyBwcm9ibGVtIHJlYWxseSBkb2VzIGhhcHBlbiB3aGVuIHRoZSAodXNl
RmlsZSAiYi5zbWwiKQppbnZvY2F0aW9uIGlzIGluc2lkZSB0aGUgc2FtZSB0b3AtbGV2ZWwgZm9y
bSBhcyB0aGUgZGVjbGFyYXRpb25zIHRoYXQKYi5zbWwgd2FudHMgdG8gdXNlLCBidXQgSSdtIHBy
ZXR0eSBzdXJlIEkgd2FzIG5vdCBkb2luZyB0aGlzLCBzbyBJIGFtCmNvbmZ1c2VkIGFzIHRvIGhv
dyBJIGdvdCBjb25mdXNlZC4KClNvIGFueXdheSBJIG5vdyB1bmRlcnN0YW5kIHRoYXQgdGhpcyB3
b3JrcyBmaW5lLgoKVGhlIG90aGVyIGlzc3VlcyBJIHJhaXNlZCBhcmUgc3RpbGwgYSBjb25jZXJu
LiAgSXMgdGhlcmUgYW55dGhpbmcgdGhhdApjYW4gYmUgZG9uZSBhYm91dCB0aGVtPwoKPiAyLiBJ
dCBpcyBhd2t3YXJkIHRvIGhhdmUgdG8gZGVwZW5kIG9uIHRoZSBzaWRlIGVmZmVjdCBvZgo+ICAg
IGRlY2xhcmF0aW9ucyBiZWluZyBwcmludGVkIGJ5IHVzZUZpbGUuICBBbW9uZyBvdGhlciBwcm9i
bGVtcyB3aXRoCj4gICAgdGhpcywgSSBoYXZlIHRvIHN0cmlwIG9mZiB0aGUg4oCcdmFsIHggPeKA
nSBwcmVmaXggYW5kIHRoZSB0eXBlCj4gICAgc3VmZml4IHRvIGdldCB0aGUgZGVzaXJlZCBwcmV0
dHktcHJpbnRlZCByZXN1bHQuICBJdCB3b3VsZCBiZQo+ICAgIHJlYWxseSBuaWNlIGlmIHRoZSBw
cmV0dHkgcHJpbnRlciB3ZXJlIGV4cG9ydGVkLiAgQXQgdGhlIHZlcnkKPiAgICBsZWFzdCwgaXQg
c2VlbXMgbGlrZSBpdCBzaG91bGQgbm90IGJlIHRvIGhhcmQgdG8gYWxsb3cgZGlyZWN0bHkKPiAg
ICByZXF1ZXN0aW5nIHRoZSBwcmV0dHkgcHJpbnRpbmcgb2YgdGhlIHZhbHVlIGJvdW5kIHRvIGFu
Cj4gICAgaWRlbnRpZmllciBpbiB0aGUgZ2xvYmFsIGVudmlyb25tZW50ICh3aG9zZSB0eXBlIHdp
bGwgdGhlcmVmb3JlCj4gICAgYWxyZWFkeSBiZSBrbm93bikuCj4KPiAzLiBJdCB3b3VsZCBiZSBu
aWNlIGlmIHRoZXJlIHdhcyBzb21lIHdheSB0byB0ZWxsIHRoZSBwcmV0dHkgcHJpbnRlcgo+ICAg
IHRvIHBsYWNlIG5vIGxpbWl0cyBvbiBuZXN0aW5nLiAgUmlnaHQgbm93LCBvbmUgbXVzdCBzcGVj
aWZ5IGxhcmdlCj4gICAgcG9zaXRpdmUgbGltaXRzIGFuZCBob3BlIHRoZXkgYXJlIGJpZyBlbm91
Z2guICAoSSBzdXBwb3NlIG9uZQo+ICAgIGNvdWxkIGF2b2lkIHVzaW5nIGEgYmFkIHJlc3VsdCBi
eSB0ZXN0aW5nIHRvIHNlZSBpZiB0aGUgcHJldHR5Cj4gICAgcHJpbnRlZCByZXN1bHQgZ2V0cyBw
YXJzZWQgYXMgdGhlIHNhbWUgdmFsdWUsIGJ1dCBvbmUgc2hvdWxkIG5vdAo+ICAgIG5lZWQgdG8g
ZG8gdGhhdC4pCgpUaGFua3MgZm9yIHlvdXIgdGltZSBpbiBhbnkgcmVzcG9uc2VzIHlvdSBtYWtl
IHRvIG15IG1lc3NhZ2UuCgotLSAKSm9lCgo+PiBPbiBGZWIgMjYsIDIwMDksIGF0IDc6MTAgQU0s
IEpvZSBXZWxscyB3cm90ZToKPj4KPj4+IFNNTC9OSiBoYXMgYSBidWlsdC1pbiBwcmV0dHkgcHJp
bnRlciBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHZhcmlvdXMKPj4+IHR5cGVzIHVzZWQgYnkgdGhl
IHRvcC1sZXZlbCBSRVBMLgo+Pj4gCj4+PiBIb3cgZG8gSSBpbnZva2UgaXQgZnJvbSBhIHByb2dy
YW0/Cj4+PiAKPj4+IFRoZXJlIGlzIGEgZnVuY3Rpb24gUHJldHR5UHJpbnQucHBfdG9fc3RyaW5n
IG9mIHR5cGUgaW50IC0+IChzdHJlYW0gLT4KPj4+ICdhIC0+IHVuaXQpIC0+ICdhIC0+IHN0cmlu
ZywgYnV0IHRvIHVzZSBpdCBJIHdvdWxkIGhhdmUgdG8gZ2l2ZSBpdCBhCj4+PiB2YWx1ZSBvZiB0
eXBlIChzdHJlYW0gLT4gJ2EgLT4gdW5pdCkuICBIb3cgZG8gSSBjb25zdHJ1Y3QgdGhpcwo+Pj4g
YXJndW1lbnQ/Cj4+PiAKPj4+IFRvIG1ha2UgbXkgcXVlc3Rpb24gY29uY3JldGUsIGluIHRoZSBm
b2xsb3dpbmcgU01MIHByb2dyYW0sIGJ5IHdoYXQgZG8KPj4+IEkgcmVwbGFjZSDigJxtYWdpY19w
cmV0dHlfcHJpbnRlcuKAnSB0byBtYWtlIHRoZSBwcm9ncmFtIHByaW50IOKAnEhhcHB5LAo+Pj4g
aGFwcHksIGpveSwgam95IeKAnT8KPj4+IAo+Pj4gIGRhdGF0eXBlIFh5enp5ID0gQyBvZiBYeXp6
eSAqIFh5enp5IHwgRCBvZiBzdHJpbmcKPj4+IAo+Pj4gIHZhbCBwbHVnaCA9IEMgKEQgImhlbGxv
IixEICJzYWlsb3IiKQo+Pj4gIHZhbCBwbHVnaF9zdHJpbmcgPSAiQyAoRCBcImhlbGxvXCIsRCBc
InNhaWxvclwiKSIKPj4+IAo+Pj4gIGlmICgobWFnaWNfcHJldHR5X3ByaW50ZXIgcGx1Z2gpID0g
cGx1Z2hfc3RyaW5nKQo+Pj4gICAgIHRoZW4gKHByaW50ICJIYXBweSwgaGFwcHksIGpveSwgam95
IVxuIikKPj4+ICAgICBlbHNlIChyYWlzZSAoRmFpbCAibWFnaWMgcHJldHR5IHByaW50ZXIgZ2F2
ZSB3cm9uZyByZXN1bHQiKSkKPj4+IAo+Pj4gSSd2ZSBicm93c2VkIGFyb3VuZCB0aGUgc291cmNl
IGZvciBhIHdoaWxlIGFuZCBmYWlsZWQgdG8gZmluZCB3aGF0IEkKPj4+IG5lZWQuICBBbnkgaGlu
dHMgd291bGQgYmUgaGVscGZ1bC4KPj4+IAo+Pj4gSSdkIHJhdGhlciBub3QgdXNlIEJhY2tlbmQu
SW50ZXJhY3QuZXZhbFN0cmVhbSBhbmQgY2FwdHVyZSB0aGUgb3V0cHV0Cj4+PiBzb21laG93LCBi
dXQgaWYgdGhhdCBpcyBteSBvbmx5IG9wdGlvbiBJIHdvdWxkIGJlIGdyYXRlZnVsIGZvciBhbgo+
Pj4gZXhhbXBsZSBvZiBob3cgdG8gZG8gaXQuCj4KPiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gIyEvYmluL2Jh
c2gKPiAjIC0qLVNNTC0qLQo+ICMoKgo+IFRtcERpcj0iYG1rdGVtcCAtZCAtdCBzbWxuai1zY3Jp
cHQuWFhYWFhYYCIKPiBDbGVhblVwICgpIHsgcm0gLXIgIiRUbXBEaXIiOyB9Cj4gdHJhcCAnQ2xl
YW5VcDsgZXhpdCAxJyBJTlQgVEVSTSBIVVAKPiB0cmFwIENsZWFuVXAgRVhJVAo+IGxuIC1zIC9k
ZXYvZmQvNCAiJFRtcERpci9hLnNtbCIKPiBsbiAtcyAvZGV2L2ZkLzUgIiRUbXBEaXIvYi5zbWwi
Cj4gIyopCj4gc21sIC1DY20udmVyYm9zZT1mYWxzZSAiJFRtcERpci9hLnNtbCIgIiRUbXBEaXIv
Yi5zbWwiIFh5enp5UGx1Z2ggIiQwIiAiJEAiIDM8JjAgPDwnQUFBQScgNDwmMC0gPDwnQkJCQicg
NTwmMC0gMDwmMy0KPgo+ICgqIENvbnRyb2wuUHJpbnQub3V0IDo9IHsgZmx1c2ggPSBmbiAoKSA9
PiAoKSwgc2F5ID0gZm4gXyA9PiAoKSB9OyAqKQo+Cj4gZGF0YXR5cGUgWHl6enkgPSBDIG9mIFh5
enp5ICogWHl6enkgfCBEIG9mIHN0cmluZwo+IHZhbCB4eXp6eV90bXAgOiBYeXp6eSBvcHRpb24g
cmVmID0gcmVmIE5PTkU7Cj4KPiBBQUFBCj4KPiBmdW4gZXZhbFN0cmluZyBzID0KPiAgIEJhY2tl
bmQuSW50ZXJhY3QuZXZhbFN0cmVhbSAoVGV4dElPLm9wZW5TdHJpbmcgcywgRW52UmVmLmNvbWJp
bmVkICgpKTsKPgo+IGZ1biB1bndpbmRfcHJvdGVjdCBib2R5IHVud2luZF9mbiA9Cj4gICAgICgg
IChib2R5ICgpKQo+ICAgICAgYmVmb3JlCj4gICAgICAgICgqIEVFRUshICBJZiB0aGlzIHVzZSBv
ZiB1bndpbmRfZm4gcmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlbiB1bndpbmRfZm4gd2lsbCBiZSBy
dW4gYWdhaW4gZnJvbSB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuICopCj4gICAgICAgICh1bndpbmRf
Zm4gKCkpKQo+ICAgaGFuZGxlCj4gICAgIGUgPT4gKHVud2luZF9mbiAoKTsgcmFpc2UgZSk7Cj4K
PiBmdW4gY2FwdHVyZVByaW50aW5nIGYgPQo+ICAgbGV0Cj4gICAgIHZhbCBvbGRfb3V0ID0gISBD
b250cm9sLlByaW50Lm91dAo+ICAgICB2YWwgZGF0YSA9IHJlZiAiIgo+ICAgaW4KPiAgICAgQ29u
dHJvbC5QcmludC5vdXQgOj0KPiAgICAgICB7IGZsdXNoID0gKGZuICgpID0+ICgpKSwKPiAgICAg
ICAgIHNheSA9IChmbiBzID0+IGRhdGEgOj0gIWRhdGEgXiBzKSB9Owo+ICAgICB1bndpbmRfcHJv
dGVjdAo+ICAgICAgIChmbiAoKSA9PiAoZiAoKTsgIWRhdGEpKQo+ICAgICAgIChmbiAoKSA9PiAo
Q29udHJvbC5QcmludC5vdXQgOj0gb2xkX291dCkpCj4gICBlbmQ7Cj4KPiBmdW4gZm9ybWF0X3h5
enp5IHh5eiA9Cj4gICAoeHl6enlfdG1wIDo9IFNPTUUgeHl6Owo+ICAgICgqICoqKiBUT0RPOiBt
dXN0IGVuc3VyZSBwcmludGluZyBpcyBub3QgdHJ1bmNhdGVkIGR1ZSB0byBkZXB0aC9sZW5ndGgv
ZXRjLiBsaW1pdHMgKikKPiAgICBsZXQgdmFsIGUgPSAidmFsIHggPSB2YWxPZiAoISB4eXp6eV90
bXApOyIKPiAgICAgICAgKCogdmFsIF8gPSBwcmludCAoZV4iXG4iKSAqKQo+ICAgICAgICB2YWwg
cyA9IGNhcHR1cmVQcmludGluZyAoZm4gKCkgPT4gZXZhbFN0cmluZyBlKQo+ICAgIGluICgqIHRo
ZSBsZW5ndGggb2YgInZhbCB4ID0gIiBpcyA4LCB0aGUgbGVuZ3RoIG9mICIgOiBYeXp6eVxuIiBp
cyA5ICopCj4gICAgICAgU3RyaW5nLnN1YnN0cmluZyAocywgOCwgKFN0cmluZy5zaXplIHMpIC0g
OSAtIDgpCj4gICAgZW5kKQo+Cj4gdmFsIHBsdWdoID0gQyAoRCAiaGVsbG8iLEQgInNhaWxvciIp
Cj4gdmFsIHBsdWdoX3N0cmluZyA9ICJDIChEIFwiaGVsbG9cIixEIFwic2FpbG9yXCIpIgo+IHZh
bCB6ID0gZm9ybWF0X3h5enp5IHBsdWdoOwo+IGlmICh6ID0gcGx1Z2hfc3RyaW5nKQo+ICAgIHRo
ZW4gKHByaW50ICJIYXBweSwgaGFwcHksIGpveSwgam95IVxuIikKPiAgICBlbHNlIChyYWlzZSAo
RmFpbCAibWFnaWMgcHJldHR5IHByaW50ZXIgZ2F2ZSB3cm9uZyByZXN1bHQiKSk7Cj4KPiBpZ25v
cmUgKE9TLlByb2Nlc3MuZXhpdCBPUy5Qcm9jZXNzLnN1Y2Nlc3MpOwo+Cj4gQkJCQgo+Cj4KPiAt
LSAKPiBIZXJpb3QtV2F0dCBVbml2ZXJzaXR5IGlzIGEgU2NvdHRpc2ggY2hhcml0eQo+IHJlZ2lz
dGVyZWQgdW5kZXIgY2hhcml0eSBudW1iZXIgU0MwMDAyNzguCj4KPgo+IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQo+IEFwcHMgYnVpbHQgd2l0aCB0aGUgQWRvYmUoUikgRmxleChSKSBmcmFtZXdvcmsg
YW5kIEZsZXggQnVpbGRlcihUTSkgYXJlCj4gcG93ZXJpbmcgV2ViIDIuMCB3aXRoIGVuZ2FnaW5n
LCBjcm9zcy1wbGF0Zm9ybSBjYXBhYmlsaXRpZXMuIFF1aWNrbHkgYW5kCj4gZWFzaWx5IGJ1aWxk
IHlvdXIgUklBcyB3aXRoIEZsZXggQnVpbGRlciwgdGhlIEVjbGlwc2UoVE0pYmFzZWQgZGV2ZWxv
cG1lbnQKPiBzb2Z0d2FyZSB0aGF0IGVuYWJsZXMgaW50ZWxsaWdlbnQgY29kaW5nIGFuZCBzdGVw
LXRocm91Z2ggZGVidWdnaW5nLgo+IERvd25sb2FkIHRoZSBmcmVlIDYwIGRheSB0cmlhbC4gaHR0
cDovL3Auc2YubmV0L3NmdS93d3ctYWRvYmUtY29tCj4gX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KPiBTbWxuai1saXN0IG1haWxpbmcgbGlzdAo+IFNtbG5q
LWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Cj4gaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5u
ZXQvbGlzdHMvbGlzdGluZm8vc21sbmotbGlzdAoKCi0tIApIZXJpb3QtV2F0dCBVbml2ZXJzaXR5
IGlzIGEgU2NvdHRpc2ggY2hhcml0eQpyZWdpc3RlcmVkIHVuZGVyIGNoYXJpdHkgbnVtYmVyIFND
MDAwMjc4LgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpBcHBzIGJ1aWx0IHdpdGggdGhlIEFkb2Jl
KFIpIEZsZXgoUikgZnJhbWV3b3JrIGFuZCBGbGV4IEJ1aWxkZXIoVE0pIGFyZQpwb3dlcmluZyBX
ZWIgMi4wIHdpdGggZW5nYWdpbmcsIGNyb3NzLXBsYXRmb3JtIGNhcGFiaWxpdGllcy4gUXVpY2ts
eSBhbmQKZWFzaWx5IGJ1aWxkIHlvdXIgUklBcyB3aXRoIEZsZXggQnVpbGRlciwgdGhlIEVjbGlw
c2UoVE0pYmFzZWQgZGV2ZWxvcG1lbnQKc29mdHdhcmUgdGhhdCBlbmFibGVzIGludGVsbGlnZW50
IGNvZGluZyBhbmQgc3RlcC10aHJvdWdoIGRlYnVnZ2luZy4KRG93bmxvYWQgdGhlIGZyZWUgNjAg
ZGF5IHRyaWFsLiBodHRwOi8vcC5zZi5uZXQvc2Z1L3d3dy1hZG9iZS1jb20KX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KU21sbmotbGlzdCBtYWlsaW5nIGxp
c3QKU21sbmotbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vm
b3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc21sbmotbGlzdAo=