summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/spac-chr.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/spac-chr.mkiv')
-rw-r--r--tex/context/base/mkiv/spac-chr.mkiv95
1 files changed, 95 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/spac-chr.mkiv b/tex/context/base/mkiv/spac-chr.mkiv
new file mode 100644
index 000000000..562fb940c
--- /dev/null
+++ b/tex/context/base/mkiv/spac-chr.mkiv
@@ -0,0 +1,95 @@
+%D \module
+%D [ file=spac-chr,
+%D version=2011.05.24, % code moved from core-spa.mkiv
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Characters,
+%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.
+
+\writestatus{loading}{ConTeXt Spacing Macros / Characters}
+
+\unprotect
+
+\registerctxluafile{spac-chr}{1.001}
+
+\definesystemattribute[characters][public]
+
+%D The nobreakspace is special as it needs to keep track of the space being
+%D flexible. Another option is to use space (glue) nodes and tag them as characters
+%D instead. No big deal but takes a moment of coding. So, as a prelude we
+%D tag the nobreakspace only. Interesting is that it also fits better in the
+%D tagging mechanism.
+%D
+%D But we need to do some checking as from then on we no longer can compare
+%D them in a string. So this needs thinking. Not that we can compare the
+%D nobreakspace now anyway.
+
+% \unexpanded\def\specialspacecharacter#1{\begingroup\attribute\charactersattribute#1\ \endgroup}
+%
+% \unexpanded\edef\nobreakspace {\specialspacecharacter{"00A0}} % 1 = left
+% \unexpanded\edef\ideographicspace {\specialspacecharacter{"2000}}
+% \unexpanded\edef\ideographichalffillspace{\specialspacecharacter{"2001}}
+% \unexpanded\edef\twoperemspace {\specialspacecharacter{"2002}}
+% \unexpanded\edef\threeperemspace {\specialspacecharacter{"2004}}
+% \unexpanded\edef\fourperemspace {\specialspacecharacter{"2005}}
+% \unexpanded\edef\sixperemspace {\specialspacecharacter{"2006}}
+% \unexpanded\edef\figurespace {\specialspacecharacter{"2007}}
+% \unexpanded\edef\punctuationspace {\specialspacecharacter{"2008}}
+% \unexpanded\edef\breakablethinspace {\specialspacecharacter{"2009}}
+% \unexpanded\edef\hairspace {\specialspacecharacter{"200A}}
+% \unexpanded\edef\zerowidthspace {\specialspacecharacter{"200B}}
+% \unexpanded\edef\zwnj {\specialspacecharacter{"200C}}
+% \unexpanded\edef\zwj {\specialspacecharacter{"200D}}
+% \unexpanded\edef\narrownobreakspace {\specialspacecharacter{"202F}}
+
+% This does not work as spaceskip is only inserted in the case of raggedleft
+% and we need to be able to figure out all of them. Which makes me wonder ...
+% can't we just always set spaceskip to some value?
+
+% Making them active is also not an option unless we do that in every
+% catcode vector.
+
+% \nobreakspace {\begingroup\setalignstateattribute\normalUchar"00A0\endgroup} % 1 = left
+\edef\nobreakspace {\normalUchar"00A0} % space
+\edef\ideographicspace {\normalUchar"2000} % quad/2
+\edef\ideographichalffillspace{\normalUchar"2001} % quad
+\edef\twoperemspace {\normalUchar"2002} % quad/2
+% % "2003 % quad == \quad == \hskip\emwidth
+\edef\threeperemspace {\normalUchar"2004} % quad/3
+\edef\fourperemspace {\normalUchar"2005} % quad/4
+\edef\sixperemspace {\normalUchar"2006} % quad/6
+\edef\figurespace {\normalUchar"2007} % width of zero
+\edef\punctuationspace {\normalUchar"2008} % width of period
+\edef\breakablethinspace {\normalUchar"2009} % quad/8
+\edef\hairspace {\normalUchar"200A} % quad/8
+\edef\zerowidthspace {\normalUchar"200B} % 0
+\edef\zerowidthnonjoiner {\normalUchar"200C} % 0
+\edef\zerowidthjoiner {\normalUchar"200D} % 0
+\edef\narrownobreakspace {\normalUchar"202F} % quad/8
+% % "205F % space/8 (math)
+% \zerowidthnobreakspace {\normalUchar"FEFF}
+\udef\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint}
+
+\let\zwnj\zerowidthnonjoiner
+\let\zwj \zerowidthjoiner
+\let\nbsp\nobreakspace
+
+\chardef\optionalspace"1F % will be space unless before punctuation
+
+% Shortcuts:
+
+% unexpanded as otherwise we need to intercept / cleanup a lot
+
+\unexpanded\def~{\nobreakspace}
+
+% Goodies:
+
+\unexpanded\def\fiveperemspace{\hskip\dimexpr\emwidth/5\relax}
+
+\protect \endinput
+