- From: mozer <xmlizer@gmail.com>
- Date: Sat, 26 May 2012 23:34:16 +0200
- To: XProc Dev <xproc-dev@w3.org>
- Message-ID: <CAKdwC_PWNx44qKYDgUv2uiD92iie-TQ8MY5gpME7naAi5Dgw0w@mail.gmail.com>
Dear all,
Here is a simple FizzBuzz in XProc
You can find it and bunch of others on github
https://github.com/innovimax/xproc
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:c="http://www.w3.org/ns/xproc-step"
xmlns:ix="http://www.innovimax.fr/ns"
version="1.0" exclude-inline-prefixes="c ix">
<p:documentation>
<p>(c) Innovimax/Mohamed ZERGAOUI 2012 - The fizzbuzz XProc</p>
</p:documentation>
<p:output port="result"/>
<p:declare-step name="replicate" type="ix:replicate">
<p:input port="source" sequence="true">
<p:documentation>The sequence of document you want to
replicate</p:documentation>
</p:input>
<p:output port="result" sequence="true">
<p:documentation>The output where the replicate sequence will be
provided</p:documentation>
</p:output>
<p:option name="count">
<p:documentation>The number of time you want to
replicate</p:documentation>
</p:option>
<p:choose>
<p:when test="$count < 1">
<p:identity>
<p:input port="source">
<p:empty/>
</p:input>
</p:identity>
</p:when>
<p:when test="$count = 1">
<p:identity>
<p:input port="source">
<p:pipe port="source" step="replicate"/>
</p:input>
</p:identity>
</p:when>
<p:otherwise>
<ix:replicate name="tail">
<p:input port="source">
<p:pipe port="source" step="replicate"/>
</p:input>
<p:with-option name="count" select="$count - 1"/>
</ix:replicate>
<p:identity>
<p:input port="source">
<p:pipe port="source" step="replicate"/>
<p:pipe port="result" step="tail"/>
</p:input>
</p:identity>
</p:otherwise>
</p:choose>
</p:declare-step>
<ix:replicate>
<p:documentation>First, we create a list of item</p:documentation>
<p:input port="source">
<p:inline><item/></p:inline>
</p:input>
<p:with-option name="count" select="100"/>
</ix:replicate>
<p:for-each name="fill">
<p:documentation>...then we fill it...</p:documentation>
<p:choose>
<p:when test="p:iteration-position() mod (3 * 5) = 0">
<p:add-attribute match="/item" attribute-name="value"
attribute-value="fizzbuzz"/>
</p:when>
<p:when test="p:iteration-position() mod 5 = 0">
<p:add-attribute match="/item" attribute-name="value"
attribute-value="buzz"/>
</p:when>
<p:when test="p:iteration-position() mod 3 = 0">
<p:add-attribute match="/item" attribute-name="value"
attribute-value="fizz"/>
</p:when>
<p:otherwise>
<p:add-attribute match="/item" attribute-name="value">
<p:with-option name="attribute-value"
select="p:iteration-position()"/>
</p:add-attribute>
</p:otherwise>
</p:choose>
</p:for-each>
<p:wrap-sequence wrapper="list">
<p:documentation>...and then we wrapp it. Done!</p:documentation>
</p:wrap-sequence>
</p:declare-step>
Received on Saturday, 26 May 2012 21:42:59 UTC