Thomas A. Schmitz wrote:
Hi all,
I'm working on my Greek module again and am trying to filter and massage
the input via lpeg, but there's something I don't quite get. As a
minimal example: suppose I want to substitute A and B in my input with X
and leave all other letters alone. Here's my attempt:
brrr ... massaging input ... can be dangerous ... anyhow, here you go
\startluacode
local replace = {
A = "X",
B = "X",
}
setmetatable(replace, { __index = function(t,k)
return k
end })
local dosub = (lpeg.Cs(1)) / replace
local subs =
(dosub)^0
function test (string)
tex.sprint(lpeg.match(subs,string))
end
\stopluacode
\def\Substitute#1{\ctxlua{test("#1")}}
\starttext
\Substitute{thomas ABC whatever}
\stoptext
and yes, it's slow; the next variant is faster but takes a bit more
memory (neglectable compared to what is alrwady taken)
setmetatable(replace, { __index = function(t,k)
t[k] = k
return k
end })
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
| 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://tex.aanhet.net
archive : https://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________