%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 ] %C Read the license conditions in the file \type{COPYING}. \writestatus{loading}{ConTeXt User Module / Letterspace} \startmodule [letterspace] \startinterface all \setinterfacevariable {letterspace} {letterspace} \setinterfacevariable {factor} {factor} \setinterfacevariable {spaceskip} {spaceskip} \setinterfacevariable {suppresskern}{suppresskern} \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-rev:3+, ] %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% } \definefontfeature [letterspace:kerning] [kern=yes] \def\letterspace_truevalues{true,yep,yes} \def\dododoletterspace#1{% \def\currentobject{#1}% \dontleavehmode \setupcharacterkerning[letterspace:current][factor=\letterspaceparameter{factor}]% \def\letterspace_setstuff{% \setcharacterkerning[letterspace:current]% \advance \spaceskip \letterspaceparameter{spaceskip}% \advance \xspaceskip \letterspaceparameter{spaceskip}% \doifinset{\letterspaceparameter{suppresskern}}{\letterspace_truevalues}{% \subtractfontfeaturefromfont{letterspace:kerning}% }% }% \ifhmode\ifnum\lastnodetype=\@@gluenode \unskip{\letterspace_setstuff\ }% \fi \fi% {\letterspace_setstuff\currentobject}% % Hans’ macro \doifnextcharelse works a lot better than my % previously defined kludge … \doifnextcharelse{\ }{% {\letterspace_setstuff\ }% \gobblespacetokens% }{}% } %D \macros %D {startletterspace,stopletterspace} %D %D These rely even more shamelessly on \from[wschuster]’s code %D from the {\em fancybreak} module. %D %D The \type{\[start|stop]letterspace} environment is provided %D for sake of completeness. \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 The factor by which the {\em letter space} (i.e. space between %D glyphs) will be increased is specified via the %D \type{factor} key. %D Additionally, it is wise with respect to legibility to enlarge %D the {\em interword space} as well. That is what the %D \type{spaceskip} key is for. The {\em spaceskip} should be an %D ordinary dimension. \setupletterspace [ \v!factor=.125, \v!spaceskip=.5em, \v!suppresskern=false, ] \defineletterspace[\v!letterspace] \protect \stopmodule \endinput % vim:ft=context:sw=2:ts=2