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