Re: [xsl] Ungready Flag on Regex
2020-10-22 20:01:29
Christophe,
Have you tried Martin's solution?
It solves the issue and it doesn't create atomic values instead of text
nodes.
You need to see that you've been smashing the results of the inner
function invocations to text nodes, no matter whether elements have been
created by these functions in the first place.
Martin hasn't changed xsl:non-matching-substring in the innermost
function pt:replaceTextArobase() so it still produces a text node.
xsl:matching-substring in pt:replaceTextArobase() is unchanged. It
creates a text:span element with a text node in it.
Previously, whatever came out of pt:replaceTextArobase() was cast to a
text node by the text value template in pt:replaceTextDollar().
The use of xsl:sequence instead of the text value template just makes
sure that whatever pt:replaceTextArobase() returned will be returned in
the xsl:non-matching substring branch. If it is a text:span element, the
result will be a text:span element, if it is a text node, the result
will also be a text node. No casting to atomic values occurs.
Maybe you picture xsl:sequence as doing some reverse smashing operation:
While xsl:value-of smashes atomic values to text nodes, you might think
that xsl:sequence smashes text nodes to atomic values. It does not.
Gerrit
P.S.: Looking forward to the future requirement that the ** $$ @@ pseudo
markup should be able to nest.
On 23.10.2020 00:50, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com wrote:
That's not the problem. Changing to <xsl:sequence .../> is worse, it
creates some pseudo-atomic-values instead of text() nodes.
Christophe
Le 22/10/2020 à 23:48, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de a
écrit :
On 22.10.2020 23:14, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com wrote:
For sure, regex are strange to me, even if I think they are really
usefull.
So, when a regex king give me the right regex to do exactly what I want,
I take this regex, and I adapt it to other similar use-cases.
My first problem was with comments, and I've adapted it to other kind of
markers :
**bold**
$$code$$
@@link@@
The first two are Ok, but I can not make it run for the third case.
I join the XSL, a XSpec file, I have one scenario that fails. If someone
could :
1. give me the solution
2. explain me why it was failing
3. explain me why the solution works
it would be really a good thing.
In France, we now have a curfew at 9pm. There a lot of beer that can not
be sold ; i may have a barrel for the guy who help me !
Best regards,
Christophe
Le 08/10/2020 à 16:54, Imsieke, Gerrit, le-tex
gerrit(_dot_)imsieke(_at_)le-tex(_dot_)de
a écrit :
On 08.10.2020 16:26, Liam R. E. Quin liam(_at_)fromoldbooks(_dot_)org wrote:
You want [^*]*?
Thinking of the brilliant potential for misunderstanding that this
answer entails.
Christophe: I don't understand why you are asking me whether I want
[^*]*.
Jokes aside, I think you need the non-greedy question mark modifier,
but not on [^*]*. You use it to make .* non-greedy. Otherwise it will
stop at the first '*' that it encounters.
This works:
<xsl:template name="xsl:initial-template">
<doc>
<xsl:analyze-string
select="'Comments are delimited by **/* */** or prefixed by
**//**'"
regex="\*\*(.*?)\*\*">
<xsl:matching-substring>
<b>
<xsl:value-of select="regex-group(1)"/>
</b>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</doc>
</xsl:template>
I think the issue is your use of text value templates
<xsl:non-matching-substring>{pt:replaceTextArobase(.)}</xsl:non-matching-substring>
that strips any elements; you need to use
<xsl:non-matching-substring>
<xsl:sequence select="pt:replaceTextArobase(.)"/>
</xsl:non-matching-substring>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [xsl] Ungready Flag on Regex, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com
- Re: [xsl] Ungready Flag on Regex, Liam R. E. Quin liam(_at_)fromoldbooks(_dot_)org
- Re: [xsl] Ungready Flag on Regex, Imsieke, Gerrit, le-tex gerrit(_dot_)imsieke(_at_)le-tex(_dot_)de
- Re: [xsl] Ungready Flag on Regex, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com
- Re: [xsl] Ungready Flag on Regex, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de
- Re: [xsl] Ungready Flag on Regex, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de
- Re: [xsl] Ungready Flag on Regex, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com
- Re: [xsl] Ungready Flag on Regex,
Imsieke, Gerrit, le-tex gerrit(_dot_)imsieke(_at_)le-tex(_dot_)de <=
- Re: [xsl] Ungready Flag on Regex, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com
|
|
|