Skip to content

Instantly share code, notes, and snippets.

@gimsieke
Last active June 19, 2017 04:50
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gimsieke/8f869d2681a31fd249051e927bfdcf68 to your computer and use it in GitHub Desktop.
Save gimsieke/8f869d2681a31fd249051e927bfdcf68 to your computer and use it in GitHub Desktop.
a birthday serenade for Norm
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:ndw50="urn:ndw:birthday:50"
xmlns:c="http://www.w3.org/ns/xproc-step"
xmlns:cx="http://xmlcalabash.com/ns/extensions"
version="1.0"
exclude-inline-prefixes="c cx ndw50"
type="ndw50:serenade" name="serenade">
<p:output port="serenade-lines" sequence="true">
<p:pipe port="lines" step="finished-yet"/>
</p:output>
<p:output port="result" primary="true"/>
<p:serialization port="result" indent="true" omit-xml-declaration="false"/>
<p:option name="times" select="'50'"/>
<p:input port="source" sequence="true" primary="true">
<p:inline><line xmlns="http://docbook.org/ns/docbook">Happy birthday to you.</line></p:inline>
</p:input>
<p:split-sequence initial-only="true" test="position() = 1" name="first-line"/>
<p:sink/>
<p:count name="count">
<p:input port="source">
<p:pipe port="source" step="serenade"/>
</p:input>
</p:count>
<p:sink/>
<p:choose name="finished-yet">
<p:xpath-context>
<p:pipe port="result" step="count"/>
</p:xpath-context>
<p:when test="number(/*) lt number($times)">
<p:output port="lines" sequence="true">
<p:pipe port="serenade-lines" step="recurse"/>
</p:output>
<p:output port="serenade" primary="true"/>
<ndw50:serenade name="recurse">
<p:input port="source">
<p:pipe port="matched" step="first-line"/>
<p:pipe port="source" step="serenade"/>
</p:input>
<p:with-option name="times" select="$times"/>
</ndw50:serenade>
</p:when>
<p:otherwise>
<p:output port="lines" sequence="true"/>
<p:output port="serenade" primary="true"/>
<p:wrap-sequence wrapper="poetry" wrapper-namespace="http://docbook.org/ns/docbook" name="w1">
<p:input port="source">
<p:pipe port="source" step="serenade"/>
</p:input>
</p:wrap-sequence>
<p:insert match="/*" position="last-child" name="i1">
<p:input port="insertion">
<p:inline><line xmlns="http://docbook.org/ns/docbook">Happy birthday dear Norman!</line></p:inline>
</p:input>
</p:insert>
<p:insert match="/*" position="last-child" name="i2">
<p:input port="insertion">
<p:pipe port="matched" step="first-line"/>
</p:input>
</p:insert>
</p:otherwise>
</p:choose>
</p:declare-step>
<?xml version="1.0" encoding="UTF-8"?>
<poetry xmlns="http://docbook.org/ns/docbook">
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday to you.</line>
<line>Happy birthday dear Norman!</line>
<line>Happy birthday to you.</line>
</poetry>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment