diff options
author | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
commit | fc4466b32ed330a956ac603b00fd145524cff49a (patch) | |
tree | 2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv | |
parent | 50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff) |
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv | 853 |
1 files changed, 853 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv new file mode 100644 index 00000000000..649b29fa6e6 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv @@ -0,0 +1,853 @@ +%D \module +%D [ file=pack-mrl, % was pack-rul/core-rul, +%D version=1998.10.16, +%D title=\CONTEXT\ Packaging Macros, +%D subtitle=More Rules, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Packaging Macros / More Rules} + +%D The (re)implementation of margin rules has been moved elsewhere. + +\unprotect + +%D \macros +%D {setupblackrules,blackrule} +%D +%D The graphic capabilities of \TEX\ do not go beyond simple filled rules, except of +%D course when using specials or, in \MKIV, manipulate node lists. Let's start with +%D a warning: using this commands is far more slower than using the \TEX\ primitives +%D \type {\hrule} and \type {\vrule}, but they save us some tokens. The +%D characteristics of these rule drawing command can be set by: +%D +%D \showsetup{setupblackrules} +%D +%D The simple command draws only one rule. Its optional argument can be used to +%D specify the dimensions. By setting the width, height or depth to \type {max}, one +%D gets the natural dimensions. +%D +%D \showsetup{blackrule} + +\installcorenamespace{blackrules} + +\installsimplecommandhandler \??blackrules {blackrules} + +\unexpanded\def\blackrule + {\hbox\bgroup + \doifelsenextoptionalcs\pack_black_rule_pickup\pack_black_rule_indeed} + +\def\pack_black_rule_pickup[#1]% + {\setupcurrentblackrules[#1]% + \pack_black_rule_indeed} + +\def\pack_black_rule_indeed + {\edef\p_width {\directblackrulesparameter\c!width }% + \edef\p_height{\directblackrulesparameter\c!height}% + \edef\p_depth {\directblackrulesparameter\c!depth }% + \ifx\p_height\v!max + \setstrut + \else\ifx\p_depth\v!max + \setstrut + \fi\fi + \useblackrulesstyleandcolor\c!style\c!color + \vrule + \ifx\p_width \v!max\s!width \emwidth\else\ifx\p_width \empty\else\s!width \p_width \fi\fi + \ifx\p_height\v!max\s!height\strutht\else\ifx\p_height\empty\else\s!height\p_height\fi\fi + \ifx\p_depth \v!max\s!depth \strutdp\else\ifx\p_depth \empty\else\s!depth \p_depth \fi\fi + \egroup} + +\setupblackrules + [\c!width=\emwidth, + \c!height=\exheight, + \c!depth=\zeropoint, + \c!color=] + +%D \macros +%D {blackrules} +%D +%D One can call for a sequence of black rules, if needed equally spaced over the +%D given width. +%D +%D \showsetup{blackrules} +%D +%D The two alternative calls are therefore: +%D +%D \startbuffer +%D Tell me, is this according to the \blackrules[n=6]? +%D These \blackrules[alternativevariant=b,n=10,distance=.2em,width=4cm] are quite clear. +%D \stopbuffer +%D +%D \typebuffer +%D +%D or: +%D +%D \startlines +%D \getbuffer +%D \stoplines +%D +%D We could of course have implemented this macro using \type {\leaders}, but this +%D would probably have taken more tokens. + +\unexpanded\def\blackrules % probably never used + {\hbox\bgroup + \doifelsenextoptionalcs\pack_black_rules_pickup\pack_black_rules_indeed} + +\def\pack_black_rules_pickup[#1]% + {\setupcurrentblackrules[#1]% + \pack_black_rules_indeed} + +\def\pack_black_rules_indeed % no max handling here + {\scratchwidth \directblackrulesparameter\c!width + \scratchheight \directblackrulesparameter\c!height + \scratchdepth \directblackrulesparameter\c!depth + \scratchdistance\directblackrulesparameter\c!distance + \scratchcounter \directblackrulesparameter\c!n + \edef\p_alternative{\blackrulesparameter\c!alternative}% + \ifx\p_alternative\c!b + \ifnum\scratchcounter=\plusone + \scratchdistance\zeropoint + \else + \scratchwidth\dimexpr(\scratchwidth-\scratchcounter\scratchdistance+\scratchdistance)/\scratchcounter\relax + \fi + \fi + \useblackrulesstyleandcolor\c!style\c!color + \dorecurse\scratchcounter % a typical case of where we can use a simple loop + {\vrule + \s!width \scratchwidth + \s!height\scratchheight + \s!depth \scratchdepth + \hskip\scratchdistance}% + \unskip + \egroup} + +\setupblackrules + [\c!n=3, + \c!alternative=\c!a, + \c!distance=.25\emwidth, + \c!color=] + +%D \macros +%D {vl, hl} +%D +%D The command \type {\vl} draws a vertical rule \vl\ with strut dimensions, +%D multiplied with the factor specified in the optional argument. The height and +%D depth are clipped \vl [3] to the baselinedistance. Its horizontal counterpart +%D \type {\hl} draws a horizontal rule \hl\ with a width of 1em, multiplied with the +%D optional factor. The horizontal rule is drawn on top of the baseline. +%D +%D \showsetup{vl} +%D \showsetup{hl} + +\unexpanded\def\pack_rule_vl_indeed#1#2#3% + {\dontleavehmode + \begingroup + \setbox\scratchbox\hbox + {\vrule + \s!width #1\linewidth + \s!height#2\strutht + \s!depth #3\strutdp}% + \dp\scratchbox\strutdp + \ht\scratchbox\strutht + \box\scratchbox + \endgroup} + +\def\pack_rule_vl[#1]% + {\pack_rule_vl_indeed{#1}{#1}{#1}} + +\def\pack_rule_hl[#1]% + {\dontleavehmode + \hbox + {\vrule + \s!width #1\emwidth + \s!height\linewidth + \s!depth \zeropoint}} + +\unexpanded\def\vl{\dosingleempty\pack_rule_vl} +\unexpanded\def\hl{\dosingleempty\pack_rule_hl} + +\let\dovlwdhtdp\pack_rule_vl_indeed % used elsewhere + +%D \macros +%D {hairline, thinrule, thinrules, setupthinrules} +%D +%D Drawing thin lines can of course easily be accomplished by the \TEX\ +%D primitives \type{\hrule} and \type{\vrule}. The next few macros however +%D free us from some specifications. +%D +%D \startbuffer +%D some text +%D +%D \hairline +%D +%D some more text +%D +%D \thinrule +%D +%D more and more text +%D +%D hi \thinrule\ there +%D +%D and then the final text +%D \stopbuffer +%D +%D \typebuffer +%D +%D becomes +%D +%D \startexample +%D \getbuffer +%D \stopexample +%D +%D So we've got +%D +%D \showsetup{hairline} +%D \showsetup{thinrule} +%D +%D Both can be set up with: +%D +%D \showsetup{setupthinrules} +%D +%D We also have +%D +%D \showsetup{thinrules} +%D +%D which looks like: \thinrules[n=2] + +\installcorenamespace{thinrules} +\installcorenamespace{thinrulealternatives} + +\installdirectcommandhandler \??thinrules {thinrules} + +\setupthinrules + [\c!interlinespace=\v!small, + \c!n=3, + \c!before=, + \c!inbetween={\blank[\v!white]}, + \c!after=, + \c!color=, + \c!height=.5\linewidth, + \c!depth=.5\linewidth, + \c!frame=\v!on, % compatible with textbackgrounds + \c!alternative=\v!b, + \c!backgroundcolor=, + \c!background=, + \c!rulethickness=\linewidth] + +\letvalue{\??thinrulealternatives\v!a }\zerocount +\letvalue{\??thinrulealternatives\v!b }\plusone +\letvalue{\??thinrulealternatives\v!c }\plustwo +\letvalue{\??thinrulealternatives\v!none}\zerocount + +\newconstant\c_pack_thinrules_type + +\unexpanded\def\thinrule + {\strut + \bgroup + \edef\p_height {\directthinrulesparameter\c!height}% + \edef\p_depth {\directthinrulesparameter\c!depth}% + \edef\p_background{\directthinrulesparameter\c!background}% + \edef\p_frame {\directthinrulesparameter\c!frame}% + \linewidth\dimexpr\directthinrulesparameter\c!rulethickness/\plustwo\relax + \ifdim\linewidth=\zeropoint + \c_pack_thinrules_type\zerocount + \else\ifx\p_frame\v!on + \c_pack_thinrules_type\expandnamespaceparameter\??thinrulealternatives\directthinrulesparameter\c!alternative\v!b\relax + \else + \c_pack_thinrules_type\zerocount + \fi\fi + \ifnum\c_pack_thinrules_type=\plusone + \ifx\p_height\v!max + \scratchheight\strutht + \else + \setdimensionwithunit\scratchheight\p_height\strutht + \fi + \ifx\p_depth\v!max + \scratchdepth\strutdp + \else + \setdimensionwithunit\scratchdepth\p_depth\strutdp + \fi + \else + \scratchheight\strutht + \scratchdepth \strutdp + \fi + \ifx\p_background\v!color + \startcolor[\directthinrulesparameter\c!backgroundcolor]% + \ifnum\c_pack_thinrules_type=\plustwo % prevent overshoot due to rounding + \leaders + \hrule + \s!height\dimexpr\scratchheight-\linewidth\relax + \s!depth \dimexpr\scratchdepth -\linewidth\relax + \hfill + \else + \leaders + \hrule + \s!height\scratchheight + \s!depth \scratchdepth + \hfill + \fi + \stopcolor + \ifcase\c_pack_thinrules_type + % no rule + \or + \startcolor[\directthinrulesparameter\c!color]% + \hfillneg + \leaders + \hrule + \s!height\linewidth + \s!depth \linewidth + \hfill + \stopcolor + \or + \startcolor[\directthinrulesparameter\c!color]% + \hfillneg + \leaders + \hrule + \s!height\dimexpr-\scratchdepth+\linewidth\relax + \s!depth \scratchdepth + \hfill + \hfillneg + \leaders + \hrule + \s!height\scratchheight + \s!depth \dimexpr-\scratchheight+\linewidth\relax + \hfill + \stopcolor + \fi + \else + \ifcase\c_pack_thinrules_type + % no rule + \else + \startcolor[\directthinrulesparameter\c!color]% + \leaders + \hrule + \s!height\scratchheight + \s!depth \scratchdepth + \hfill + \stopcolor + \fi + \fi + \strut + \carryoverpar\egroup} + +\unexpanded\def\hairline + {\endgraf + \thinrule + \endgraf} + +\unexpanded\def\thinrules + {\dosingleempty\pack_thinrules} + +\def\pack_thinrules[#1]% + {\bgroup + \setupcurrentthinrules[#1]% + \scratchcounter\directthinrulesparameter\c!n\relax + \ifcase\scratchcounter + % nothing, not even before/after + \let\p_after\relax + \else + \assignvalue{\directthinrulesparameter\c!interlinespace}\m_pack_thinrules_interlinespace{1.0}{1.5}{2.0}% + \spacing\m_pack_thinrules_interlinespace + \edef\p_after {\directthinrulesparameter\c!after}% + \edef\p_inbetween{\directthinrulesparameter\c!inbetween}% + \directthinrulesparameter\c!before + \ifcase\scratchcounter\or + \thinrule + \else + \dorecurse\scratchcounter + {\ifnum\recurselevel=\scratchcounter \directvspacing\v!samepage \else % \penalty500 + \ifnum\recurselevel=\plustwo \directvspacing\v!samepage \fi\fi % \penalty500 + \thinrule + \ifnum\recurselevel<\scratchcounter\relax + % test needed, else messed up whitespace + \ifx\p_inbetween\empty + \softbreak % \ifhmode \hskip \parfillskip \break \fi + \else + \endgraf + \nowhitespace + \p_inbetween + \fi + \fi}% + \fi + \fi + \ifx\p_after\empty + \carryoverpar\egroup + \else + \p_after\egroup + \fi{}} + +%D A couple of examples are given below. +%D +%D \startbuffer +%D \setupthinrules[n=3,inbetween=,color=gray] +%D +%D test test \thinrules\ test test \par +%D test test \thinrules [color=green] test test \par +%D test test \thinrules [height=max, depth=max] test test \par +%D +%D \setupthinrules[height=.9,depth=.9] +%D +%D test test \thinrules\ test test \par +%D test test \thinrules [alternativevariant=b] test test \par +%D test test \thinrules [alternativevariant=c] test test \par +%D test test \thinrules [alternativevariant=c,inbetween=\vskip2ex] test test \par +%D \stopbuffer +%D +%D \typebuffer {\getbuffer} +%D +%D There are a couple of alternative ways to visualize rules using backgrounds. At +%D first sight these may look strange, but they make sense in educational settings. +%D The alternatives are more or less compatible with the more advanced \METAPOST\ +%D based implementation. +%D +%D \startbuffer[a] +%D \setupthinrules +%D [n=2, +%D backgroundcolor=gray , +%D rulethickness=1pt, +%D colorkleur=donkerblauw, +%D after=\blank, +%D before=\blank] +%D \stopbuffer +%D +%D \typebuffer[a] +%D +%D \startbuffer[b] +%D \thinrules[alternativevariant=a] +%D \thinrules[alternativevariant=b] +%D \thinrules[alternativevariant=c] +%D \stopbuffer +%D +%D \typebuffer[b] \getbuffer[a,b] +%D +%D \startbuffer[b] +%D \thinrules[alternativevariant=a,background=color] +%D \thinrules[alternativevariant=b,background=color] +%D \thinrules[alternativevariant=c,background=color] +%D \stopbuffer +%D +%D \typebuffer[b] \getbuffer[a,b] +%D +%D \startbuffer[b] +%D \thinrules[alternativevariant=a,height=.8,depth=.8,background=color] +%D \thinrules[alternativevariant=b,height=.8,depth=.8,background=color] +%D \thinrules[alternativevariant=c,height=.8,depth=.8,background=color] +%D \stopbuffer +%D +%D \typebuffer[b] \getbuffer[a,b] + +%D \macros +%D {textrule, starttextrule, setuptextrules} +%D +%D Putting rules before and after a paragraph is very space sensitive, but the +%D next command handles that quite well. It comes in two disguises: +%D +%D \startbuffer +%D \textrule[top]{fragments} +%D \input reich +%D \textrule +%D \stopbuffer +%D +%D \start \typebuffer \getbuffer \stop +%D +%D \startbuffer +%D \setuptextrules +%D [width=90pt,distance=12pt,rulecolor=blue, +%D bodyfont=small,style=\sc,color=red] +%D +%D \starttextrule{Ship Building Tools} +%D \nl \setuptolerance[tolerant] \input materie +%D \stoptextrule +%D \stopbuffer +%D +%D \bgroup \typebuffer \getbuffer \egroup +%D +%D \startbuffer +%D \setuptextrules +%D [location=inmargin, +%D bodyfont=small,style=slantedbold] +%D +%D \starttextrule{wonderful} +%D \input tufte +%D \stoptextrule +%D \stopbuffer +%D +%D \bgroup \typebuffer \getbuffer \egroup +%D +%D The formal definition of these commands is: +%D +%D \showsetup{textrule} +%D \showsetup{starttextrule} +%D \showsetup{setuptextrules} +%D +%D The implementation looks a bit complicated due to the optional arguments. + +\installcorenamespace{textrules} +\installcorenamespace{textrulealternatives} + +\installdirectcommandhandler \??textrules {textrules} + +\setuptextrules + [\c!location=\v!left, + \c!before=\blank, + \c!after=\blank, + \c!inbetween=, + \c!width=2\emwidth, + \c!style=\v!bold, + \c!color=, + \c!rulecolor=, + \c!bodyfont=, + \c!depthcorrection=\v!on, + \c!rulethickness=\linewidth, + \c!distance=.5\emwidth] + +\unexpanded\def\textrule + {\dosingleempty\pack_textrule} + +\def\pack_textrule + {\iffirstargument + \expandafter\pack_textrule_yes + \else + \expandafter\pack_textrule_nop + \fi} + +\def\pack_textrule_yes[#1]% + {\expandnamespacevalue\??textrulealternatives{#1}\v!bottom} + +\def\pack_textrule_nop[#1]% + {\dosinglegroupempty\pack_textrule_nop_indeed} + +\def\pack_textrule_nop_indeed + {\iffirstargument + \expandafter\pack_textrule_nop_indeed_yes + \else + \expandafter\pack_textrule_nop_indeed_nop + \fi} + +\def\pack_textrule_nop_indeed_yes + {\csname\??textrulealternatives\v!top\endcsname} + +\def\pack_textrule_nop_indeed_nop + {\csname\??textrulealternatives\v!bottom\endcsname\empty} + +%D\startbuffer +%D\showstruts +%D +%D\setupwhitespace[none] +%D +%D\textrule[top]{test} xxxxx\smash{\strut} \textrule[bottom]{test} +%D\textrule[top]{test} xxxxx\strut \textrule[bottom]{test} +%D +%D\setupwhitespace[big] +%D +%D\textrule[top]{test} xxxxx\smash{\strut} \textrule[bottom]{test} +%D\textrule[top]{test} xxxxx\strut \textrule[bottom]{test} +%D\stoptyping +%D +%D \typebuffer \start \getbuffer \stop + +\setvalue{\??textrulealternatives\v!top}#1% + {\page[\v!preference] % interferes + \directtextrulesparameter\c!before\relax + \blank[\v!samepage,\v!nowhite]% + \pack_textrule_with_text{#1}% + \blank[\v!samepage,\v!nowhite]% + \directtextrulesparameter\c!inbetween\relax + \endgraf} + +\setvalue{\??textrulealternatives\v!bottom}#1% + {\blank[\v!samepage,\v!nowhite]% + \pack_textrule_following{#1}% + \blank[\v!samepage,\v!nowhite]% + \directtextrulesparameter\c!after\relax + \page[\v!preference]} + +\setvalue{\??textrulealternatives\v!middle}#1% + {\blank[\v!samepage,\v!nowhite]% + \directtextrulesparameter\c!inbetween\relax + \pack_textrule_following{#1}% + \blank[\v!samepage,\v!nowhite]% + \directtextrulesparameter\c!inbetween\relax + \page[\v!preference]} + +\def\pack_textrule_with_text#1% + {\bgroup + \setbox\scratchbox\hbox to \availablehsize + {\scratchwidth \directtextrulesparameter\c!rulethickness\relax + \scratchheight\dimexpr .5\exheight+.5\scratchwidth\relax + \scratchdepth \dimexpr-.5\exheight+.5\scratchwidth\relax + \doifsomething{#1} + {\doifelse{\directtextrulesparameter\c!location}\v!inmargin + {\llap + {\usetextrulesstyleandcolor\c!style\c!color + #1% + \hskip\leftmargindistance}} + {\color[\directtextrulesparameter\c!rulecolor] + {\vrule\s!height\scratchheight\s!depth\scratchdepth\s!width\directtextrulesparameter\c!width}% + \hbox spread 2\dimexpr\directtextrulesparameter\c!distance\relax + {\hss + \usetextrulesstyleandcolor\c!style\c!color + \strut#1% + \hss}}}% + \color[\directtextrulesparameter\c!rulecolor] + {\leaders\hrule\s!height\scratchheight\s!depth\scratchdepth\hfill}}% + \ht\scratchbox\strutht + \dp\scratchbox\strutdp + \noindent\box\scratchbox + \egroup} + +\def\pack_textrule_correct_depth_yes + {\vskip\dimexpr + \strutdp +.5\exheight + \ifdim\prevdepth>\strutdp\else + \ifdim\prevdepth>\zeropoint + -\prevdepth + \fi + \fi + \relax + \relax} + +\def\pack_textrule_correct_depth_nop + {\vskip\dimexpr + \strutdp +.5\exheight + \relax + \relax} + +\def\pack_textrule_following#1% + {\doifelsenothing{#1} + {\ifhmode + \endgraf + \fi + \doifelse{\directtextrulesparameter\c!depthcorrection}\v!on\pack_textrule_correct_depth_yes\pack_textrule_correct_depth_nop + \nointerlineskip + \noindent\vbox % was \dontleavehmode + {\color[\directtextrulesparameter\c!rulecolor] + {\hrule\s!depth\directtextrulesparameter\c!rulethickness\s!height\zeropoint\s!width\availablehsize}}} + {\pack_textrule_with_text{#1}}% + \ifvmode + \prevdepth\zeropoint + \fi} + +%D The grouped commands also supports bodyfont switching: + +\unexpanded\def\starttextrule#1% + {\bgroup + \def\pack_textrule_nop_indeed{\csname\??textrulealternatives\v!middle\endcsname}% + \csname\??textrulealternatives\v!top\endcsname{#1}% + \bgroup + \usebodyfontparameter\directtextrulesparameter} + +\unexpanded\def\stoptextrule + {\par + \egroup + \csname\??textrulealternatives\v!bottom\endcsname\empty + \egroup} + +%D \macros +%D {fillinrules, setupfillinrules} +%D +%D The next few commands do not really deserve a place in a core module, because +%D they deal with specific typography. Nevertheless I decided to make them part of +%D the core, because they permit us to make questionaires. Let's start with some +%D examples. +%D +%D \fillinrules[n=2,width=fit]{first} +%D \fillinrules[n=2,width=broad]{first} +%D \fillinrules[n=2,width=3cm]{first} +%D \fillinrules[n=2,width=3cm,distance=.5em,separator=:]{first} +%D \fillinrules[n=2]{first}{last} +%D \fillintext{first}{last} \input reich \par +%D +%D The main command is \type{\fillinrules}. This command takes one and an optional +%D second argument and sets a paragraph with empty visualized lines. +%D +%D \showsetup{fillinrules} +%D \showsetup{setupfillinrules} + + +\installcorenamespace{fillinrules} + +\installdirectcommandhandler \??fillinrules {fillinrules} + +\setupfillinrules + [\c!width=\v!broad, + \c!distance=\emwidth, + \c!before=\blank, + \c!after=\blank, + \c!n=\plusone, + \c!interlinespace=\v!small, + \c!separator=, + \c!style=, + \c!color=] + +\unexpanded\def\fillinrules + {\dosingleempty\pack_fillinrules} + +\def\pack_fillinrules[#1]% + {\endgraf + \begingroup + \setupcurrentfillinrules[#1]% + \let\pack_fillinrules_rule\thinrules + \dodoublegroupempty\pack_fillinrules_indeed} + +\def\pack_fillinrules_indeed#1#2% + {\directfillinrulesparameter\c!before + \setupcurrentthinrules + [\c!n=\directfillinrulesparameter\c!n, + \c!interlinespace=\directfillinrulesparameter\c!interlinespace, + \c!before=, + \c!after=]% + \scratchdistance\directfillinrulesparameter\c!distance\relax + \edef\m_fillinrules_one{#1}% + \edef\m_fillinrules_two{#2}% + \noindent + \ifx\m_fillinrules_one\empty \else + \edef\p_width{\directfillinrulesparameter\c!width}% + \ifx\p_width\v!fit + \scratchdistance\zeropoint + \hbox + \else\ifx\p_width\v!broad + \hbox + \else + \hbox to \directfillinrulesparameter\c!width + \fi\fi + \bgroup + \usefillinrulesstyleandcolor\c!style\c!color + \strut + \m_fillinrules_one + \hfill\directfillinrulesparameter\c!separator + \hskip\scratchdistance + \egroup + \fi + \setupwhitespace[\v!big]% + \ignorespaces + \pack_fillinrules_rule + \ifx\m_fillinrules_two\empty \else + \kern\scratchdistance + \usefillinrulesstyleandcolor\c!style\c!color + \m_fillinrules_two + \strut + \fi + \endgraf + \directfillinrulesparameter\c!after + \endgroup} + +%D \macros +%D {fillintext} +%D +%D To provide compatible layouts when texts and lines are mixed, one can typeset +%D a paragraph by using the command \type {\fillintext}. +%D +%D \showsetup{fillintext} + +\unexpanded\def\fillintext + {\dosingleempty\pack_fillintext} + +\def\pack_fillintext[#1]% ugly + {\endgraf + \begingroup + \setupcurrentfillinrules[#1]% + \dodoublegroupempty\pack_fillintext_indeed} + +\def\pack_fillintext_indeed#1#2% + {\def\pack_fillinrules_rule{\unhbox\nextbox\unskip}% + \dowithnextbox{\pack_fillinrules_indeed{#1}{\hfill#2}}% + \hbox\bgroup\let\par\egroup\ignorespaces} + +%D \macros +%D {fillinline, setupfillinlines} +%D +%D Another member of the family takes care of putting a (often small) rule after +%D a piece of text, like +%D +%D \startbuffer +%D +%D \stopbuffer\fillinline \input reich \par +%D \fillinline[margin=0cm] \input reich \par +%D +%D \startexample +%D \getbuffer +%D \stopexample +%D +%D which was typeset by saying: +%D +%D \typebuffer +%D +%D The two commands that take care of this are: +%D +%D \showsetup{fillinline} +%D \showsetup{setupfillinlines} + +\installcorenamespace{fillinlines} + +\installdirectcommandhandler \??fillinlines {fillinlines} + +\setupfillinlines + [\c!width=8\emwidth, % was 3cm + \c!margin=\directfillinlinesparameter\c!width, + \c!rulethickness=\linewidth, + \c!color=, + \c!distance=\emwidth, + \c!before=\blank, + \c!after=\blank] + +\unexpanded\def\fillinline + {\dosingleempty\pack_fillinline} + +\ifdefined\endpar % experiment with \endpar + + \def\pack_fillinline[#1]% + {% \endpar % no, as it interferes with \definedescription cum suis + \begingroup + \setupcurrentfillinlines[#1]% + \directfillinlinesparameter\c!before + \begingroup + \advance\rightskip \directfillinlinesparameter\c!margin\relax + \parfillskip\zeropoint + \pushmacro\endpar + \def\endpar + {\popmacro\endpar + \ifhmode\unskip\hfill\fi + \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax + \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi + {\kern\directfillinlinesparameter\c!distance + \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax + \color[\directfillinlinesparameter\c!color]{\vrule\s!width\scratchwidth\s!height\scratchheight\s!depth\scratchheight}}% + \endpar + \endgroup + \endpar + \directfillinlinesparameter\c!after + \endgroup}} % carryover ? + +\else + + \def\pack_fillinline[#1]% + {%\endgraf % no, as it interferes with \definedescription cum suis + \begingroup + \setupcurrentfillinlines[#1]% + \directfillinlinesparameter\c!before + \begingroup + \advance\rightskip \directfillinlinesparameter\c!margin\relax + \parfillskip\zeropoint + \def\par + {\let\par\endgraf + \ifhmode\unskip\hfill\fi + \scratchwidth\dimexpr\directfillinlinesparameter\c!width-\directfillinlinesparameter\c!distance\relax + \ifdim\scratchwidth>\directfillinlinesparameter\c!margin\else\expandafter\rlap\fi + {\kern\directfillinlinesparameter\c!distance + \scratchheight\dimexpr\directfillinlinesparameter\c!rulethickness/\plustwo\relax + \color[\directfillinlinesparameter\c!color]{\vrule\s!width\scratchwidth\s!height\scratchheight\s!depth\scratchheight}}% + \endgraf + \endgroup + \endgraf + \directfillinlinesparameter\c!after + \endgroup}} % carryover ? + +\fi + +\protect \endinput |