[NTG-context] catch % in gsub("%", "\\letterpercent")

Wolfgang Schuster wolfgang.schuster.lists at gmail.com
Thu Aug 27 18:16:31 CEST 2020


Pablo Rodriguez schrieb am 27.08.2020 um 17:56:
> On 8/27/20 5:30 PM, Taco Hoekwater wrote:
>>> [...]
>>> Using Lua gsub(), I need to replace something like:
>>>
>>>   string.gsub([[\xmlraw{#1}{.}]], "%", "\\letterpercent")
>>
>> Double it: %%
>>
>> See also https://www.lua.org/manual/5.3/manual.html#6.4.1 , but the
>> mention of %% is a bit hidden.
> 
> Many thanks for your replies, Taco and Hans.
> 
> I’m afraid this doesn’t work (and I need \xmlraw there):
> 
>    \startbuffer[demo]
>    <html>
>     <body>
>       <div id="First">
>       <p>The <span class="special">% best</span> paragraph.</p>
>       </div>
>     </body>
>    </html>
>    \stopbuffer
> 
>    \startxmlsetups xml:initialize
>      \xmlsetsetup{#1}{html}{xml:gen}
>    \stopxmlsetups
> 
>    \xmlregistersetup{xml:initialize}
> 
>    \startxmlsetups xml:gen
>      \startitemize
>      \xmlfilter{#1}{/**/span[@class='special']/command(xml:special)}
>      \stopitemize
>    \stopxmlsetups
> 
>    \startxmlsetups xml:special
>      \startitem
>      \cldcontext{string.gsub([[\xmlraw{#1}{.}]], "%%",
>         "\\letterpercent")}
>      \stopitem
>    \stopxmlsetups


This works fine with your example

\startxmlsetups xml:special
     \startitem
     \xmlflush{#1}
     \stopitem
\stopxmlsetups

and to escape special characters you can use context.escape()

\startxmlsetups xml:special
     \startitem
     \cldcontext{context.escape([[\xmlraw{#1}{.}]])}
     \stopitem
\stopxmlsetups

Wolfgang


More information about the ntg-context mailing list