Re: [NTG-context] new upload, new trickery

2021-11-16 Thread Hans Hagen via ntg-context

On 11/16/2021 2:52 PM, Marcus Vinicius Mesquita via ntg-context wrote:

Hi, Hans

I tried to run your first example, but ConTeXt throws an error and 
complains that \resetleftparbox was never defined.

Using version: 2021.11.13


it evolved a bit (see low level manual) or typo-lbx

\resetlocalbox[left]

etc as we have installable boxes (that can individually be set and reset)

Hans


-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
   tel: 038 477 53 69 | www.pragma-ade.nl | 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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___


Re: [NTG-context] new upload, new trickery

2021-11-16 Thread Marcus Vinicius Mesquita via ntg-context
Hi, Hans

I tried to run your first example, but ConTeXt throws an error and
complains that \resetleftparbox was never defined.
Using version: 2021.11.13

Regards

Marcus Vinicius


On Thu, Oct 28, 2021 at 6:24 AM Hans Hagen via ntg-context <
ntg-context@ntg.nl> wrote:

> Hi,
>
> Among the 'can they be made better' candidates in the engine are
> \vadjust and \local[left|right]box primitives that are not really used
> in context (okay, vadjust is used in mkii).
>
> The \vadjust vertical injector can be illustrated with
>
> \starttext
>  \ignorespaces\input tufte \removeunwantedspaces
>  we want a break before this line \vadjust pre {\break}%
>  \ignorespaces\input tufte \removeunwantedspaces
>
>  \page
>
>  \ignorespaces\input tufte \removeunwantedspaces
>  we want seperate lines now \leftparbox{\vadjust post {\break}}%
>  \ignorespaces\input tufte \removeunwantedspaces
>  \resetleftparbox{}
> \stoptext
>
> It's a signal that injects something in a vertical list without
> interupting the horizontal text flow. One can inject before (pre) or
> after (post which is default). New is that we can also influence the
> order: after vs before preceding \vadjust in the same line.  Also new is
> that deeply nested adjustments can migrate (so the hole los: marks,
> inserts and vadjust are now in sync) which is demonstrated with the next
> example:
>
> \starttext
>  \showstruts
>  \input tufte \removeunwantedspaces\space
>  \localleftbox  par {%
> \hbox to 0pt{%
>\llap{L}%
>\vadjust{\strut\blackrule[width=1cm,color=red]}%
>\hbox{\vadjust pre{\strut\blackrule[width=1cm,color=green]}}%
> }\hss
>  }%
>  \localrightbox par {}%
>  \input tufte \removeunwantedspaces\space
>  \vadjust pre{\strut BEFORE 1}%
>  \vadjust pre{\strut BEFORE 2}%
>  \vadjust before {\strut AFTER  1}%
>  \vadjust before {\strut AFTER  2}%
>  \ignorespaces
>  \input tufte
> \stoptext
>
> Indeed it looks bad (ugly) but it illustrates the idea. What makes
> vadjust sort of useless for content is that it messes up spacing (but if
> there is real demand and usage i can sort that out at some point, maybe
> some new options or so). Thsi example also brings us to local boxes:
>
> \showframe
>
> \starttext
>
> \showmakeup[hbox]
>
> \startnarrower[2*left] \raggedleft
> {\localleftbox par {L1}\input tufte  \par}
> \stopnarrower
> \blank
>
> \startnarrower[2*middle] \raggedcenter
> {\localrightbox par {R1}\input tufte  \par}
> \stopnarrower
> \blank
>
> \stoptext
>
> New is the par keyword that forces the setting to be applied from the
> first line downards (fyio: these commands, when display set registers,
> when inline they set registers and inject a node). Watch out: one needs
> to use grouping in order not to bleed into other mechanisms.
>
> Also new is that we can query the content of these registers using \the,
> as in:
>
> \dorecurse{10}{
>  \showboxes
>  \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.0]}}%
>  \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L
> #1.1]}\the\localleftbox}%
>  \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L
> #1.2]}\the\localleftbox}%
>  \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L
> #1.3]}\the\localleftbox}%
>  %
>  \localrightbox{\ruledhbox
> {\smallinfofont\setstrut\strut[R #1.0]}}%
>
> \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R
>
> #1.1]}}%
>
> \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R
>
> #1.2]}}%
>  \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont[R #1.3]}}%
>  % \localrightbox{}%
>  \samplefile{tufte}
> }
>
> Flushing permits us to append and prepend but it's still ugly so that is
> why we now have a new interface (context layer on top of engine):
>
> \dorecurse{10}{
>  \showboxes
>  %
>  \resetleftparbox
>  \resetrightparbox
>  %
>  \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L
> #1.0]}}%
>  \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L
> #1.1]}}%
>  \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L
> #1.2]}}%
>  \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L
> #1.3]}}%
>  %
>  \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.0]}}%
>  \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.1]}}%
>  \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.2]}}%
>  \appendrightparbox{\ruledhbox{\smallinfofont[R #1.3]}}%
>  %
>  \samplefile{tufte}
> }
>
> But as this is not really user friendly, there is more: a mechanism for
> hooking in handlers.
>
> \definelocalboxes
>[linenumber]
>[command=\LeftNumber,
> location=left,
> width=3em,
> style=\bs,
> color=darkred]
>
> \definelocalboxes
>[linenumbertwo]
>[linenumber]
>

[NTG-context] new upload, new trickery

2021-10-28 Thread Hans Hagen via ntg-context

Hi,

Among the 'can they be made better' candidates in the engine are 
\vadjust and \local[left|right]box primitives that are not really used 
in context (okay, vadjust is used in mkii).


The \vadjust vertical injector can be illustrated with

\starttext
\ignorespaces\input tufte \removeunwantedspaces
we want a break before this line \vadjust pre {\break}%
\ignorespaces\input tufte \removeunwantedspaces

\page

\ignorespaces\input tufte \removeunwantedspaces
we want seperate lines now \leftparbox{\vadjust post {\break}}%
\ignorespaces\input tufte \removeunwantedspaces
\resetleftparbox{}
\stoptext

It's a signal that injects something in a vertical list without 
interupting the horizontal text flow. One can inject before (pre) or 
after (post which is default). New is that we can also influence the 
order: after vs before preceding \vadjust in the same line.  Also new is 
that deeply nested adjustments can migrate (so the hole los: marks, 
inserts and vadjust are now in sync) which is demonstrated with the next 
example:


\starttext
\showstruts
\input tufte \removeunwantedspaces\space
\localleftbox  par {%
   \hbox to 0pt{%
  \llap{L}%
  \vadjust{\strut\blackrule[width=1cm,color=red]}%
  \hbox{\vadjust pre{\strut\blackrule[width=1cm,color=green]}}%
   }\hss
}%
\localrightbox par {}%
\input tufte \removeunwantedspaces\space
\vadjust pre{\strut BEFORE 1}%
\vadjust pre{\strut BEFORE 2}%
\vadjust before {\strut AFTER  1}%
\vadjust before {\strut AFTER  2}%
\ignorespaces
\input tufte
\stoptext

Indeed it looks bad (ugly) but it illustrates the idea. What makes 
vadjust sort of useless for content is that it messes up spacing (but if 
there is real demand and usage i can sort that out at some point, maybe 
some new options or so). Thsi example also brings us to local boxes:


\showframe

\starttext

\showmakeup[hbox]

\startnarrower[2*left] \raggedleft
{\localleftbox par {L1}\input tufte  \par}
\stopnarrower
\blank

\startnarrower[2*middle] \raggedcenter
{\localrightbox par {R1}\input tufte  \par}
\stopnarrower
\blank

\stoptext

New is the par keyword that forces the setting to be applied from the 
first line downards (fyio: these commands, when display set registers, 
when inline they set registers and inject a node). Watch out: one needs 
to use grouping in order not to bleed into other mechanisms.


Also new is that we can query the content of these registers using \the, 
as in:


\dorecurse{10}{
\showboxes
\localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.0]}}%
\localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L 
#1.1]}\the\localleftbox}%
\localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L 
#1.2]}\the\localleftbox}%
\localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L 
#1.3]}\the\localleftbox}%

%
\localrightbox{\ruledhbox 
{\smallinfofont\setstrut\strut[R #1.0]}}%


\localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R 
#1.1]}}%


\localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R 
#1.2]}}%

\localrightbox{\the\localrightbox\ruledhbox{\smallinfofont[R #1.3]}}%
% \localrightbox{}%
\samplefile{tufte}
}

Flushing permits us to append and prepend but it's still ugly so that is 
why we now have a new interface (context layer on top of engine):


\dorecurse{10}{
\showboxes
%
\resetleftparbox
\resetrightparbox
%
\prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.0]}}%
\prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.1]}}%
\prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.2]}}%
\prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.3]}}%
%
\appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.0]}}%
\appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.1]}}%
\appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.2]}}%
\appendrightparbox{\ruledhbox{\smallinfofont[R #1.3]}}%
%
\samplefile{tufte}
}

But as this is not really user friendly, there is more: a mechanism for 
hooking in handlers.


\definelocalboxes
  [linenumber]
  [command=\LeftNumber,
   location=left,
   width=3em,
   style=\bs,
   color=darkred]

\definelocalboxes
  [linenumbertwo]
  [linenumber]
  [command=\RightNumber,
   location=right,
   width=6em,
   style=\bf,
   color=darkgreen]

\definelocalboxes
  [linetext]
  [command=\LeftText,
   location=lefttext,
   style=\bs,
   color=darkblue]

\definelocalboxes
  [linetexttwo]
  [linetext]
  [command=\RightText,
   location=righttext,
   style=\bf,
   color=darkgray]

% just using the content

% \protected\def\LeftNumber {\hbox to 
\localboxesparameter{width}{\strut\box\localboxcontentbox\hss)}}
% \protected\def\RightNumber{\hbox to 
\localboxesparameter{width}{\strut(\hss\box\localboxcontentbox)}}


% using the