summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--t-letterspace.mkiv130
1 files changed, 130 insertions, 0 deletions
diff --git a/t-letterspace.mkiv b/t-letterspace.mkiv
new file mode 100644
index 0000000..1a9b862
--- /dev/null
+++ b/t-letterspace.mkiv
@@ -0,0 +1,130 @@
+%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
+
+\definenamespace [letterspace] [
+ command=yes,
+ comment=Letterspacing module,
+ name=letterspace,
+ parent=letterspace,
+ setup=list,
+ style=no,
+ type=module,
+ version=hg,
+]
+
+\unprotect
+
+%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”
+]
+
+%D Defining two letterspace settings.
+
+\definecharacterkerning [textspace]
+\definecharacterkerning [capspace]
+
+\setupcharacterkerning [textspace] [factor=\letterspaceparameter{textfactor}]
+\setupcharacterkerning [capspace] [factor=\letterspaceparameter{capfactor}]
+
+\unexpanded\def\letterspace_letterspace#1{%
+ \letterspace_do_letterspace{l}{#1}%
+}
+
+\unexpanded\def\letterspace_capitalspace#1{%
+ \letterspace_do_letterspace{c}{#1}%
+}
+
+\let \letterspace\letterspace_letterspace
+\let\capitalspace\letterspace_capitalspace
+
+\def\letterspace_do_letterspace#1#2{%
+ \doif{#1}{l}{%
+ \let\currentletterspacecmd\letterspace_dodo_letterspace%
+ }%
+ \doif{#1}{c}{%
+ \let\currentletterspacecmd\letterspace_dodo_capitalspace%
+ }%
+ \ifhmode\ifnum\lastnodetype=\@@gluenode
+ \unskip{\currentletterspacecmd\ }%
+ \fi
+ \fi%
+ {\currentletterspacecmd#2}%
+ \doifnextspace{%
+ {\currentletterspacecmd\ }%
+ \gobblespacetokens%
+ }%
+}
+
+\def\letterspace_dodo_letterspace{%
+ \dontleavehmode \setcharacterkerning[textspace]%
+ \advance \spaceskip \letterspaceparameter{textskip}%
+ \advance \xspaceskip \letterspaceparameter{textskip}%
+}%
+
+\def\letterspace_dodo_capitalspace{%
+ \dontleavehmode \setcharacterkerning[capspace]%
+ \advance \spaceskip \letterspaceparameter{capskip}%
+ \advance \xspaceskip \letterspaceparameter{capskip}%
+}%
+
+%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%
+}
+
+\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
+