summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/fonts/fonts/fonts-methods.tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-05-29 21:10:47 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-05-29 21:10:47 +0200
commite2658addf306f729945c184e46f98df39dd7026c (patch)
tree0d4b3ec934773cc4e33fa88eda5a8041be2ec36b /doc/context/sources/general/fonts/fonts/fonts-methods.tex
parent8b678f473da7b81842dbc13b50c6303991570521 (diff)
downloadcontext-e2658addf306f729945c184e46f98df39dd7026c.tar.gz
2019-05-29 19:20:00
Diffstat (limited to 'doc/context/sources/general/fonts/fonts/fonts-methods.tex')
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-methods.tex376
1 files changed, 0 insertions, 376 deletions
diff --git a/doc/context/sources/general/fonts/fonts/fonts-methods.tex b/doc/context/sources/general/fonts/fonts/fonts-methods.tex
deleted file mode 100644
index eac86d694..000000000
--- a/doc/context/sources/general/fonts/fonts/fonts-methods.tex
+++ /dev/null
@@ -1,376 +0,0 @@
-% language=uk
-
-\startcomponent fonts-methods
-
-\environment fonts-environment
-
-\startchapter[title=Methods][color=darkyellow]
-
-\startsection[title=Introduction]
-
-A font definition looks as follows:
-
-\starttyping
-\definefont
- [MyFont]
- [namepart method specification size]
-\stoptyping
-
-For example:
-
-\starttyping
-\definefont
- [MyFont]
- [Bold*default at 12.3pt]
-\stoptyping
-
-We have already discussed the namepart and size in a previous chapter and here
-we will focus on the method. The method is represented by a character and although
-we currently only have a few methods there can be many more.
-
-\stopsection
-
-\startsection[title=: (direct features)]
-
-This one is seldom used, but those coming from another macro package to \CONTEXT\
-might use it as first attempt to defining a font.
-
-\starttyping
-\definefont
- [MyFont]
- [Bold:+kern;+liga; at 12.3pt]
-\stoptyping
-
-This is the \XETEX\ way of defining fonts. A \type {+} means as much as
-\quotation {turn on this feature} so you can guess what the minus sign does.
-Alternatively you can use a key/value approach with semicolons as separator. If
-no value is given the value \type {yes} is assumed.
-
-\starttyping
-\definefont
- [MyFont]
- [Bold:kern=yes;liga=yes; at 12.3pt]
-\stoptyping
-
-When we started supporting \XETEX\ we ran into issues with already present
-features of \CONTEXT\ as the \XETEX\ syntax also has some more obscure properties
-using slashes and brackets for signalling a file or name lookup. As in \CONTEXT\
-we prefer a more symbolic approach anyway, it never was a real issue.
-
-\stopsection
-
-\startsection[title=* (symbolic features)]
-
-The most natural way to associate a set of features with a font instance
-is the following:
-
-\starttyping
-\definefont
- [MyFont]
- [Bold*default at 12.3pt]
-\stoptyping
-
-This will use the featureset named \type {default} and this one is defined in
-\type {font-pre.mkiv} which might be worth looking at.
-
-\starttyping
-\definefontfeature
- [always]
- [mode=auto,
- script=auto,
- kern=yes,
- mark=yes,
- mkmk=yes,
- curs=yes]
-
-\definefontfeature
- [default]
- [always]
- [liga=yes,
- tlig=yes,
- trep=yes] % texligatures=yes,texquotes=yes
-
-\definefontfeature
- [smallcaps]
- [always]
- [smcp=yes,
- tlig=yes,
- trep=yes] % texligatures=yes,texquotes=yes
-
-\definefontfeature
- [oldstyle]
- [always]
- [onum=yes,
- liga=yes,
- tlig=yes,
- trep=yes] % texligatures=yes,texquotes=yes
-
-\definefontfeature % == default unless redefined
- [ligatures]
- [always]
- [liga=yes,
- tlig=yes,
- trep=yes]
-
-\definefontfeature % can be used for type1 fonts
- [complete]
- [always]
- [compose=yes,
- liga=yes,
- tlig=yes,
- trep=yes]
-
-\definefontfeature
- [none]
- [mode=none,
- features=no]
-\stoptyping
-
-These definitions show that you can construct feature sets on top of existing
-ones, but keep in mind that they are defined instantly, so any change in the
-parent is not reflected in its kids.
-
-In a font definition you can specify more than one set:
-
-\starttyping
-\definefont
- [MyFont]
- [Bold*always,oldstyle at 12.3pt]
-\stoptyping
-
-\stopsection
-
-\startsection[title=@ (virtual features)]
-
-This method is somewhat special as it demands knowledge of the internals
-of the \CONTEXT\ font code. Much of it is still experimental but it is a
-nice playground. A good example of its usage can be found in the file
-\type {m-punk.mkiv} where we create a font out of \METAPOST\ graphics.
-
-Another example is virtual math. As in the beginning of \LUATEX\ and \MKIV\
-there were only a few \OPENTYPE\ math fonts, and as I wanted to get rid
-of the old mechanisms, it was decided to virtualize the math fonts. For
-instance a Latin Modern Roman 10 point math font can be defined as follows:
-
-\starttyping
-\definefontsynonym
- [LMMathRoman10-Regular]
- [LMMath10-Regular@lmroman10-math]
-\stoptyping
-
-The \type {lmroman10-math} refers to a virtual definition and in this case
-it is one using a built|-|in constructor and therefore we use a goodies
-file to specify the font. That file looks as follows:
-
-\starttyping
-return {
- name = "lm-math",
- version = "1.00",
- comment = "Goodies that complement latin modern math.",
- author = "Hans Hagen",
- copyright = "ConTeXt development team",
- mathematics = {
- ...
- virtuals = {
- ...
- ["lmroman10-math"] = ten,
- ...
- },
- ...
- }
-}
-\stoptyping
-
-Here \type {ten} is a previously defined table:
-
-\startnarrowtyping
-local ten = {
- { name = "lmroman10-regular.otf", features = "virtualmath", main = true },
- { name = "rm-lmr10.tfm", vector = "tex-mr-missing" } ,
- { name = "lmmi10.tfm", vector = "tex-mi", skewchar = 0x7F },
- { name = "lmmi10.tfm", vector = "tex-it", skewchar = 0x7F },
- { name = "lmsy10.tfm", vector = "tex-sy", skewchar = 0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- { name = "stmary10.afm", vector = "tex-mc" },
- { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar = 0x7F } ,
- { name = "lmsans10-regular.otf", vector = "tex-ss", optional = true },
- { name = "lmmono10-regular.otf", vector = "tex-tt", optional = true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional = true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional = true },
-}
-\stopnarrowtyping
-
-This says as much as: take \type {lmroman10-regular.otf} as starting point
-and overload slots with ones found in the following fonts. The vectors are
-predefined as they are shared with other font sets like \type {px} and
-\type {tx}.
-
-In due time more virtual methods might end up in \CONTEXT\ because they are
-a convenient way to extend or manipulate fonts.
-
-\stopsection
-
-\startsection[title=Lua fonts]
-
-You can define a font in \LUA. In the process you can use all kind of helper
-functions that \CONTEXT\ provides. Here is an example:
-
-\typefile{fonts-demo-rule.lua}
-
-This code is stored in \type {fonts-demo-rule.lua} and we can load that font
-in the usual way, by specifying a filename:
-
-\startbuffer
-\definefont
- [MyRuleFont]
- [file:fonts-demo-rule.lua*default sa 1]
-\stopbuffer
-
-\typebuffer
-
-\getbuffer
-
-{\MyRuleFont So when we use it we get text typeset where all vowels are replaced
-by rules. The actualtext injection (in theory) makes it possible to cut and paste
-the text from the \PDF\ document but while writing this (mid 2016) a {\maincolor
-\type {mupdf}} based viewer couldn't handle it and {\maincolor \type {acrobat}}
-had problems with spaces.}
-
-\startbuffer
-\definefontfeature
- [myrulefont]
- [default]
- [original=file:texgyrepagella-regular.otf]
-\definefont
- [MyRuleFont]
- [file:fonts-demo-rule.lua*myrulefont]
-\stopbuffer
-
-\typebuffer
-
-\getbuffer
-
-{\showfontkerns \MyRuleFont The previous code demonstrates how we can pass a
-fontname to be used as base to the generator. In case you wonder how features
-behave with such fonts: as you can see here, font kerns are indeed injected.
-Compared to {\maincolor \type {Dejavu}}, the {\maincolor \type {Pagella}} font
-has quite some more kerns.}
-
-\startbuffer
-\definefontfeature
- [myrulefont]
- [default]
- [original=file:texgyrepagella-regular.otf,
- option=line]
-\definefont
- [MyRuleFont]
- [file:fonts-demo-rule.lua*myrulefont]
-\stopbuffer
-
-\typebuffer
-
-\getbuffer
-
-{\MyRuleFont Here we show how the passed {\maincolor \type {option}} is handled.
-Because we no longer have a relationship with the height and depth, the real text
-is a bit harder to guess.}
-
-\stopsection
-
-\startsection[title=Old fuzzy fonts]
-
-Most natural is to use \OPENTYPE\ or \TYPEONE\ fonts. In the case of \TYPEONE\ a
-matching pair of \type {afm} and \type {pfb} files is needed. However, there can
-be situations where there is only a \type{tfm} and \type {pfb} file (or not even
-that: just a bitmap file).
-
-I will not show specimen here, simply because I don't have (nor want to have) the
-fonts needed in my development and production environments. The implementation
-was tested with a specific czech computer modern font.
-
-In a traditional (8 bit) setup we have an \type {tfm} file, a \type {pfb} file
-and a \type {enc file}. The order of the characters in the \type {tfm} file
-directly relates to the input encoding. The \type {enc} file relates that order
-to the order in the \type {pfb} file. The mapping from input encoding to font
-shape encoding happens via glyph names. In the \type {map} file we tell what
-\type {pfb} file to use with what \type {enc} file.
-
-However, in the case of the \type {csr.tfm} and \type {csr.pfb} file it looks
-like in practice the \type {enc} file is not used, probably because in the \type
-{pfb} file the standard encoding matches the order in the \type {tfm} file. This
-is of course a rather dangerous assumption, especially if information lacks to
-check it.
-
-The next example definitions demonstrate several paths to go from \UNICODE\ input
-(source file) to rendered shapes. As this is mostly meant for generic usage we
-use the low level definition code (\CONTEXT\ users are not supposed to use that
-method).
-
-\starttyping
-\font\foo=file:csr10.tfm:reencode=auto;mode=node;liga=yes;kern=yes
-\stoptyping
-
-This is the easiest way. We use the \type {tfm} file for dimensions, ligatures
-and kerns. The \type {auto} option will use the \type {pfb} file to identify the
-right mapping. We enable ligatures and kerns and we use node mode. This indicates
-that we're dealing with a pseudo \OPENTYPE\ setup here. You can provide a \type
-{pfb} file with the \type {pfbfile} feature in case the name differes from the
-\type {tfm} file.
-
-\starttyping
-\font\foo=file:csr10.tfm:reencode=csr.enc;mode=node;liga=yes;kern=yes
-\stoptyping
-
-Now we use the \type {enc} file for the encoding vector but we still need the
-\type {pfb} file for mapping that onto the right shape. You probably can best use
-\type {auto} instead.
-
-\starttyping
-\font\foo=file:csr10.tfm:reencode=csr.enc;bitmap=yes;mode=node;liga=yes;kern=yes
-\stoptyping
-
-Here we force bitmap shapes. This is a bit tricky as a different code path is
-followed in the backend. Unless the situation is too confusing, a proper \type
-{ToUnicode} is included in the output, so that cut and paste works all right,
-given that the viewer is able to deal with it (always use \ACROBAT\ as
-reference).
-
-Why do we need modes and|/|or to simulate \OPENTYPE\ behaviour? Indeed it seldom
-makes sense with \type {tfm} files but in this particular case teh font has a
-quote cheat.
-
-\starttyping
-\startluacode
- fonts.handlers.otf.addfeature {
- name = "czechdqcheat",
- type = "substitution",
- data = {
- quotedblright = "csquotedblright",
- },
- }
-\stopluacode
-\stoptyping
-
-We could make this a language specific feature but as this font is not meant for
-other languages it makes no sense to do so. This feature is enabled with:
-
-\starttyping
-czechdqcheat=yes
-\stoptyping
-
-This will replace one quote by another with different side bearings. Of course a
-properly bounded quote with proper kerning makes much more sense. A test case is:
-
-\starttyping
-\quotedblleft X\quotedblright
-\quotedblright X\quotedblleft
-\stoptyping
-
-\stopsection
-
-\stopchapter
-
-\stopcomponent