On 13-6-2011 3:58, Wolfgang Schuster wrote:
Am 13.06.2011 um 15:40 schrieb luigi scarso:
Where is the difference ?
The TeX solution is faster.
\define[1]\ThisHelps
{\handletokens#1\with{\hskip 0pt plus .1pt\firstofoneargument}}
\define[1]\ThisHelpsLuigi
{\startluacode
s='#1'
s= string.gsub(s,'(.)',"\%1\\hskip 0sp plus .1pt")
context(s)
\stopluacode}
\showframe
\starttext
\testfeatureonce{10000}{\ThisHelps {abcde123xyz}}%
\testfeatureonce{10000}{\ThisHelpsLuigi{abcde123xyz}}
\stoptext
A few variants ...
\startluacode
local gsub = string.gsub
function LuigiX(s)
local s = gsub(s,'.',"\%1\\hskip 0sp plus .1pt")
context(s)
end
local gmatch = string.gmatch
function LuigiY(s)
local LuigiYY = context.LuigiYY
for s in gmatch(s,".") do
LuigiYY(s)
end
end
\stopluacode
\def\ThisHelpsLuigiX#1{\ctxlua{LuigiX('#1')}}
\def\ThisHelpsLuigiY#1{\ctxlua{LuigiY('#1')}}
\def\LuigiYY#1{#1\hskip\zeropoint plus .1pt\relax}
The disadvantage of the lua way is that for long strings we end up with
a lot of data collected at the lua end that gets passed to tex. Normally
this is no real problem.
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 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 : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________