diff options
Diffstat (limited to 'Master/texmf-dist/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex')
-rw-r--r-- | Master/texmf-dist/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex b/Master/texmf-dist/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex new file mode 100644 index 00000000000..48529f76d1e --- /dev/null +++ b/Master/texmf-dist/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex @@ -0,0 +1,129 @@ +% language=uk + +\startcomponent hybrid-backends + +\environment hybrid-environment + +\startchapter[title={Weird examples}] + +\startsection[title={Introduction}] + +In this chapter I will collect a couple of weird examples. + +\stopsection + +\startsection[title=Inter-character spacing] + +There was a discussion on the \LUATEX\ (dev) list about inter character spacing +and ligatures. The discussion involved a mechanism inherited from \PDFTEX\ but in +\CONTEXT\ we don't use that at all. Actually, support for inter character spacing +was added in an early stage of \MKIV\ development as an alternative for the +\MKII\ variant, which used parsing at the \TEX\ end. Personally I never use this +spacing, unless a design in a project demands it. + +In the \MKIV\ method we split ligatures when its components are known. This works +quite well. It's anyway a good idea to disable ligatures, so it's more a +fallback. Actually we should create components for hard coded characters like +\ae\ but as no one ever complained I leave that for a later moment. + +As we already had the mechanisms in place, support for selective spacing of +ligatures was a rather trivial extension. If there is ever a real need for it, I +will provide control via the normal user interface, but for now using a few hooks +will do. The following code shows an example of an implementation. \footnote {The +examples have been adapted to the latest \CONTEXT\ where we use \type +{\getchar(n)} instead of \type {n.char}.} + +\startbuffer +local utfbyte = utf.byte +local getchar = nodes.nuts.getchar + +local keep = { + [0x0132] = true, [0x0133] = true, -- IJ ij + [0x00C6] = true, [0x00E6] = true, -- AE ae + [0x0152] = true, [0x0153] = true, -- OE oe +} + +function typesetters.kerns.keepligature(n) + return keep[getchar(n)] +end + +local together = { + [utfbyte("c")] = { [utfbyte("k")] = true }, + [utfbyte("i")] = { [utfbyte("j")] = true }, + [utfbyte("I")] = { [utfbyte("J")] = true }, +} + +function typesetters.kerns.keeptogether(n1,n2) + local k = together[getchar(n1)] + return k and k[getchar(n2)] +end +\stopbuffer + +\ctxluabuffer + +\typebuffer + +The following also works: + +\starttyping +local lpegmatch = lpeg.match +local fontdata = fonts.identifiers +local getchar = nodes.nuts.getchar +local getfont = nodes.nuts.getfont + +local keep = -- start of name + lpeg.P("i_j") + + lpeg.P("I_J") + + lpeg.P("aeligature") + + lpeg.P("AEligature") + + lpeg.P("oeligature") + + lpeg.P("OEligature") + +function typesetters.kerns.keepligature(n) + local d = fontdata[getfont(n)].descriptions + local c = d and d[getchar(n)] + local n = c and c.name + return n and lpegmatch(keep,n) +end +\stoptyping + +A more generic solution would be to use the \type {tounicode} information, but it +would be overkill as we're dealing with a rather predictable set of characters +that have gotten \UNICODE\ slots assigned. When using basemode most fonts will +work anyway. + +So, is this really worth the effort? Take a look at the following example. + +\startbuffer +\definecharacterkerning [KernMe] [factor=0.25] + +\start + \setcharacterkerning[KernMe] + \definedfont[Serif*default] + Ach kijk effe, \ae sop draagt een knickerbocker! \par + \definedfont[Serif*smallcaps] + Ach kijk effe, \ae sop draagt een knickerbocker! \par +\stop +\stopbuffer + +\typebuffer + +Typeset this (Dutch text) looks like: + +\getbuffer + +You might wonder why I decided to look into it. Right at the moment when it was +discussed, I was implementing a style that needed the Calibri font that comes +with \MSWINDOWS, and I visited the FontShop website to have a look at the font. +To my surprise it had quite some ligatures, way more than one would expect. + +\placefigure + {Some of the ligatures in Calibri Regular. Just wonder what + intercharacter spacing will do here.} + {\externalfigure[calibri-fontshop.png]} + +\stopsection + +\stopchapter + +\stopcomponent |