On 11/26/2021 7:42 AM, Joey McCollum via ntg-context wrote:
I wasn't aware of a general-purpose "doifstartswith" macro in ConTeXt
(the \doifnextcharelse macro only works one character at a time, and the
\doifinstring macros may capture substrings that are not prefixes), and
I'd like to develop one for something I'm working on. I've been trying
to do this in Lua, as that seemed like the most natural approach.
Normally, something like this would work fine as a foundation:
```
function isprefix(prefix, str)
if string.sub(str, 1, string.len(prefix)) == prefix then
return true
end
return false
end
```
how about
if string.find(str,"^"..prefix) then
in:
\starttext
\def\DoIfPrefixElse#1#2{\ctxlua{commands.doifelse(string.find("#2","^".."#1"))}}
\DoIfPrefixElse{pre}{prefix}{YES}{NOP}
\DoIfPrefixElse{pre}{suffix}{YES}{NOP}
\stoptext
utf strings are just sequences of bytes so matching works
when you want to do more in lua you can decide for
\startluacode
interfaces.implement {
name = "DoIfPrefixElse",
arguments = { "argument", "argument" },
actions = function(pre,str)
commands.doifelse(string.find(str,"^"..pre))
end
}
\stopluacode
\DoIfPrefixElse{pre}{prefix}{YES}{NOP}
\DoIfPrefixElse{pre}{suffix}{YES}{NOP}
but in any case: make sure that you don't clash with built in ...
if needed i can make a set of fast(er) ones but someone has to collect a
list of 'handy helpers' first
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________