Skip to content

SXML Tree Fold ​

7.21.5.1 Overview ​

(sxml fold) defines a number of variants of the fold algorithm for use in transforming SXML trees. Additionally it defines the layout operator, fold-layout, which might be described as a context-passing variant of SSAX’s pre-post-order.

7.21.5.2 Usage ​

Scheme Procedure: foldt fup fhere tree ​

The standard multithreaded tree fold.

fup is of type [a] -> a. fhere is of type object -> a.

Scheme Procedure: foldts fdown fup fhere seed tree ​

The single-threaded tree fold originally defined in SSAX. See SSAX: A Functional XML Parsing Toolkit, for more information.

Scheme Procedure: foldts* fdown fup fhere seed tree ​

A variant of foldts that allows pre-order tree rewrites. Originally defined in Andy Wingo’s 2007 paper, Applications of fold to XML transformation.

Scheme Procedure: fold-values proc list . seeds ​

A variant of fold that allows multi-valued seeds. Note that the order of the arguments differs from that of fold. See Fold, Unfold & Map.

Scheme Procedure: foldts*-values fdown fup fhere tree . seeds ​

A variant of foldts* that allows multi-valued seeds. Originally defined in Andy Wingo’s 2007 paper, Applications of fold to XML transformation.

Scheme Procedure: fold-layout tree bindings params layout stylesheet ​

A traversal combinator in the spirit of pre-post-order. See Transforming SXML.

fold-layout was originally presented in Andy Wingo’s 2007 paper, Applications of fold to XML transformation.

bindings := (<binding>...)
binding  := (<tag> <handler-pair>...)
          | (*default* . <post-handler>)
          | (*text* . <text-handler>)
tag      := <symbol>
handler-pair := (pre-layout . <pre-layout-handler>)
          | (post . <post-handler>)
          | (bindings . <bindings>)
          | (pre . <pre-handler>)
          | (macro . <macro-handler>)

pre-layout-handler ​

A function of three arguments:

kids ​

the kids of the current node, before traversal

params ​

the params of the current node

layout ​

the layout coming into this node

pre-layout-handler is expected to use this information to return a layout to pass to the kids. The default implementation returns the layout given in the arguments.

post-handler ​

A function of five arguments:

tag ​

the current tag being processed

params ​

the params of the current node

layout ​

the layout coming into the current node, before any kids were processed

klayout ​

the layout after processing all of the children

kids ​

the already-processed child nodes

post-handler should return two values, the layout to pass to the next node and the final tree.

text-handler ​

text-handler is a function of three arguments:

text ​

the string

params ​

the current params

layout ​

the current layout

text-handler should return two values, the layout to pass to the next node and the value to which the string should transform.