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

___________________________________________________________________________________
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to