To use the StrategoBox language you have to declare in a .meta
file that you want to use the StrategoBox grammar:
Meta([Syntax("Stratego-Box")])
In your Makefile.am
you also have to include the directory $(GPP)/share/sdf/gpp
in STRINCLUDES
.
This is an example pretty print rule in Stratego. It rewrites an empty XML element to a Box.
simple-element-to-box: EmptyElement(qname, []) -> box |[ H hs=0 [KW["<"] ~qname KW["/>"]] ]|
In general using StrategoBox is more verbose than using PrettyPrintTables. StrategoBox becomes interesting when you want different pretty-printing, depending on the structure of a term. The following rules rewrite an start tag in XML to Boxes. If there are no attributes in the element we can pretty print the tag more attractive by leaving out the space between the element name and the attributes.
open-tag-to-box: (qname, []) -> box |[ H hs=0 [KW["<"] ~qname KW[">"]] ]| open-tag-to-box: (qname, atts) -> box |[ H hs=0 [KW["<"] H hs=1 [ ~qname ~*atts ] KW[">"]] ]| where <gt> (<length> atts, 0)