diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/node-spl.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/node-spl.mkiv | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/node-spl.mkiv b/Master/texmf-dist/tex/context/base/node-spl.mkiv new file mode 100644 index 00000000000..8ad6795a5e0 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/node-spl.mkiv @@ -0,0 +1,114 @@ +%D \module +%D [ file=node-spl, +%D version=2009.05.19, +%D title=\CONTEXT\ Node Macros, +%D subtitle=Splitters, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA] +%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 Node Support / Splitters} + +\registerctxluafile{node-spl}{1.001} + +\definesystemattribute[splitter][public] + +%D This module is specially made for the oriental \TEX\ project. The working is as +%D follows (and tuned for fonts like Idris' Husayni. The following method came to +%D my mind after a couple of Skype sessions with Idris while working on the rough +%D edges of the Husayni font and playing with font dynamics. +%D +%D \startitemize[packed] +%D +%D \item We define a couple of features sets, some can have stylistics variants +%D that result in the same words getting a different width. Normally this +%D happens in a goodies file. +%D +%D \item We group such features in a solution set. A solutionset can be enabled +%D by setting an attribute. +%D +%D \item For each paragraph we identify words that get this set applied. We replace +%D these words by a user node that refers to the original. +%D +%D \item For each word we apply the features to a copy that we associate with this +%D original word. +%D +%D \item At the end we have a paragraph (node list) with user nodes that point to a +%D cache that has originals and processed variants. +%D +%D \item When the paragraph is broken into lines we optimize the spacing by +%D substituting variants. +%D +%D \stopitemize +%D +%D This approach permits us to use a dedicated paragraph builder, one that treats +%D the user nodes special and takes the alternatives into account. +%D +%D Currently we assume only one solution being active. Maybe some day I'll support +%D a mixture. This is only one way of optimizing and after several experiments this +%D one was chosen as testcase. It took quite some experiments (and time) to get thus +%D far. +%D +%D The is experimental code for the Oriental \TEX\ project and aspects of it might +%D change. +%D +%D \starttyping +%D \setupfontsolutions[method={random,preroll},criterium=1,randomseed=101] +%D +%D \definefontsolution % actually only the last run needs to be done this way +%D [FancyHusayni] +%D [goodies=husayni, +%D solution=experimental] +%D +%D \definedfont[husayni*husayni-default at 24pt] +%D \setupinterlinespace[line=36pt] +%D \righttoleft +%D \enabletrackers[parbuilders.solutions.splitters.colors] +%D \setfontsolution[FancyHusayni] +%D alb alb alb \par +%D \resetfontsolution +%D \disabletrackers[parbuilders.solutions.splitters.colors] +%D \stoptyping + +\unprotect + +\newtoks\everysetupfontsolutions + +\unexpanded\def\definefontsolution + {\dodoubleargument\dodefinefontsolution} + +\def\dodefinefontsolution[#1][#2]% we could set the attribute at the lua end + {\setxvalue{\??fu:#1}{\attribute\splitterattribute\ctxlua{builders.paragraphs.solutions.splitters.define("#1","#2")}\relax}} + +\unexpanded\def\setfontsolution[#1]% + {\ctxlua{builders.paragraphs.solutions.splitters.enable()}% + \csname\??fu:#1\endcsname} + +\unexpanded\def\resetfontsolution + {\ctxlua{builders.paragraphs.solutions.splitters.disable()}% + \attribute\splitterattribute\attributeunsetvalue} + +\letvalue{\??fu:\v!reset}\resetfontsolution + +\unexpanded\def\setupfontsolutions[#1]% + {\getparameters[\??fu][#1]% + \the\everysetupfontsolutions} + +\appendtoks + \ctxlua{builders.paragraphs.solutions.splitters.setup { + method = "\@@fumethod", + criterium = "\@@fucriterium", + }}% +\to \everysetupfontsolutions + +% We initialize this module at the \LUA\ end. +% +% \setupfontsolutions +% [\c!method={\v!normal,preroll}, +% \c!criterium=0] + +\protect |