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 -----------------------------------------------------------------