[NTG-context] How can I remove a blank leading line from a buffer

Rik Kabel context at rik.users.panix.com
Mon Aug 13 16:28:47 CEST 2018


On 8/13/2018 03:01, Hans Hagen wrote:
> On 8/13/2018 5:18 AM, Rik Kabel wrote:
>> %% How can one remove blank lines at the start of a buffer so that
>> %%   commands that grab a buffer can be used in the same way as, for
>> %%   example, \startparagraph...\stopparagraph, which allow blank
>> %%   lines around the content?
>> %%
>> %% The problem appears when an optional argument is allowed but none
>> %%   is provided. Adding \relax does not help; adding empty brackets
>> %%   does. I see no way to distinguish between a buffer without
>> %%   leading blank lines and a buffer that was created when brackets
>> %%   are provided.
>> %%
>> %% \inlinebuffer handles the leading blank lines when there is
>> %%   nothing prepended, but I need to prepend. (It also handles the
>> %%   unwanted trailing line, but that is not an issue here).
>> %%
>> %% How can I unpack the buffer, apply the equivalent functions of
>> %%   ignorespaspaces and removeunwantedspaces to it, and repack it?
>> %%   The buffer may contain internal blank lines and macros, and
>> %%   those should be retained. Or, is there already a function to
>> %%   strip a buffer in the manner that string.strip does a string?
>>
>> \setupwhitespace[none]
>> \setupindenting[none]
>> \define\Mark{\color[middlegray]{\itb¿\ }}
>> \define\First{nothing yet}
>> \define\Arg{nothing yet}
>> \setuplanguage[en][spacing=packed]
>>
>> \starttexdefinition unexpanded startBufTest
>>    \bgroup
>>    \dosingleempty\dostartBufTest
>> \stoptexdefinition
>>
>> \starttexdefinition dostartBufTest [#SETUPS]
>>    \doifsomethingelse{#{SETUPS}}
>>                      {\define\Arg{yes}}
>>                      {\define\Arg{no}}
>>    \iffirstargument
>>      \define\First{yes}
>>    \else
>>      \define\First{no}
>>    \fi
>>    \relax
>>    \getrawparameters[BufTest][xx=yy,#SETUPS]
>>    \grabbufferdata[TestBuffer][startBufTest][stopBufTest]
>> \stoptexdefinition
>>
>> \starttexdefinition stopBufTest
>>
>>    \startparagraph
>>
>>      \dontleavehmode\llap{\Mark}\inlinebuffer[TestBuffer]
>>      \ (first: \First, arg: \Arg)
>>
>>    \stopparagraph
>>
>>    \egroup
>> \stoptexdefinition
>>
>> \starttext
>>
>> \startparagraph
>>
>>    A starting paragraph.
>>
>> \stopparagraph
>>
>> \startBufTest
>>    Buffer without blank lines.
>> \stopBufTest
>>
>> \startparagraph
>>
>>    An intervening paragraph.
>>
>> \stopparagraph
>>
>> \startBufTest
>>
>>    Buffer with blank lines.
>>
>> \stopBufTest
>>
>> \startparagraph
>>
>>    An intervening paragraph.
>>
>> \stopparagraph
>>
>> \startBufTest\relax
>>
>>    Buffer with \tex{relax}.
>>
>> \stopBufTest
>>
>> \startparagraph
>>
>>    An intervening paragraph.
>>
>> \stopparagraph
>>
>> \startBufTest[]
>>
>>    Buffer with \type{[]}.
>>
>> \stopBufTest
>>
>> \startparagraph
>>
>>    An intervening paragraph.
>>
>> \stopparagraph
>>
>> \startBufTest[key=value]
>>
>>    Buffer with \type{[key=value]}.
>>
>> \stopBufTest
>>
>> \startparagraph
>>
>>    A closing paragraph.
>>
>> \stopparagraph
>>
>> \stoptext
>
>   \startparagraph
>
> %     \dontleavehmode\llap{\Mark}\inlinebuffer[TestBuffer]
> %     \ (first: \First, arg: \Arg)
>
>     \margintext{\Mark}
>
>     \setupparagraphintro[first][(first: \First, arg: \Arg)]
>    %\setupparagraphintro[next][(first: \First, arg: \Arg)]
>
>     \getbuffer[TestBuffer]
>
>   \stopparagraph 

Hans,

That works for the over-simplified case here, but fails in practice. For 
a \startnarrower[left] paragraph, the mark is still in the main margin, 
not the 'margin' of the narrowed paragraph. Also, the placement of the 
text in the margin is wrong and not easily controlled as with \llap and 
\rlap. The code started out more like:

    \define\Mark{\color[middlegray]{\hskip.6cm\itb¿\ }}
    \setwidthof{\Mark}\to\MarkWidth
    ...
    \starttexdefinition stopBufTest
       \startluacode
    buffers.prepend("TestBuffer","\\dontleavehmode\\llap{\\Mark}")
       \stopluacode
       \setupnarrower[left=\MarkWidth]
       \startnarrower[left,right]
       \startparagraph
         \inlinebuffer[TestBuffer]
       \stopparagraph
       \stopnarrower
       \egroup
    \stoptexdefinition


So I am still looking for a way to do this. Meanwhile I am trying to 
understand Aditya's examples.

-- 
Rik

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20180813/a595909c/attachment.html>


More information about the ntg-context mailing list