[dev-context] Stretch charatcers

Wolfgang Schuster schuster.wolfgang at gmail.com
Mon Dec 3 11:42:42 CET 2012


Am 03.12.2012 um 11:00 schrieb Hans Hagen <pragma at wxs.nl>:

> On 12/3/2012 10:09 AM, Wolfgang Schuster wrote:
>> 
>> Am 02.12.2012 um 23:18 schrieb Hans Hagen <pragma at wxs.nl>:
>> 
>>> On 12/2/2012 4:31 PM, Wolfgang Schuster wrote:
>>>> Hi,
>>>> 
>>>> how can I write the following two lines with Lua, I saw in supp-box.lua a few example how to loop through the characters but I don’t know how I can add glue between them.
>>>> 
>>>> \starttext
>>>> 
>>>> \ruledhbox to 6cm{\processtokens{\hfil }{\hfil\hfil}{\hfil }{}{WORD}}
>>>> 
>>>> \ruledhbox to 6cm{\processtokens{\relax}{\hfil\hfil}{\relax}{}{WORD}}
>>>> 
>>>> \def\HFILLED#1{\hfil#1\hfil}
>>>> 
>>>> \ruledhbox to 6cm{\applytocharacters\HFILLED{WORD}}
>>>> \ruledhbox to 6cm{\hfilneg\applytocharacters\HFILLED{WORD}\hfilneg}
>>>> 
>>>> \stoptext
>>> 
>>> \startluacode
>>> function commands.ws_hfilled(str)
>>>    context.hfil()
>>>    for c in string.utfcharacters(str) do
>>>        context(c)
>>>        context.hfil()
>>>    end
>>> end
>>> \stopluacode
>>> 
>>> \enabletrackers[context.trace]
>>> 
>>> \def\HFILLED#1{\ctxcommand{ws_hfilled("#1")}}
>>> 
>>> \ruledhbox to 6cm{\HFILLED{WORD}}
>>> \ruledhbox to 6cm{\hfilneg\HFILLED{WORD}\hfilneg}
>> 
>> This does the trick but can I check for the last char without the additional check (if n == string.utflength(str)) in the example below?
>> 
>> \startluacode
>> function commands.ws_hfilled(str,margin)
>>     local n = 0
>>     if margin then context.hfil() end
>>     for c in string.utfcharacters(str) do
>>         n = n + 1
>>         context(c)
>>         if n == string.utflength(str) then
>>             if margin then context.hfil() end
>>         else
>>             context.hfil()
>>         end
>>     end
>> end
>> \stopluacode
>> 
>> \starttext
>> \ruledhbox to 6cm{\ctxlua{commands.ws_hfilled("WORD")}}
>> \ruledhbox to 6cm{\ctxlua{commands.ws_hfilled("WORD",true)}}
>> \stoptext
> 
> easier:
> 
> \startluacode
> function commands.ws_hfilled(str,margin)
>    local done = false
>    for c in string.utfcharacters(str) do
>        if done or margin then
>            context.hfil()
>        else
>            done = true
>        end
>        context(c)
>    end
>    if margin then
>        context.hfil()
>    end
> end
> \stopluacode
> 
> \starttext
> \ruledhbox to 6cm{\ctxlua{commands.ws_hfilled("WORD")}}
> \ruledhbox to 6cm{\ctxlua{commands.ws_hfilled("WORD",true)}}
> \stoptext

Perfect, thank you Hans.

Wolfgang


More information about the dev-context mailing list