xsl-list
[Top] [All Lists]

Re: [xsl] Ungready Flag on Regex

2020-10-22 16:53:45
On 22.10.2020 23:48, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de wrote:

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>

and so on:

  <xsl:function name="pt:replaceTextMarkers" as="item()+">
    <xsl:param name="s" as="xs:string"/>
    <xsl:analyze-string select="$s" regex="\*\*(.*?)\*\*">
      <xsl:matching-substring><text:span
text:style-name="TB">{pt:replaceTextDollar(substring(.,3,
string-length(.)-4))}</text:span></xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:sequence select="pt:replaceTextDollar(.)"/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:function>

  <xsl:function name="pt:replaceTextDollar" as="item()+">
    <xsl:param name="s" as="xs:string"/>
    <xsl:analyze-string select="$s" regex="\$\$(.*?)\$\$">
      <xsl:matching-substring><text:span
text:style-name="TCode"><xsl:sequence
select="pt:replaceTextArobase(substring(.,3,
string-length(.)-4))"/></text:span></xsl:matching-substring>
      <xsl:non-matching-substring><xsl:sequence
select="pt:replaceTextArobase(.)"/></xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:function>

  <xsl:function name="pt:replaceTextArobase" as="item()+">
    <xsl:param name="s" as="xs:string"/>
    <xsl:analyze-string select="$s" regex="@@(.*?)@@">
      <xsl:matching-substring><text:span
text:style-name="TLink"><xsl:sequence select="substring(.,3,
string-length(.)-4)"/></text:span></xsl:matching-substring>
      <xsl:non-matching-substring>{.}</xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:function>

  <xsl:function name="pt:unescapeSpecialChars" as="xs:string">
    <xsl:param name="s" as="xs:string"/>
    <xsl:sequence select="$s=>replace('\*', '*', 'q')=>replace('\$',
'$', 'q')=>replace('\@','@', 'q')"/>
  </xsl:function>

All green now in XSpec.
--~----------------------------------------------------------------
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>