diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/typo-shp.mkxl')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/typo-shp.mkxl | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/typo-shp.mkxl b/Master/texmf-dist/tex/context/base/mkxl/typo-shp.mkxl new file mode 100644 index 00000000000..b74003068fa --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/typo-shp.mkxl @@ -0,0 +1,130 @@ +%D \module +%D [ file=typo-shp, +%D version=2021.02.27, % was meta-txt / meta-imp-txt / 2000.07.06 +%D title=\CONTEXT\ Typesetting Macros, +%D subtitle=Paragraph Shapes, +%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. + +%D I finally decided to move some of the code written in 2000 for the +%D \METAFUN\ manual to its own core module. Of course it got adapted +%D to the way \LMTX\ does things. + +\writestatus{loading}{ConTeXt Spacing Macros / Paragraph Shapes} + +\registerctxluafile{typo-shp}{autosuffix} + +\unprotect + +%D Something new (experimental and evolving): +%D +%D \starttyping +%D \parshape +%D 3 +%D options 1 % repeat +%D 0cm 10cm 2cm 8cm 4cm 6cm +%D lots of text +%D \stoptyping +%D +%D \starttyping +%D \parshape 4 5mm 125mm 0mm 120mm 5mm 125mm 0mm 120mm +%D \pushparagraphtweak {repeat} +%D verse line 1\crlf +%D verse line 2\crlf +%D verse line 3\crlf +%D verse line 4\par +%D etc +%D \popparagraphtweak +%D \stoptyping + +%D But we wrap this in a more abstract interface: + +\installcorenamespace {parshapes} + +\aliased\let\stopparagraphshape\relax + +\permanent\protected\def\startparagraphshape[#1]#2\stopparagraphshape + {\gdefcsname\??parshapes#1\endcsname{#2}} % global + +\permanent\protected\def\rawparagraphshape#1% + {\begincsname\??parshapes#1\endcsname} + +\permanent\protected\def\setparagraphshape[#1]% + {\ifcsname\??parshapes#1\endcsname + \expandafter\clf_setparagraphshape\lastnamedcs done\relax + \fi} + +\def\spac_shapes_calculate#1% called locally in \LUA + {\startMPcalculation \includeMPgraphic{#1} \stopMPcalculation} + +\permanent\protected\tolerant\def\startshapedparagraph[#1]% no grouping + {\begingroup + \getdummyparameters[\c!method=,\c!list=,\c!mp=,\c!repeat=,#1]% + \edef\p_mp {\dummyparameter\c!mp}% + \edef\p_repeat{\dummyparameter\c!repeat}% + \setlocalhsize + \normalexpanded + {\endgroup + \ifempty\p_mp + \setparagraphshape[\dummyparameter\c!list]% + \else + \setparagraphmetashape[\dummyparameter\c!mp][\ifx\p_repeat\v!yes repeat\fi]% + \fi + \pushparagraphtweak{\dummyparameter\c!method}\relax}} + +\permanent\protected\def\stopshapedparagraph + {\popparagraphtweak} + +%D As it is not much code we now put it here: + +\newbox \shapetextbox +\newcount\shapetextindex + +\permanent\protected\def\startshapetext[#1]% + {\begingroup + \global\shapetextindex\zerocount + \global\setbox\shapetextbox\vbox\bgroup + \setparagraphmetashape[#1]% + \forgetall + \dontcomplain + \setuptolerance[\v!verytolerant,\v!stretch]% default + % \setuplayout[\c!grid=\v!yes]% goes wrong, we need a local one + \pushparagraphtweak {shift}} + +\permanent\protected\def\stopshapetext + {\popparagraphtweak + \egroup + \endgroup} + +\permanent\protected\def\getshapetext + {\vbox\bgroup + \forgetall + \dontcomplain + \global\advance\shapetextindex\plusone + \scratchcounter\getshapeparameter{lines}\relax + \ifnum\scratchcounter>\zerocount + \scratchwidth \getshapeparameter{width}\scaledpoint\relax + \scratchheight \getshapeparameter{height}\scaledpoint\relax + \setbox\scratchbox\vpack to \scratchheight + {\splittopskip\strutheight + \vskip\dimexpr\getshapeparameter{voffset}\scaledpoint\relax + \ifcase\numexpr\getshapeparameter{first}\relax\else + \vskip\lineheight + \fi + \hskip\dimexpr\getshapeparameter{hoffset}\scaledpoint\relax + \hpack{\vsplit\shapetextbox to \scratchcounter\lineheight}}% + \wd\scratchbox\scratchwidth + \ht\scratchbox\scratchheight + \dp\scratchbox\zeropoint + \box\scratchbox + \else + % what now + \fi + \egroup} + +\protect |