- From: Geert Josten <geert.josten@dayon.nl>
- Date: Wed, 31 Jul 2013 21:48:46 +0200
- To: Jostein Austvik Jacobsen <josteinaj@gmail.com>
- Cc: Norman Walsh <ndw@nwalsh.com>, XProc Dev <xproc-dev@w3.org>, Florent Georges <fgeorges@fgeorges.org>
- Message-ID: <3488404d579c30de44070c07f15b3e6b@mail.gmail.com>
Hi Jostein, How close to what you had in mind would be something like this? <p:declare-step type="my:if"> <p:input port="source" sequence="true" primary="true"/> <p:input port="parameters" kind="parameter"/> <p:output port="result" primary="true"/> <p:option name="test" required="true" /> <p:choose> <p:when test="$test"> <p:apply-subpipeline /> </p:when> <p:otherwise> <p:identity/> </p:otherwise> </p:choose> </p:declare-step> <my:if> <p:with-option name="test" select="xpath test"> <p:pipe port="metadata" step="load"/> </p:with-option> <p:add-attribute match="/*" attribute-name="something" attribute-value="something"/> </my:if> Not as advanced as your suggestion, rather the stupid simplest I could come up with close enough to at least look what you tried.. ;-) Kind regards, Geert *Van:* Jostein Austvik Jacobsen [mailto:josteinaj@gmail.com] *Verzonden:* woensdag 31 juli 2013 20:42 *Aan:* Florent Georges *CC:* Norman Walsh; XProc Dev *Onderwerp:* Re: custom non-atomic steps? I'm not sure if I'm a fan of introducing a precompiler (I like to think of this feature as higher order functions rather than macros, even though what I outlined might be closer to a way to define macros). The XProc processor needs to be able to throw a meaningful error with the filename and line number of where the error occured. Jostein On 31 July 2013 18:14, Florent Georges <fgeorges@fgeorges.org> wrote: On 30 July 2013 19:52, Norman Walsh wrote: > Jostein Austvik Jacobsen writes: Hi, >> Has custom non-atomic steps (steps where you can provide one or more >> subpipelines upon invocation) been discussed as a possibility in >> XProc v.Next? It would for instance allow us to define our own >> custom syntactic sugar. > I don't think it's been discussed. It's not clear how to describe a > custom step in a standard way. If we are considering the "macro" approach, if we take the initial example again: <my:if test="..."> <my:xpath-context .../> [ sub-pipeline ] </my:if> being equivalent to: <p:choose> <p:when test="..."> <px:xpath-context .../> [ sub-pipeline ] </p:when> <p:otherwise> <p:identity/> </p:otherwise> </p:choose> What about the following?: <p:declare-macro type="my:if"> <p:input port="source" primary="true"/> <p:output port="result" primary="true"/> <p:xslt> <p:input port="stylesheet"> <p:inline> <xsl:stylesheet version="2.0"> <xsl:template match="/my:if"> <a:choose> <a:when> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </a:when> <a:otherwise> <a:identity/> </a:otherwise> </a:choose> </xsl:template> <xsl:template match="my:xpath-context"> <a:xpath-context> <xsl:copy-of select="node()"/> </a:xpath-context> </xsl:template> <xsl:template match="node()" priority="-1"> <xsl:message terminate="yes"> Unknown: <xsl:copy-of select="."/> </xsl:message> </xsl:template> </xsl:stylesheet> </p:inline> </p:input> <p:input port="parameters"> <p:empty/> </p:input> </p:xslt> </p:declare-macro> This defines a "step like", but which is evaluated at compile- time (instead of at run-time), with the corresponding XML as input (here the my:if element), and the result is inserted in the lexer tree, replacing the initial "macro call". Here the macro is just a stylesheet transforming the my:if into corresponding p:choose (actually in an alias namespace, here bound to "a:"). Regards, -- Florent Georges http://fgeorges.org/ http://h2oconsulting.be/
Received on Wednesday, 31 July 2013 19:49:16 UTC