Next: , Previous: sxml apply-templates, Up: Standard Library


8.3 (sxml fold)

8.3.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.

8.3.2 Usage

— Function: foldt fup fhere tree

The standard multithreaded tree fold.

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

— Function: foldts fdown fup fhere seed tree

The single-threaded tree fold originally defined in SSAX. See (sxml ssax), for more information.

— Function: 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.

— Function: 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.

— Function: 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.

— Function: fold-layout tree bindings params layout stylesheet

A traversal combinator in the spirit of SSAX's pre-post-order.

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

          bindings := (<binding>...)
          binding  := (<tag> <bandler-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.