%D \module [ %D file=t-letterspace, %D version=2011-03-15T12:59:48+0100 or later, %D title=\CONTEXT\ User Module, %D subtitle=Letterspacing commands, %D author=Philipp Gesang, %D date=\currentdate, %D copyright=Philipp Gesang, %D license=2-clause BSD, %D ] \writestatus{loading}{ConTeXt User Module / Letterspace} \startmodule [letterspace] \startinterface all \setinterfacevariable {letterspace} {letterspace} \stopinterface \unprotect \definenamespace [\v!letterspace] [ command=yes, comment=Letterspace module, name=\v!letterspace, \s!parent=\v!letterspace, setup=list, style=no, type=module, version=hg, ] %D \macros %D {letterspace} %D %D \useURL [wschuster] [https://bitbucket.org/wolfs/] [] [Wolfgang Schuster] %D \from[wschuster]’s {\em fancybreak} and {\em annotation} %D modules served as the primary source for the following code. %D You’ll have to thank him if it works and blame me if it doesn’t. \appendtoks \setuevalue{\currentletterspace}{\doletterspace [\currentletterspace]}% \setuevalue{\e!start\currentletterspace}{\dostartletterspace[\currentletterspace]}% \setuevalue{\e!stop \currentletterspace}{\dostopletterspace}% \to \everydefineletterspace \definecharacterkerning [letterspace:current] \unexpanded\def\doletterspace[#1]{% \edef\currentletterspace{#1}% \dosingleempty\dodoletterspace% } \def\dodoletterspace[#1]{% \iffirstargument \doifassignment{#1}{% \setupletterspace[\currentletterspace][#1]% }% \fi \dododoletterspace% } \def\dododoletterspace#1{% \def\currentobject{#1}% \dontleavehmode \setupcharacterkerning[letterspace:current][factor=\letterspaceparameter{spacefactor}]% \def\letterspace_setstuff{% \setcharacterkerning[letterspace:current]% \advance \spaceskip \letterspaceparameter{textskip}% \advance \xspaceskip \letterspaceparameter{textskip}% }% \ifhmode\ifnum\lastnodetype=\@@gluenode \unskip{\letterspace_setstuff\ }% \fi \fi% {\letterspace_setstuff\currentobject}% \doifnextspace{% {\letterspace_setstuff\ }% \gobblespacetokens% }% } %D This is a partial ripoff of a couple of macros from %D \type{syst-aux.mkiv}. %D \useURL [flet] [http://www.tug.org/TUGboat/Articles/tb09-3/tb22bechtolsheim.pdf] [] [\type{futurelet}] %D Very helpful for further understanding of what’s exactly going %D on: Stephan von Bechtolsheim’s tutorial on \from[flet]. \def\doifnextspace#1{% \def\!!string{#1}% \futurelet\nexttoken\inspectnexttoken% } \def\inspectnexttoken{% \ifx\nexttoken\blankspace \@EA\!!string \fi% } %D \macros %D {startletterspace,stopletterspace} %D %D These rely even more shamelessly on \from[wschuster]’s code %D from the {\em fancybreak} module. \unexpanded\def\dostartletterspace[#1]{% \edef\currentletterspace{#1}% \dosingleempty\dodostartletterspace% } \def\dodostartletterspace[#1]{% \iffirstargument \setupletterspace[\currentletterspace][#1]% \fi \dododoletterspace\bgroup% } \let\dostopletterspace\egroup %D \macros %D {setupletterspace} %D %D Initial setup. %D Setting the normal inline letterspacing factor %D \type{textfactor} and a separate factor for capital spacing %D \type{capfactor}. \setupletterspace [% capfactor=.05, capskip=.33em, textfactor=.125, textskip=.33em, shortcommands=false, % “true” | “yes” | “yep” -- defaults to “false” ] \defineletterspace[\v!letterspace] \def\letterspace_truestrings{true,yep,yes} \def\letterspace_define_shortcommands{% \doifinset{\letterspaceparameter{shortcommands}}{\letterspace_truestrings}{% \writestatus{letterspace}{enabling short commands}% %\global\let\CS\capitalspace% \global\let\LS\letterspace% }% } \appendtoks \letterspace_define_shortcommands \to \everystarttext \protect \stopmodule \endinput % vim:ft=context:sw=2:ts=2