Re: [xsl] Ungready Flag on Regex

Subject: Re: [xsl] Ungready Flag on Regex
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 23 Oct 2020 08:03:14 -0000
First, I've try to change all xsl:non-matching-substring TVT with 
xsl:sequence, and that was worst.

Then, I've changed only pt:replaceTextDollar xsl:non-matcing-substring 
TVT to a xsl:sequence, without success.

The problem was my test was not correctly written. I now have written 
all test cases, testing direct calls, nested calls, and so on. Thanks a 
lot, it now works.

@Martin : I apologize for being too quick, and not precise when applying 
your suggestion ; it was late, and the curfew news had a bad effect on me.

@Gerrit, nesting these markups have real use cases. For example, in a 
GIT course, if I want to explain the bisect's steps, I'll write someting 
like :

$ git bisect *start*
$ git bisect *bad*
$ git bisect *good*905d48bb
$ git bisect *run*run-xspec.sh
...
$ git bisect *reset*

So a $$\$ git bisect **start**$$ ...

Or, if I explain the merge-request process, I want to highlight the URL 
return by the server :

$ *git push origin issues/3*
C	numC)ration des objets: 37, fait.
DC)compte des objets: 100% (37/37), fait.
Compression par delta en utilisant jusqu'C  4 fils d'exC)cution
Compression des objets: 100% (11/11), fait.
C	criture des objets: 100% (20/20), 3.21 Kio | 1.60 Mio/s, fait.
Total 20 (delta 5), rC)utilisC)s 0 (delta 0), rC)utilisC)s du pack 0
remote:
remote: To create a merge request for issues/3, visit:
remote: 
https://gitlab.oxiane.org/formation/tools/oxslides-java/-/merge_requests/new?merge_request%5Bsource_branch%5D=issues%2F3
remote:
To https://gitlab.oxiane.org/formation/tools/oxslides-java.git
 B * [new branch]B B B B B  issues/3 -> issues/3

I'll probably never have a code or a bold nested inside a link, but maybe...

Be safe,
Christophe
**


Le 23/10/2020 C  03:01, Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx 
a C)critB :
> 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@xxxxxxxxxx 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 C  23:48, Martin Honnen martin.honnen@xxxxxx a C)critB :
>>> On 22.10.2020 23:14, Christophe Marchand cmarchand@xxxxxxxxxx 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 :
>>>>
>>>> B 1. give me the solution
>>>> B 2. explain me why it was failing
>>>> B 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 C  16:54, Imsieke, Gerrit, le-tex 
>>>> gerrit.imsieke@xxxxxxxxx
>>>> a C)critB :
>>>>>
>>>>>
>>>>> On 08.10.2020 16:26, Liam R. E. Quin liam@xxxxxxxxxxxxxxxx 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">
>>>>> B  <doc>
>>>>> B B B  <xsl:analyze-string
>>>>> B B B B B  select="'Comments are delimited by **/* */** or prefixed by
>>>>> **//**'"
>>>>> B B B B B  regex="\*\*(.*?)\*\*">
>>>>> B B B B B  <xsl:matching-substring>
>>>>> B B B B B B B  <b>
>>>>> B B B B B B B B B  <xsl:value-of select="regex-group(1)"/>
>>>>> B B B B B B B  </b>
>>>>> B B B B B  </xsl:matching-substring>
>>>>> B B B B B  <xsl:non-matching-substring>
>>>>> B B B B B B B  <xsl:value-of select="."/>
>>>>> B B B B B  </xsl:non-matching-substring>
>>>>> B B B  </xsl:analyze-string>
>>>>> B  </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
>>> B  <xsl:non-matching-substring>
>>> B B B  <xsl:sequence select="pt:replaceTextArobase(.)"/>
>>> B  </xsl:non-matching-substring>

Current Thread