summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/manuals
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-08-01 13:39:31 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-08-01 13:39:31 +0200
commitc44a9d2f89620e439f335029689e7f0dff9516b7 (patch)
tree1062a464cb13362d82598c41c437ab1c7eb4f236 /doc/context/sources/general/manuals
parent665f9095475ffcd1c8750546727c75e5486a266f (diff)
downloadcontext-c44a9d2f89620e439f335029689e7f0dff9516b7.tar.gz
2016-08-01 13:07:00
Diffstat (limited to 'doc/context/sources/general/manuals')
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-000.tex63
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-001.tex17
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-002.tex17
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-003.tex35
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-004.tex32
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-005.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-006.tex35
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-007.tex43
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-101.tex30
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-102.tex36
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-103.tex37
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-201.tex31
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-202.tex32
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-203.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-204.tex41
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-205.tex42
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-206.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-301.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-401.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-402.tex24
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-403.tex23
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-404.tex34
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-405.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-601.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-701.tex23
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-702.tex27
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-703.tex34
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-704.tex69
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-801.tex19
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-802.tex22
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-803.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-804.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-805.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-806.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-901.tex38
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-902.tex38
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-903.tex41
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets.tex873
-rw-r--r--doc/context/sources/general/manuals/epub/epub-mkiv-demo.tex43
-rw-r--r--doc/context/sources/general/manuals/epub/epub-mkiv.tex466
-rw-r--r--doc/context/sources/general/manuals/languages/languages-appendix.tex48
-rw-r--r--doc/context/sources/general/manuals/languages/languages-basics.tex348
-rw-r--r--doc/context/sources/general/manuals/languages/languages-environment.tex15
-rw-r--r--doc/context/sources/general/manuals/languages/languages-goodies.tex138
-rw-r--r--doc/context/sources/general/manuals/languages/languages-hyphenation.tex876
-rw-r--r--doc/context/sources/general/manuals/languages/languages-introduction.tex69
-rw-r--r--doc/context/sources/general/manuals/languages/languages-labels.tex141
-rw-r--r--doc/context/sources/general/manuals/languages/languages-mkiv.tex61
-rw-r--r--doc/context/sources/general/manuals/languages/languages-numbering.tex307
-rw-r--r--doc/context/sources/general/manuals/languages/languages-sorting.tex235
-rw-r--r--doc/context/sources/general/manuals/lua/lua-mkiv.tex139
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-contents.tex20
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-enhancements.tex892
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-fonts.tex719
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-introduction.tex121
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-languages.tex770
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-logos.tex19
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-lua.tex572
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-math.tex1049
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-modifications.tex1220
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-nodes.tex1915
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-style.tex362
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-titlepage.tex70
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex.tex40
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-contents.tex11
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-cover.tex199
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-environment.tex325
-rw-r--r--doc/context/sources/general/manuals/manuals-xml-environment.tex385
-rw-r--r--doc/context/sources/general/manuals/math/math-framing-001.tex113
-rw-r--r--doc/context/sources/general/manuals/math/math-mkiv.tex58
-rw-r--r--doc/context/sources/general/manuals/math/math-spacing-001.tex73
-rw-r--r--doc/context/sources/general/manuals/mcommon.tex210
-rw-r--r--doc/context/sources/general/manuals/readme/mreadme.tex390
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-contents.tex9
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-introduction.tex19
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex108
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-mkiv.tex16
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-style.tex55
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-titlepage.tex37
-rw-r--r--doc/context/sources/general/manuals/sql/sql-mkiv.tex492
-rw-r--r--doc/context/sources/general/manuals/start/cont-en-extra.xml749
-rw-r--r--doc/context/sources/general/manuals/start/en/hasseltbook.bib7
-rw-r--r--doc/context/sources/general/manuals/start/en/hasseltbook.pdfbin0 -> 17205 bytes
-rw-r--r--doc/context/sources/general/manuals/start/en/hasseltbook.tex30
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex73
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex40
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex63
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex77
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex64
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex71
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex154
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex16
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex94
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex55
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex94
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex117
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex106
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex79
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex258
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex299
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex99
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex58
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex144
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex46
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex53
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex135
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex310
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex33
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex297
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex241
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex100
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex524
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex330
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex75
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex45
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex93
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex208
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex280
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex38
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex44
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex148
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex83
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex41
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex54
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex71
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex60
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex133
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex17
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex89
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex385
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex174
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex163
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex55
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex32
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex101
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex68
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex1079
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en.pdfbin0 -> 2843652 bytes
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-en.tex86
-rw-r--r--doc/context/sources/general/manuals/start/en/ma-cb-language.tex21
-rw-r--r--doc/context/sources/general/manuals/start/en/sounds-001.tex34
-rw-r--r--doc/context/sources/general/manuals/start/graphics/cow.pdfbin0 -> 5526 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md830
-rw-r--r--doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf527
-rw-r--r--doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md1371
-rw-r--r--doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf1216
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps2799
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp1282
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdfbin0 -> 13318 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-01.pngbin0 -> 174703 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-03.pngbin0 -> 170986 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-04.pngbin0 -> 174074 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-07.pngbin0 -> 175370 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-08.pngbin0 -> 183539 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-12.pngbin0 -> 163156 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-13.pngbin0 -> 227362 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-15.pngbin0 -> 257643 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-16.pngbin0 -> 193612 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-18.pngbin0 -> 140723 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-19.pngbin0 -> 193286 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-20.pngbin0 -> 158057 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-21.pngbin0 -> 169516 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-22.pngbin0 -> 239855 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-23.pngbin0 -> 154869 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-24.pngbin0 -> 164197 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-25.pngbin0 -> 175417 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/ma-cb-26.pngbin0 -> 206368 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/minibook-en.pdfbin0 -> 11889 bytes
-rw-r--r--doc/context/sources/general/manuals/start/graphics/minibook-en.tex20
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex7
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-colofon.tex95
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-copyright.tex41
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-graphics.tex266
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-links.tex268
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-screen.tex201
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb-style.tex678
-rw-r--r--doc/context/sources/general/manuals/start/ma-cb.tex17
-rw-r--r--doc/context/sources/general/manuals/steps/steps-mkiv.tex655
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpgbin0 -> 15689 bytes
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdfbin0 -> 20433 bytes
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pngbin0 -> 46978 bytes
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex352
-rw-r--r--doc/context/sources/general/manuals/templates/templates-mkiv.tex283
-rw-r--r--doc/context/sources/general/manuals/tiptrick/tiptrick.tex117
-rw-r--r--doc/context/sources/general/manuals/tiptrick/tiptrick.xml53
-rw-r--r--doc/context/sources/general/manuals/tools/tools-mkiv.tex511
-rw-r--r--doc/context/sources/general/manuals/units/units-mkiv.tex538
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-contents.tex13
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-graphics.tex157
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-injectors.tex102
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-introduction.tex25
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-mkiv.tex32
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-resources.tex156
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-setups.tex72
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-style.tex49
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-suspects.tex54
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-titlepage.tex37
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-xml.tex96
-rw-r--r--doc/context/sources/general/manuals/xml/xml-mkiv-01.xml15
-rw-r--r--doc/context/sources/general/manuals/xml/xml-mkiv-02.xml15
-rw-r--r--doc/context/sources/general/manuals/xml/xml-mkiv.tex3812
-rw-r--r--doc/context/sources/general/manuals/xtables/xtables-mkiv.tex1235
202 files changed, 41705 insertions, 0 deletions
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-000.tex b/doc/context/sources/general/manuals/columnsets/columnsets-000.tex
new file mode 100644
index 000000000..429a067de
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-000.tex
@@ -0,0 +1,63 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[visual]
+\usemodule[simulate]
+
+\dontcomplain
+
+\startenvironment columnsets-000
+
+\useMPlibrary[dum]
+
+\setupbodyfont
+ [palatino]
+
+\setuplayout
+ [grid=yes]
+
+\setuplayout
+ [backspace=20mm,
+ cutspace=15mm,
+ width=middle,
+ height=middle]
+
+\setupsystem
+ [random=1234]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupheadertexts
+ [pagenumber][right]
+ [left][pagenumber]
+
+\setupfootertexts
+ [\inputfilename]
+
+\setupfooter
+ [style=\tttf]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+\definecolor[color-1][.5(red,green)]
+\definecolor[color-2][.5(green,blue)]
+\definecolor[color-3][.5(blue,red)]
+\definecolor[color-4][.5(white,black)]
+\definecolor[color-5][.5(white,color-4)]
+
+\startuniqueMPgraphic{frame}
+ fill OverlayBox withcolor \MPcolor{color-1} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{contrast}
+ fill OverlayBox withcolor \MPcolor{color-3} ;
+\stopuniqueMPgraphic
+
+\defineoverlay[frame] [\uniqueMPgraphic{frame}]
+\defineoverlay[contrast][\uniqueMPgraphic{contrast}]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-001.tex b/doc/context/sources/general/manuals/columnsets/columnsets-001.tex
new file mode 100644
index 000000000..689f4e044
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-001.tex
@@ -0,0 +1,17 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{20}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-002.tex b/doc/context/sources/general/manuals/columnsets/columnsets-002.tex
new file mode 100644
index 000000000..a67dd3161
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-002.tex
@@ -0,0 +1,17 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][nleft=3,nright=2,width=5cm]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-003.tex b/doc/context/sources/general/manuals/columnsets/columnsets-003.tex
new file mode 100644
index 000000000..eed0286f8
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-003.tex
@@ -0,0 +1,35 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2,page=left]
+
+\setupbackgrounds[text][background=color,backgroundcolor=color-1]
+
+\setupcolumnsetstart[example][1][1][2]
+\setupcolumnsetstart[example][1][2][4]
+\setupcolumnsetstart[example][2][1][6]
+\setupcolumnsetstart[example][2][2][6]
+\setupcolumnsetstart[example][3][1][4]
+\setupcolumnsetstart[example][3][2][2]
+
+\setupcolumnsetlines[example][1][1][-2]
+\setupcolumnsetlines[example][1][2][-4]
+\setupcolumnsetlines[example][2][1][-6]
+\setupcolumnsetlines[example][2][2][-6]
+\setupcolumnsetlines[example][3][1][-4]
+\setupcolumnsetlines[example][3][2][-2]
+\setupcolumnsetlines[example][4][1][4]
+\setupcolumnsetlines[example][4][2][10]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{20}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-004.tex b/doc/context/sources/general/manuals/columnsets/columnsets-004.tex
new file mode 100644
index 000000000..a58ddf621
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-004.tex
@@ -0,0 +1,32 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide] [n=2,background=contrast,color=white]
+\definecolumnsetspan[wider][n=4,background=contrast,color=white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wider]
+ wider: \dorecurse{2}{#1: \fakewords{25}{50}\par}
+ \stopcolumnsetspan
+
+ inbetween: \fakewords{25}{50}\par
+
+ \startcolumnsetspan[wide]
+ wide : \dorecurse{2}{#1: \fakewords{25}{50}\par}
+ \stopcolumnsetspan
+
+ after: \dorecurse{15}{#1: \fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-005.tex b/doc/context/sources/general/manuals/columnsets/columnsets-005.tex
new file mode 100644
index 000000000..f1d970d9e
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-005.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\definecolor[fakerulecolor]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wide][default=btlr]
+
+ \startsimplecolumns
+ \dorecurse{2}{\fakewords{25}{40}\par}
+ \stopsimplecolumns
+
+ \stopcolumnsetspan
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-006.tex b/doc/context/sources/general/manuals/columnsets/columnsets-006.tex
new file mode 100644
index 000000000..033619970
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-006.tex
@@ -0,0 +1,35 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \fakewords{25}{50}
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \startcolumnsetspan[wide][default=btrl]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-007.tex b/doc/context/sources/general/manuals/columnsets/columnsets-007.tex
new file mode 100644
index 000000000..137a414d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-007.tex
@@ -0,0 +1,43 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\starttext
+
+\startbuffer
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \fakewords{25}{50}
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \startcolumnsetspan[wide][default=btrl]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \dorecurse{3}{\fakewords{100}{200}\par}
+
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse{4}{\getbuffer}
+
+ \dorecurse{5}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-101.tex b/doc/context/sources/general/manuals/columnsets/columnsets-101.tex
new file mode 100644
index 000000000..f9c7b59cb
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-101.tex
@@ -0,0 +1,30 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startbuffer
+\fakewords{100}{200}
+\placefigure
+ {}
+ {\externalfigure[placeholder][width=\columnsetspanwidth{1}]}
+\fakewords{100}{200}
+\placefigure
+ {}
+ {\externalfigure[placeholder][width=\columnsetspanwidth{2}]}
+\fakewords{100}{200}
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse {5}{\getbuffer}
+ \dorecurse{10}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-102.tex b/doc/context/sources/general/manuals/columnsets/columnsets-102.tex
new file mode 100644
index 000000000..3cf4dcd0e
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-102.tex
@@ -0,0 +1,36 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startbuffer
+\placefigure [tbrl]
+ {tblr}
+ {\externalfigure[fake][width=\columnsetspanwidth{1},lines=5]}
+\placefigure [fxtb:6*4]
+ {fxtb}
+ {\externalfigure[fake][width=\columnsetspanwidth{2},lines=5]}
+\placefigure [btlr]
+ {btlr}
+ {\externalfigure[fake][width=\columnsetspanwidth{2},lines=5]}
+\placefigure [btlr]
+ {btlr}
+ {\externalfigure[fake][width=\columnsetspanwidth{3},lines=5]}
+
+\dorecurse {5} {
+ \fakewords{100}{200}\par
+}
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse{6}{\getbuffer}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-103.tex b/doc/context/sources/general/manuals/columnsets/columnsets-103.tex
new file mode 100644
index 000000000..f1d4dbedc
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-103.tex
@@ -0,0 +1,37 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startcolumnset[example]
+
+\useexternalfigure[fake][fake][width=\textwidth,lines=3]
+
+\placefigure[btlr]{brlr}{\externalfigure[fake]}
+\placefigure[btlr]{brlr}{\externalfigure[fake]}
+\placefigure[btrl]{btrl}{\externalfigure[fake]}
+\placefigure[btrl]{btrl}{\externalfigure[fake]}
+\placefigure[tblr]{tblr}{\externalfigure[fake]}
+\placefigure[tblr]{tblr}{\externalfigure[fake]}
+\placefigure[tbrl]{tbrl}{\externalfigure[fake]}
+\placefigure[tbrl]{tbrl}{\externalfigure[fake]}
+
+\placefigure[lrbt]{lrbt}{\externalfigure[fake]}
+\placefigure[lrbt]{lrbt}{\externalfigure[fake]}
+\placefigure[lrtb]{lrtb}{\externalfigure[fake]}
+\placefigure[lrtb]{lrtb}{\externalfigure[fake]}
+\placefigure[rlbt]{rlbt}{\externalfigure[fake]}
+\placefigure[rlbt]{rlbt}{\externalfigure[fake]}
+\placefigure[rltb]{rltb}{\externalfigure[fake]}
+\placefigure[rltb]{rltb}{\externalfigure[fake]}
+
+\dorecurse{10}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-201.tex b/doc/context/sources/general/manuals/columnsets/columnsets-201.tex
new file mode 100644
index 000000000..37b26c391
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-201.tex
@@ -0,0 +1,31 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one]
+ [type=both,
+ x=1,y=1,nx=2,ny=6,
+ background=contrast,
+ state=repeat]
+
+\definecolumnsetarea
+ [two]
+ [type=both,
+ x=4,y=10,nx=1,ny=6,
+ background=contrast,
+ state=repeat]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{40}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-202.tex b/doc/context/sources/general/manuals/columnsets/columnsets-202.tex
new file mode 100644
index 000000000..1721d9cbc
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-202.tex
@@ -0,0 +1,32 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one][left]
+ [x=1,y=1,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\definecolumnsetarea
+ [two][right]
+ [x=3,y=1,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\definecolumnsetarea
+ [three][both]
+ [x=2,y=10,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-203.tex b/doc/context/sources/general/manuals/columnsets/columnsets-203.tex
new file mode 100644
index 000000000..6c15578bc
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-203.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one]% [left]
+ [x=1,y=1,nx=6,ny=6,
+ background=contrast,state=start]
+
+\definecolumnsetarea
+ [two]%[left]
+ [x=3,y=10,nx=4,ny=6,
+ background=contrast,state=start]
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{50}{100}}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-204.tex b/doc/context/sources/general/manuals/columnsets/columnsets-204.tex
new file mode 100644
index 000000000..d390f468e
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-204.tex
@@ -0,0 +1,41 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[oldfun]
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,
+ color=white,
+ align={lohi,right},
+ state=start]
+
+\setupcolumnsetareatext
+ [title]
+ [\setups{the title}]
+
+\startsetups[the title]
+
+ \GapText
+ {\dimexpr\makeupwidth+\backspace\relax}
+ {6pt}
+ {RegularBold*default} {sa 4}
+ {A Title Spanni\+ng 2 Pages}
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-205.tex b/doc/context/sources/general/manuals/columnsets/columnsets-205.tex
new file mode 100644
index 000000000..b53709770
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-205.tex
@@ -0,0 +1,42 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[oldfun]
+
+\environment columnsets-000
+
+\unprotected \def\SpreadGapText#1#2{{\def\+{\blackrule[\c!width=#1]}#2}}
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,
+ color=white,
+ align={lohi,right},
+ state=start]
+
+\setupcolumnsetareatext
+ [title]
+ [\setups{the title}]
+
+\startsetups[the title]
+
+ \GapText
+ {\dimexpr(\makeupwidth+\backspace)} {6pt}
+ {RegularBold} {sa 4}
+ {A Title Spanni\+ng 2 Pages}
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-206.tex b/doc/context/sources/general/manuals/columnsets/columnsets-206.tex
new file mode 100644
index 000000000..8b9f524b1
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-206.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [first]
+ [x=2,y=4,nx=2,ny=8,
+ background=contrast,
+ state=start]
+
+\definecolumnsetarea
+ [second]
+ [x=1,y=20,nx=1,ny=3,
+ background=contrast,
+ state=start]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{50}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-301.tex b/doc/context/sources/general/manuals/columnsets/columnsets-301.tex
new file mode 100644
index 000000000..4d21f2b02
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-301.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4]
+
+\starttext
+
+\startcolumnset[example]
+
+ 1: \fakewords{50}{75} \column
+ 2: [] \fakewords{50}{75} \column[yes]
+ 3: [yes] \fakewords{50}{75} \column[page]
+ \column[page] % redundant
+ 4: [page] \fakewords{50}{75} \column[3]
+ 5: [3] \fakewords{50}{75} \column[4]
+ 6: [4] \fakewords{50}{75} \column[first]
+ 7: [first] \fakewords{50}{75} \column[last]
+ 8: [last] \fakewords{50}{75} \page
+ 9: (page) \fakewords{50}{75} \page
+ \page % redundant
+ 10: (page) \fakewords{50}{75} \column[3*5]
+ 11: [3*5] \fakewords{50}{75}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-401.tex b/doc/context/sources/general/manuals/columnsets/columnsets-401.tex
new file mode 100644
index 000000000..ee91e608c
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-401.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:2][distance=36pt]
+\setupcolumnset[example:3][distance=72pt]
+\setupcolumnset[example:4][distance=24pt]
+\setupcolumnset[example:5][distance=48pt]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-402.tex b/doc/context/sources/general/manuals/columnsets/columnsets-402.tex
new file mode 100644
index 000000000..00db6017c
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-402.tex
@@ -0,0 +1,24 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[example] [distance=24pt]
+\setupcolumnset[example:1][distance=96pt]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-403.tex b/doc/context/sources/general/manuals/columnsets/columnsets-403.tex
new file mode 100644
index 000000000..c9bc2e648
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-403.tex
@@ -0,0 +1,23 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example][width=.15\makeupwidth]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-404.tex b/doc/context/sources/general/manuals/columnsets/columnsets-404.tex
new file mode 100644
index 000000000..05a25acfe
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-404.tex
@@ -0,0 +1,34 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[frame=on,framecolor=color-4,rulethickness=1mm]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:1][width=2cm]
+\setupcolumnset[example:2][width=4cm]
+\setupcolumnset[example:3][width=3cm]
+
+\setupcolumnset[example:4][width=3cm]
+\setupcolumnset[example:5][width=4cm]
+\setupcolumnset[example:6][width=6cm]
+
+\starttext
+
+\startcolumnset[example]
+
+\dorecurse{15}{
+ \dorecurse{3}{\fakewords{10}{15}\par}
+ \column[yes]
+}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-405.tex b/doc/context/sources/general/manuals/columnsets/columnsets-405.tex
new file mode 100644
index 000000000..fa20ef34c
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-405.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[frame=on,framecolor=color-4,rulethickness=1mm]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:1][width=.3\makeupwidth]
+
+\starttext
+
+\startcolumnset[example]
+
+ \fakewords{150}{150}
+ \column
+ \fakewords{25}{50}
+
+ \dorecurse{25}{\fakewords{50}{75}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-601.tex b/doc/context/sources/general/manuals/columnsets/columnsets-601.tex
new file mode 100644
index 000000000..b139210f4
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-601.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left,direction=reverse]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][color-1]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{50}{
+ \dontleavehmode
+ \snaptogrid\hbox
+ {\scale[height=2.5\lineheight]{\color[white]{#1}}}%
+ \space
+ \fakewords{30}{60}
+ %\simulatewords[n=30,m=60,min=1,max=5,color=color-1,line=yes]\par
+ \par
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-701.tex b/doc/context/sources/general/manuals/columnsets/columnsets-701.tex
new file mode 100644
index 000000000..b2c50cfaf
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-701.tex
@@ -0,0 +1,23 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-702.tex b/doc/context/sources/general/manuals/columnsets/columnsets-702.tex
new file mode 100644
index 000000000..5b9a879c1
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-702.tex
@@ -0,0 +1,27 @@
+content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupcolumnset
+ [example]
+ [background=contrast,
+ backgroundoffset=4pt,
+ frame=on,
+ framecolor=white,
+ rulethickness=2pt]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-703.tex b/doc/context/sources/general/manuals/columnsets/columnsets-703.tex
new file mode 100644
index 000000000..549b49f61
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-703.tex
@@ -0,0 +1,34 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title][left]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,state=repeat]
+
+\setupcolumnsetareatext
+ [title][left][\setups{cow}]
+
+\startsetups[cow]
+
+ \externalfigure
+ [cow.pdf]
+ [height=15\lineheight,
+ width=2\dimexpr\makeupwidth+\backspace\relax]
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-704.tex b/doc/context/sources/general/manuals/columnsets/columnsets-704.tex
new file mode 100644
index 000000000..7fa6cb313
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-704.tex
@@ -0,0 +1,69 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\startuseMPgraphic{mpos:par:columns}
+ path p ; numeric h ;
+ for i=1 upto nofmultipars :
+ p := multipars[i] ;
+ h := bbheight(p) ;
+ if multikind[i] = "single" :
+ fill p topenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-1} shadedinto white ;
+ fill p bottomenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-1} ;
+ elseif multikind[i] = "first" :
+ fill p
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-2} shadedinto white ;
+ elseif multikind[i] = "middle" :
+ fill p topenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-2} shadedinto white ;
+ fill p bottomenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-3} ;
+ elseif multikind[i] = "last" :
+ fill p
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-3} ;
+ fi ;
+ endfor ;
+\stopuseMPgraphic
+
+\definecolumnset
+ [example]
+ [n=4,
+ page=left]
+
+\definetextbackground
+ [shade]
+ [location=paragraph,
+ mp=mpos:par:columns,
+ before=\blank,
+ after=\blank]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse {40} {
+ \starttextbackground[shade]
+ \fakewords{10}{200}
+ \stoptextbackground
+ \par
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-801.tex b/doc/context/sources/general/manuals/columnsets/columnsets-801.tex
new file mode 100644
index 000000000..1a84f99ab
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-801.tex
@@ -0,0 +1,19 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2]
+\definecolumnset [example-2] [n=3]
+
+\starttext \showgrid
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-802.tex b/doc/context/sources/general/manuals/columnsets/columnsets-802.tex
new file mode 100644
index 000000000..a126d0012
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-802.tex
@@ -0,0 +1,22 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-803.tex b/doc/context/sources/general/manuals/columnsets/columnsets-803.tex
new file mode 100644
index 000000000..58a278bb1
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-803.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetlines[example-2][1][1][19]
+ \setupcolumnsetlines[example-2][1][2][18]
+ \setupcolumnsetlines[example-2][1][3][19]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-804.tex b/doc/context/sources/general/manuals/columnsets/columnsets-804.tex
new file mode 100644
index 000000000..c2b7a6b1e
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-804.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetlines[example-2][1][1] [0]
+ \setupcolumnsetlines[example-2][1][2][-2]
+ \setupcolumnsetlines[example-2][1][3] [0]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {6}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-805.tex b/doc/context/sources/general/manuals/columnsets/columnsets-805.tex
new file mode 100644
index 000000000..fc80e7e9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-805.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetstart[example-2][1][1][19]
+ \setupcolumnsetstart[example-2][1][2][17]
+ \setupcolumnsetstart[example-2][1][3][19]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-806.tex b/doc/context/sources/general/manuals/columnsets/columnsets-806.tex
new file mode 100644
index 000000000..0322a336f
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-806.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetstart[example-2][1][1][29]
+ \setupcolumnsetstart[example-2][1][2][29]
+ \setupcolumnsetstart[example-2][1][3][29]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-901.tex b/doc/context/sources/general/manuals/columnsets/columnsets-901.tex
new file mode 100644
index 000000000..300458bf5
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-901.tex
@@ -0,0 +1,38 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-902.tex b/doc/context/sources/general/manuals/columnsets/columnsets-902.tex
new file mode 100644
index 000000000..fda2969af
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-902.tex
@@ -0,0 +1,38 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-903.tex b/doc/context/sources/general/manuals/columnsets/columnsets-903.tex
new file mode 100644
index 000000000..68cd31ae2
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets-903.tex
@@ -0,0 +1,41 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setupblank
+ [line]
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets.tex b/doc/context/sources/general/manuals/columnsets/columnsets.tex
new file mode 100644
index 000000000..7d68872ef
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets.tex
@@ -0,0 +1,873 @@
+% engine=luatex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\dontcomplain
+
+\definepagebreak[mine][yes]
+
+% A complete otf optima pack is too expensive for this (I only have the
+% type one set).
+%
+% \usetypescriptfile
+% [type-ghz]
+%
+% \usetypescript
+% [sans]
+% [optima-nova]
+%
+% \setupbodyfont
+% [optima-nova,11pt]
+%
+% \definefont[QuiteLarge][SansBold sa 3]
+% \definefont[NotSoLarge][SansBold sa 1.5]
+%
+% So we could use:
+%
+% \setupbodyfont
+% [pagella,11pt]
+%
+% \definefont[QuiteLarge][Bold sa 2.50]
+% \definefont[NotSoLarge][Bold sa 1.25]
+%
+% But this one has a matching sans:
+
+\setupbodyfont
+ [dejavu,11pt]
+
+\definefont[QuiteLarge][SansBold sa 2.50]
+\definefont[NotSoLarge][SansBold sa 1.25]
+
+\setuplayout
+ [backspace=.1\paperwidth,
+ topspace=.025\paperheight,
+ header=0.025\paperheight,
+ footer=0.025\paperheight,
+ headerdistance=0.025\paperheight,
+ footerdistance=0.025\paperheight,
+ width=middle,
+ height=middle]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupwhitespace
+ [line]
+
+\setupblank
+ [line]
+
+\setuptyping
+ [blank=halfline]
+
+\startsetups [pagenumber]
+ \hbox to .2\paperwidth {
+ \hss
+ Page \pagenumber
+ \hss
+ }
+\stopsetups
+
+\setupfooter [before=\vfill,after=\vfill,style=\bf,color=color-4]
+\setupheader [before=\vfill,after=\vfill,style=\bf,color=color-4]
+
+\setupfootertexts [] [\setups{pagenumber}]
+\setupheadertexts [] [\setups{chapterhead}]
+
+\startsetups [chapterhead]
+ \hbox to .2\paperwidth {
+ \hss
+ \getmarking[chapter]
+ \hss
+ }
+\stopsetups
+
+\setuphead
+ [chapter]
+ [header=empty]
+
+\definecolor[color-1][.5(red,green)]
+\definecolor[color-2][.5(green,blue)]
+\definecolor[color-3][.5(blue,red)]
+\definecolor[color-4][.5(white,black)]
+\definecolor[color-5][.5(white,color-4)]
+\definecolor[color-6][.2(white,color-4)]
+
+\startuseMPgraphic{page}
+StartPage ;
+ path p ;
+ numeric n; n := PageNumber ;
+ numeric w; w := bbwidth(Page) ;
+ numeric h; h := bbheight(Page) ;
+ def DrawBit (expr bit, dx, dy) =
+ path p ; p := unitsquare xyscaled(w/5,h/40) shifted (dx*w/10,dy*(h-h/40)) ;
+ if n div bit > 0 :
+ n := n - (n div bit)*bit ;
+ fill p withcolor \MPcolor{color-1} ;
+ else :
+ fill p withcolor \MPcolor{color-2} ;
+ fi ;
+ enddef ;
+ DrawBit(32,7,1) ;
+ DrawBit(16,4,1) ;
+ DrawBit( 8,1,1) ;
+ DrawBit( 4,7,0) ;
+ DrawBit( 2,4,0) ;
+ DrawBit( 1,1,0) ;
+StopPage ;
+\stopuseMPgraphic
+
+\startuniqueMPgraphic{frame}
+ fill OverlayBox withcolor \MPcolor{color-5} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{contrast}
+ fill OverlayBox withcolor \MPcolor{color-4} ;
+\stopuniqueMPgraphic
+
+\defineoverlay[page] [\useMPgraphic{page}]
+\defineoverlay[frame] [\useMPgraphic{frame}]
+\defineoverlay[contrast][\useMPgraphic{contrast}]
+
+\setupexternalfigures
+ [background=frame]
+
+\definecombination
+ [sixpages]
+ [%inbetween=\blank,
+ style=mono,
+ distance=.5\bodyfontsize,
+ width=\textwidth]
+
+\definecombination
+ [fourpages]
+ [%inbetween=\blank,
+ style=mono,
+ distance=.5\bodyfontsize,
+ width=\textwidth]
+
+\definecombination
+ [twopages]
+ [style=mono]
+
+\definemeasure[twopages] [\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[fourpages] [\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[eightpages][\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[sixpages] [\dimexpr\dimexpr\textwidth-2.5\bodyfontsize\relax/6\relax]
+
+\starttexdefinition unexpanded OnePage #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][1*1]
+ {\typesetfile[#1.tex][page=1,lines=15]} {1}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded OneSpread #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][1*1]
+ {\typesetfile[#1.tex][page=2,lines=15]} {2}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded TwoPages #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][2*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{twopages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{twopages}]} {2}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded TwoSpread #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][2*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{twopages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{twopages}]} {3}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded FourPages #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{fourpages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{fourpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{fourpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{fourpages}]} {4}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded FourSpread #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{fourpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{fourpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{fourpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{fourpages}]} {5}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded SixPages #1
+ \startlinecorrection[blank]
+ \startcombination[sixpages][6*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{sixpages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{sixpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{sixpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{sixpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{sixpages}]} {5}
+ {\typesetfile[#1.tex][page=6,width=\measure{sixpages}]} {6}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded SixSpread #1
+ \startlinecorrection[blank]
+ \startcombination[sixpages][6*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{sixpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{sixpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{sixpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{sixpages}]} {5}
+ {\typesetfile[#1.tex][page=6,width=\measure{sixpages}]} {6}
+ {\typesetfile[#1.tex][page=7,width=\measure{sixpages}]} {7}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded EightPages #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*2]
+ {\typesetfile[#1.tex][page=1,width=\measure{eightpages}]} {#1 / 1}
+ {\typesetfile[#1.tex][page=2,width=\measure{eightpages}]} {#1 / 2}
+ {\typesetfile[#1.tex][page=3,width=\measure{eightpages}]} {#1 / 3}
+ {\typesetfile[#1.tex][page=4,width=\measure{eightpages}]} {#1 / 4}
+ {\typesetfile[#1.tex][page=5,width=\measure{eightpages}]} {#1 / 5}
+ {\typesetfile[#1.tex][page=6,width=\measure{eightpages}]} {#1 / 6}
+ {\typesetfile[#1.tex][page=7,width=\measure{eightpages}]} {#1 / 7}
+ {\typesetfile[#1.tex][page=8,width=\measure{eightpages}]} {#1 / 8}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded EightSpread #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*2]
+ {\typesetfile[#1.tex][page=2,width=\measure{eightpages}]} {#1 / 2}
+ {\typesetfile[#1.tex][page=3,width=\measure{eightpages}]} {#1 / 3}
+ {\typesetfile[#1.tex][page=4,width=\measure{eightpages}]} {#1 / 4}
+ {\typesetfile[#1.tex][page=5,width=\measure{eightpages}]} {#1 / 5}
+ {\typesetfile[#1.tex][page=6,width=\measure{eightpages}]} {#1 / 6}
+ {\typesetfile[#1.tex][page=7,width=\measure{eightpages}]} {#1 / 7}
+ {\typesetfile[#1.tex][page=8,width=\measure{eightpages}]} {#1 / 8}
+ {\typesetfile[#1.tex][page=9,width=\measure{eightpages}]} {#1 / 9}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\setuphead
+ [chapter]
+ [style=\QuiteLarge,
+ color=color-3,
+ number=no]
+
+\setuplist
+ [chapter]
+ [command=\MyListCommand,
+ alternative=command]
+
+\starttexdefinition unexpanded MyListCommand #1#2#3
+ \snaptogrid
+ [line,-line]\vbox {
+ \tfb
+ \setstrut
+ \strut#2
+ \quad#3
+ }
+\stoptexdefinition
+
+\setupmargindata
+ [style=\tttf,
+ color=color-3]
+
+\starttexdefinition unexpanded ShowFile #1
+ \margintext
+ {\cldcontext{string.match("#1","\letterpercent d+")}}
+ \typefile
+ [range={environment}]
+ {#1}
+\stoptexdefinition
+
+% \typefile[range=4] {...}
+% \typefile[range={=}]{...} % start after comment lines
+
+\starttexdefinition unexpanded ShowEnvironmentFile #1
+ \margintext
+ {\cldcontext{string.match("#1","\letterpercent d+")}}
+ \typefile
+ [range={=startenvironment}]
+ {#1}
+\stoptexdefinition
+
+\startdocument
+
+\startMPpage
+StartPage ;
+ path p ; numeric w, h, d ; picture q ;
+ if true :
+ q := image(draw textext.urt("\ssbf COLUMNS") withcolor \MPcolor{color-6}) ;
+ else :
+ q := image(draw textext.urt("\ssbf COLUMNSETS") withcolor \MPcolor{color-6}) ;
+ fi ;
+ w := bbwidth(Page) ;
+ h := bbheight(Page) ;
+ d := h/100 ;
+ fill Page withcolor \MPcolor{color-1} ;
+ p := Page xysized (w,d) ;
+ for i := 5d step 2d until h-5d :
+ fill p shifted (0,i) withcolor \MPcolor{color-2} ;
+ endfor
+ p := Page xysized(w/10,h) ;
+ for i = 0, .3, .6, .9 :
+ fill p shifted (i*w,0) withcolor \MPcolor{color-1} withtransparency(1,.75) ;
+ endfor ;
+ def do_it(expr sz, sh) =
+ p := Page xysized sz ;
+ fill p shifted sh withcolor \MPcolor{color-3} withtransparency(1,.5) ;
+ draw q xysized (bbwidth(p),bbheight(p)) shifted sh ;
+ enddef ;
+ if true :
+ do_it ((2w/10,17d),(.1w,20d)) ;
+ do_it ((2w/10,15d),(.1w,56d)) ;
+ do_it ((2w/10,21d),(.4w,66d)) ;
+ do_it ((2w/10,13d),(.7w,38d)) ;
+ do_it ((5w/10,13d),(.4w,13d)) ;
+ draw textext.urt("\ssbf Hans Hagen")
+ xysized (5w/10,5d)
+ shifted (.4w,6d)
+ withcolor \MPcolor{color-5} ;
+ else :
+ do_it ((2w/10,17d),(.1w,15d)) ;
+ do_it ((2w/10,15d),(.1w,51d)) ;
+ do_it ((2w/10,21d),(.4w,61d)) ;
+ do_it ((2w/10,13d),(.7w,31d)) ;
+ do_it ((5w/10,13d),(.4w, 7d)) ;
+ fi ;
+StopPage ;
+\stopMPpage
+
+\page[empty] \setuppagenumber[number=1]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\starttitle[title=Contents]
+
+ \placelist[chapter]
+
+\stoptitle
+
+\startchapter[title=Introduction]
+
+This manual introduces {\em column sets}, one of the output routines of \CONTEXT.
+Although column sets are mainly meant for typesetting journals in a
+semi||automated way, you can also use them for books. We assume that the user is
+familiar with \CONTEXT\ and only discuss the commands that are related to column
+sets.
+
+This mechanism performs okay but it needs to be used with care: an occasional
+manual intervention is needed to get optimal results. After all, we're operating
+in the area where normally click and point desktop publishing is used.
+
+{\bf For the moment you need to load the new code with: \type{\usemodule[newcolumnsets]}}
+
+\startlines
+Hans Hagen
+PRAGMA ADE
+Hasselt, 2003\endash2016
+\stoplines
+
+\stopchapter
+
+\startchapter[title=Basics]
+
+As soon as enough content is collected to build a page, \TEX\ will invoke the
+output routine. This is not a fixed piece of code, but a collection of macro
+calls. The default output routine is a meant for typesetting a single column, as
+in this document. A multi||column output routine is available as well. This
+routine mixes well with the single column one, and is activated by:
+
+\starttyping
+\startcolumns
+some text ...
+\stopcolumns
+\stoptyping
+
+In \MKIV\ a new mixed column mechanism has been introduced that will be
+developped further and eventually replace the old multi column handler. In \MKII\
+there is also a columnset mechanism that can be used to construct complex multi
+column pages. In \MKIV\ this gets replaced by grid columns. All these multi
+column mechanisms have in common that the output routine is more complex because
+now a page is in fact a collection of pages wrapped onto one. Each column is
+(from \TEX's perspective) similar to a one narrow column page. Here we focus on
+columnsets (page grids).
+
+There are some limitations to what you can do with this kind of multi columns,
+which is why we have a third routine at out disposal: {\em column sets}. This
+routine can be used for rather complex layouts with graphics all over the place,
+and text spanning columns or even spreads. There are of course some shortcomings,
+which we will discuss later.
+
+In the examples that follow we use the following style to set up the layout. The
+number in the margin serves a reference to the file where this snippet of \TEX\
+is stored.
+
+\ShowEnvironmentFile{columnsets-000}
+
+\page[mine]
+
+Before we will demonstrate more complex layouts, we will introduce a few
+features. In the next series of examples we use fake text. You can enlarge the
+pages in your viewer if you want to see more detail.
+
+\FourSpread{columnsets-001}
+
+These pages were typeset with the following code:
+
+\ShowFile{columnsets-001}
+
+We will showmost examples on a spread, so we don't show a first page. On a
+spread like above we number columns from~1 to~4, which in practice means that in
+this case columns starting on right page start with column~3!
+
+\SixPages{columnsets-001}
+
+\page[mine]
+
+The number of columns is not fixed to two. You can even have a different number
+of columns on left and right pages.
+
+\FourSpread{columnsets-002}
+
+This time the input is:
+
+\ShowFile{columnsets-002}
+
+Again, we started on a right page but showed the spreads. You can see it from the
+positioning of the header texts.
+
+\SixPages{columnsets-002}
+
+\page[mine]
+
+In order to get the balancing you want, you can manually influence the height of
+a column.
+
+\FourSpread{columnsets-003}
+
+When you set the number of column lines to a positive value, that will be the
+number of lines. A negative value will be subtracted from the maximum number of
+lines.
+
+\ShowFile{columnsets-003}
+
+\page[mine]
+
+In articles you may want to let the introduction span multiple columns. A column
+span is defined independent of a column set and shows up as follows:
+
+\FourSpread{columnsets-004}
+
+Here we've given the span a background so that it stands out.
+
+\ShowFile{columnsets-004}
+
+\page[mine]
+
+A column span can be positioned like any graphic. Later we will discuss the
+placement options in more detail, for the moment all you need to know is that
+\type {btlr} tells \CONTEXT\ to place the graphic in the left bottom of the the
+text area.
+
+\FourSpread{columnsets-005}
+
+Here we pass the \type {default} placement as parameter to the span, but you can
+also set it at definition time. We use a brute force simple column splitter to
+fake columns inside the span.
+
+\ShowFile{columnsets-005}
+
+\page[mine]
+
+You are not limited to one column span. In this sense a span is like a graphic:
+as long as there is room, it will be placed where you want it to be placed. The
+main difference between a span and a graphic is that a span expects text and
+tries to align the baselines with the rest of the text. In many ways a column
+span behaves like a framed text.
+
+\FourSpread{columnsets-006}
+
+This time we flushed one of the spans from bottom to top, starting at the right
+edge: \type {btrl}.
+
+\ShowFile{columnsets-006}
+
+\page[mine]
+
+Column spans are treated like graphics, which means that they will float if
+needed. In the process, the width is limited to the available space, which in
+some cases may lead to a smaller span than you may expect. Think of a column
+span, calculated (and prepared) in the last column and ending up on the next page
+in the first column, where a broader span would have been possible.
+
+\FourSpread{columnsets-007}
+
+\ShowFile{columnsets-007}
+
+\stopchapter
+
+\startchapter[title=Graphics]
+
+Most documents have graphics, and therefore column sets can contain them. The
+main thing that you have to keep in mind when placing graphics, is that column
+sets are based on grids. Therefore spacing around graphics is also grid based.
+
+\FourSpread{columnsets-101}
+
+\ShowFile{columnsets-101}
+
+\page[mine]
+
+You can tell \CONTEXT\ where it should place the graphic, but this will only be
+honored when there is still place.
+
+\EightSpread{columnsets-102}
+
+The prefered location is passed as a four character directive:
+
+\ShowFile{columnsets-102}
+
+\page[mine]
+
+The following directives are available:
+
+\starttabulate[|lT|p|]
+\NC btlr \NC flush from bottom to top and left to right \NC \NR
+\NC btrl \NC flush from bottom to top and right to left \NC \NR
+\NC tblr \NC flush from top to bottom and left to right \NC \NR
+\NC tbrl \NC flush from top to bottom and right to left \NC \NR
+\NC lrbt \NC flush from left to right and bottom to top \NC \NR
+\NC lrtb \NC flush from left to right and top to bottom \NC \NR
+\NC rlbt \NC flush from right to left and bottom to top \NC \NR
+\NC rltb \NC flush from right to left and top to bottom \NC \NR
+\NC here \NC try to place the graphic here \NC \NR
+\NC fixd \NC force the graphic here and don't float \NC \NR
+\NC fxtb:c*r \NC place the graphic at (c,r) or lower if needed \NC \NR
+\NC fxbt:c*r \NC place the graphic at (c,r) or higher if needed \NC \NR
+\NC tops \NC place the graphic at the top of the page \NC \NR
+\NC bots \NC place the graphic at the bottom of the page \NC \NR
+\NC page \NC place the graphic at a separate page \NC \NR
+\stoptabulate
+
+In the next example we show the directional locations:
+
+\OneSpread{columnsets-103}
+
+\ShowFile{columnsets-103}
+
+\stopchapter
+
+\startchapter[title=Areas]
+
+So far we have seen texts and graphics that span multiple columns using span
+commands and floats placement commands. We have also seen that you can define a
+different number of columns for left and right pages. Now that we have arrives at
+column areas you will see how we can span information over not only a page but
+also over pages in a spread.
+
+\FourSpread{columnsets-201}
+
+Being a framed text, by default an area is aligned at the baseline. You can lower
+an area by setting the \type {location} to \type {depth}.
+
+\ShowFile{columnsets-201}
+
+\page[mine]
+
+You can position areas on the left, right or next page or on both pages. When you
+set \type {state} to \type {repeat}, an area is repeated, otherwise it is only
+placed once.
+
+\FourSpread{columnsets-202}
+
+Here we just repeat the areas. Normally this only make sense when the content is
+worth repeating.
+
+\ShowFile{columnsets-202}
+
+\page[mine]
+
+Areas can span a spread, as is demonstrated in the next example.
+
+\FourSpread{columnsets-203}
+
+\ShowFile{columnsets-203}
+
+\page[mine]
+
+An application of a spread area is a title. In the next example we show two
+spread pages.
+
+\FourSpread{columnsets-204}
+
+Watch how we explicitly go to a left page.
+
+\ShowFile{columnsets-204}
+
+\page[mine]
+
+The \type {\GapText} macro is an experimental fun macro and is used to make sure
+that we don't end up with a clipped character.
+
+\startlinecorrection[blank]
+\startcombination
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=2,y=2]
+ {\typesetfile[columnsets-204.tex][page=2]}}}
+ {left page}
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=1,y=2]
+ {\typesetfile[columnsets-204.tex][page=3]}}}
+ {right page}
+\stopcombination
+\stoplinecorrection
+
+This is a typical example of the kind of optimizations that are needed when you
+make documents of styles with text that spans a spread. In the next clip we
+visualize the gap.
+
+\startlinecorrection[blank]
+\startcombination
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=2,y=2]
+ {\typesetfile[columnsets-205.tex][page=2]}}}
+ {left page}
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=1,y=2]
+ {\typesetfile[columnsets-205.tex][page=3]}}}
+ {right page}
+\stopcombination
+\stoplinecorrection
+
+At some moment you may want to set up an area in advance as we have done in the
+following example.
+
+\FourSpread{columnsets-206}
+
+The \type {page} key is used to specify the page in the column set that the area
+should go into. Column set pages start numbering at~1. The \type {fixed} stands
+for left or right, whatever comes first.
+
+\ShowFile{columnsets-206}
+
+\stopchapter
+
+\startchapter[title=Columns]
+
+You can use \type {\page} to go to a new page in a column set. Likewise you can
+use \type {\column} to force a column break.
+
+\FourPages{columnsets-301}
+
+This example demonstrates that you can supply \type {\column} with explicit
+directives.
+
+\ShowFile{columnsets-301}
+
+You can use \type {\column[page]} as an alternative for \type {\page}.
+
+\stopchapter
+
+\startchapter[title=Details]
+
+This chapter will cover a couple of cosmetic details of column sets. {\em Some
+features need to be improved, especially in combination with areas, graphics and
+alike. We will also provide side floats etc.}
+
+\FourSpread{columnsets-401}
+
+You can set the distance between columns for each pair of columns. {\em Todo:
+left and right page distances and margins.}
+
+\ShowFile{columnsets-401}
+
+\page[mine]
+
+When you can the distance of the first column as well. This creates a margin.
+
+\FourSpread{columnsets-402}
+
+This time we used equal distances:
+
+\ShowFile{columnsets-402}
+
+\page[mine]
+
+The width of columns is normally calculated automatically, but you can also set
+the width explicitly:
+
+\FourSpread{columnsets-403}
+
+In code:
+
+\ShowFile{columnsets-403}
+
+\page[mine]
+
+For special effects, you can set the width per column. In that case you need to
+be aware of the fact that \TEX\ works its way through the document per paragraph.
+Changing the width halfway a paragraph is possible but will affect the whole
+paragraph. Therefore, this feature works best when you also goto the next column
+explicitly.
+
+\FourSpread{columnsets-404}
+
+In code:
+
+\ShowFile{columnsets-404}
+
+\page[mine]
+
+If you really want to change the width in the middle of a paragraph, you can do a
+trial run and include a breakpoint at the palce where you want it to occur:
+
+\FourSpread{columnsets-405}
+
+In the second spread you see how the narrow hsize carries on in the wider
+column. A \type {\column} command will synchronize the hsize.
+
+\ShowFile{columnsets-405}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Directions]
+
+\FourSpread{columnsets-601}
+
+The direction of flushing columns is determined by the \type {direction}
+parameters as demonstrated below.
+
+\ShowFile{columnsets-601}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Backgrounds]
+
+As with many \CONTEXT\ components, column sets can have backgrounds.
+
+\FourSpread{columnsets-701}
+
+Watch how we use the \type {each} keyword to tell \CONTEXT\ that we want to apply
+the background to each column of the set.
+
+\ShowFile{columnsets-701}
+
+\page[mine]
+
+Normally, if you apply backgrounds this way, you will also set the background
+offset. In a similar fashion you can apply backgrounds to areas and spans. Such
+backgrounds can be a color, or any overlay or layer you want.
+
+\FourSpread{columnsets-702}
+
+Here we've set the background offset as well as the frame.
+
+\ShowFile{columnsets-702}
+
+\page[mine]
+
+When dealing with areas, you need to be aware of the fact that they are clipped,
+the content as well as the background.
+
+\FourSpread{columnsets-703}
+
+De default clip offset is two times the lineheight, except in the binding, where
+it is set to zero points. You can set the clip offset with the \type {clipoffset}
+parameter.
+
+\ShowFile{columnsets-703}
+
+\page[mine]
+
+The text background mechanism is rather well adapted to column sets. The
+following example is a variant on an example shown in the manual titled
+{details}.
+
+\EightSpread{columnsets-704}
+
+Watch how we adapt the background to the fact and extent that the text spans one
+or more columns.
+
+\ShowFile{columnsets-704}
+
+Backgrounds that follow the paragraph shape also work ok in column sets.
+
+{\em todo: an example of a bleeding graphic with column feed back (from
+techniek)}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Numbering lines]
+
+\FourSpread{columnsets-901}
+
+This example shows how numbering lines in columns works out. In a two column
+layout the numbers end up in the outer margins by default. If you want you can
+set the \type {location} to for instance \type {left} or \type {right}.
+
+\ShowFile{columnsets-901}
+
+\page[mine]
+
+\FourSpread{columnsets-902}
+
+In a three column setup the numbers end up in the left margins.Make sure you make
+the distance large enough.
+
+\ShowFile{columnsets-902}
+
+% \page[mine]
+%
+% \FourSpread{columnsets-903}
+%
+% This example shows again lune numbers but here we made sure that there is no
+% stretch in the whitespace.
+%
+% \ShowFile{columnsets-903}
+
+\stopchapter
+
+% \startchapter[title=Spanning and More]
+%
+% {\em todo: explanation} \page
+%
+% \TwoPages{columnsets-801} \ShowFile{columnsets-801} \page[mine]
+% \TwoPages{columnsets-802} \ShowFile{columnsets-802} \page[mine]
+% \TwoPages{columnsets-803} \ShowFile{columnsets-803} \page[mine]
+% \TwoPages{columnsets-804} \ShowFile{columnsets-804} \page[mine]
+% \TwoPages{columnsets-805} \ShowFile{columnsets-805} \page[mine]
+% \TwoPages{columnsets-806} \ShowFile{columnsets-806} \page[mine]
+%
+% \stopchapter
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/epub/epub-mkiv-demo.tex b/doc/context/sources/general/manuals/epub/epub-mkiv-demo.tex
new file mode 100644
index 000000000..b4b979874
--- /dev/null
+++ b/doc/context/sources/general/manuals/epub/epub-mkiv-demo.tex
@@ -0,0 +1,43 @@
+
+% \usemodule[luacalls]
+
+\usemodule[mathml]
+
+\setupexternalfigures
+ [location=default]
+
+\setupbackend
+ [export=yes]
+
+\setupexport
+ [svgstyle=mathtest-style,
+ hyphen=yes,
+ width=60em]
+
+\setupbodyfont[pagella]
+
+\definefloat[graphic][graphics][figure]
+
+% \environment [mathtest-style]
+
+\starttext
+
+ \startsection[title=First]
+
+ \startitemize
+ \startitem one \stopitem
+ \startitem two \stopitem
+ \stopitemize
+
+ \startplacefigure[title=First]
+ \externalfigure[cow.pdf]
+ \stopplacefigure
+
+ \startplacegraphic[title=Second]
+ \externalfigure[cow.pdf]
+ \stopplacegraphic
+
+ some math: \m{e=mc^2}
+
+ \stopsection
+\stoptext
diff --git a/doc/context/sources/general/manuals/epub/epub-mkiv.tex b/doc/context/sources/general/manuals/epub/epub-mkiv.tex
new file mode 100644
index 000000000..6fc4ed9d4
--- /dev/null
+++ b/doc/context/sources/general/manuals/epub/epub-mkiv.tex
@@ -0,0 +1,466 @@
+% language=uk
+
+% todo:
+%
+% metadata
+% properties
+% \dontleavehmode before hbox
+% cover page
+%
+% http://www.cnet.com/news/google-subtracts-mathml-from-chrome-and-anger-multiplies/
+
+% \usemodule[luacalls]
+
+\usemodule[art-01,abr-02]
+
+\definehighlight[notabene][style=bold]
+
+\definecolor[darkorange] [.70(green,red)]
+\definecolor[lightorange][.45(orange,white)]
+\definecolor[lesswhite] [.90(white)]
+
+\setuptyping[color=darkorange]
+\setuptype [color=darkorange]
+
+\starttext
+
+\startMPpage
+
+numeric w ; w := 21cm ;
+numeric h ; h := 29.7cm ;
+numeric ww ; ww := 9w/10 ;
+numeric oo ; oo := (w-ww) / 2 ;
+numeric hh ; hh := h/5.5 ;
+path p ; p := unitsquare xysized(w,h) ;
+
+color orange ; orange := \MPcolor{darkorange} ; % .7[green,red] ;
+
+fill p enlarged 2mm withcolor orange ;
+
+draw image (
+ draw anchored.top(
+ textext("\ttbf\setupinterlinespace[line=1.7ex]\framed[frame=off,align=middle,offset=0mm]{\smash{<div/>}\\\smash{<div >}\\\smash{</div>}}")
+ xsized w,
+ center topboundary p shifted (0,-12mm)) withcolor \MPcolor{lightorange} ; % 0.45[white,orange] ;
+ draw anchored.bot(
+ textext("\ssbf\setupinterlinespace[line=2.2ex]\framed[frame=off,align=middle]{exporting\\xml and epub\\from context}")
+ xsized w,
+ center bottomboundary p shifted (0,4mm)) withcolor \MPcolor {lesswhite} ; % 0.90white ;
+) ;
+
+setbounds currentpicture to p ;
+
+\stopMPpage
+
+\startsection[title=Introduction]
+
+There is a pretty long tradition of typesetting math with \TEX\ and it looks like
+this program will dominate for many more years. Even if we move to the web, the
+simple fact that support for \MATHML\ in some browsers is suboptimal will drive
+those who want a quality document to use \PDF\ instead.
+
+I'm writing this in 2014, at a time when \XML\ is widespread. The idea of \XML\ is
+that you code your data in a very structured way, so that it can be manipulated and
+(if needed) validated. Text has always been a target for \XML\ which is a follow|-|up
+to \SGML\ that was in use by publishers. Because \HTML\ is less structured (and also
+quite tolerant with respect to end tags) we prefer to use \XHTML\ but unfortunately
+support for that is less widespread.
+
+Interestingly, documents are probably among the more complex targets of the
+\XML\ format. The reason is that unless the author restricts him|/|herself or
+gets restricted by the publisher, tag abuse can happen. At \PRAGMA\ we mostly
+deal with education|-|related \XML\ and it's not always easy to come up with
+something that suits the specific needs of the educational concept behind a
+school method. Even if we start out nice and clean, eventually we end up with a
+polluted source, often with additional structure needed to satisfy the tools used
+for conversion.
+
+We have been supporting \XML\ from the day it showed up and most of our projects
+involve \XML\ in one way or the other. That doesn't mean that we don't use \TEX\
+for coding documents. This manual is for instance a regular \TEX\ document. In
+many ways a structured \TEX\ document is much more convenient to edit, especially
+if one wants to add a personal touch and do some local page make|-|up. On the other hand,
+diverting from standard structure commands makes the document less suitable for
+output other than \PDF. There is simply no final solution for coding a document,
+it's mostly a matter of taste.
+
+So we have a dilemma: if we want to have multiple output, frozen \PDF\ as well as
+less-controlled \HTML\ output, we can best code in \XML, but when we want to code
+comfortably we'd like to use \TEX. There are other ways, like Markdown, that can
+be converted to intermediate formats like \TEX, but that is only suitable for
+simple documents: the more advanced documents get, the more one has to escape
+from the boundaries of (any) document encoding, and then often \TEX\ is not a bad
+choice. There is a good reason why \TEX\ survived for so long.
+
+It is for this reason that in \CONTEXT\ \MKIV\ we can export the content in a
+reasonable structured way to \XML. Of course we assume a structured document. It
+started out as an experiment because it was relatively easy to implement, and it
+is now an integral component.
+
+\stopsection
+
+\startsection[title=The output]
+
+The regular output is an \XML\ file but as we have some more related data it gets
+organized in a tree. We also export a few variants. An example is given below:
+
+\starttyping
+./test-export
+./test-export/images
+./test-export/images/...
+./test-export/styles
+./test-export/styles/test-defaults.css
+./test-export/styles/test-images.css
+./test-export/styles/test-styles.css
+./test-export/styles/test-templates.css
+./test-export/test-raw.xml
+./test-export/test-raw.lua
+./test-export/test-tag.xhtml
+./test-export/test-div.xhtml
+\stoptyping
+
+Say that we have this input:
+
+\starttyping
+\setupbackend
+ [export=yes]
+
+\starttext
+ \startsection[title=First]
+ \startitemize
+ \startitem one \stopitem
+ \startitem two \stopitem
+ \stopitemize
+ \stopsection
+\stoptext
+\stoptyping
+
+The main export ends up in the \type {test-raw.xml} export file and looks like
+the following (we leave out the preamble and style references):
+
+\starttyping
+<document> <!-- with some attributes -->
+ <section detail="section" chain="section" level="3">
+ <sectionnumber>1</sectionnumber>
+ <sectiontitle>First</sectiontitle>
+ <sectioncontent>
+ <itemgroup detail="itemize" chain="itemize" symbol="1" level="1">
+ <item>
+ <itemtag><m:math ..><m:mo>•</m:mo></m:math></itemtag>
+ <itemcontent>one</itemcontent>
+ </item>
+ <item>
+ <itemtag><m:math ..><m:mo>•</m:mo></m:math></itemtag>
+ <itemcontent>two</itemcontent>
+ </item>
+ </itemgroup>
+ </sectioncontent>
+ </section>
+</document>
+\stoptyping
+
+This file refers to the stylesheets and therefore renders quite well in a browser
+like Firefox that can handle \XHTML\ with arbitrary tags.
+
+The \type {detail} attribute tells us what instance of the element is used.
+Normally the \type {chain} attribute is the same but it can have more values.
+For instance, if we have:
+
+\starttyping
+\definefloat[graphic][graphics][figure]
+
+.....
+
+\startplacefigure[title=First]
+ \externalfigure[cow.pdf]
+\stopplacefigure
+
+.....
+
+\startplacegraphic[title=Second]
+ \externalfigure[cow.pdf]
+\stopplacegraphic
+\stoptyping
+
+we get this:
+
+\starttyping
+<float detail="figure" chain="figure">
+ <floatcontent>...</floatcontent>
+ <floatcaption>...</floatcaption>
+</float>
+<float detail="graphic" chain="figure graphic">
+ <floatcontent>...</floatcontent>
+ <floatcaption>...</floatcaption>
+</float>
+\stoptyping
+
+This makes it possible to style specific categories of floats by using a
+(combination of) \type {detail} and|/|or \type {chain} as filters.
+
+The body of the \type {test-tag.xhtml} file looks similar but it is slightly more
+tuned for viewing. For instance, hyperlinks are converted to a way that \CSS\ and
+browsers like more. Keep in mind that the raw file can be the base for conversion
+to other formats, so that one stays closest to the original structure.
+
+The \type {test-div.xhtml} file is even more tuned for viewing in browsers as it
+completely does away with specific tags. We explicitly don't map onto native
+\HTML\ elements because that would make everything look messy and horrible, if only
+because there seldom is a relation between those elements and the original. One
+can always transform one of the export formats to pure \HTML\ tags if needed.
+
+\starttyping
+<body>
+ <div class="document">
+ <div class="section" id="aut-1">
+ <div class="sectionnumber">1</div>
+ <div class="sectiontitle">First</div>
+ <div class="sectioncontent">
+ <div class="itemgroup itemize symbol-1">
+ <div class="item">
+ <div class="itemtag"><m:math ...><m:mo>•</m:mo></m:math></div>
+ <div class="itemcontent">one</div>
+ </div>
+ <div class="item">
+ <div class="itemtag"><m:math ...><m:mo>•</m:mo></m:math></div>
+ <div class="itemcontent">two</div>
+ </div>
+ </div>
+ <div class="float figure">
+ <div class="floatcontent">...</div></div>
+ <div class="floatcaption">...></div>
+ </div>
+ <div class="float figure graphic">
+ <div class="floatcontent">...</div></div>
+ <div class="floatcaption">...></div>
+ </div>
+ </div>
+ </div>
+</body>
+\stoptyping
+
+The default \CSS\ file can deal with tags as well as classes. The file
+of additional styles contains definitions of so|-|called highlights. In the \CONTEXT\ source
+one is better off using explicit named highlights instead of local font and color
+switches because these properties are then exported to the \CSS. The images style
+defines all images used. The templates file lists all the elements used and can
+be used as a starting point for additional \CSS\ styling.
+
+Keep in mind that the export is \notabene{not} meant as a one|-|to|-|one visual
+representation. It represents structure so that it can be converted to whatever
+you like.
+
+In order to get an export you must start your document with:
+
+\starttyping
+\setupbackend
+ [export=yes]
+\stoptyping
+
+So, we trigger a specific (extra) backend. In addition you can set up the export:
+
+\starttyping
+\setupexport
+ [svgstyle=test-basic-style.tex,
+ cssfile=test-extras.css,
+ hyphen=yes,
+ width=60em]
+\stoptyping
+
+The \type {hyphen} option will also export hyphenation information so that the
+text can be nicely justified. The \type {svgstyle} option can be used to specify
+a file where math is set up; normally this would only contain a \type{bodyfont} setup,
+and this option is only needed if you want to create an \EPUB\ file afterwards which
+has math represented as \SVG.
+
+The value of \type {cssfile} ends up as a style reference in the exported files.
+You can also pass a comma|-|separated list of names (between curly braces). These
+entries come after those of the automatically generated \CSS\ files so you need
+to be aware of default properties.
+
+\stopsection
+
+\startsection[title=Images]
+
+Inclusion of images is done in an indirect way. Each image gets an entry in a
+special image related stylesheet and then gets referred to by \type {id}. Some
+extra information is written to a status file so that the script that creates
+\EPUB\ files can deal with the right conversion, for instance from \PDF\ to \SVG.
+Because we can refer to specific pages in a \PDF\ file, this subsystem deals with
+that too. Images are expected to be in an \type {images} subdirectory and because in \CSS\
+the references are relative to the path where the stylesheet resides, we use
+\type {../images} instead. If you do some postprocessing on the files or relocate
+them you need to keep in mind that you might have to change these paths in the
+image|-|related \CSS\ file.
+
+\stopsection
+
+\startsection[title=Epub files]
+
+At the end of a run with exporting enabled you will get a message to the console that
+tells you how to generate an \EPUB\ file. For instance:
+
+\starttyping
+mtxrun --script epub --make --purge test
+\stoptyping
+
+This will create a tree with the following organization:
+
+\starttyping
+./test-epub
+./test-epub/META-INF
+./test-epub/META-INF/container.xml
+./test-epub/OEBPS
+./test-epub/OEBPS/content.opf
+./test-epub/OEBPS/toc.ncx
+./test-epub/OEBPS/nav.xhtml
+./test-epub/OEBPS/cover.xhtml
+./test-epub/OEBPS/test-div.xhtml
+./test-epub/OEBPS/images
+./test-epub/OEBPS/images/...
+./test-epub/styles
+./test-epub/styles/test-defaults.css
+./test-epub/styles/test-images.css
+./test-epub/styles/test-styles.css
+./test-epub/mimetype
+\stoptyping
+
+Images will be moved to this tree as well and if needed they will be converted,
+for instance into \SVG. Converted \PDF\ files can have a \typ {page-<number>} in
+their name when a specific page has been used.
+
+You can pass the option \type {--svgmath} in which case math will be converted to
+\SVG. The main reason for this feature is that we found out that \MATHML\ support
+in browsers is not currently as widespread as might be expected. The best bet is Firefox which
+natively supports it. The Chrome browser had it for a while but it got dropped
+and math is now delegated to \JAVASCRIPT\ and friends. In Internet Explorer
+\MATHML\ should work (but I need to test that again).
+
+This conversion mechanism is
+kind of interesting: one enters \TEX\ math, then gets \MATHML\ in the export, and
+that gets rendered by \TEX\ again, but now as a standalone snippet that then gets
+converted to \SVG\ and embedded in the result.
+
+\stopsection
+
+\startsection[title=Styles]
+
+One can argue that we should use native \HTML\ elements but since we don't have a nice
+guaranteed|-|consistent mapping onto that, it makes no sense to do so. Instead, we
+rely on either explicit tags with details and chains or divisions with classes
+that combine the tag, detail and chain. The tagged variant has some more
+attributes and those that use a fixed set of values become classes in the
+division variant. Also, once we start going the (for instance) \type {H1}, \type
+{H2}, etc.\ route we're lost when we have more levels than that or use a
+different structure. If an \type {H3} can reflect several levels it makes no
+sense to use it. The same is true for other tags: if a list is not really a list
+than tagging it with \type {LI} is counterproductive. We're often dealing with
+very complex documents so basic \HTML\ tagging becomes rather meaningless.
+
+If you look at the division variant (this is used for \EPUB\ too) you will notice
+that there are no empty elements but \type {div} blocks with a comment as content.
+This is needed because otherwise they get ignored, which for instance makes table
+cells invisible.
+
+The relation between \type {detail} and \type {chain} (reflected in \type {class})
+can best be seen from the next example.
+
+\starttyping
+\definefloat[myfloata]
+\definefloat[myfloatb][myfloatbs][figure]
+\definefloat[myfloatc][myfloatcs][myfloatb]
+\stoptyping
+
+This creates two new float instances. The first inherits from the main float
+settings, but can have its own properties. The second example inherits from
+the \type {figure} so in fact it is part of a chain. The third one has a longer
+chain.
+
+\starttyping
+<float detail="myfloata">...</float>
+<float detail="myfloatb" chain="figure">...</float>
+<float detail="myfloatc" chain="figure myfloatb">...</float>
+\stoptyping
+
+In a \CSS\ style you can now configure tags, details, and chains as well as
+classes (we show only a few possibilities). Here, the \CSS\ element on the
+first line of each pair is invoked by the \CSS\ selector on the second line.
+
+\starttyping
+div.float.myfloata { } float[detail='myfloata'] { }
+div.float.myfloatb { } float[detail='myfloatb'] { }
+div.float.figure { } float[detail='figure'] { }
+div.float.figure.myfloatb { } float[chain~='figure'][detail='myfloata'] { }
+div.myfloata { } *[detail='myfloata'] { }
+div.myfloatb { } *[detail='myfloatb'] { }
+div.figure { } *[chain~='figure'] { }
+div.figure.myfloatb { } *[chain~='figure'][detail='myfloatb'] { }
+\stoptyping
+
+The default styles cover some basics but if you're serious about the export
+or want to use \EPUB\ then it makes sense to overload some of it and|/|or
+provide additional styling. You can find plenty about \CSS\ and its options
+on the Internet.
+
+\stopsection
+
+\startsection[title=Coding]
+
+The default output reflects the structure present in the document. If that is not
+enough you can add your own structure, as in:
+
+\starttyping
+\startelement[question]
+Is this right?
+\stopelement
+\stoptyping
+
+You can also pass attributes:
+
+\starttyping
+\startelement[question][level=difficult]
+Is this right?
+\stopelement
+\stoptyping
+
+But these will be exported only when you also say:
+
+\starttyping
+\setupexport
+ [properties=yes]
+\stoptyping
+
+You can create a namespace. The following will generate attributes
+like \type {my-level}.
+
+\starttyping
+\setupexport
+ [properties=my-]
+\stoptyping
+
+In most cases it makes more sense to use highlights:
+
+\starttyping
+\definehighlight
+ [important]
+ [style=bold]
+\stoptyping
+
+This has the advantage that the style and color are exported to a special
+\CSS\ file.
+
+Headers, footers, and other content that is part of the page builder are not
+exported. If your document has cover pages you might want to hide them too. The
+same is true when you create special chapter title rendering with a side
+effect that content ends up in the page stream. If something shows up that you
+don't want, you can wrap it in an \type {ignore} element:
+
+\starttyping
+\startelement[ignore]
+Don't export this.
+\stopelement
+\stoptyping
+
+\stopsection
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/languages/languages-appendix.tex b/doc/context/sources/general/manuals/languages/languages-appendix.tex
new file mode 100644
index 000000000..d8f33e44a
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-appendix.tex
@@ -0,0 +1,48 @@
+% language=uk
+
+\startcomponent languages-appendix
+
+\environment languages-environment
+
+\startchapter[title=Appendix][color=darkgray]
+
+\startsection[title=The language files]
+
+ Todo.
+
+\stopsection
+
+\startsection[title=The \type {mtx-patterns} script]
+
+ Todo.
+
+\stopsection
+
+\startsection[title=Installed sorters]
+
+\startbuffer
+\usemodule[s-languages-sorting]
+
+\showinstalledsorting
+\stopbuffer
+
+\typebuffer \blank[2*line] \getbuffer
+
+\stopsection
+
+\startsection[title=Verbose counters]
+
+\startbuffer
+\usemodule[s-languages-counters]
+
+\showverbosecounters[language={en,es}]
+\stopbuffer
+
+\typebuffer \blank[2*line] \getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/languages/languages-basics.tex b/doc/context/sources/general/manuals/languages/languages-basics.tex
new file mode 100644
index 000000000..840897096
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-basics.tex
@@ -0,0 +1,348 @@
+% language=uk
+
+\startcomponent languages-basics
+
+\environment languages-environment
+
+\startchapter[title=Some basics][color=darkyellow]
+
+\startsection[title={Introduction}]
+
+In this chapter we will see how we can toggle between languages. A first
+introduction to patterns will be given. Some details of how to control the
+hyphenation with specific patterns will be given in a later chapter.
+
+\stopsection
+
+\startsection[title={Available languages}]
+
+When you use the English version of \CONTEXT\ you will default to US English as
+main language. This means that hyphenation will be US specific, which by the way
+is different from the rules in GB. All labels that are generated by the system
+are also in English. Languages can often be accessed by names like \type
+{english} or \type {dutch} although it is quite common to use the short tags like
+\type {en} and \type {nl}. Because we want to be as compatible as possible with
+\MKII, there are quite some synonyms. The following table lists the languages that
+for which support is built|-|in.\footnote {More languages can be defined. It is
+up to users to provide the information.}
+
+\startbuffer
+\usemodule[languages-system]
+
+\loadinstalledlanguages
+\showinstalledlanguages
+\stopbuffer
+
+\getbuffer
+
+You can call up such a table with the following commands:
+
+\typebuffer
+
+Instead you can run \type {context --global languages-system.mkiv}.
+
+As you can see, many languages have hyphenation patterns but for Japanese,
+Korean, Chinese as well as Arabic languages they make no sense. The patterns are
+loaded on demand. The number is the internal number that is used in the engine; a
+user never has to use that number. Numbers $<1$ are used to disable hyphenation.
+The file tag is used to locate and load a specification. Such files have names
+like type {lang-nl.lua}.
+
+Some languages share the same hyphenation patterns but can have demands that
+differ, like labels or quotes. The characters shown in the table are those found
+in the pattern files. The number of patterns differs a lot between languages.
+This relates to the systematic behind them. Some languages use word stems, others
+base their hyphenation on syllables. Some language have inflections which adds to
+the complexity while others can combine words in ways that demand special care
+for word boundaries. Of course a low or high number can signal a low quality as
+well, but most pattern collections are assembled over many years and updated when
+for instance spelling rules change. I think that we can safely say that most patterns
+are quite stable and of good quality.
+
+\stopsection
+
+\startsection[title=Switching]
+
+The document language is set with
+
+\starttyping
+\mainlanguage[en]
+\stoptyping
+
+but when you want to apply the proper hyphenation rules to an embedded language
+you can use:
+
+\starttyping
+\language[en]
+\stoptyping
+
+or just:
+
+\starttyping
+\en
+\stoptyping
+
+The main language determines what labels show up, how numbering happens, in what
+way dates get formatted, etc. Normally the \typ {\mainlanguage} command comes
+before the \typ {\starttext} command.
+
+\stopsection
+
+\startsection[title=Hyphenation]
+
+In \LUATEX\ each character that gets typeset not only carries a font id and character
+code, but also a language number. You can switch language whenever you want and
+the change will be carried with the characters. Switching within a word doesn't make
+sense but it is permitted:
+
+\starttabulate[|||T|]
+\NC 1 \NC \type{\de incrediblykompliziert} \NC \hyphenatedword{\de incrediblykompliziert} \NC \NR
+\NC 2 \NC \type{\en incrediblykompliziert} \NC \hyphenatedword{\en incrediblykompliziert} \NC \NR
+\NC 3 \NC \type{\en incredibly\de kompliziert} \NC \hyphenatedword{\en incredibly\de kompliziert} \NC \NR
+\NC 4 \NC \type{\en incredibly\de\-kompliziert} \NC \hyphenatedword{\en incredibly\de\-kompliziert} \NC \NR
+\NC 5 \NC \type{\en incredibly\de-kompliziert} \NC \hyphenatedword{\en incredibly\de-kompliziert} \NC \NR
+\stoptabulate
+
+In the line 4 we have a \type {\-} between the two words, and in the last
+line just a \type {-}. If you look closely you will notice that the snippets
+can be quite small. If we typeset a word with a 1mm text width we get this:
+
+\blank \start \en \hsize 1mm incredibly \par \stop \blank
+
+If you are familiar with the details of hyphenation, you know that the number of
+characters at the end and beginning of a word is controlled by the two variables
+\typ {\lefthyphenmin} and \typ {\righthyphenmin}. However, these only influence
+the hyphenation process. What bits and pieces eventually end up on a line is
+determined by the par builder and there the \type {\hsize} matters. In practice
+you will not run into these situations, unless you have extreme long words and a
+narrow column.
+
+Hyphenation normally is limited to regular characters that make up the alphabet of
+a language. It is insensitive for capitalization as the following text shows:
+
+\blank
+
+\startnarrower
+\hyphenatedword {This time the musical distraction while developing code came
+from watching youtube performances of Cory Henry (also known from Snarky Puppy,
+a conglomerate of excellent players). Just search the web for his name with \quote
+{Stevie Wonder and Michael Jackson Tribute}. There is no keyboard he can't play.
+Another interesting keyboard player is Sun Rai (a short name for Rai
+Thistlethwayte, just google for \quote {The Beatles, Come Together, Live Piano
+Acoustic with Loop Pedal}, or do a combined search with \quote {Matt
+Chamberlain}. Okay, and talking of keyboards, let's not forget Vika Yermolyeva
+(vkgoeswild) as she's one of a kind too on the web. And then there is Jacob
+Collier, in one word: incredible (or hyphenated the Dutch way {\nl incredible},
+let me repeat that in French {\fr incredible}).} \footnote {Get me right, there
+are of course many more fantastic musicians.}
+\stopnarrower
+
+\blank
+
+Of course, names are often short and don't need to be hyphenated
+(or the left and right settings prohibit it). Another complication with names is
+that they can come from another language so we either need to switch language
+temporarily or we need to add an exception (more about that later).
+
+\stopsection
+
+\startsection[title=Primitives]
+
+In traditional \TEX\ the language is not a property of a character but is
+triggered by a signal in the (so called) list. Think of:
+
+\starttyping
+<language 1>this is <language 2>nederlands<language 1> mixed with english
+\stoptyping
+
+This number is set by the primitive \typ {\language}. Language triggers are
+injected into the list depending on the value of this number. There is also a \typ
+{\setlanguage} primitive that can inject triggers without setting the \typ
+{\language} number. Because in \LUATEX\ the state is kept with the character
+you don't need to worry about the subtle differences here.
+
+In \CONTEXT\ the \typ {\language} and \typ {\setlanguage} commands are overloaded
+by a more advanced switch macro. You cannot assume that they work as explained in
+general manuals about \TEX. Currently you can still assign a number but that
+might change. Just consider the language to be an abstraction and don't mess with
+this number. Both commands not only change the current language but also do
+specific initializations when needed.
+
+What characters get involved in hyhenation is historically determines by the so
+called \type {\lccode} values. Each character can have such a value which maps
+an uppercase to a lowercase character. This concept has been extended in \ETEX\
+where it binds to a pattern set (language). However, in \CONTEXT\ the user never
+has to worry about such details.
+
+% The \type {\patterns} primitive is
+% The \type {\hyphenation} primitive is
+
+In traditional hyphenation there will not be hyphenated if the sum of \typ
+{\lefthyphenmin} and \typ {\righthyphenmin} exceeds 62. This limitation is not
+present in the to be presented \LUA\ variant of this routine as there is no
+good reason for this limitation other than implementation constraints.
+
+\stopsection
+
+\startsection[title=Control]
+
+We already mentioned \typ {\lefthyphenmin} and \typ {\righthyphenmin}. These
+two variables control the area in a word that is subjected to hyphenation.
+Setting these values is a matter of taste but making them too small can result in
+bad hyphenation when the patterns are made with the assumptions that certain
+minima are used. Using a \typ {\lefthyphenmin} of 2 while the patterns are made
+with a value of 3 in mind is a bad idea.
+
+\startlinecorrection[blank]
+\startluacode
+context.bTABLE { option = "stretch", align= "middle" }
+ context.bTR()
+ context.bTD { ny = 2, align = "middle,lohi", style = "monobold" }
+ context.verbatim("\\lefthyphenmin")
+ context.eTD()
+ context.bTD { nx = 5, style = "monobold" }
+ context.verbatim("\\righthyphenmin")
+ context.eTD()
+ context.eTR()
+ context.bTR()
+ for right=1,5 do
+ context.bTD()
+ context.mono(right)
+ context.eTD()
+ end
+ context.eTR()
+ for left=1,5 do
+ context.bTR()
+ context.bTD()
+ context.mono(left)
+ context.eTD()
+ for right=1,5 do
+ context.bTD()
+ context("\\lefthyphenmin %s \\righthyphenmin %s \\hyphenatedword{interesting}",left,right)
+ context.eTD()
+ end
+ context.eTR()
+ end
+context.eTABLE()
+\stopluacode
+\stoplinecorrection
+
+When \TEX\ breaks a paragraph into lines it will try do so without hyphenation.
+When that fails (read: when the badness becomes too high) a next effort will take
+hyphenation into account. \footnote {Because in \LUATEX\ we always hyphenate
+there is no real gain in trying not to hyphenate. Because in traditional \TEX\
+hyphenation happens on the fly a pass without hyphenating makes more sense.} When
+the badness is still too high, an optional emergency pass can be made but only
+when the tolerances are set to permit this. In \CONTEXT\ you can try these
+settings when you get too many over- or underfull boxes reported on the console.
+
+\starttyping
+\setupalign[tolerant]
+\setupalign[verytolerant]
+\setupalign[verytolerant,stretch]
+\stoptyping
+
+Personally I tend to use the last setting, especially in automated flows. After
+all, \TEX\ will not apply stretch unless it's really needed.
+
+The two \typ {\*hyphenmin} parameters can be set any time and the current value
+is stored with each character. They can also be set with the language which we
+will see later.
+
+When \TEX\ hyphenates words it has to decide where a word starts and ends. In
+traditional \TEX\ the words starts normally at a character that falls within the
+scope of the hyphenator. It ends at when a box (hlist or vlist) is seen, but also
+at a rule, discretionary, accent (forget about this in \CONTEXT) or math. An
+example will be given in the chapter that discussed the \LUA\ alternative.
+
+\stopsection
+
+\startsection[title=Installing]
+
+ todo
+
+\stopsection
+
+\startsection[title=Modes]
+
+Languages are one of the mechanisms where you can access the current state. There are
+for instance two (official) macros that contain the current (main) language:
+
+\startbuffer
+\starttabulate[||Tc|]
+\HL
+\NC \bf macro \NC \bf value \NC \NR
+\HL
+\NC \type {\currentmainlanguage} \NC \currentmainlanguage \NC \NR
+\NC \type {\currentlanguage} \NC \currentlanguage \NC \NR
+\HL
+\stoptabulate
+\stopbuffer
+
+\getbuffer
+
+When we have set \type {\language[nl]} we get this:
+
+\start \nl \getbuffer \stop
+
+If you write a style that needs to adapt to a language you can use modes. There
+are several ways to do this:
+
+\startbuffer
+\language[nl]
+
+\startmode[**en]
+ \color[darkred]{main english}
+\stopmode
+
+\startmode[*en]
+ \color[darkred]{local english}
+\stopmode
+
+\startmode[**nl]
+ \color[darkblue]{main dutch}
+\stopmode
+
+\startmode[*nl]
+ \color[darkblue]{local dutch}
+\stopmode
+
+\startmodeset
+ [*en] {\color[darkgreen]{english set}}
+ [*nl] {\color[darkgreen]{dutch set}}
+\stopmodeset
+\stopbuffer
+
+\typebuffer
+
+This typesets:
+
+\blank \startpacked \setupindenting[no] \getbuffer \stoppacked \blank
+
+When you use setups you can use the following trick:
+
+\startbuffer
+\language[nl]
+
+\startsetups language:en
+ \color[darkorange]{something english}
+\stopsetups
+
+\startsetups language:nl
+ \color[darkorange]{something dutch}
+\stopsetups
+
+\setups[language:\currentlanguage]
+\stopbuffer
+
+\typebuffer
+
+As expected we get:
+
+\blank \start \setupindenting[no] \getbuffer \stop \blank
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-environment.tex b/doc/context/sources/general/manuals/languages/languages-environment.tex
new file mode 100644
index 000000000..2669fe0c5
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-environment.tex
@@ -0,0 +1,15 @@
+\startenvironment languages-environment
+
+ \environment manuals-explaining-environment
+ \environment manuals-explaining-cover
+
+ \usemodule [s] [languages-hyphenation]
+ \usemodule [s] [languages-frequencies]
+ \usemodule [s] [languages-sorting]
+ \usemodule [s] [languages-counters]
+ \usemodule [s] [languages-system]
+
+ \usemodule [s] [math-extensibles]
+
+\stopenvironment
+
diff --git a/doc/context/sources/general/manuals/languages/languages-goodies.tex b/doc/context/sources/general/manuals/languages/languages-goodies.tex
new file mode 100644
index 000000000..32de54db3
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-goodies.tex
@@ -0,0 +1,138 @@
+% language=uk
+
+\startcomponent languages-goodies
+
+\environment languages-environment
+
+\startchapter[title=Goodies][color=darkorange]
+
+\startsection[title=Introduction]
+
+There are some features that will only be used in rare cases. They were often
+implemented as experiment but found useful enough to keep around.
+
+\stopsection
+
+\startsection[title=Spell checking]
+
+There are some means to check the spelling of words in your document but get it
+right: \CONTEXT\ is not a spell|-|checker. These features were added in order to
+be able to do some quick checking of documents written by multiple authors. There
+are currently three options and we only show a simple examples.
+
+First you need to load word lists. These are either text files with just words
+separated by spacing.
+
+\starttyping[color=maincolor]
+foobar foo-bar foo=bar foo{}{}{}bar foo{}{}{bar}
+\stoptyping
+
+All these words become \type {foobar} which means that one can use words with
+discretionary specifications. A text list is loaded with:
+
+\startbuffer
+\loadspellchecklist[en][t:/manuals/lua/words-en.txt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Instead you can load a \LUA\ file with words. Here we use the same structure that
+we use for the spell checker provided for \SCITE:
+
+\starttyping[color=maincolor]
+return {
+ max = 9,
+ min = 6,
+ n = 2,
+ words = {
+ ["barfoo"] = "Barfoo"
+ ["foobarred"] = "foobarred",
+ }
+}
+\stoptyping
+
+We use the same load command (you can also load bytecode files with suffix \type
+{luc} this way):
+
+\startbuffer
+\loadspellchecklist[nl][t:/scite/data/context/lexers/data/spell-nl.lua]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Usage boils down to enabling the checker. If needed we can add more methods. The
+first method colors the known and unknown colors. Words shorter then the
+threshold of 4 will be skipped.
+
+\startbuffer
+\setupspellchecking[state=start,method=1]
+\en Is this written right or is this wromg?\par % m -> n error
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+You can change the colors:
+
+\starttyping
+\definecolor[word:yes] [g=.75]
+\definecolor[word:no] [r=.75]
+\stoptyping
+
+The second method doesn't show anything but produces a file \type
+{jobname.words}) with used words. The \type {found} value of \type {list} is used
+as key in the produced table.
+
+\startbuffer
+\setupspellchecking[state=start,method=2,list=found]
+\en Is this written right or is this wrong?\par
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+The produced table is:
+
+\typefile{\jobname.words}
+
+The result can be traced with a module:
+
+\startbuffer
+\usemodule[s-languages-words]
+
+\showwords
+\stopbuffer
+
+\typebuffer
+
+This shows up as:
+
+\getbuffer
+
+The third mechanism colors languages differently. We only defined a few colors:
+
+\starttyping
+\definecolor[word:en] [b=.75]
+\definecolor[word:de] [r=.75]
+\definecolor[word:nl] [g=.75]
+\definecolor[word:unknown][r=.75,g=.75]
+\stoptyping
+
+but you can of course define a color for your favourite language in a similar way.
+
+\startbuffer
+\setupspellchecking[state=start,method=3]
+\en Is this written right or is this wrong?\par
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-hyphenation.tex b/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
new file mode 100644
index 000000000..6698717be
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
@@ -0,0 +1,876 @@
+% language=uk
+
+\startcomponent languages-hyphenation
+
+\environment languages-environment
+
+\startchapter[title=Hyphenation][color=darkmagenta]
+
+\startsection[title=How it works]
+
+Proper hyphenation is one of the strong points of \TEX. Hyphenation in \TEX\ is
+done using so called hyphenation patterns. Making these patterns is an art
+and most users (including me) happily use whatever is available. Patterns can be
+created automatically using \type {patgen} but often manual tweaking is needed
+too. A pattern looks as follows:
+
+\starttyping
+pat1tern
+\stoptyping
+
+This means as much as: you can split the word \type {pattern} in two pieces, with
+a hyphen between the two \type {t}'s. Actually it will also split the word \type
+{patterns} because the hyphenation mechanism looks at substrings. When no number
+between characters in a pattern is given, a zero is assumed. This means as much
+as {\em undefined}. An even number inhibits hyphenation, an odd number permits
+it. The larger the number (weight), the more influence it has. A more restricted
+pattern is:
+
+\starttyping
+.pat1tern.
+\stoptyping
+
+Here the periods set the word boundaries. The pattern dictionary for us
+english has smaller patterns and the next trace shows how these are applied.
+
+\starthyphenation[traditional]
+\showhyphenationtrace[en][pattern]
+\stophyphenation
+
+The effective hyphenation of a word is determined by several factors:
+
+\startitemize[packed]
+\startitem the current language, each language can have different patterns \stopitem
+\startitem the characters, as some characters might block hyphenation \stopitem
+\startitem the settings of \type {\lefthyphenmin} and \type {\righthyphenmin} \stopitem
+\stopitemize
+
+A place where a word can be hyphenated is called a discretionary. When \TEX\
+analyzes a stream, it will inject discretionary nodes into that stream.
+
+\starttyping
+pat\discretionary{-}{}{}tern.
+\stoptyping
+
+In traditional \TEX\ hyphenation, ligature building and kerning are tightly
+interwoven which is quite effective. However, there was also a strong
+relationship between the current font and hyphenation. This is a side effect of
+traditional \TEX\ having at most 256 characters in a font and the fact that the
+used character is fact a reference to a slot in a font. There a character in the
+input initially ends up as a character node and eventually becomes a glyph node.
+For instance two characters \type {fi} can become a ligature glyph representing
+this combination.
+
+In \LUATEX\ the hyphenation, ligature building and kerning stages are separated
+and can be overloaded. In \CONTEXT\ all three can be replaced by code written in
+\LUA. Because normally hyphenation happens before font logic is applied, there is
+no relationship with font encoding. I wrote the first \LUA\ version of the
+hyohenator on a rainy weekend and the result was not that bad so it was presented
+at the 2014 \CONTEXT\ meeting. After some polishing I decided to add this routine
+to the standard \MKIV\ repertoire which then involved some proper interfacing.
+
+You can enable the \LUA\ variant with the following command:
+
+\starttyping
+\setuphyphenation[method=traditional]
+\stoptyping
+
+We call this method \type {traditional} because in principle we can have
+many more methods and this one is (supposed to be) mostly compatible to the
+built-in method. This is a global setting. You can switch back with:
+
+\starttyping
+\setuphyphenation[method=default]
+\stoptyping
+
+In the next sections we will see how we can provide alternatives within the
+traditional method. These alternatives can be set local and therefore can operate
+over a limited range of characters.
+
+One complication in interfacing is that \TEX\ has grouping (which permits local
+settings) and we want to limit some of the above functionality using groups. At
+the same time hyphenation is a paragraph related action so we need to enable the
+hyphenation related code at a global level (or at least make sure that it gets
+exercised by forcing a \type {\par}). That means that the alternative
+hyphenator has to be quite compatible so that we could just enable it for a whole
+document. This can have an impact on performance but in practice that can be
+neglected. In \LUATEX\ the \LUA\ variant is 4~times slower than the built-in one,
+in \LUAJITTEX\ it's 3~times slower. But the good news is that the amount of time
+spent in the hyphenator is relatively small compared to other manipulations and
+macro expansion. The additional time needed for loading and preparing the
+patterns into a more \LUA\ specific format can be neglected.
+
+You can check how words get hyphenated using the patterns management script:
+
+\starttyping
+>mtxrun --script patterns --hyphenate language
+
+hyphenator |
+hyphenator | . l a n g u a g e . . l a n g u a g e .
+hyphenator | 0a2n0 0 0 2 0 0 0 0 0 0
+hyphenator | 2a0n0g0 0 2 2 0 0 0 0 0 0
+hyphenator | 0n1g0u0 0 2 2 1 0 0 0 0 0
+hyphenator | 0g0u4a0 0 2 2 1 0 4 0 0 0
+hyphenator | 2g0e0.0 0 2 2 1 0 4 2 0 0
+hyphenator | .0l2a2n1g0u4a2g0e0. . l a n-g u a g e .
+hyphenator |
+mtx-patterns | us 3 3 : language : lan-guage
+\stoptyping
+
+\stopsection
+
+\startsection[title=The last words]
+
+Mid 2014 we had to upgrade a style for a \PDF\ assembly service: chapters from
+(technical) school books are combined into arbitrary new books. There are some
+nasty aspects with this flow: for instance, all section numbers in a chapter are
+replaced by new numbers and this also involves figure and table prefixes.
+It boils down to splitting up books, analyzing the typeset content and
+preparing it for replacements. The structure is described in \XML\ files so that
+we can generate tables of contents. The reason for not generating from \XML\
+sources is that the publisher doesn't have a \XML\ workflow and that books
+already were available. Also, books from several series are combined and even
+within a series structure (and rendering) differs.
+
+What has this to do with hyphenation? Writing a style for such a flow always
+results in a more complex one that estimated and as usual it's in the details.
+The original style was written in \MKII\ and used some box juggling to achieve
+reasonable results but in \MKIV\ we can do better.
+
+Each chapter has a title and books get titles and subtitles as well. The titles
+are typeset each time a new book is composed. This happens within some layout
+constraints. Think of constraints like these:
+
+\startitemize[packed]
+\startitem the title goes on top of a shape that doesn't permit much overflow \stopitem
+\startitem there can be very long words (not uncommon in Dutch or German) \stopitem
+\startitem a short word or hyphenated part should not end up on the last line \stopitem
+\startitem the left and right hyphenation minima are at least four \stopitem
+\stopitemize
+
+The last requirement is a compromise because in most cases publishers seem to
+want ragged right not hyphenated rendering (at least in Dutch schoolbooks). The
+arguments for this are quite weak and probably originate in fear of bad rendering
+given past experiences. It's this kind of situations that drive the development
+of the more obscure features that ship with \CONTEXT\ and a (partial) solution
+for this specific case will be given later.
+
+If you look at thousands of titles and turn these into (small) paragraphs \TEX\
+does a pretty good job. It's the few exceptions that we need to catch. The next
+examples demonstrate such an extreme case.
+
+\startbuffer[example]
+\dorecurse{5} { % dejavu
+ \startlinecorrection[blank]
+ \bTABLE
+ \bTR
+ \bTD[align=middle,width=2em,foregroundstyle=bold]
+ #1
+ \eTD
+ \bTD[align={verytolerant,flushleft},width=15em,offset=1ex]
+ \hsize \dimexpr11\emwidth-#1\dimexpr.5\emwidth\relax
+ \dontcomplain
+ \lefthyphenmin=4\righthyphenmin=4
+ \blackrule[color=darkyellow,width=\hsize,height=-3pt,depth=5pt]\par
+ \begstrut\getbuffer[long]\endstrut\par
+ \eTD
+ \bTD[align={verytolerant,flushleft},width=15em,offset=1ex]
+ \sethyphenationfeatures[demo]
+ \hsize \dimexpr11\emwidth-#1\dimexpr.5\emwidth\relax
+ \dontcomplain
+ \blackrule[color=darkyellow,width=\hsize,height=-3pt,depth=5pt]\par
+ \begstrut\getbuffer[long]\endstrut\par
+ \eTD
+ \eTR
+ \eTABLE
+ \stoplinecorrection
+}
+\stopbuffer
+
+\definehyphenationfeatures
+ [demo]
+ [rightwords=1,
+ lefthyphenmin=4,
+ righthyphenmin=4]
+
+\startbuffer[long]
+a verylongword and then anevenlongerword
+\stopbuffer
+
+\starthyphenation[traditional]
+ \enabletrackers[hyphenator.visualize]
+ \getbuffer[example]\par
+ \disabletrackers[hyphenator.visualize]
+\stophyphenation
+
+Of course in practice there need to be some reasonable width and when we pose
+these limits the longest possible word should fit into the allocated space. In
+these examples the rule shows the width. In the right columns we see a red
+colored word and that one will not get hyphenated.
+
+\stopsection
+
+\startsection[title=Explicit hyphens]
+
+Another special case that we needed to handle were (compound) words with explicit
+hyphens. Because often data comes from \XML\ files we can not really control the
+typesetting as in a \TEX\ document where the author sees what gets done. So here
+we need a way to turn these hyphens into proper hyphenation directives and at the
+same time permit the words to be hyphenated.
+
+\definehyphenationfeatures
+ [demo]
+ [hyphens=yes,
+ lefthyphenmin=4,
+ righthyphenmin=4]
+
+\startbuffer[long]
+a very-long-word and then an-even-longer-word
+\stopbuffer
+
+\starthyphenation[traditional]
+ \enabletrackers[hyphenator.visualize]
+ \getbuffer[example]\par
+ \disabletrackers[hyphenator.visualize]
+\stophyphenation
+
+\stopsection
+
+\startsection[title=Extended patterns]
+
+As with more opened up mechanisms, in \MKIV\ we can extend functionality. As an
+example I have implemented the extensions discussed in the article by László
+Németh in the Proceedings of Euro\TEX\ 2006: {\em Hyphenation in OpenOffice.org}
+(TUGboat, Volume 27, 2006). The syntax for these extension is somewhat ugly and
+involves optional offsets and ranges. \footnote {I'm not sure if there were ever
+patterns released that used this syntax.}
+
+\startbuffer
+\registerhyphenationpattern[nl][e1ë/e=e]
+\registerhyphenationpattern[nl][a9atje./a=t,1,3]
+\registerhyphenationpattern[en][eigh1tee/t=t,5,1]
+\registerhyphenationpattern[de][c1k/k=k]
+\registerhyphenationpattern[de][schif1f/ff=f,5,2]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These patterns result in the following hyphenations:
+
+\starthyphenation[traditional]
+ \switchtobodyfont[big]
+ \starttabulate[|||]
+ \NC reëel \NC \language[nl]\hyphenatedcoloredword{reëel} \NC \NR
+ \NC omaatje \NC \language[nl]\hyphenatedcoloredword{omaatje} \NC \NR
+ \NC eighteen \NC \language[en]\hyphenatedcoloredword{eighteen} \NC \NR
+ \NC Zucker \NC \language[de]\hyphenatedcoloredword{Zucker} \NC \NR
+ \NC Schiffahrt \NC \language[de]\hyphenatedcoloredword{Schiffahrt} \NC \NR
+ \stoptabulate
+\stophyphenation
+
+In a specification, the \type {.} indicates a word boundary and numbers indicate
+the weight of a breakpoint. The optional extended specification comes after the
+\type {/}. The values separated by a \type {=} are the pre and post sequences:
+these end up at the end of the current line and beginning of the next one. The
+optional numbers are the start position and length. These default to~1 and~2, so
+in the first example they identify \type {eë} (the weights don't count).
+
+There is a pitfall here. When the language already has patterns that for
+instance prohibit a hyphen between \type {e} and type {ë}, like \type{e2ë}, we
+need to make sure that we give our new one a higher priority, which is why we
+used a \type{e9ë}.
+
+This feature is somewhat experimental and can be improved. Here is a more \LUA-ish
+way of setting such patterns:
+
+\starttyping
+local registerpattern =
+ languages.hyphenators.traditional.registerpattern
+
+registerpattern("nl","e1ë", {
+ start = 1,
+ length = 2,
+ before = "e",
+ after = "e",
+} )
+
+registerpattern("nl","a9atje./a=t,1,3")
+\stoptyping
+
+Just adding extra patterns to an existing set without much testing is not wise. For
+instance we could add these to the dutch dictionary:
+
+\starttyping
+\registerhyphenationpattern[nl][e3ë/e=e]
+\registerhyphenationpattern[nl][o3ë/o=e]
+\registerhyphenationpattern[nl][e3ï/e=i]
+\registerhyphenationpattern[nl][i3ë/i=e]
+\registerhyphenationpattern[nl][a5atje./a=t,1,3]
+\registerhyphenationpattern[nl][toma8at5je]
+\stoptyping
+
+That would work oke well for words like
+
+\starttyping
+coëfficiënt
+geïntroduceerd
+copiëren
+omaatje
+tomaatje
+\stoptyping
+
+However, the last word only goes right because we explicitly added a pattern
+for it. One reason is that the existing patterns already contain rules to
+prevent weird hyphenations. The same is true for the accented characters. So,
+consider these examples and coordinate additional patterns with other users
+so that errors can be identified.
+
+\stopsection
+
+\startsection[title=Exceptions]
+
+We have a variant on the \TEX\ primitive \type {\hyphenation}, the official way
+to register a specific way to hyphenate a word.
+
+\startbuffer
+\registerhyphenationexception[aaaaa-bbbbb]
+aaaaabbbbb \par
+\stopbuffer
+
+\typebuffer
+
+This code is self explaining and results in:
+
+\blank
+
+\starthyphenation[traditional]
+\setupindenting[no]\hsize 1mm \lefthyphenmin 1 \righthyphenmin 1 \getbuffer
+\stophyphenation
+
+There can be multiple hyphens and even multiple words in such a specification:
+
+\startbuffer
+\registerhyphenationexception[aaaaa-bbbbb cc-ccc-ddd-dd]
+aaaaabbbbb \par
+cccccddddd \par
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\blank
+
+\starthyphenation[traditional]
+\setupindenting[no]\hsize 1mm \lefthyphenmin 1 \righthyphenmin 1 \getbuffer
+\stophyphenation
+
+
+\stopsection
+
+\startsection[title=Boundaries]
+
+A box, rule, math or discretionary will end a word and prohibit hyphenation
+of that word. Take this example:
+
+\startbuffer[demo]
+whatever \par
+whatever\hbox{!} \par
+\vl whatever\vl \par
+whatever$x$ \par
+whatever-whatever \par
+\stopbuffer
+
+\typebuffer[demo]
+
+These lines will hyphenate differently and in traditional \TEX\ you need to
+insert penalties and|/|or glue to get around it. In the \LUA\ variant we can
+enable that limitation.
+
+\startbuffer
+\definehyphenationfeatures
+ [strict]
+ [rightedge=tex]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we show the three variants: traditional \TEX\ and \LUA\ with and without
+strict settings.
+
+\starttabulate[|p|p|p|]
+\HL
+\NC \ttbf \hbox to 11em{default\hss}
+\NC \ttbf \hbox to 11em{traditional\hss}
+\NC \ttbf \hbox to 11em{traditional strict\hss}
+\NC \NR
+\HL
+\NC \starthyphenation[default] \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \starthyphenation[traditional] \sethyphenationfeatures[strict]
+ \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \NR
+\HL
+\stoptabulate
+
+By default \CONTEXT\ is configured to hyphenate words that start with an
+uppercase character. This behaviour is controlled in \TEX\ by the \typ {\uchyph}
+variable. A positive value will enable this and a negative one disables it.
+
+\starttabulate[|p|p|p|p|]
+\HL
+\NC \ttbf \hbox to 8em{default 0\hss}
+\NC \ttbf \hbox to 8em{default 1\hss}
+\NC \ttbf \hbox to 8em{traditional 0\hss}
+\NC \ttbf \hbox to 8em{traditional 1\hss}
+\NC \NR
+\HL
+\NC \starthyphenation[default] \hsize1mm \uchyph\zerocount TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \uchyph\zerocount TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[default] \hsize1mm \uchyph\plusone TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \uchyph\plusone TEXified \dontcomplain \stophyphenation
+\NC \NR
+\HL
+\stoptabulate
+
+The \LUA\ variants behaves the same as the built-in implementation (that of course
+remains the reference).
+
+\stopsection
+
+\startsection[title=Plug-ins]
+
+The default hyphenator is similar to the built-in one, with a couple of
+extensions as mentioned. However, you can plug in your own code, given that it
+does return a proper hyphenation result. One reason for providing this plug is
+that there are users who want to play with hyphenators based on a different
+logic. In \CONTEXT\ we already have some methods to deal with languages that
+(for instance) have no spaces but split on words or syllabes. A more tight
+integration with the hyphenator can have advantages so I will explore these
+options when there is demand.
+
+A result table indicates where we can break a word. If we have a four character
+word and can break after the second character, the result looks like this:
+
+\starttyping
+result = { false, true, false, false }
+\stoptyping
+
+Instead of \type {true} we can also have a table that has entries like the
+extensions discussed in a previous section. Let's give an example of a
+plug-in.
+
+\startbuffer
+\startluacode
+ local subset = {
+ a = true,
+ e = true,
+ i = true,
+ o = true,
+ u = true,
+ y = true,
+ }
+
+ languages.hyphenators.traditional.installmethod("test",
+ function(dictionary,word,n)
+ local t = { }
+ for i=1,#word do
+ local w = word[i]
+ if subset[w] then
+ t[i] = {
+ before = "<" .. w,
+ after = w .. ">",
+ left = false,
+ right = false,
+ }
+ else
+ t[i] = false
+ end
+ end
+ return t
+ end
+ )
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we hyphenate on vowels and surround them by angle brackets when
+split over lines. This alternative is installed as follows:
+
+\startbuffer
+\definehyphenationfeatures
+ [demo]
+ [alternative=test]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can now use it as follows:
+
+\starttyping
+\setuphyphenation[method=traditional]
+\sethyphenationfeatures[demo]
+\stoptyping
+
+When applied to one the tufte example we get:
+
+\startbuffer[demo]
+\starthyphenation[traditional]
+ \setuptolerance[tolerant]
+ \sethyphenationfeatures[demo]
+ \dontleavehmode
+ \input tufte\relax
+\stophyphenation
+\stopbuffer
+
+\blank \startnarrower \getbuffer[demo] \stopnarrower \blank
+
+A more realistic (but not perfect) example is the following:
+
+\startbuffer
+\startluacode
+ local packslashes = false
+
+ local specials = {
+ ["!"] = "before", ["?"] = "before",
+ ['"'] = "before", ["'"] = "before",
+ ["/"] = "before", ["\\"] = "before",
+ ["#"] = "before",
+ ["$"] = "before",
+ ["%"] = "before",
+ ["&"] = "before",
+ ["*"] = "before",
+ ["+"] = "before", ["-"] = "before",
+ [","] = "before", ["."] = "before",
+ [":"] = "before", [";"] = "before",
+ ["<"] = "before", [">"] = "before",
+ ["="] = "before",
+ ["@"] = "before",
+ ["("] = "before",
+ ["["] = "before",
+ ["{"] = "before",
+ ["^"] = "before", ["_"] = "before",
+ ["`"] = "before",
+ ["|"] = "before",
+ ["~"] = "before",
+ --
+ [")"] = "after",
+ ["]"] = "after",
+ ["}"] = "after",
+ }
+
+ languages.hyphenators.traditional.installmethod("url",
+ function(dictionary,word,n)
+ local t = { }
+ local p = nil
+ for i=1,#word do
+ local w = word[i]
+ local s = specials[w]
+ if s == "after" then
+ s = {
+ start = 1,
+ length = 1,
+ after = w,
+ left = false,
+ right = false,
+ }
+ specials[w] = s
+ elseif s == "before" then
+ s = {
+ start = 1,
+ length = 1,
+ before = w,
+ left = false,
+ right = false,
+ }
+ specials[w] = s
+ end
+ if not s then
+ s = false
+ elseif w == p and w == "/" then
+ t[i-1] = false
+ end
+ t[i] = s
+ if packslashes then
+ p = w
+ end
+ end
+ return t
+ end
+ )
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Again we define a plug:
+
+\startbuffer
+\definehyphenationfeatures
+ [url]
+ [characters=all,
+ alternative=url]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So, we only break a line after symbols.
+
+\startlinecorrection[blank]
+ \starthyphenation[traditional]
+ \tt
+ \sethyphenationfeatures[url]
+ \scale[width=\hsize]{\hyphenatedcoloredword{http://www.pragma-ade.nl}}
+ \stophyphenation
+\stoplinecorrection
+
+A quick test can look as follows:
+
+\startbuffer
+\starthyphenation[traditional]
+ \sethyphenationfeatures[url]
+ \tt
+ \dontcomplain
+ \hsize 1mm
+ http://www.pragma-ade.nl
+\stophyphenation
+\stopbuffer
+
+\typebuffer
+
+Or:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Blocking ligatures]
+
+Yet another predefined feature is the ability to block a ligature. In
+traditional \TEX\ this can be done by putting a \type {{}} between
+the characters, although that effect can get lost when the text is
+manipulated. The natural way to do this in a \UNICODE\ environment
+is to use the special characters \type {zwj} and \type {zwnj}.
+
+We use the following example lines:
+
+\startbuffer[sample]
+supereffective \blank
+superef\zwnj fective
+\stopbuffer
+
+\typebuffer[sample]
+
+and define two featuresets:
+
+\startbuffer
+\definehyphenationfeatures
+ [demo-1]
+ [characters=\zwnj\zwj,
+ joiners=yes]
+
+\definehyphenationfeatures
+ [demo-2]
+ [joiners=no]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We limit the width to 1mm and get:
+
+\startlinecorrection[blank]
+\bTABLE[option=stretch,offset=.5ex]
+ \bTR
+ \bTD \tx
+ \type{method=default}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}\par
+ \type{featureset=demo-1}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}\par
+ \type{featureset=demo-2}
+ \eTD
+ \eTR
+ \bTR
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[default]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \sethyphenationfeatures[demo-1]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \sethyphenationfeatures[demo-2]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \eTR
+\eTABLE
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Special characters]
+
+The \type {characters} example can be used (to some extend) to do the
+same as the breakpoints mechanism (compounds).
+
+\startbuffer
+\definehyphenationfeatures
+ [demo-3]
+ [characters={()[]}]
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+\startbuffer[demo]
+\starthyphenation[traditional]
+ \sethyphenationfeatures[demo-3]
+ \dontcomplain
+ \hsize 1mm
+ we use (super)special(ized) patterns
+\stophyphenation
+\stopbuffer
+
+\typebuffer[demo] \blank \getbuffer[demo] \blank
+
+We can make this more clever by adding patterns:
+
+\startbuffer
+\registerhyphenationpattern[en][)9]
+\registerhyphenationpattern[en][9(]
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+This gives:
+
+\blank \getbuffer[demo] \blank
+
+A detailed trace shows that these patterns get applied:
+
+\starthyphenation[traditional]
+ \ttx
+ \showhyphenationtrace[en][(super)special(ized)]
+\stophyphenation
+
+\unregisterhyphenationpattern[en][)9]
+\unregisterhyphenationpattern[en][9(]
+
+The somewhat weird hyphens at the edges will in practice not show up because
+there is always one regular character there.
+
+\stopsection
+
+\startsection[title=Counting]
+
+There is not much you can do about patterns. It's a craft to make them and so
+they are shipped with the distribution. In order to hyphenate well, \TEX\ looks
+at some character properties. In \CONTEXT\ only the characters used in the
+patterns of a language get tagged as valid in a word.
+
+The following example illustrates that there can be corner cases. In fact, this
+example might render differently depending on the patterns available. First we
+define an extra language, based on French.
+
+\startbuffer
+\installlanguage[frf][default=fr,patterns=fr,factor=yes]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we set the \type {factor} parameter which tells the loader that it should
+look at the characters used in a special way: some count for none, and some count
+for more than one when determining the min values used to determine if and where
+hyphenation is to be applied.
+
+\startbuffer
+\startmixedcolumns[n=3,balance=yes]
+ \hsize 1mm \dontcomplain
+ \language[fr] aesop oedipus æsop œdipus \column
+ \hsize 1mm \dontcomplain
+ \language[frf] aesop oedipus æsop œdipus \column
+ \startexceptions æ-sop \stopexceptions
+ \hsize 1mm \dontcomplain
+ \language[frf] aesop oedipus æsop œdipus
+\stopmixedcolumns
+\stopbuffer
+
+\typebuffer
+
+We get three (when writing this manual) different columns:
+
+\getbuffer
+
+The trick is in the \type {factor}: when set to \type {yes} an \type {æ} is
+counted as two characters. Combining marks count as zero but you will not
+find them being used as we already resolve them in an earlier stage.
+
+\startluacode
+context.startcolumns { n = 2 }
+context.starttabulate { "|Tc|c|c|l|" }
+for u, data in table.sortedhash(languages.hjcounts) do
+ if data.category ~= "combining" then
+ context.NC() context("%05U",u)
+ context.NC() context("%c",u)
+ context.NC() context(data.count)
+ context.NC() context(data.category)
+ context.NC() context.NR()
+ end
+end
+context.stoptabulate()
+context.stopcolumns()
+\stopluacode
+
+It is very unlikely to find an \type {ffi} in the input and even an \type {ij} is
+rare. The \type {æ} is marked as character and the \type {œ} a ligatyure in
+\UNICODE. Maybe all the characters here are dubious but al least we provide a
+way to experiment with them.
+
+\stopsection
+
+\startsection[title=Tracing]
+
+Among the tracing options (low level trackers) there is one for pattern developers:
+
+\startbuffer
+\usemodule[s-languages-hyphenation]
+
+\startcomparepatterns[de,nl,en,fr]
+ \input zapf \quad (\showcomparepatternslegend)
+\stopcomparepatterns
+\stopbuffer
+
+\typebuffer
+
+The different hyphenation points are shown with colored bars. Some valid points
+might not be shown because the font engine can collapse successive
+discretionaries.
+
+\getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-introduction.tex b/doc/context/sources/general/manuals/languages/languages-introduction.tex
new file mode 100644
index 000000000..25bbb1a90
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-introduction.tex
@@ -0,0 +1,69 @@
+% language=uk
+
+\startcomponent languages-introduction
+
+\environment languages-environment
+
+\startchapter[title=Introduction][color=darkgray]
+
+This document describes an important property of the \TEX\ typesetting system and
+\CONTEXT\ in particular: the ability to deal with different languages at the same
+time. With languages we refer to natural languages. So, we're not going to
+discuss the \TEX\ language itself, not \METAPOST, nor \LUA.
+
+The original application of \TEX\ was English that uses the Latin script. The
+fonts that came with \TEX\ were suitable for that usage. When lines became too
+long they could be hyphenated using so called hyphenation patterns. Due to the
+implementation for many years there was a close relationship between fonts and
+hyphenation. Although at some point many more languages and scripts were
+supported, it was only when the \UNICODE\ aware variants showed up that
+hyphenation and fonts were decoupled. This makes it much more easier to mix
+languages that use different scripts. Although Greek, Cyrillic, Arabic, Chinese,
+Japanese, Korean and other languages have been supported for a while using
+(sometimes dirty) tricks, we now have cleaner implementations.
+
+We can hyphenate words in all languages (and scripts) that have a need for it,
+that is, split it at the end of a line and add a symbol before and|/|or after the
+break. The way words are broken into parts is called hyphenation and so called
+patterns are used to achieve that goal. The way these patterns are constructed
+and applied was part of the research related to \TEX\ development. The method
+used is also applied in other programs and is probably one of the few popular
+ways to deal with hyphenation. There have been ideas about extensions that cover
+the demands of certain languages but so far nothing better has shown up. In the
+end \TEX\ does a pretty decent job and more advanced tricks don't necessarily
+lead to better results.
+
+Hyphenation is driven by a language number and that's about it. This means that
+one cannot claim that \TEX\ in its raw form supports languages, other than that
+it can hyphenate and use fonts that provide the glyphs. It's upto a macro package
+to wrap this into a mechanism that provides the user an interface. So, when we
+speak about language support, hyphenation is only one aspect. Labels, like the
+\type {figure} in {\em figure~1.2} need to adapt to the main document language.
+When dates are shown they can be language specific. Scientific units and math
+function names can also be subjected to translation. Registers and other lists
+have to be sorted according to specific rules. Spacing dan differ per language.
+
+In this manual we will cover some of functionality in \CONTEXT\ \MKIV\ that
+relates to languages (and scripts). This manual is a compliment to other manuals,
+articles and documentation. Here we mostly focus on the language aspects. Some of
+the content (or maybe most) might looks alien and complex to you. This is because
+one purpose of this manual is to provide a place to wrap up some aspects of
+\CONTEXT. If you're not interested in that, just stick to the more general
+manuals that also cover language aspects.
+
+\startnotabene
+ This document is still under construction. The functionality discussed here
+ will stay and more might show up. Of course there are errors, and they're all
+ mine. The text is not checked for spelling errors. Feel free to let me know
+ what should get added.
+\stopnotabene
+
+\startlines
+Hans Hagen
+PRAGMA ADE, Hasselt NL
+2013 \emdash\ 2016
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-labels.tex b/doc/context/sources/general/manuals/languages/languages-labels.tex
new file mode 100644
index 000000000..6c806ab1c
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-labels.tex
@@ -0,0 +1,141 @@
+% language=uk
+
+\startcomponent languages-labels
+
+\environment languages-environment
+
+\startchapter[title=Labels][color=darkcyan]
+
+\startsection[title=Introduction]
+
+When we started using \TEX, I naturally started with plain \TEX. But it didn't
+take long before we tried \LATEX. Because our documents were in Dutch one of the
+first fights with this package was to get rid of the english labels. Because
+rather soon we decided to cook up an alternative package, a decent label
+mechanism was one of the first things to show up. And as soon as multiple
+language typesetting gets into view, such a mechanism becomes one of those
+language dependent features. In this chapter the basics will be covered.
+
+\stopsection
+
+\startsection[title=Defining labels]
+
+Before we define a label we need to define a label class. You probably seldom
+need that but this is how it's done:
+
+\startbuffer
+\definelabelclass [mylabel]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There are some classes predefined:
+
+\starttabulate[|lB|l|]
+ \NC head \NC (complete) titles like \headtext {chapter} and \headtext {figure} \NC \NR
+ \NC label \NC in||text labels like \labeltext {chapter} and \labeltext {figure} \NC \NR
+ \NC mathlabel \NC function names like \mathlabeltext{sin} and \mathlabeltext{cos} \NC \NR
+ \NC taglabel \NC labels used for tagging purposed in the backend \NC \NR
+ \NC btxlabel \NC labels used in typesetting bibliographic items \NC \NR
+\stoptabulate
+
+The physical units mechanism also uses labels: unit, operator, prefix and suffix.
+All these labels are defined per language with a fall back on english.
+
+Given that we have defined class \type {mylabel}, a label itself is set like
+this:
+
+\startbuffer
+\setupmylabeltext
+ [en]
+ [first={<after first},
+ second={{before second>},{<after second}}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The first argument (the language) is optional. In the next section we will see
+how these labels are used. A lot of labels are predefined, in \MKIV\ this happens
+in the file \type {lang-txt.lua}. There is no need to adapt this file as you can
+always add labels run time.
+
+\stopsection
+
+\startsection[title=Using labels]
+
+How a label is called depends on the way it needs to be used. In any case the
+main language set determines the language of the label. So, when in an Dutch text
+we temporary switch to German, the Dutch labels are used.
+
+\startbuffer
+\starttabulate[||||]
+ \NC \bf command \NC \ttbf first \NC \ttbf {second} \NC \NR
+ \HL
+ \NC \type {\leftmylabeltext {tag}} \NC \leftmylabeltext {first} \NC \leftmylabeltext {second} \NC \NR
+ \NC \type {\rightmylabeltext{tag}} \NC \rightmylabeltext{first} \NC \rightmylabeltext{second} \NC \NR
+ \NC \type {\mylabeltext {tag}} \NC \mylabeltext {first} \NC \mylabeltext {second} \NC \NR
+ \NC \type {\mylabeltexts {tag}{text}} \NC \mylabeltexts {first}{text} \NC \mylabeltexts {second}{text} \NC \NR
+\stoptabulate
+\stopbuffer
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Hooks]
+
+Some mechanisms have label support built in, most noticeably sections
+heads and numbered items, like figure captions.
+
+\startbuffer
+\definehead
+ [myhead]
+ [subsection]
+
+\setuphead
+ [myhead]
+ [bodypartlabel=bodypartmyhead]
+
+\setuplabeltext
+ [en]
+ [bodypartmyhead=My Head: ]
+
+\myhead{Welcome}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The head text label class can be used as follows:
+
+\startbuffer
+\setupheadtext
+ [SomeHead=Just A Title]
+
+\subsection
+ [title=\headtext{SomeHead}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+A label will obey the style settings, as in:
+
+\startbuffer
+\definehead
+ [MyFancyHead]
+ [subsection]
+ [style={\bs\setcharactercasing[Words]}]
+
+\setupheadtext
+ [SomeHead=just another title]
+
+\MyFancyHead
+ [title=\headtext{SomeHead}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-mkiv.tex b/doc/context/sources/general/manuals/languages/languages-mkiv.tex
new file mode 100644
index 000000000..98ca84814
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-mkiv.tex
@@ -0,0 +1,61 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\enablemode[simple] % ,oversized
+
+\startbuffer[abstract]
+
+ This book explains how we support languages (and scripts) in \CONTEXT\ \MKIV\
+ and \LUATEX. Some of the mechanisms discussed are generic and not \CONTEXT\
+ specific. We discuss the way languages are dealt with in the engine,
+ hyphenation, standard features and additional goodies. Tracing and the
+ extensibility of code are also discussed.
+
+\stopbuffer
+
+\environment languages-environment
+
+\startdocument
+ [author=Hans Hagen,
+ title=Languages in \ConTeXt,
+ subtitle=explaining luatex and mkiv,
+ affiliation=PRAGMA ADE,
+ comment=work in progress,
+ cover:color:1=darkmagenta,
+ cover:color:2=darkorange,
+ cover:color:3=darkyellow,
+ cover:color:4=darkcyan,
+ cover:color:5=darkgray]
+
+ \startfrontmatter
+ \component manuals-explaining-contents
+ \component languages-introduction
+ \stopfrontmatter
+
+ \startbodymatter
+ \component languages-basics
+ \component languages-hyphenation
+ \component languages-labels
+ \component languages-numbering
+ \component languages-typesetting
+ \component languages-goodies
+ \component languages-sorting
+ \stopbodymatter
+
+ \startappendices
+ \component languages-appendix
+ \stopappendices
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/languages/languages-numbering.tex b/doc/context/sources/general/manuals/languages/languages-numbering.tex
new file mode 100644
index 000000000..3464826df
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-numbering.tex
@@ -0,0 +1,307 @@
+% language=uk
+
+\startcomponent languages-numbering
+
+\environment languages-environment
+
+\startchapter[title=Numbering][color=darkgreen]
+
+\startsection[title=Introduction]
+
+Numbering is complex and in \CONTEXT\ it's not easy either. This is because we
+not only have 1, 2, 3 \unknown\ but also sub numbers like 1a, 1b, 1ic \unknown\
+or 1.a, 1.b, 1.c \unknown\ There can be many levels, different separators, final
+symbols. As we're talking languages we only discuss conversion here: the
+mechanism that turns a number in for instance a letter. It happens that the
+mapping from a number onto a letter is language dependent. The next lines show
+how English, Spanish and Slovenian numbers:
+
+\blank
+\startpacked
+\startcolor[maincolor]
+\dontleavehmode
+ {\ttbf\mainlanguage[en]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\dontleavehmode
+ {\ttbf\mainlanguage[es]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\dontleavehmode
+ {\ttbf\mainlanguage[sl]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\stopcolor
+\stoppacked
+\blank
+
+You convert a number into a letter with:
+
+\starttyping
+\convertnumber{alphabetic}{15}
+\stoptyping
+
+There is also \type {\uconvertnumber} which does not expand unless typesetting
+is going on. Normally you don't need to bother about this.
+
+The \type {alphabetic} converter adapts to the current main language. When a
+language has no special alphabet, the regular 26 characters are used.
+
+A converter can also convert to a roman numeral, a language specific ordered
+list, a day or month, an ordinal string and again there can be a language
+specific conversion. The general conversion macro takes a conversion name and
+a number. When a conversion can be set (for instance in an itemized list, or in
+section numbering) you can use these names. You can define additional
+converters if needed, as long as the converter can handle a number.
+
+\starttyping
+\defineconversion [alphabetic] [\alphabeticnumerals]
+\stoptyping
+
+Here \type {\alphabeticnumerals} is a converter. If you look into the source of
+\CONTEXT\ you will see that many converters are calling out to \LUA, where we
+have implemented those specific conversions. The following table has long and
+short names. The short one are historic.
+
+\starttabulate
+\FL
+\NC month \NC \type {\monthlong} \NC \NR
+\NC month:mnem \NC \type {\monthshort} \NC \NR
+\ML
+\NC character \NC \type {\character} \NC \NR
+\NC Character \NC \type {\Character} \NC \NR
+\NC characters \NC \type {\characters} \NC \NR
+\NC Characters \NC \type {\Characters} \NC \NR
+\ML
+\NC AK \NC \type {\smallcappedcharacters} \NC \NR
+\NC KA \NC \type {\smallcappedcharacters} \NC \NR
+\ML
+\NC alphabetic a \NC \type {\alphabeticnumerals} \NC \NR
+\NC Alphabetic A \NC \type {\Alphabeticnumerals} \NC \NR
+\ML
+\NC number numbers n \NC \type {\numbers} \NC \NR
+\NC Numbers N \NC \type {\Numbers} \NC \NR
+\NC mediaeval m \NC \type {\mediaeval} \NC \NR
+\ML
+\NC word words \NC \type {\verbosenumber} \NC \NR
+\NC Word Words \NC \type {\VerboseNumber} \NC \NR
+\ML
+\NC ordinal \NC \type {\ordinalnumber} \NC \NR
+\NC Ordinal \NC \type {\Ordinalnumber} \NC \NR
+\ML
+\NC romannumerals i r \NC \type {\romannumerals} \NC \NR
+\NC Romannumerals I R \NC \type {\Romannumerals} \NC \NR
+\ML
+\NC o \NC \type {\oldstylenumerals} \NC \NR
+\NC O \NC \type {\oldstylenumerals} \NC \NR
+\NC or \NC \type {\oldstyleromannumerals} \NC \NR
+\ML
+\NC KR \NC \type {\smallcappedromannumerals} \NC \NR
+\NC RK \NC \type {\smallcappedromannumerals} \NC \NR
+\ML
+\NC greek g \NC \type {\greeknumerals} \NC \NR
+\NC Greek G \NC \type {\Greeknumerals} \NC \NR
+\NC mathgreek \NC \type {\mathgreek} \NC \NR
+\ML
+\NC abjadnumerals \NC \type {\abjadnumerals} \NC \NR
+\NC abjadnodotnumerals \NC \type {\abjadnodotnumerals} \NC \NR
+\NC abjadnaivenumerals \NC \type {\abjadnaivenumerals} \NC \NR
+\ML
+\NC thainumerals \NC \type {\thainumerals} \NC \NR
+\NC devanagarinumerals \NC \type {\devanagarinumerals} \NC \NR
+\NC gurmurkhinumerals \NC \type {\gurmurkhinumerals} \NC \NR
+\NC gujaratinumerals \NC \type {\gujaratinumerals} \NC \NR
+\NC tibetannumerals \NC \type {\tibetannumerals} \NC \NR
+\NC greeknumerals \NC \type {\greeknumerals} \NC \NR
+\NC Greeknumerals \NC \type {\Greeknumerals} \NC \NR
+\NC arabicnumerals \NC \type {\arabicnumerals} \NC \NR
+\NC persiannumerals \NC \type {\persiannumerals} \NC \NR
+\NC arabicexnumerals \NC \type {\arabicexnumerals} \NC \NR
+\NC arabicdecimals \NC \type {\arabicdecimals} \NC \NR
+\NC persiandecimals \NC \type {\persiandecimals} \NC \NR
+\ML
+\NC koreannumerals kr \NC \type {\koreannumerals} \NC \NR
+\NC koreanparenthesisnumerals kr-p \NC \type {\koreanparenthesisnumerals} \NC \NR
+\NC koreancirclenumerals kr-c \NC \type {\koreancirclenumerals} \NC \NR
+\ML
+\NC chinesenumerals cn \NC \type {\chinesenumerals} \NC \NR
+\NC chinesecapnumerals cn-c \NC \type {\chinesecapnumerals} \NC \NR
+\NC chineseallnumerals cn-a \NC \type {\chineseallnumerals} \NC \NR
+\ML
+\NC sloveniannumerals \NC \type {\sloveniannumerals} \NC \NR
+\NC slovenianNumerals \NC \type {\slovenianNumerals} \NC \NR
+\ML
+\NC spanishnumerals \NC \type {\spanishnumerals} \NC \NR
+\NC spanishNumerals \NC \type {\spanishNumerals} \NC \NR
+\LR
+\stoptabulate
+
+The \type {alphabetic} and \type {Alphabetic} converters adapt to slovenian and
+spanish as do their small capped alternatives. There are more general helpers for it
+too:
+
+\starttyping
+\languagecharacters{number}
+\languageCharacters{number}
+\stoptyping
+
+Also language related is the \type {\continuednumber} macro. Here we see an
+application:
+
+\startbuffer
+1 \continuednumber{1}
+1, 2 \continuednumber{2}
+1, 2, 3 \continuednumber{3}
+\stopbuffer
+
+\typebuffer
+
+What renders as:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+Such a macro is typically used in combination with counters ant it just typesets
+a label text depending on the valu ebeing non|-|zero.
+
+\startbuffer
+\setuplabeltext[en][continued={and so on}]
+1, 2, 3 \continuednumber{3}
+1, 2, 3 \convertnumber{continued}{3}
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+In the rare case that you want to check if a conversion is defined you can use
+
+\starttyping
+\doifelseconversiondefined{name}{true}{false}
+\stoptyping
+
+So,
+
+\startbuffer
+\doifelseconversiondefined{characters}{we can convert}{forget about it}
+\stopbuffer
+
+\typebuffer
+
+Gives:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+There are also some non language related converters that we mention here for
+completeness:
+
+\blank
+\type {set 0}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 0}{#1} }\stopcolor\par
+\type {set 1}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 1}{#1} }\stopcolor\par
+\type {set 2}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 2}{#1} }\stopcolor\par
+\type {set 3}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 3}{#1} }\stopcolor\par
+\blank
+
+When a set overruns we start again at the first element.
+
+The ordinal converter produces output like \color [maincolor] {\convertnumber
+{ordinal}{123}} and \color [maincolor] {\convertnumber {ordinal}{654}}. The
+corresponding string renderer is \type {\highordinalstr}.
+
+% quite limited currently op not documented here:
+%
+% \wordtonumber{two}{3}
+% \wordtonumber{fivethousand}{unknown}
+
+\stopsection
+
+\startsection[title=Dates]
+
+Dates are also language dependent. The following macros take a number and return
+the name of the month or day.
+
+\starttabulate
+\NC \type {\monthlong } \NC \monthlong {10} \NC \NR
+\NC \type {\monthshort} \NC \monthshort{10} \NC \NR
+\NC \type {\MONTH } \NC \MONTH {10} \NC \NR
+\NC \type {\MONTHLONG } \NC \MONTHLONG {10} \NC \NR
+\NC \type {\MONTHSHORT} \NC \MONTHSHORT{10} \NC \NR
+\NC \type {\weekday } \NC \weekday {5} \NC \NR
+\NC \type {\WEEKDAY } \NC \WEEKDAY {5} \NC \NR
+\stoptabulate
+
+The current date can be typeset with \type {\currentdate} and a
+specific date with \type {\date}, for instance:
+
+\startbuffer
+\currentdate[weekday,day,month,year]
+\currentdate[WEEKDAY,day,MONTH,year]
+\date[d=12,m=12,y=1998][weekday]
+\date[d=12,m=12,y=1998]
+\stopbuffer
+
+\typebuffer
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+Possible elements of the specification are:
+
+\starttabulate
+\FL
+\NC + ord \NC ordinal suffix \NC \NR
+\NC ++ highord \NC high ordinal suffix \NC \NR
+\ML
+\NC mnem: \NC mnemonic prefix \NC \NR
+\ML
+\NC Y y year \NC year 4 digits \NC \NR
+\NC yy \NC year 2 digits \NC \NR
+\ML
+\NC M \NC month 1 or 2 digits \NC \NR
+\NC mm \NC month 2 digits \NC \NR
+\ML
+\NC D \NC day 1 or 2 digits \NC \NR
+\NC dd \NC day 2 digits \NC \NR
+\ML
+\NC W \NC 1 digit \NC \NR
+\ML
+\NC month m \NC language dependent (can be mnemonic) \NC \NR
+\NC day d \NC language dependent \NC \NR
+\NC weekday w \NC language dependent \NC \NR
+\ML
+\NC MONTH \NC month uppercased \NC \NR
+\NC WEEKDAY \NC weekday uppercased \NC \NR
+\ML
+\NC referral \NC YYYMMDD \NC \NR
+\ML
+\NC space \\ \NC space \NC \NR
+\NC <word> \NC word \NC \NR
+\LL
+\stoptabulate
+
+There are also some converters built in (more can be added), for instance:
+
+\startbuffer
+The current {\em gregorian} date \currentdate [month, day, {, }, year] is
+in {\em jalali} \currentdate [jalali:to, month, day, {, }, year] but we
+can also as a specific one, so {\em jalali} \date [y=1395, m=4, d=18]
+[month, day, {, }, year] is {\em gregorian} \date [y=1395, m=4, d=18]
+[jalali:from, month, day, {, }, year].
+\stopbuffer
+
+\typebuffer \startnarrower \getbuffer \stopnarrower
+
+\stopsection
+
+% \startsection[title=Counters]
+%
+% \stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/languages/languages-sorting.tex b/doc/context/sources/general/manuals/languages/languages-sorting.tex
new file mode 100644
index 000000000..ce24f385c
--- /dev/null
+++ b/doc/context/sources/general/manuals/languages/languages-sorting.tex
@@ -0,0 +1,235 @@
+% language=uk
+
+\startcomponent languages-sorting
+
+\environment languages-environment
+
+\startchapter[title=Sorting][color=darkblue]
+
+\startsection[title=Introduction]
+
+Sorting is complex, not so much for English, Dutch, German, etc. only texts but
+there are languages and scripts that are more demanding. There are several
+complications:
+
+\startitemize
+
+ \startitem
+ There can be characters that have accents, like à, á, â, ã, ä
+ \unknown\ that have a base shape a and in an index these often end up
+ close to each other. The order can differ per language.
+ \stopitem
+
+ \startitem
+ There are upper and lowercase words and there can be different
+ expectations to them being mixed or separated.
+ \stopitem
+ \startitem
+ Some scripts have characters that are combinations, like Æ, and
+ one might want to see them as one character or two, in which the
+ second one obeys the sorting order. The shape can dominate here.
+ \stopitem
+ \startitem
+ Some scripts, like Japanese, are a combination of several scripts
+ and sorting then depends on normalization.
+ \stopitem
+ \startitem
+ When there are many glyphs, like in Chinese, the order can depend
+ on the complexity of the glyph and when we're lucky that order is
+ reflected in the numeric character order.
+ \stopitem
+\stopitemize
+
+Often the rules are somewhat strict and one can doubt of the same rules would
+have been imposed if computers had been developed earlier. Given discussions one
+can doubt if the rules are really consistent or just there because someone (or a
+group) with influence set the standard (not so much different from grammar). So,
+if we deal with sorting, we do that in such a way that users can (to some extend)
+influence the outcome. After all, one important aspect of typesetting and
+organizing content is that the users gets the feeling of control and a diversion
+from a standard can be part of that. The reader will often not notice these
+details. In the next sections we will explore the way sorting is done in
+\CONTEXT. The method evolved over a few decades. In \MKII\ sorting happened
+between runs and it was just part of the processing of a document that users
+never really saw in action. Sorting just happened and few users will have noticed
+that we moved from a \MODULA\ program to a \PERL\ script and ended up with a
+\RUBY\ script. In fact, there is a \LUA\ replacement but it never got tested well
+because we moved in to \MKIV. There all happens inside the engine using \LUA.
+Some principles stayed the same but we are more flexible now.
+
+\stopsection
+
+\startsection[title=How it works]
+
+How does sorting work out? Take these words:
+
+\startlines
+abracadabra
+abräcàdábra
+àbracádabrä
+ábracadàbra
+äbrácadabrà
+\stoplines
+
+As long as they end up in an order where the reader can find it, we're okay.
+After all we're pretty good in pattern recognition.
+
+There are probably many ways to implement a sorter but the one we uses is more or
+less a follow up on the one we had for over a decade and was the result of an
+evolution based on user demand. It boils down to cleaning up the string in such a
+way that it can be split into meaningful characters. One can argue that we should
+use some kd of standardized sorting method but the problem is that we always have
+to deal with for instance embedded tex commands and mixed content, for instance
+numbers. And users using the same language can have different opinions about the
+rules too.
+
+A word (or sequence of words) is split into characters. Because there can be
+\TEX\ commands in there some cleanup happens beforehand. After that we create
+several lists with numbers that will be compared when sorting two entries.
+
+\startluacode
+
+-- local ignoredoffset = sorters.constants.ignoredoffset
+-- local replacementoffset = sorters.constants.replacementoffset
+-- local digitsoffset = sorters.constants.digitsoffset
+-- local digitsmaximum = sorters.constants.digitsmaximum
+
+local context = context
+
+local utfchar = utf.char
+local utfyte = utf.byte
+local concat = table.concat
+local gsub = string.gsub
+local formatters = string.formatters
+
+local f_char = formatters["%s"]
+local f_byte = formatters["x%02X"]
+
+local meaning = {
+ ch = "raw character",
+ mm = "minus mapping",
+ zm = "zero mapping",
+ pm = "plus mapping",
+ mc = "lowercase - 1",
+ zc = "lowercase",
+ pc = "lowercase + 1",
+ uc = "unicode",
+}
+
+local function show(s,key,bodyfont)
+ local c = s[key]
+ local t = { }
+ for i=1,#c do
+ local ci = c[i]
+ if type(ci) == "string" then
+ t[i] = f_char(ci)
+ else
+ t[i] = f_byte(ci)
+ end
+ end
+ t = concat(t,"~")
+ context.NC() context.maincolor() context(key)
+ context.NC() context.maincolor() context(meaning[key])
+ context.NC() if bodyfont then context.switchtobodyfont{bodyfont} end context(t)
+ context.NC() context.NR()
+end
+
+function document.ShowSortSplit(str,language,bodyfont)
+ sorters.setlanguage(language or "en")
+ local s = sorters.splitters.utf(str)
+ context.starttabulate{ "|Tl|Tlj2|Tp|" }
+ context.FL()
+ context.NC()
+ context.NC() context.maincolor() context(language)
+ context.NC() if bodyfont then context.switchtobodyfont{bodyfont} end context.maincolor() context(str)
+ context.NC() context.NR()
+ context.ML()
+ show(s,"ch",bodyfont)
+ show(s,"uc")
+ show(s,"zc")
+ show(s,"mc")
+ show(s,"pc")
+ show(s,"zm")
+ show(s,"mm")
+ show(s,"pm")
+ context.LL()
+ context.stoptabulate()
+end
+
+\stopluacode
+
+We can best demonstrate this with a few examples. As usual an English language
+example is trivial.
+
+\ctxlua{document.ShowSortSplit("abracadabra","en")}
+
+When we add an uppercase character we get a slightly different outcome:
+
+\ctxlua{document.ShowSortSplit("Abracadabra","en")}
+
+Some characters will be split, like \type {æ}:
+
+\ctxlua{document.ShowSortSplit("æsop","en")}
+
+It gets more complex when langiage specific demands kick in. Compare an English, German
+and Austrian split:
+
+\ctxlua{document.ShowSortSplit("Abräcàdábra","en")}
+\ctxlua{document.ShowSortSplit("Abräcàdábra","de")}
+\ctxlua{document.ShowSortSplit("Abräcàdábra","de-at")}
+
+The way a character gets replaced, like \type {ä} into \type {ae}, is defined in
+\type {sort-lan.lua} using \LUA\ tables. We will not explain all the obscure
+details here; most of the work is already done, so users are not bothered by
+these definitions. And new ones can often be made by copying and adapting an
+existing one.
+
+The sorting itself is specified by a sequence:
+
+\starttabulate[|TlCT{maincolor}|Tl|]
+\NC default \NC zc,pc,zm,pm,uc \NC \NR
+\NC before \NC mm,mc,uc \NC \NR
+\NC after \NC pm,mc,uc \NC \NR
+\NC first \NC pc,mm,uc \NC \NR
+\NC last \NC mc,mm,uc \NC \NR
+\stoptabulate
+
+The raw character is what we get after the (language specific) replacement has
+been applied and the unicodes are used when comparing. Lowercasing is done using
+the \UNICODE\ lowercase code, but one can define language specific ones too. The
+plus and minus variants can be used to force lowercase before or after uppercase.
+The mapping is based on an alphabet specification so this can differ per language
+and again we also provide plus and minus values that depend on case. When a
+character has no case we use shapes instead. For instance, the shape of \type
+{à} is \type {a}. Digits are treated special and currently get an offset so that
+they end up last in the sort order.
+
+\defineregister[jindex]
+
+\startbuffer
+ぱあ \jindex{ぱあ}
+ぱー \jindex{ぱー}
+ぱぁ \jindex{ぱぁ}
+\stopbuffer
+
+{\switchtobodyfont[ipaex]\startlines\typebuffer\stoplines}
+
+This three entry index\jindex{ぱあ}\jindex{ぱー}\jindex{ぱぁ} should be sorted in the order:
+{\switchtobodyfont[ipaex]\ruledhbox{ぱー}\enspace\ruledhbox{ぱぁ}\enspace\ruledhbox{ぱあ}}.
+
+{\mainlanguage[jp]\switchtobodyfont[ipaex]\placeregister[jindex][language=jp,n=1,method=default]}
+{\mainlanguage[jp]\switchtobodyfont[ipaex]\placeregister[jindex][language=jp,n=1,method=zm]}
+
+\ctxlua{document.ShowSortSplit("ぱあ","jp","ipaex")}
+\ctxlua{document.ShowSortSplit("ぱー","jp","ipaex")}
+\ctxlua{document.ShowSortSplit("ぱぁ","jp","ipaex")}
+
+{\em To be continued!}
+
+\stopsection
+
+% ぱー $\prec$ ぱぁ $\prec$ ぱあ
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/lua/lua-mkiv.tex b/doc/context/sources/general/manuals/lua/lua-mkiv.tex
new file mode 100644
index 000000000..40e885eac
--- /dev/null
+++ b/doc/context/sources/general/manuals/lua/lua-mkiv.tex
@@ -0,0 +1,139 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[art-01,abr-02]
+
+\setupbodyfont
+ [10pt]
+
+\definecolor
+ [maincolor]
+ [b=.4]
+
+\usesymbols
+ [cc]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\definefont
+ [TitlePageFont]
+ [file:lmmonolt10-bold.otf]
+
+\setuphead
+ [color=maincolor]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title={Lua, the context libraries},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Lua,
+ subtitle=the context libraries,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage ;
+
+ numeric w ; w := bbwidth(Page) ;
+ numeric h ; h := bbheight(Page) ;
+
+ fill Page withcolor \MPcolor{maincolor} ;
+
+ draw textext.urt("\TitlePageFont \getvariable{document}{title}") xsized (0.8w) shifted (.1w,.2h) withcolor .80white ;
+ draw textext.top("\TitlePageFont \getvariable{document}{subtitle}") xsized (0.8w) shifted (.5w,.1h) withcolor .60white ;
+
+ StopPage ;
+
+\stopMPpage
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title=Introduction]
+
+Once we started the \LUATEX\ project it didn't take long for \CONTEXT\ to use
+the \LUA\ language extensively. And so, rather soon, a bunch of libraries
+evolved that provided all kind of helpers. Because \LUATEX\ can also act as
+a \LUA\ interpreter, and because we have \type {mtxrun} as script runner
+we can also use some of those libraries outside \CONTEXT. So, for me, a rather
+natural way to run a \LUA\ script is:
+
+\starttyping
+mtxrun --script myscript.lua <optional arguments>
+\stoptyping
+
+The advantage of this approach is that you operate in the same file domain as
+your \TEX\ runs as all file locators are preloaded as well. However, in some
+cases this is not possible, for instance when you run a stock \LUA\ or some
+embedded version. For this we provide an alternative mechanism.
+
+\stopsection
+
+\startsection[title=Making libraries]
+
+In the \CONTEXT\ distribution there is a script called \type {mtxlibs.lua} that
+can create a library for you that has the basic general purpose \CONTEXT\
+libraries on board, as well as whatever more you specify.
+
+\starttyping
+lua mtxlibs.lua --selfmerge myproject-a-libs.lua
+lua mtxlibs.lua --selfmerge myproject-b-libs.lua \
+ trac-lmx
+lua mtxlibs.lua --selfmerge myproject-c-libs.lua \
+ util-sql util-sql-imp-client util-sql-imp-library
+\stoptyping
+
+Here we create three libs. The first one has only the core libraries. You can
+read more about what they provide in the \type {cld-mkiv.pdf} manual. The second
+library includes code for creating web pages. The third variant preloads \SQL\
+support.
+
+You can best run this file in its own directory, in the \CONTEXT\ tree, so that
+it knows where to find the libraries needed. Of course you can put the result
+everywhere you want, preferably alongside your normal scripts. As we merge code,
+this is a rather good way to prevent compatibility issues. After all, some of
+the code might get improved.
+
+You can \type {require("mtxlibs")} directly in which case it will load the core
+libraries runtime. Of course this means that \LUA\ should be able to figure out
+where it can find them.
+
+\stopsection
+
+\startsubject[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/luatex/luatex-contents.tex b/doc/context/sources/general/manuals/luatex/luatex-contents.tex
new file mode 100644
index 000000000..6d06b3ef0
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-contents.tex
@@ -0,0 +1,20 @@
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-contents
+
+\starttitle[title=Contents]
+
+\start
+
+ \definecolor[maincolor][black]
+
+ \placelist
+ [chapter,section,subsection]
+ [criterium=text]
+
+\stop
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
new file mode 100644
index 000000000..d55eef286
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
@@ -0,0 +1,892 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-enhancements
+
+\startchapter[reference=enhancements,title={Basic \TEX\ enhancements}]
+
+\section{Introduction}
+
+From day one, \LUATEX\ has offered extra features compared to the superset of
+\PDFTEX\ and \ALEPH. This has not been limited to the possibility to execute
+\LUA\ code via \type {\directlua}, but \LUATEX\ also adds functionality via new
+\TEX|-|side primitives or extensions to existing ones.
+
+When \LUATEX\ starts up in \quote {iniluatex} mode (\type {luatex -ini}), it
+defines only the primitive commands known by \TEX82 and the one extra command
+\type {\directlua}. As is fitting, a \LUA\ function has to be called to add the
+extra primitives to the user environment. The simplest method to get access to
+all of the new primitive commands is by adding this line to the format generation
+file:
+
+\starttyping
+\directlua { tex.enableprimitives('',tex.extraprimitives()) }
+\stoptyping
+
+But be aware that the curly braces may not have the proper \type {\catcode}
+assigned to them at this early time (giving a \quote {Missing number} error), so
+it may be needed to put these assignments before the above line:
+
+\starttyping
+\catcode `\{=1
+\catcode `\}=2
+\stoptyping
+
+More fine|-|grained primitives control is possible and you can look up the
+details in \in {section} [luaprimitives]. For simplicity's sake, this manual
+assumes that you have executed the \type {\directlua} command as given above.
+
+The startup behaviour documented above is considered stable in the sense that
+there will not be backward|-|incompatible changes any more. We have promoted some
+rather generic \PDFTEX\ primitives to core \LUATEX\ ones, and the ones inherited
+frome \ALEPH\ (\OMEGA) are also promoted. Effectively this means that we now only
+have the \type {tex}, \type {etex} and \type {luatex} sets left.
+
+In \in {Chapter} [modifications] we discuss several primitives that are derived
+from \PDFTEX\ and \ALEPH\ (\OMEGA). Here we stick to real new ones. In the
+chapters on fonts and math we discuss a few more new ones.
+
+\section{Version information}
+
+\subsection {\type {\luatexbanner}, \type {\luatexversion} and \type {\luatexrevision}}
+
+There are three new primitives to test the version of \LUATEX:
+
+\starttabulate[|l|pl|pl|]
+\NC \bf primitive \NC \bf explanation \NC \bf value \NC \NR
+\NC \type {\luatexbanner} \NC the banner reported on the command line \NC \luatexbanner \NC \NR
+\NC \type {\luatexversion} \NC a combination of major and minor number \NC \the\luatexversion \NC \NR
+\NC \type {\luatexrevision} \NC the revision number, the current value is \NC \luatexrevision \NC \NR
+\stoptabulate
+
+The official \LUATEX\ version is defined as follows:
+
+\startitemize
+\startitem
+ The major version is the integer result of \type {\luatexversion} divided by
+ 100. The primitive is an \quote {internal variable}, so you may need to prefix
+ its use with \type {\the} depending on the context.
+\stopitem
+\startitem
+ The minor version is the two-digit result of \type {\luatexversion} modulo 100.
+\stopitem
+\startitem
+ The revision is the given by \type {\luatexrevision}. This primitive expands to
+ a positive integer.
+\stopitem
+\startitem
+ The full version number consists of the major version, minor version and
+ revision, separated by dots.
+\stopitem
+\stopitemize
+
+\subsection{\type {\formatname}}
+
+The \type {\formatname} syntax is identical to \type {\jobname}. In \INITEX, the
+expansion is empty. Otherwise, the expansion is the value that \type {\jobname} had
+during the \INITEX\ run that dumped the currently loaded format. You can use this
+token list to provide your own version info.
+
+\section{\UNICODE\ text support}
+
+\subsection {Extended ranges}
+
+Text input and output is now considered to be \UNICODE\ text, so input characters
+can use the full range of \UNICODE\ ($2^{20}+2^{16}-1 = \hbox{0x10FFFF}$). Later
+chapters will talk of characters and glyphs. Although these are not
+interchangeable, they are closely related. During typesetting, a character is
+always converted to a suitable graphic representation of that character in a
+specific font. However, while processing a list of to|-|be|-|typeset nodes, its
+contents may still be seen as a character. Inside \LUATEX\ there is no clear
+separation between the two concepts. Because the subtype of a glyph node can be
+changed in \LUA\ it is up to the user: subtypes larger than 255 indicate that
+font processing has happened.
+
+A few primitives are affected by this, all in a similar fashion: each of them has
+to accommodate for a larger range of acceptable numbers. For instance, \type
+{\char} now accepts values between~0 and $1{,}114{,}111$. This should not be a
+problem for well|-|behaved input files, but it could create incompatibilities for
+input that would have generated an error when processed by older \TEX|-|based
+engines. The affected commands with an altered initial (left of the equals sign)
+or secondary (right of the equals sign) value are: \type {\char}, \type
+{\lccode}, \type {\uccode}, \type {\catcode}, \type {\sfcode}, \type {\efcode},
+\type {\lpcode}, \type {\rpcode}, \type {\chardef}.
+
+As far as the core engine is concerned, all input and output to text files is
+\UTF-8 encoded. Input files can be pre|-|processed using the \type {reader}
+callback. This will be explained in a later chapter.
+
+Output in byte|-|sized chunks can be achieved by using characters just outside of
+the valid \UNICODE\ range, starting at the value $1{,}114{,}112$ (0x110000). When
+the time comes to print a character $c>=1{,}114{,}112$, \LUATEX\ will actually
+print the single byte corresponding to $c$ minus 1{,}114{,}112.
+
+Output to the terminal uses \type {^^} notation for the lower control range
+($c<32$), with the exception of \type {^^I}, \type {^^J} and \type {^^M}. These
+are considered \quote {safe} and therefore printed as|-|is. You can disable
+escaping with \type {texio.setescape(false)} in which case you get the normal
+characters on the console.
+
+Normalization of the \UNICODE\ input can be handled by a macro package during
+callback processing (this will be explained in \in {section} [iocallback]).
+
+\subsection{\type {\Uchar}}
+
+The expandable command \type {\Uchar} reads a number between~0 and $1{,}114{,}111$
+and expands to the associated \UNICODE\ character.
+
+\section{Extended tables}
+
+All traditional \TEX\ and \ETEX\ registers can be 16-bit numbers. The affected
+commands are:
+
+\startfourcolumns
+\starttyping
+\count
+\dimen
+\skip
+\muskip
+\marks
+\toks
+\countdef
+\dimendef
+\skipdef
+\muskipdef
+\toksdef
+\insert
+\box
+\unhbox
+\unvbox
+\copy
+\unhcopy
+\unvcopy
+\wd
+\ht
+\dp
+\setbox
+\vsplit
+\stoptyping
+\stopfourcolumns
+
+Because font memory management has been rewritten, character properties in fonts
+are no longer shared among fonts instances that originate from the same metric
+file.
+
+\section{Attributes}
+
+\subsection{Attribute registers}
+
+Attributes are a completely new concept in \LUATEX. Syntactically, they behave a
+lot like counters: attributes obey \TEX's nesting stack and can be used after
+\type {\the} etc.\ just like the normal \type {\count} registers.
+
+\startsyntax
+\attribute <16-bit number> <optional equals> <32-bit number>!crlf
+\attributedef <csname> <optional equals> <16-bit number>
+\stopsyntax
+
+Conceptually, an attribute is either \quote {set} or \quote {unset}. Unset
+attributes have a special negative value to indicate that they are unset, that
+value is the lowest legal value: \type {-"7FFFFFFF} in hexadecimal, a.k.a.
+$-2147483647$ in decimal. It follows that the value \type {-"7FFFFFFF} cannot be
+used as a legal attribute value, but you {\it can\/} assign \type {-"7FFFFFFF} to
+\quote {unset} an attribute. All attributes start out in this \quote {unset}
+state in \INITEX.
+
+Attributes can be used as extra counter values, but their usefulness comes mostly
+from the fact that the numbers and values of all \quote {set} attributes are
+attached to all nodes created in their scope. These can then be queried from any
+\LUA\ code that deals with node processing. Further information about how to use
+attributes for node list processing from \LUA\ is given in~\in {chapter}[nodes].
+
+Attributes are stored in a sorted (sparse) linked list that are shared when
+possible. This permits efficient testing and updating.
+
+\subsection{Box attributes}
+
+Nodes typically receive the list of attributes that is in effect when they are
+created. This moment can be quite asynchronous. For example: in paragraph
+building, the individual line boxes are created after the \type {\par} command has
+been processed, so they will receive the list of attributes that is in effect
+then, not the attributes that were in effect in, say, the first or third line of
+the paragraph.
+
+Similar situations happen in \LUATEX\ regularly. A few of the more obvious
+problematic cases are dealt with: the attributes for nodes that are created
+during hyphenation, kerning and ligaturing borrow their attributes from their
+surrounding glyphs, and it is possible to influence box attributes directly.
+
+When you assemble a box in a register, the attributes of the nodes contained in
+the box are unchanged when such a box is placed, unboxed, or copied. In this
+respect attributes act the same as characters that have been converted to
+references to glyphs in fonts. For instance, when you use attributes to implement
+color support, each node carries information about its eventual color. In that
+case, unless you implement mechanisms that deal with it, applying a color to
+already boxed material will have no effect. Keep in mind that this
+incompatibility is mostly due to the fact that separate specials and literals are
+a more unnatural approach to colors than attributes.
+
+It is possible to fine-tune the list of attributes that are applied to a \type
+{hbox}, \type {vbox} or \type {vtop} by the use of the keyword \type {attr}. An
+example:
+
+\starttyping
+\attribute2=5
+\setbox0=\hbox {Hello}
+\setbox2=\hbox attr1=12 attr2=-"7FFFFFFF{Hello}
+\stoptyping
+
+This will set the attribute list of box~2 to $1=12$, and the attributes of box~0
+will be $2=5$. As you can see, assigning the maximum negative value causes an
+attribute to be ignored.
+
+The \type {attr} keyword(s) should come before a \type {to} or \type {spread}, if
+that is also specified.
+
+\section{\LUA\ related primitives}
+
+\subsection{\type {\directlua}}
+
+In order to merge \LUA\ code with \TEX\ input, a few new primitives are needed.
+The primitive \type {\directlua} is used to execute \LUA\ code immediately. The
+syntax is
+
+\startsyntax
+\directlua <general text>!crlf
+\directlua <16-bit number> <general text>
+\stopsyntax
+
+The \syntax {<general text>} is expanded fully, and then fed into the \LUA\
+interpreter. After reading and expansion has been applied to the \syntax
+{<general text>}, the resulting token list is converted to a string as if it was
+displayed using \type {\the\toks}. On the \LUA\ side, each \type {\directlua}
+block is treated as a separate chunk. In such a chunk you can use the \type
+{local} directive to keep your variables from interfering with those used by the
+macro package.
+
+The conversion to and from a token list means that you normally can not use \LUA\
+line comments (starting with \type {--}) within the argument. As there typically
+will be only one \quote {line} the first line comment will run on until the end
+of the input. You will either need to use \TEX|-|style line comments (starting
+with \%), or change the \TEX\ category codes locally. Another possibility is to
+say:
+
+\starttyping
+\begingroup
+\endlinechar=10
+\directlua ...
+\endgroup
+\stoptyping
+
+Then \LUA\ line comments can be used, since \TEX\ does not replace line endings
+with spaces.
+
+Likewise, the \syntax {<16-bit number>} designates a name of a \LUA\ chunk and is
+taken from the \type {lua.name} array (see the documentation of the \type {lua}
+table further in this manual). When a chunk name starts with a \type {@} it will
+be displayed as a file name. This is a side effect of the way \LUA\ implements
+error handling.
+
+The \type {\directlua} command is expandable. Since it passes \LUA\ code to the
+\LUA\ interpreter its expansion from the \TEX\ viewpoint is usually empty.
+However, there are some \LUA\ functions that produce material to be read by \TEX,
+the so called print functions. The most simple use of these is \type
+{tex.print(<string> s)}. The characters of the string \type {s} will be placed on
+the \TEX\ input buffer, that is, \quote {before \TEX's eyes} to be read by \TEX\
+immediately. For example:
+
+\startbuffer
+\count10=20
+a\directlua{tex.print(tex.count[10]+5)}b
+\stopbuffer
+
+\typebuffer
+
+expands to
+
+\getbuffer
+
+Here is another example:
+
+\startbuffer
+$\pi = \directlua{tex.print(math.pi)}$
+\stopbuffer
+
+\typebuffer
+
+will result in
+
+\getbuffer
+
+Note that the expansion of \type {\directlua} is a sequence of characters, not of
+tokens, contrary to all \TEX\ commands. So formally speaking its expansion is
+null, but it places material on a pseudo-file to be immediately read by \TEX, as
+\ETEX's \type {\scantokens}. For a description of print functions look at \in
+{section} [sec:luaprint].
+
+Because the \syntax {<general text>} is a chunk, the normal \LUA\ error handling
+is triggered if there is a problem in the included code. The \LUA\ error messages
+should be clear enough, but the contextual information is still pretty bad.
+Often, you will only see the line number of the right brace at the end of the
+code.
+
+While on the subject of errors: some of the things you can do inside \LUA\ code
+can break up \LUATEX\ pretty bad. If you are not careful while working with the
+node list interface, you may even end up with assertion errors from within the
+\TEX\ portion of the executable.
+
+The behaviour documented in the above subsection is considered stable in the sense
+that there will not be backward-incompatible changes any more.
+
+\subsection{\type {\latelua}}
+
+Contrary to \type {\directlua}, \type {\latelua} stores \LUA\ code in a whatsit
+that will be processed at the time of shipping out. Its intended use is a cross
+between \PDF\ literals (often available as \type {\pdfliteral}) and the
+traditional \TEX\ extension \type {\write}. Within the \LUA\ code you can print
+\PDF\ statements directly to the \PDF\ file via \type {pdf.print}, or you can
+write to other output streams via \type {texio.write} or simply using \LUA\ \IO\
+routines.
+
+\startsyntax
+\latelua <general text>!crlf
+\latelua <16-bit number> <general text>
+\stopsyntax
+
+Expansion of macros in the final \type {<general text>} is delayed until just
+before the whatsit is executed (like in \type {\write}). With regard to \PDF\
+output stream \type {\latelua} behaves as \PDF\ page literals. The \syntax
+{name <general text>} and \syntax {<16-bit number>} behave in the same way as
+they do for \type {\directlua}
+
+\subsection{\type {\luaescapestring}}
+
+This primitive converts a \TEX\ token sequence so that it can be safely used as
+the contents of a \LUA\ string: embedded backslashes, double and single quotes,
+and newlines and carriage returns are escaped. This is done by prepending an
+extra token consisting of a backslash with category code~12, and for the line
+endings, converting them to \type {n} and \type {r} respectively. The token
+sequence is fully expanded.
+
+\startsyntax
+\luaescapestring <general text>
+\stopsyntax
+
+Most often, this command is not actually the best way to deal with the
+differences between the \TEX\ and \LUA. In very short bits of \LUA\
+code it is often not needed, and for longer stretches of \LUA\ code it
+is easier to keep the code in a separate file and load it using \LUA's
+\type {dofile}:
+
+\starttyping
+\directlua { dofile('mysetups.lua') }
+\stoptyping
+
+\subsection{\type {\luafunction}}
+
+The \type {\directlua} commands involves tokenization of its argument (after
+picking up an optional name or number specification). The tokenlist is then
+converted into a string and given to \LUA\ to turn into a function that is
+called. The overhead is rather small but when you use this primitive hundreds of
+thousands of times, it can become noticeable. For this reason there is a variant
+call available: \type {\luafunction}. This command is used as follows:
+
+\starttyping
+\directlua {
+ local t = lua.get_functions_table()
+ t[1] = function() tex.print("!") end
+ t[2] = function() tex.print("?") end
+}
+
+\luafunction1
+\luafunction2
+\stoptyping
+
+Of course the functions can also be defined in a separate file. There is no limit
+on the number of functions apart from normal \LUA\ limitations. Of course there
+is the limitation of no arguments but that would involve parsing and thereby give
+no gain. The function, when called in fact gets one argument, being the index, so
+in the following example the number \type {8} gets typeset.
+
+\starttyping
+\directlua {
+ local t = lua.get_functions_table()
+ t[8] = function(slot) tex.print(slot) end
+}
+\stoptyping
+
+\section {Alignments}
+
+\subsection{\tex {alignmark}}
+
+This primitive duplicates the functionality of \type {#} inside alignment
+preambles.
+
+\subsection{\tex {aligntab}}
+
+This primitive duplicates the functionality of \type {&} inside alignments and
+preambles.
+
+\section{Catcode tables}
+
+Catcode tables are a new feature that allows you to switch to a predefined
+catcode regime in a single statement. You can have a practically unlimited number
+of different tables. This subsystem is backward compatible: if you never use the
+following commands, your document will not notice any difference in behaviour
+compared to traditional \TEX. The contents of each catcode table is independent
+from any other catcode tables, and their contents is stored and retrieved from
+the format file.
+
+\subsection{\type {\catcodetable}}
+
+\startsyntax
+\catcodetable <15-bit number>
+\stopsyntax
+
+The primitive \type {\catcodetable} switches to a different catcode table. Such a
+table has to be previously created using one of the two primitives below, or it
+has to be zero. Table zero is initialized by \INITEX.
+
+\subsection{\type {\initcatcodetable}}
+
+\startsyntax
+\initcatcodetable <15-bit number>
+\stopsyntax
+
+The primitive \type {\initcatcodetable} creates a new table with catcodes identical
+to those defined by \INITEX:
+
+\starttabulate[|r|l|l|l|]
+\NC 0 \NC \tttf \letterbackslash \NC \NC \type {escape} \NC\NR
+\NC 5 \NC \tttf \letterhat\letterhat M \NC return \NC \type {car_ret} \NC\NR
+\NC 9 \NC \tttf \letterhat\letterhat @ \NC null \NC \type {ignore} \NC\NR
+\NC 10 \NC \tttf <space> \NC space \NC \type {spacer} \NC\NR
+\NC 11 \NC {\tttf a} \endash\ {\tttf z} \NC \NC \type {letter} \NC\NR
+\NC 11 \NC {\tttf A} \endash\ {\tttf Z} \NC \NC \type {letter} \NC\NR
+\NC 12 \NC everything else \NC \NC \type {other} \NC\NR
+\NC 14 \NC \tttf \letterpercent \NC \NC \type {comment} \NC\NR
+\NC 15 \NC \tttf \letterhat\letterhat ? \NC delete \NC \type {invalid_char} \NC\NR
+\stoptabulate
+
+The new catcode table is allocated globally: it will not go away after the
+current group has ended. If the supplied number is identical to the currently
+active table, an error is raised.
+
+\subsection{\type {\savecatcodetable}}
+
+\startsyntax
+\savecatcodetable <15-bit number>
+\stopsyntax
+
+\type {\savecatcodetable} copies the current set of catcodes to a new table with
+the requested number. The definitions in this new table are all treated as if
+they were made in the outermost level.
+
+The new table is allocated globally: it will not go away after the current group
+has ended. If the supplied number is the currently active table, an error is
+raised.
+
+\section{Suppressing errors}
+
+\subsection{\type {\suppressfontnotfounderror}}
+
+\startsyntax
+\suppressfontnotfounderror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+font metrics that are not found. Instead it will silently skip the font
+assignment, making the requested csname for the font \type {\ifx} equal to \type
+{\nullfont}, so that it can be tested against that without bothering the user.
+
+\subsection{\type {\suppresslongerror}}
+
+\startsyntax
+\suppresslongerror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+\type {\par} commands encountered in contexts where that is normally prohibited
+(most prominently in the arguments of non-long macros).
+
+\subsection{\type {\suppressifcsnameerror}}
+
+\startsyntax
+\suppressifcsnameerror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+non-expandable commands appearing in the middle of a \type {\ifcsname} expansion.
+Instead, it will keep getting expanded tokens from the input until it encounters
+an \type {\endcsname} command. If the input expansion is unbalanced with respect
+to \type {\csname} \ldots \type {\endcsname} pairs, the \LUATEX\ process may hang
+indefinitely.
+
+\subsection{\type {\suppressoutererror}}
+
+\startsyntax
+\suppressoutererror = 1
+\stopsyntax
+
+If this new integer parameter is non|-|zero, then \LUATEX\ will not complain
+about \type {\outer} commands encountered in contexts where that is normally
+prohibited.
+
+\subsection{\type {\suppressmathparerror}}
+
+The following setting will permit \type {\par} tokens in a math formula:
+
+\startsyntax
+\suppressmathparerror = 1
+\stopsyntax
+
+So, the next code is valid then:
+
+\starttyping
+$ x + 1 =
+
+a $
+\stoptyping
+
+\section {Math}
+
+\subsection{Extensions}
+
+We will cover math in its own chapter because not only the font subsystem and
+spacing model have been enhanced (thereby introducing many new primitives) but
+also because some more control has been added to existing functionality.
+
+\subsection{\type {\matheqnogapstep}}
+
+By default \TEX\ will add one quad between the equation and the number. This is
+hard coded. A new primitive can control this:
+
+\startsyntax
+\matheqnogapstep = 1000
+\stopsyntax
+
+Because a math quad from the math text font is used instead of a dimension, we
+use a step to control the size. A value of zero will suppress the gap. The step
+is divided by 1000 which is the usual way to mimmick floating point factors in
+\TEX.
+
+\section{Fonts}
+
+\subsection{Font syntax}
+
+\LUATEX\ will accept a braced argument as a font name:
+
+\starttyping
+\font\myfont = {cmr10}
+\stoptyping
+
+This allows for embedded spaces, without the need for double quotes. Macro
+expansion takes place inside the argument.
+
+\subsection{\type {\fontid}}
+
+\startsyntax
+\fontid\font
+\stopsyntax
+
+This primitive expands into a number. It is not a register so there is no need to
+prefix with \type {\number} (and using \type {\the} gives an error). The currently
+used font id is \fontid\font. Here are some more:
+
+\starttabulate[|l|c|]
+\NC \type {\bf} \NC \bf \fontid\font \NC \NR
+\NC \type {\it} \NC \it \fontid\font \NC \NR
+\NC \type {\bi} \NC \bi \fontid\font \NC \NR
+\stoptabulate
+
+These numbers depend on the macro package used because each one has its own way
+of dealing with fonts. They can also differ per run, as they can depend on the
+order of loading fonts. For instance, when in \CONTEXT\ virtual math \UNICODE\
+fonts are used, we can easily get over a hundred ids in use. Not all ids have to
+be bound to a real font, after all it's just a number.
+
+\subsection{\type {\setfontid}}
+
+The primitive \type {\setfontid} can be used to enable a font with the given id
+(which of course needs to be a valid one).
+
+\subsection{\type {\noligs} and \type {\nokerns}}
+
+These primitives prohibit ligature and kerning insertion at the time when the
+initial node list is built by \LUATEX's main control loop. You can enable these
+primitives when you want to do node list processing of \quote {characters}, where
+\TEX's normal processing would get in the way.
+
+\startsyntax
+\noligs <integer>!crlf
+\nokerns <integer>
+\stopsyntax
+
+These primitives can also be implemented by overloading the ligature building and
+kerning functions, i.e.\ by assigning dummy functions to their associated
+callbacks. Keep in mind that when you define a font (using \LUA) you can also
+omit the kern and ligature tables, which has the same effect as the above.
+
+\subsection{\type{\nospaces}}
+
+This new primitive can be used to overrule the usual \type {\spaceskip}
+related heuristics when a space character is seen in a text flow. The
+value~\type{1} triggers no injection while \type{2} results in injection of
+a zero skip. Below we see the results for four characters separated by a
+space.
+
+\startlinecorrection
+\startcombination[3*2]
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 1mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 1mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 1mm}}
+\stopcombination
+\stoplinecorrection
+
+\section{Tokens, commands and strings}
+
+\subsection{\type {\scantextokens}}
+
+The syntax of \type {\scantextokens} is identical to \type {\scantokens}. This
+primitive is a slightly adapted version of \ETEX's \type {\scantokens}. The
+differences are:
+
+\startitemize
+\startitem
+ The last (and usually only) line does not have a \type {\endlinechar}
+ appended.
+\stopitem
+\startitem
+ \type {\scantextokens} never raises an EOF error, and it does not execute
+ \type {\everyeof} tokens.
+\stopitem
+\startitem
+ There are no \quote {\unknown\ while end of file \unknown} error tests
+ executed. This allows the expansion to end on a different grouping level or
+ while a conditional is still incomplete.
+\stopitem
+\stopitemize
+
+\subsection{\type {\toksapp}, \type {\tokspre}, \type {\etoksapp} and \type {\etokspre}}
+
+Instead of:
+
+\starttyping
+\toks0\expandafter{\the\toks0 foo}
+\stoptyping
+
+you can use:
+
+\starttyping
+\etoksapp0{foo}
+\stoptyping
+
+The \type {pre} variants prepend instead of append, and the \type {e} variants
+expand the passed general text.
+
+\subsection{\type {\csstring}, \type {\begincsname} and \type {\lastnamedcs}}
+
+These are somewhat special. The \type {\csstring} primitive is like
+\type {\string} but it omits the leading escape character. This can be
+somewhat more efficient that stripping it of afterwards.
+
+The \type {\begincsname} primitive is like \type {\csname} but doesn't create
+a relaxed equivalent when there is no such name. It is equivalent to
+
+\starttyping
+\ifcsname foo\endcsname
+ \csname foo\endcsname
+\fi
+\stoptyping
+
+The advantage is that it saves a lookup (don't expect much speedup) but more
+important is that it avoids using the \type {\if}.
+
+The \type {\lastnamedcs} is one that should be used with care. The above
+example could be written as:
+
+\starttyping
+\ifcsname foo\endcsname
+ \lastnamedcs
+\fi
+\stoptyping
+
+This is slightly more efficient than constructing the string twice (deep down in
+\LUATEX\ this also involves some \UTF8 juggling), but probably more relevant is
+that it saves a few tokens and can make code a bit more more readable.
+
+\subsection{\type {\clearmarks}}
+
+This primitive complements the \ETEX\ mark primitives and clears a mark class
+completely, resetting all three connected mark texts to empty. It is an
+immediate command.
+
+\startsyntax
+\clearmarks <16-bit number>
+\stopsyntax
+
+\subsection{\type{\letcharcode}}
+
+This primitive is still experimental but can be used to assign a meaning to an active
+character, as in:
+
+\starttyping
+\def\foo{bar} \letcharcode123\foo
+\stoptyping
+
+This can be a bit nicer that using the uppercase tricks (using the property of
+\type {\uppercase} that it treats active characters special).
+
+\section{Boxes, rules and leaders}
+
+\subsection{\type {\outputbox}}
+
+\startsyntax
+\outputbox = 65535
+\stopsyntax
+
+This new integer parameter allows you to alter the number of the box that will be
+used to store the page sent to the output routine. Its default value is 255, and
+the acceptable range is from 0 to 65535.
+
+\subsection{\type {\vpack}, \type {\hpack} and \type {\tpack}}
+
+These three primitives are like \type {\vbox}, \type {\hbox} and \type {\vtop}
+but don't apply the related callbacks.
+
+\subsection{\type {\vsplit}}
+
+The \type {\vsplit} primitive has to be followed by a specification of the
+required height. As alternative for the \type {to} keyword you can use \type
+{upto} to get a split of the given size but result has the natural dimensions
+then.
+
+\subsection{Images and Forms}
+
+These two concepts are now core concepts and no longer whatsits. They are in fact
+now implemented as rules with special properties. Normal rules have subtype~0,
+saved boxes have subtype~1 and images have subtype~2. This has the positive side
+effect that whenever we need to take content with dimensions into account, when we
+look at rule nodes, we automatically also deal with these two types.
+
+The syntax of the \type {\save...resource} is the same as in \PDFTEX\ but you
+should consider them to be backend specific. This means that a macro package
+should treat them as such and check for the current output mode if applicable.
+Here are the equivalents:
+
+\starttabulate[|l|l|]
+\NC \type {\saveboxresource} \EQ \type {\pdfxform} \NC \NR
+\NC \type {\saveimageresource} \EQ \type {\pdfximage} \NC \NR
+\NC \type {\useboxresource} \EQ \type {\pdfrefxform} \NC \NR
+\NC \type {\useimageresource} \EQ \type {\pdfrefximage} \NC \NR
+\NC \type {\lastsavedboxresourceindex} \EQ \type {\pdflastxform} \NC \NR
+\NC \type {\lastsavedimageresourceindex} \EQ \type {\pdflastximage} \NC \NR
+\NC \type {\lastsavedimageresourcepages} \EQ \type {\pdflastximagepages} \NC \NR
+\stoptabulate
+
+\LUATEX\ accepts optional dimension parameters for \type {\use...resource} in the
+same format as for rules. With images, these dimensions are then used instead of
+the ones given to \type {\useimageresource} but the original dimensions are not
+overwritten, so that a \type {\useimageresource} without dimensions still
+provides the image with dimensions defined by \type {\saveimageresource}. These
+optional parameters are not implemented for \type {\saveboxresource}.
+
+\starttyping
+\useimageresource width 20mm height 10mm depth 5mm \lastsavedimageresourceindex
+\useboxresource width 20mm height 10mm depth 5mm \lastsavedboxresourceindex
+\stoptyping
+
+The box resources are of course implemented in the backend and therefore we do
+support the \type {attr} and \type {resources} keys that accept a token list. New
+is the \type {type} key. When set to non|-|zero the \type {/Type} entry is
+omitted. A value of 1 or 3 still writes a \type {/BBox}, while 2 or 3 will write
+a \type {/Matrix}.
+
+\subsection{\type {\nohrule} and \type {\novrule}}
+
+Because introducing a new keyword can cause incompatibilities, two new primitives
+were introduced: \type {\nohrule} and \type {\novrule}. These can be used to
+reserve space. This is often more efficient than creating an empty box with fake
+dimensions).
+
+\subsection{\type {\gleaders}}
+
+This type of leaders is anchored to the origin of the box to be shipped out. So
+they are like normal \type {\leaders} in that they align nicely, except that the
+alignment is based on the {\it largest\/} enclosing box instead of the {\it
+smallest\/}. The \type {g} stresses this global nature.
+
+\section {Languages}
+
+\subsection{\type {\hyphenationmin}}
+
+This primitive can be used to set the minimal word length, so setting it to a value
+of~$5$ means that only words of 6 characters and more will be hyphenated, of course
+within the constraints of the \type {\lefthyphenmin} and \type {\righthyphenmin}
+values (as stored in the glyph node). This primitive accepts a number and stores
+the value with the language.
+
+\subsection{\type {\boundary}, \type {\noboundary}, \type {\protrusionboundary} and \type
+{\wordboundary}}
+
+The \type {\noboundary} commands used to inject a whatsit node but now injects a normal
+node with type \type {boundary} and subtype~0. In addition you can say:
+
+\starttyping
+x\boundary 123\relax y
+\stoptyping
+
+This has the same effect but the subtype is now~1 and the value~123 is stored.
+The traditional ligature builder still sees this as a cancel boundary directive
+but at the \LUA\ end you can implement different behaviour. The added benefit of
+passing this value is a side effect of the generalization. The subtypes~2 and~3
+are used to control protrusion and word boundaries in hyphenation.
+
+\section{Control and debugging}
+
+\subsection {Tracing}
+
+If \type {\tracingonline} is larger than~2, the node list display will also print
+the node number of the nodes.
+
+\subsection{\type {\outputmode} and \type {\draftmode}}
+
+The \type {\outputmode} variable tells \LUATEX\ what it has to produce:
+
+\starttabulate[|l|l|]
+\NC \type {0} \NC \DVI\ code \NC \NR
+\NC \type {1} \NC \PDF\ code \NC \NR
+\stoptabulate
+
+The value of the \type {\draftmode} counter signals the backend if it should
+output less. The \PDF\ backend accepts a value of~$1$, while the \DVI\ backend
+ignores the value.
+
+\section {Files}
+
+\subsection{File syntax}
+
+\LUATEX\ will accept a braced argument as a file name:
+
+\starttyping
+\input {plain}
+\openin 0 {plain}
+\stoptyping
+
+This allows for embedded spaces, without the need for double quotes. Macro
+expansion takes place inside the argument.
+
+\subsection{Writing to file}
+
+You can now open upto 127 files with \type {\openout}. When no file is open
+writes will go to the console and log. As a consequence a system command is
+no longer possible but one can use \type {os.execute} to do the same.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
new file mode 100644
index 000000000..90412ea81
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
@@ -0,0 +1,719 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-fonts
+
+\startchapter[reference=fonts,title={Font structure}]
+
+\section {The font tables}
+
+All \TEX\ fonts are represented to \LUA\ code as tables, and internally as
+\CCODE~structures. All keys in the table below are saved in the internal font
+structure if they are present in the table returned by the \type {define_font}
+callback, or if they result from the normal \TFM|/|\VF\ reading routines if there
+is no \type {define_font} callback defined.
+
+The column \quote {\VF} means that this key will be created by the \type
+{font.read_vf()} routine, \quote {\TFM} means that the key will be created by the
+\type {font.read_tfm()} routine, and \quote{used} means whether or not the
+\LUATEX\ engine itself will do something with the key.
+
+The top|-|level keys in the table are as follows:
+
+\starttabulate[|Tl|c|c|c|l|p|]
+\NC \rmbf key \NC \bf vf \NC \bf tfm \NC \bf used \NC \bf value type \NC \bf description \NC \NR
+\NC name \NC yes \NC yes \NC yes \NC string \NC metric (file) name \NC \NR
+\NC area \NC no \NC yes \NC yes \NC string \NC (directory) location, typically empty \NC \NR
+\NC used \NC no \NC yes \NC yes \NC boolean\NC indicates usage (initial: false) \NC \NR
+\NC characters \NC yes \NC yes \NC yes \NC table \NC the defined glyphs of this font \NC \NR
+\NC checksum \NC yes \NC yes \NC no \NC number \NC default: 0 \NC \NR
+\NC designsize \NC no \NC yes \NC yes \NC number \NC expected size (default: 655360 == 10pt) \NC \NR
+\NC direction \NC no \NC yes \NC yes \NC number \NC default: 0 \NC \NR
+\NC encodingbytes \NC no \NC no \NC yes \NC number \NC default: depends on \type {format} \NC \NR
+\NC encodingname \NC no \NC no \NC yes \NC string \NC encoding name \NC \NR
+\NC fonts \NC yes \NC no \NC yes \NC table \NC locally used fonts \NC \NR
+\NC psname \NC no \NC no \NC yes \NC string \NC This is the \POSTSCRIPT\ fontname in the incoming font
+ source, and it's used as fontname identifier in the \PDF\
+ output. This has to be a valid string, e.g.\ no spaces
+ and such, as the backend will not do a cleanup. This gives
+ complete control to the loader. \NC \NR
+\NC fullname \NC no \NC no \NC yes \NC string \NC output font name, used as a fallback in the \PDF\ output
+ if the \type {psname} is not set \NC \NR
+\NC header \NC yes \NC no \NC no \NC string \NC header comments, if any \NC \NR
+\NC hyphenchar \NC no \NC no \NC yes \NC number \NC default: \TEX's \type {\hyphenchar} \NC \NR
+\NC parameters \NC no \NC yes \NC yes \NC hash \NC default: 7 parameters, all zero \NC \NR
+\NC size \NC no \NC yes \NC yes \NC number \NC loaded (at) size. (default: same as designsize) \NC \NR
+\NC skewchar \NC no \NC no \NC yes \NC number \NC default: \TEX's \type {\skewchar} \NC \NR
+\NC type \NC yes \NC no \NC yes \NC string \NC basic type of this font \NC \NR
+\NC format \NC no \NC no \NC yes \NC string \NC disk format type \NC \NR
+\NC embedding \NC no \NC no \NC yes \NC string \NC \PDF\ inclusion \NC \NR
+\NC filename \NC no \NC no \NC yes \NC string \NC the name of the font on disk \NC \NR
+\NC tounicode \NC no \NC yes \NC yes \NC number \NC When this is set to~1 \LUATEX\ assumes per|-|glyph
+ tounicode entries are present in the font. \NC \NR
+\NC stretch \NC no \NC no \NC yes \NC number \NC the \quote {stretch} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC shrink \NC no \NC no \NC yes \NC number \NC the \quote {shrink} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC step \NC no \NC no \NC yes \NC number \NC the \quote {step} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC auto_expand \NC no \NC no \NC yes \NC boolean\NC the \quote {autoexpand} keyword from \crlf
+ \type {\expandglyphsinfont} \NC \NR
+\NC expansion_factor \NC no \NC no \NC no \NC number \NC the actual expansion factor of an expanded font \NC \NR
+\NC attributes \NC no \NC no \NC yes \NC string \NC the \type {\pdffontattr} \NC \NR
+\NC cache \NC no \NC no \NC yes \NC string \NC This key controls caching of the \LUA\ table on the
+ \TEX\ end where \type {yes} means: use a reference to
+ the table that is passed to \LUATEX\ (this is the
+ default), and no \type {no} means: don't store the
+ table reference, don't cache any \LUA\ data for this
+ font while \type {renew} means: don't store the table
+ reference, but save a reference to the table that is
+ created at the first access to one of its fields in font.
+ Note: the saved reference is thread|-|local, so be
+ careful when you are using coroutines: an error will be
+ thrown if the table has been cached in one thread, but
+ you reference it from another thread. \NC \NR
+\NC nomath \NC no \NC no \NC yes \NC boolean\NC This key allows a minor speedup for text fonts. If it
+ is present and true, then \LUATEX\ will not check the
+ character entries for math|-|specific keys. \NC \NR
+\NC slant \NC no \NC no \NC yes \NC number \NC This has the same semantics as the \type {SlantFont}
+ operator in font map files. \NC \NR
+\NC extent \NC no \NC no \NC yes \NC number \NC This has the same semantics as the \type {ExtendFont}
+ operator in font map files. \NC \NR
+\stoptabulate
+
+The key \type {name} is always required. The keys \type {stretch}, \type
+{shrink}, \type {step} and optionally \type {auto_expand} only have meaning when
+used together: they can be used to replace a post|-|loading \type
+{\expandglyphsinfont} command. The \type {expansion_factor} is value that can be
+present inside a font in \type {font.fonts}. It is the actual expansion factor (a
+value between \type {-shrink} and \type {stretch}, with step \type {step}) of a
+font that was automatically generated by the font expansion algorithm. The key
+\type {attributes} can be used to set font attributes in the \PDF\ file. The key
+\type {used} is set by the engine when a font is actively in use, this makes sure
+that the font's definition is written to the output file (\DVI\ or \PDF). The
+\TFM\ reader sets it to false. The \type {direction} is a number signalling the
+\quote {normal} direction for this font. There are sixteen possibilities:
+
+\starttabulate[|Tc|Tc|Tc|Tc|]
+\NC \rmbf number \NC \rmbf meaning \NC \rmbf number \NC \rmbf meaning \NC\NR
+\NC 0 \NC LT \NC 8 \NC TT \NC\NR
+\NC 1 \NC LL \NC 9 \NC TL \NC\NR
+\NC 2 \NC LB \NC 10 \NC TB \NC\NR
+\NC 3 \NC LR \NC 11 \NC TR \NC\NR
+\NC 4 \NC RT \NC 12 \NC BT \NC\NR
+\NC 5 \NC RL \NC 13 \NC BL \NC\NR
+\NC 6 \NC RB \NC 14 \NC BB \NC\NR
+\NC 7 \NC RR \NC 15 \NC BR \NC\NR
+\stoptabulate
+
+These are \OMEGA|-|style direction abbreviations: the first character indicates
+the \quote {first} edge of the character glyphs (the edge that is seen first in
+the writing direction), the second the \quote {top} side. Keep in mind that
+\LUATEX\ has a bit different directional model so these values are not used for
+anything.
+
+The \type {parameters} is a hash with mixed key types. There are seven possible
+string keys, as well as a number of integer indices (these start from 8 up). The
+seven strings are actually used instead of the bottom seven indices, because that
+gives a nicer user interface.
+
+The names and their internal remapping are:
+
+\starttabulate[|lT|c|]
+\NC \rmbf name \NC \rmbf remapping \NC\NR
+\NC slant \NC 1 \NC\NR
+\NC space \NC 2 \NC\NR
+\NC space_stretch \NC 3 \NC\NR
+\NC space_shrink \NC 4 \NC\NR
+\NC x_height \NC 5 \NC\NR
+\NC quad \NC 6 \NC\NR
+\NC extra_space \NC 7 \NC\LR
+\stoptabulate
+
+The keys \type {type}, \type {format}, \type {embedding}, \type {fullname} and
+\type {filename} are used to embed \OPENTYPE\ fonts in the result \PDF.
+
+The \type {characters} table is a list of character hashes indexed by an integer
+number. The number is the \quote {internal code} \TEX\ knows this character by.
+
+Two very special string indexes can be used also: \type {left_boundary} is a
+virtual character whose ligatures and kerns are used to handle word boundary
+processing. \type {right_boundary} is similar but not actually used for anything
+(yet).
+
+Other index keys are ignored.
+
+Each character hash itself is a hash. For example, here is the character \quote
+{f} (decimal 102) in the font \type {cmr10 at 10pt}:
+
+\starttyping
+[102] = {
+ ['width'] = 200250,
+ ['height'] = 455111,
+ ['depth'] = 0,
+ ['italic'] = 50973,
+ ['kerns'] = {
+ [63] = 50973,
+ [93] = 50973,
+ [39] = 50973,
+ [33] = 50973,
+ [41] = 50973
+ },
+ ['ligatures'] = {
+ [102] = {
+ ['char'] = 11,
+ ['type'] = 0
+ },
+ [108] = {
+ ['char'] = 13,
+ ['type'] = 0
+ },
+ [105] = {
+ ['char'] = 12,
+ ['type'] = 0
+ }
+ }
+}
+\stoptyping
+
+The following top|-|level keys can be present inside a character hash:
+
+\starttabulate[|lT|c|c|c|l|p|]
+\NC \rmbf key \NC \bf vf \NC \bf tfm \NC \bf used \NC \bf type \NC \bf description \NC\NR
+\NC width \NC yes \NC yes \NC yes \NC number \NC character's width, in sp (default 0) \NC\NR
+\NC height \NC no \NC yes \NC yes \NC number \NC character's height, in sp (default 0) \NC\NR
+\NC depth \NC no \NC yes \NC yes \NC number \NC character's depth, in sp (default 0) \NC\NR
+\NC italic \NC no \NC yes \NC yes \NC number \NC character's italic correction, in sp (default zero) \NC\NR
+\NC top_accent \NC no \NC no \NC maybe \NC number \NC character's top accent alignment place, in sp (default zero) \NC\NR
+\NC bot_accent \NC no \NC no \NC maybe \NC number \NC character's bottom accent alignment place, in sp (default zero) \NC\NR
+\NC left_protruding \NC no \NC no \NC maybe \NC number \NC character's \type {\lpcode} \NC\NR
+\NC right_protruding \NC no \NC no \NC maybe \NC number \NC character's \type {\rpcode} \NC\NR
+\NC expansion_factor \NC no \NC no \NC maybe \NC number \NC character's \type {\efcode} \NC\NR
+\NC tounicode \NC no \NC no \NC maybe \NC string \NC character's \UNICODE\ equivalent(s), in \UTF|-|16BE hexadecimal format \NC\NR
+\NC next \NC no \NC yes \NC yes \NC number \NC the \quote {next larger} character index \NC\NR
+\NC extensible \NC no \NC yes \NC yes \NC table \NC the constituent parts of an extensible recipe \NC\NR
+\NC vert_variants \NC no \NC no \NC yes \NC table \NC constituent parts of a vertical variant set \NC \NR
+\NC horiz_variants \NC no \NC no \NC yes \NC table \NC constituent parts of a horizontal variant set \NC \NR
+\NC kerns \NC no \NC yes \NC yes \NC table \NC kerning information \NC\NR
+\NC ligatures \NC no \NC yes \NC yes \NC table \NC ligaturing information \NC\NR
+\NC commands \NC yes \NC no \NC yes \NC array \NC virtual font commands \NC\NR
+\NC name \NC no \NC no \NC no \NC string \NC the character (\POSTSCRIPT) name \NC\NR
+\NC index \NC no \NC no \NC yes \NC number \NC the (\OPENTYPE\ or \TRUETYPE) font glyph index \NC\NR
+\NC used \NC no \NC yes \NC yes \NC boolean \NC typeset already (default: false)? \NC\NR
+\NC mathkern \NC no \NC no \NC yes \NC table \NC math cut-in specifications \NC\NR
+\stoptabulate
+
+The values of \type {top_accent}, \type {bot_accent} and \type {mathkern} are
+used only for math accent and superscript placement, see the \at {math chapter}
+[math] in this manual for details.
+
+The values of \type {left_protruding} and \type {right_protruding} are used only
+when \type {\protrudechars} is non-zero.
+
+Whether or not \type {expansion_factor} is used depends on the font's global
+expansion settings, as well as on the value of \type {\adjustspacing}.
+
+The usage of \type {tounicode} is this: if this font specifies a \type
+{tounicode=1} at the top level, then \LUATEX\ will construct a \type {/ToUnicode}
+entry for the \PDF\ font (or font subset) based on the character|-|level \type
+{tounicode} strings, where they are available. If a character does not have a
+sensible \UNICODE\ equivalent, do not provide a string either (no empty strings).
+
+If the font level \type {tounicode} is not set, then \LUATEX\ will build up \type
+{/ToUnicode} based on the \TEX\ code points you used, and any character-level
+\type {tounicodes} will be ignored. The string format is exactly the format that
+is expected by Adobe \CMAP\ files (\UTF-16BE in hexadecimal encoding), minus the
+enclosing angle brackets. For instance the \type {tounicode} for a \type {fi}
+ligature would be \type {00660069}. When you pass a number the conversion will be
+done for you.
+
+The presence of \type {extensible} will overrule \type {next}, if that is also
+present. It in in turn can be overruled by \type {vert_variants}.
+
+The \type {extensible} table is very simple:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf description \NC\NR
+\NC top \NC number \NC top character index \NC\NR
+\NC mid \NC number \NC middle character index \NC\NR
+\NC bot \NC number \NC bottom character index \NC\NR
+\NC rep \NC number \NC repeatable character index \NC\NR
+\stoptabulate
+
+The \type {horiz_variants} and \type {vert_variants} are arrays of components.
+Each of those components is itself a hash of up to five keys:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf explanation \NC\NR
+\NC glyph \NC number \NC The character index. Note that this is an encoding number, not a name. \NC \NR
+\NC extender \NC number \NC One (1) if this part is repeatable, zero (0) otherwise. \NC \NR
+\NC start \NC number \NC The maximum overlap at the starting side (in scaled points). \NC \NR
+\NC end \NC number \NC The maximum overlap at the ending side (in scaled points). \NC \NR
+\NC advance \NC number \NC The total advance width of this item. It can be zero or missing,
+ then the natural size of the glyph for character \type {component}
+ is used. \NC \NR
+\stoptabulate
+
+The \type {kerns} table is a hash indexed by character index (and \quote
+{character index} is defined as either a non|-|negative integer or the string
+value \type {right_boundary}), with the values the kerning to be applied, in
+scaled points.
+
+The \type {ligatures} table is a hash indexed by character index (and \quote
+{character index} is defined as either a non|-|negative integer or the string
+value \type {right_boundary}), with the values being yet another small hash, with
+two fields:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf description \NC \NR
+\NC type \NC number \NC the type of this ligature command, default 0 \NC \NR
+\NC char \NC number \NC the character index of the resultant ligature \NC \NR
+\stoptabulate
+
+The \type {char} field in a ligature is required.
+
+The \type {type} field inside a ligature is the numerical or string value of one
+of the eight possible ligature types supported by \TEX. When \TEX\ inserts a new
+ligature, it puts the new glyph in the middle of the left and right glyphs. The
+original left and right glyphs can optionally be retained, and when at least one
+of them is kept, it is also possible to move the new \quote {insertion point}
+forward one or two places. The glyph that ends up to the right of the insertion
+point will become the next \quote {left}.
+
+\starttabulate[|l|c|l|l|]
+\NC \bf textual (Knuth) \NC \bf number \NC \bf string \NC result \NC\NR
+\NC \type{l + r =: n} \NC 0 \NC \type{=:} \NC \type{|n} \NC\NR
+\NC \type{l + r =:| n} \NC 1 \NC \type{=:|} \NC \type{|nr} \NC\NR
+\NC \type{l + r |=: n} \NC 2 \NC \type{|=:} \NC \type{|ln} \NC\NR
+\NC \type{l + r |=:| n} \NC 3 \NC \type{|=:|} \NC \type{|lnr} \NC\NR
+\NC \type{l + r =:|> n} \NC 5 \NC \type{=:|>} \NC \type{n|r} \NC\NR
+\NC \type{l + r |=:> n} \NC 6 \NC \type{|=:>} \NC \type{l|n} \NC\NR
+\NC \type{l + r |=:|> n} \NC 7 \NC \type{|=:|>} \NC \type{l|nr} \NC\NR
+\NC \type{l + r |=:|>> n} \NC 11 \NC \type{|=:|>>} \NC \type{ln|r} \NC\NR
+\stoptabulate
+
+The default value is~0, and can be left out. That signifies a \quote {normal}
+ligature where the ligature replaces both original glyphs. In this table the~\type {|}
+indicates the final insertion point.
+
+The \type {commands} array is explained below.
+
+\section {Real fonts}
+
+Whether or not a \TEX\ font is a \quote {real} font that should be written to the
+\PDF\ document is decided by the \type {type} value in the top|-|level font
+structure. If the value is \type {real}, then this is a proper font, and the
+inclusion mechanism will attempt to add the needed font object definitions to the
+\PDF. Values for \type {type} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC\NR
+\NC real \NC this is a base font \NC\NR
+\NC virtual \NC this is a virtual font \NC\NR
+\stoptabulate
+
+The actions to be taken depend on a number of different variables:
+
+\startitemize[packed]
+\startitem
+ Whether the used font fits in an 8-bit encoding scheme or not.
+\stopitem
+\startitem
+ The type of the disk font file.
+\stopitem
+\startitem
+ The level of embedding requested.
+\stopitem
+\stopitemize
+
+A font that uses anything other than an 8-bit encoding vector has to be written
+to the \PDF\ in a different way.
+
+The rule is: if the font table has \type {encodingbytes} set to~2, then this is a
+wide font, in all other cases it isn't. The value~2 is the default for \OPENTYPE\
+and \TRUETYPE\ fonts loaded via \LUA. For \TYPEONE\ fonts, you have to set \type
+{encodingbytes} to~2 explicitly. For \PK\ bitmap fonts, wide font encoding is not
+supported at all.
+
+If no special care is needed, \LUATEX\ currently falls back to the
+mapfile|-|based solution used by \PDFTEX\ and \DVIPS. This behaviour might
+silently be removed in the future, in which case the related primitives and \LUA\
+functions will become no|-|ops.
+
+If a \quote {wide} font is used, the new subsystem kicks in, and some
+extra fields have to be present in the font structure. In this case, \LUATEX\
+does not use a map file at all.
+
+The extra fields are: \type {format}, \type {embedding}, \type {fullname}, \type
+{cidinfo} (as explained above), \type {filename}, and the \type {index} key in
+the separate characters.
+
+Values for \type {format} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC \NR
+\NC type1 \NC this is a \POSTSCRIPT\ \TYPEONE\ font \NC \NR
+\NC type3 \NC this is a bitmapped (\PK) font \NC \NR
+\NC truetype \NC this is a \TRUETYPE\ or \TRUETYPE|-|based \OPENTYPE\ font \NC \NR
+\NC opentype \NC this is a \POSTSCRIPT|-|based \OPENTYPE\ font \NC \NR
+\stoptabulate
+
+\type {type3} fonts are provided for backward compatibility only, and do not
+support the new wide encoding options.
+
+Values for \type {embedding} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC \NR
+\NC no \NC don't embed the font at all \NC \NR
+\NC subset \NC include and atttempt to subset the font \NC \NR
+\NC full \NC include this font in its entirety \NC \NR
+\stoptabulate
+
+The other fields are used as follows: The \type {fullname} will be the
+\POSTSCRIPT|/|\PDF\ font name. The \type {cidinfo} will be used as the character
+set (the CID \type {/Ordering} and \type {/Registry} keys). The \type {filename}
+points to the actual font file. If you include the full path in the \type
+{filename} or if the file is in the local directory, \LUATEX\ will run a little
+bit more efficient because it will not have to re|-|run the \type {find_xxx_file}
+callback in that case.
+
+Be careful: when mixing old and new fonts in one document, it is possible to
+create \POSTSCRIPT\ name clashes that can result in printing errors. When this
+happens, you have to change the \type {fullname} of the font.
+
+Typeset strings are written out in a wide format using 2~bytes per glyph, using
+the \type {index} key in the character information as value. The overall effect
+is like having an encoding based on numbers instead of traditional (\POSTSCRIPT)
+name|-|based reencoding. The way to get the correct \type {index} numbers for
+\TYPEONE\ fonts is by loading the font via \type {fontloader.open} and use the table
+indices as \type {index} fields.
+
+In order to make sure that cut and paste of the final document works okay you can
+best make sure that there is a \type {tounicode} vector enforced.
+
+\section[virtualfonts]{Virtual fonts}
+
+\subsection{The structure}
+
+You have to take the following steps if you want \LUATEX\ to treat the returned
+table from \type {define_font} as a virtual font:
+
+\startitemize[packed]
+\startitem
+ Set the top|-|level key \type {type} to \type {virtual}.
+\stopitem
+\startitem
+ Make sure there is at least one valid entry in \type {fonts} (see below).
+\stopitem
+\startitem
+ Give a \type {commands} array to every character (see below).
+\stopitem
+\stopitemize
+
+The presence of the toplevel \type {type} key with the specific value \type
+{virtual} will trigger handling of the rest of the special virtual font fields in
+the table, but the mere existence of 'type' is enough to prevent \LUATEX\ from
+looking for a virtual font on its own.
+
+Therefore, this also works \quote {in reverse}: if you are absolutely certain
+that a font is not a virtual font, assigning the value \type {base} or \type
+{real} to \type {type} will inhibit \LUATEX\ from looking for a virtual font
+file, thereby saving you a disk search.
+
+The \type {fonts} is another \LUA\ array. The values are one- or two|-|key
+hashes themselves, each entry indicating one of the base fonts in a virtual font.
+In case your font is referring to itself, you can use the \type {font.nextid()}
+function which returns the index of the next to be defined font which is probably
+the currently defined one.
+
+An example makes this easy to understand
+
+\starttyping
+fonts = {
+ { name = 'ptmr8a', size = 655360 },
+ { name = 'psyr', size = 600000 },
+ { id = 38 }
+}
+\stoptyping
+
+says that the first referenced font (index 1) in this virtual font is \type
+{ptrmr8a} loaded at 10pt, and the second is \type {psyr} loaded at a little over
+9pt. The third one is previously defined font that is known to \LUATEX\ as font id
+\quote {38}.
+
+The array index numbers are used by the character command definitions that are
+part of each character.
+
+The \type {commands} array is a hash where each item is another small array,
+with the first entry representing a command and the extra items being the
+parameters to that command. The allowed commands and their arguments are:
+
+\starttabulate[|Tl|l|l|p|]
+\NC \rmbf command name \NC \bf arguments \NC \bf type \NC \bf description \NC\NR
+\NC font \NC 1 \NC number \NC select a new font from the local \type {fonts} table\NC\NR
+\NC char \NC 1 \NC number \NC typeset this character number from the current font,
+ and move right by the character's width\NC\NR
+\NC node \NC 1 \NC node \NC output this node (list), and move right
+ by the width of this list\NC\NR
+\NC slot \NC 2 \NC number \NC a shortcut for the combination of a font and char command\NC\NR
+\NC push \NC 0 \NC \NC save current position\NC\NR
+\NC nop \NC 0 \NC \NC do nothing \NC\NR
+\NC pop \NC 0 \NC \NC pop position \NC\NR
+\NC rule \NC 2 \NC 2 numbers \NC output a rule $ht*wd$, and move right.\NC\NR
+\NC down \NC 1 \NC number \NC move down on the page\NC\NR
+\NC right \NC 1 \NC number \NC move right on the page\NC\NR
+\NC special \NC 1 \NC string \NC output a \type {\special} command\NC\NR
+\NC lua \NC 1 \NC string \NC execute a \LUA\ script (at \type {\latelua} time)\NC\NR
+\NC image \NC 1 \NC image \NC output an image (the argument can be either an \type
+ {<image>} variable or an \type {image_spec} table)\NC\NR
+\NC comment \NC any \NC any \NC the arguments of this command are ignored\NC\NR
+\stoptabulate
+
+When a font id is set to~0 then it will be replaced by the currently assigned
+font id. This prevents the need for hackery with future id's (normally one could
+use \type {font.nextid} but when more complex fonts are built in the meantime
+other instances could have been loaded.
+
+Here is a rather elaborate glyph commands example:
+
+\starttyping
+...
+commands = {
+ { 'push' }, -- remember where we are
+ { 'right', 5000 }, -- move right about 0.08pt
+ { 'font', 3 }, -- select the fonts[3] entry
+ { 'char', 97 }, -- place character 97 (ASCII 'a')
+ { 'pop' }, -- go all the way back
+ { 'down', -200000 }, -- move upwards by about 3pt
+ { 'special', 'pdf: 1 0 0 rg' } -- switch to red color
+ { 'rule', 500000, 20000 } -- draw a bar
+ { 'special','pdf: 0 g' } -- back to black
+}
+...
+\stoptyping
+
+The default value for \type {font} is always~1 at the start of the
+\type {commands} array. Therefore, if the virtual font is essentially only a
+re|-|encoding, then you do usually not have create an explicit \quote {font}
+command in the array.
+
+Rules inside of \type {commands} arrays are built up using only two dimensions:
+they do not have depth. For correct vertical placement, an extra \type {down}
+command may be needed.
+
+Regardless of the amount of movement you create within the \type {commands}, the
+output pointer will always move by exactly the width that was given in the \type
+{width} key of the character hash. Any movements that take place inside the \type
+{commands} array are ignored on the upper level.
+
+\subsection{Artificial fonts}
+
+Even in a \quote {real} font, there can be virtual characters. When \LUATEX\
+encounters a \type {commands} field inside a character when it becomes time to
+typeset the character, it will interpret the commands, just like for a true
+virtual character. In this case, if you have created no \quote {fonts} array,
+then the default (and only) \quote {base} font is taken to be the current font
+itself. In practice, this means that you can create virtual duplicates of
+existing characters which is useful if you want to create composite characters.
+
+Note: this feature does {\it not\/} work the other way around. There can not be
+\quote {real} characters in a virtual font! You cannot use this technique for
+font re-encoding either; you need a truly virtual font for that (because
+characters that are already present cannot be altered).
+
+\subsection{Example virtual font}
+
+Finally, here is a plain \TEX\ input file with a virtual font demonstration:
+
+\startbuffer
+\directlua {
+ callback.register('define_font',
+ function (name,size)
+ if name == 'cmr10-red' then
+ f = font.read_tfm('cmr10',size)
+ f.name = 'cmr10-red'
+ f.type = 'virtual'
+ f.fonts = {{ name = 'cmr10', size = size }}
+ for i,v in pairs(f.characters) do
+ if (string.char(i)):find('[tacohanshartmut]') then
+ v.commands = {
+ {'special','pdf: 1 0 0 rg'},
+ {'char',i},
+ {'special','pdf: 0 g'},
+ }
+ else
+ v.commands = {{'char',i}}
+ end
+ end
+ else
+ f = font.read_tfm(name,size)
+ end
+ return f
+ end
+ )
+}
+
+\font\myfont = cmr10-red at 10pt \myfont This is a line of text \par
+\font\myfontx= cmr10 at 10pt \myfontx Here is another line of text \par
+\stopbuffer
+
+\typebuffer
+
+\section{The \type {font} library}
+
+The font library provides the interface into the internals of the font system,
+and also it contains helper functions to load traditional \TEX\ font metrics
+formats. Other font loading functionality is provided by the \type {fontloader}
+library that will be discussed in the next section.
+
+\subsection{Loading a \TFM\ file}
+
+The behavior documented in this subsection is considered stable in the sense that
+there will not be backward-incompatible changes any more.
+
+\startfunctioncall
+<table> fnt =
+ font.read_tfm(<string> name, <number> s)
+\stopfunctioncall
+
+The number is a bit special:
+
+\startitemize
+\startitem
+ If it is positive, it specifies an \quote {at size} in scaled points.
+\stopitem
+\startitem
+ If it is negative, its absolute value represents a \quote {scaled}
+ setting relative to the designsize of the font.
+\stopitem
+\stopitemize
+
+The internal structure of the metrics font table that is returned is explained in
+\in {chapter} [fonts].
+
+\subsection{Loading a \VF\ file}
+
+The behavior documented in this subsection is considered stable in the sense that
+there will not be backward-incompatible changes any more.
+
+\startfunctioncall
+<table> vf_fnt =
+ font.read_vf(<string> name, <number> s)
+\stopfunctioncall
+
+The meaning of the number \type {s} and the format of the returned table are
+similar to the ones in the \type {read_tfm()} function.
+
+\subsection{The fonts array}
+
+The whole table of \TEX\ fonts is accessible from \LUA\ using a virtual array.
+
+\starttyping
+font.fonts[n] = { ... }
+<table> f = font.fonts[n]
+\stoptyping
+
+See \in {chapter} [fonts] for the structure of the tables. Because this is a
+virtual array, you cannot call \type {pairs} on it, but see below for the \type
+{font.each} iterator.
+
+The two metatable functions implementing the virtual array are:
+
+\startfunctioncall
+<table> f = font.getfont(<number> n)
+font.setfont(<number> n, <table> f)
+\stopfunctioncall
+
+Note that at the moment, each access to the \type {font.fonts} or call to \type
+{font.getfont} creates a \LUA\ table for the whole font. This process can be quite
+slow. In a later version of \LUATEX, this interface will change (it will start
+using userdata objects instead of actual tables).
+
+Also note the following: assignments can only be made to fonts that have already
+been defined in \TEX, but have not been accessed {\it at all\/} since that
+definition. This limits the usability of the write access to \type {font.fonts}
+quite a lot, a less stringent ruleset will likely be implemented later.
+
+\subsection{Checking a font's status}
+
+You can test for the status of a font by calling this function:
+
+\startfunctioncall
+<boolean> f =
+ font.frozen(<number> n)
+\stopfunctioncall
+
+The return value is one of \type {true} (unassignable), \type {false} (can be
+changed) or \type {nil} (not a valid font at all).
+
+\subsection{Defining a font directly}
+
+You can define your own font into \type {font.fonts} by calling this function:
+
+\startfunctioncall
+<number> i =
+ font.define(<table> f)
+\stopfunctioncall
+
+The return value is the internal id number of the defined font (the index into
+\type {font.fonts}). If the font creation fails, an error is raised. The table
+is a font structure, as explained in \in {chapter} [fonts].
+
+\subsection{Projected next font id}
+
+\startfunctioncall
+<number> i =
+ font.nextid()
+\stopfunctioncall
+
+This returns the font id number that would be returned by a \type {font.define}
+call if it was executed at this spot in the code flow. This is useful for virtual
+fonts that need to reference themselves.
+
+\subsection{Font id}
+
+\startfunctioncall
+<number> i =
+ font.id(<string> csname)
+\stopfunctioncall
+
+This returns the font id associated with \type {csname} string, or $-1$ if \type
+{csname} is not defined.
+
+\subsection{Currently active font}
+
+\startfunctioncall
+<number> i = font.current()
+font.current(<number> i)
+\stopfunctioncall
+
+This gets or sets the currently used font number.
+
+\subsection{Maximum font id}
+
+\startfunctioncall
+<number> i =
+ font.max()
+\stopfunctioncall
+
+This is the largest used index in \type {font.fonts}.
+
+\subsection{Iterating over all fonts}
+
+\startfunctioncall
+for i,v in font.each() do
+ ...
+end
+\stopfunctioncall
+
+This is an iterator over each of the defined \TEX\ fonts. The first returned
+value is the index in \type {font.fonts}, the second the font itself, as a \LUA\
+table. The indices are listed incrementally, but they do not always form an array
+of consecutive numbers: in some cases there can be holes in the sequence.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-introduction.tex b/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
new file mode 100644
index 000000000..8ab8b4463
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
@@ -0,0 +1,121 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-introduction
+
+\startchapter[title=Introduction]
+
+This is the reference manual of \LUATEX. We don't claim it is complete and we
+assume that the reader knows about \TEX\ as described in \quotation {The \TEX\
+Book}, the \quotation {\ETEX\ manual}, the \quotation {\PDFTEX\ manual}, etc.
+Additional reference material is published in journals of user groups and
+\CONTEXT\ related documentation.
+
+It took about a decade to reach stable version 1.0, but for good reason.
+Successive versions brought new functionality, more control, some cleanup of
+internals and experimental features evolved into stable ones or were dropped.
+Already quite early \LUATEX\ could be used for production and it was used on a
+daily basis by the authors. Successive versions sometimes demanded a adaption to
+the \LUA\ interfacing, but the concepts were unchanged. The current version can
+be considered stable in functionality and there will be no fundamental changes.
+Of course we then can decide to move towards version 2.00 with different
+properties.
+
+Don't expect \LUATEX\ to behave the same as \PDFTEX ! Although the core
+functionality of that 8 bit engine was starting point, it has been combined with
+the directional support of \OMEGA\ (\ALEPH). But, \LUATEX\ can behave different
+due to its wide (32 bit) characters, many registers and large memory support.
+There is native \UTF\ input, support for large (more that 8 bit) fonts, and the
+math machinery is tuned for \OPENTYPE\ math. There is support for directional
+typesetting too. The log output can differ from other engines and will likely
+differ more as we move forward. When you run plain \TEX\ for sure \LUATEX\ runs
+slower than \PDFTEX\ but when you run for instance \CONTEXT\ \MKIV\ in many cases
+it runs faster, especially when you have a bit more complex documents or input.
+Anyway, 32 bit all||over combined with more features has a price, but on a modern
+machine this is no real problem.
+
+Testing is done with \CONTEXT, but \LUATEX\ should work fine with other macro
+packages too. For that purpose we provide generic font handlers that are mostly
+the same as used in \CONTEXT. Discussing specific implementations is beyond this
+manual. Even when we keep \LUATEX\ lean and mean, we already have enough to
+discuss here.
+
+\LUATEX\ consists of a number of interrelated but (still) distinguishable parts.
+The organization of the source code is adapted so that it can glue all these
+components together. We continue cleaning up side effects of the accumulated
+code in \TEX\ engines (especially code that is not needed any longer).
+
+\startitemize[packed]
+ \startitem
+ Most of \PDFTEX\ version 1.40.9, converted to \CCODE. Some experimental
+ features have been removed and some utility macros are not inherited as
+ their functionality can be done in \LUA. The number of backend interface
+ commands has been reduced to a few. The extensions are separated from the
+ core (which we keep close to the original \TEX\ core). Some mechanisms
+ like expansion and protrusion can behave different from the original due
+ to some cleanup and optimization. Some whatsit based functionality (image
+ support and reusable content) is now core functionality.
+ \stopitem
+ \startitem
+ The direction model and some other bits from \ALEPH\ RC4 (derived from
+ \OMEGA) is included. The related primitives are part of core \LUATEX\ but
+ at the node level directional support is no longer based on so called
+ whatsits but on real nodes. In fact, whatsits are now only used for
+ backend specific extensions.
+ \stopitem
+ \startitem
+ Neither \ALEPH's I/O translation processes, nor tcx files, nor \ENCTEX\
+ can be used, these encoding|-|related functions are superseded by a
+ \LUA|-|based solution (reader callbacks). In a similar fashion all file
+ \IO\ can be intercepted.
+ \stopitem
+ \startitem
+ We currently use \LUA\ 5.2.*. At some point we might decide to move to
+ 5.3.* but that is yet to be decided. There are few \LUA\ libraries that
+ we consider part of the core \LUA\ machinery, for instance \type {lpeg}.
+ There are additional \LUA\ libraries that interface to the internals of
+ \TEX.
+ \stopitem
+ \startitem
+ There are various \TEX\ extensions but only those that cannot be done
+ using the \LUA\ interfaces. The math machinery often has two code paths:
+ one traditional and the other more suitable for wide \OPENTYPE\ fonts.
+ \stopitem
+ \startitem
+ The fontloader uses parts of \FONTFORGE\ 2008.11.17 combined with
+ additional code specific for usage in a \TEX\ engine. We try to minimize
+ specific font support to what \TEX\ needs: character references and
+ dimensions and delegate everything else to \LUA. That way we keep \TEX\
+ open for extensions without touching the core.
+ \stopitem
+ \startitem
+ The \METAPOST\ library is integral part of \LUATEX. This gives \TEX\ some
+ graphical capabilities using a relative high speed graphical subsystem.
+ Again \LUA\ is used as glue between the frontend and backend. Further
+ development of \METAPOST\ is closely related to \LUATEX.
+ \stopitem
+\stopitemize
+
+The \TEXLIVE\ version is to be considered the current stable version. Any version
+between the yearly \TEXLIVE\ releases are to be considered beta. The beta
+releases are normally available via the \CONTEXT\ distribution channels (the
+garden and so called minimals).
+
+\blank[1*big]
+
+Hans Hagen, Harmut Henkel, \crlf
+Taco Hoekwater \& Luigi Scarso
+
+\blank[3*big]
+
+\starttabulate
+\NC Version \EQ \currentdate \NC \NR
+\NC \LUATEX \EQ Snapshot \number\luatexversion.\luatexrevision \NC \NR
+\NC \CONTEXT \EQ \contextversion \NC \NR
+\stoptabulate
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-languages.tex b/doc/context/sources/general/manuals/luatex/luatex-languages.tex
new file mode 100644
index 000000000..ad7b7b9d6
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-languages.tex
@@ -0,0 +1,770 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-languages
+
+\startchapter[reference=languages,title={Languages, characters, fonts and glyphs}]
+
+\LUATEX's internal handling of the characters and glyphs that eventually become
+typeset is quite different from the way \TEX82 handles those same objects. The
+easiest way to explain the difference is to focus on unrestricted horizontal mode
+(i.e.\ paragraphs) and hyphenation first. Later on, it will be easy to deal
+with the differences that occur in horizontal and math modes.
+
+In \TEX82, the characters you type are converted into \type {char_node} records
+when they are encountered by the main control loop. \TEX\ attaches and processes
+the font information while creating those records, so that the resulting \quote
+{horizontal list} contains the final forms of ligatures and implicit kerning.
+This packaging is needed because we may want to get the effective width of for
+instance a horizontal box.
+
+When it becomes necessary to hyphenate words in a paragraph, \TEX\ converts (one
+word at time) the \type {char_node} records into a string by replacing ligatures
+with their components and ignoring the kerning. Then it runs the hyphenation
+algorithm on this string, and converts the hyphenated result back into a \quote
+{horizontal list} that is consecutively spliced back into the paragraph stream.
+Keep in mind that the paragraph may contain unboxed horizontal material, which
+then already contains ligatures and kerns and the words therein are part of the
+hyphenation process.
+
+Those \type {char_node} records are somewhat misnamed, as they are glyph
+positions in specific fonts, and therefore not really \quote {characters} in the
+linguistic sense. There is no language information inside the \type {char_node}
+records at all. Instead, language information is passed along using \type
+{language whatsit} records inside the horizontal list.
+
+In \LUATEX, the situation is quite different. The characters you type are always
+converted into \type {glyph_node} records with a special subtype to identify them
+as being intended as linguistic characters. \LUATEX\ stores the needed language
+information in those records, but does not do any font|-|related processing at
+the time of node creation. It only stores the index of the current font and a
+reference to a character in that font.
+
+When it becomes necessary to typeset a paragraph, \LUATEX\ first inserts all
+hyphenation points right into the whole node list. Next, it processes all the
+font information in the whole list (creating ligatures and adjusting kerning),
+and finally it adjusts all the subtype identifiers so that the records are \quote
+{glyph nodes} from now on.
+
+\section[charsandglyphs]{Characters and glyphs}
+
+\TEX82 (including \PDFTEX) differentiates between \type {char_node}s and \type
+{lig_node}s. The former are simple items that contained nothing but a \quote
+{character} and a \quote {font} field, and they lived in the same memory as
+tokens did. The latter also contained a list of components, and a subtype
+indicating whether this ligature was the result of a word boundary, and it was
+stored in the same place as other nodes like boxes and kerns and glues.
+
+In \LUATEX, these two types are merged into one, somewhat larger structure called
+a \type {glyph_node}. Besides having the old character, font, and component
+fields, and the new special fields like \quote {attr} (see~\in {section}
+[glyphnodes]), these nodes also contain:
+
+\startitemize
+
+\startitem A subtype, split into four main types:
+
+ \startitemize
+ \startitem
+ \type {character}, for characters to be hyphenated: the lowest bit
+ (bit 0) is set to 1.
+ \stopitem
+ \startitem
+ \type {glyph}, for specific font glyphs: the lowest bit (bit 0) is
+ not set.
+ \stopitem
+ \startitem
+ \type {ligature}, for ligatures (bit 1 is set)
+ \stopitem
+ \startitem
+ \type {ghost}, for \quote {ghost objects} (bit 2 is set)
+ \stopitem
+ \stopitemize
+
+ The latter two make further use of two extra fields (bits 3 and 4):
+
+ \startitemize
+ \startitem
+ \type {left}, for ligatures created from a left word boundary and for
+ ghosts created from \type {\leftghost}
+ \stopitem
+ \startitem
+ \type {right}, for ligatures created from a right word boundary and
+ for ghosts created from \type {\rightghost}
+ \stopitem
+ \stopitemize
+
+ For ligatures, both bits can be set at the same time (in case of a
+ single|-|glyph word).
+
+\stopitem
+
+\startitem
+ \type {glyph_node}s of type \quote {character} also contain language data,
+ split into four items that were current when the node was created: the
+ \type {\setlanguage} (15 bits), \type {\lefthyphenmin} (8 bits), \type
+ {\righthyphenmin} (8 bits), and \type {\uchyph} (1 bit).
+\stopitem
+
+\stopitemize
+
+Incidentally, \LUATEX\ allows 16383 separate languages, and words can be 256
+characters long. The language is stored with each character. You can set
+\type {\firstvalidlanguage} to for instance~1 and make thereby language~0
+an ignored hyphenation language.
+
+The new primitive \type {\hyphenationmin} can be used to signal the minimal length
+of a word. This value stored with the (current) language.
+
+Because the \type {\uchyph} value is saved in the actual nodes, its handling is
+subtly different from \TEX82: changes to \type {\uchyph} become effective
+immediately, not at the end of the current partial paragraph.
+
+Typeset boxes now always have their language information embedded in the nodes
+themselves, so there is no longer a possible dependency on the surrounding
+language settings. In \TEX82, a mid-paragraph statement like \type {\unhbox0} would
+process the box using the current paragraph language unless there was a
+\type {\setlanguage} issued inside the box. In \LUATEX, all language variables are
+already frozen.
+
+In traditional \TEX\ the process of hyphenation is driven by \type {lccode}s. In
+\LUATEX\ we made this dependency less strong. There are several strategies
+possible. When you do nothing, the currently used \type {lccode}s are used, when
+loading patterns, setting exceptions or hyphenating a list.
+
+When you set \type {\savinghyphcodes} to a value larger than zero the current set
+of \type {lccode}s will be saved with the language. In that case changing a \type
+{lccode} afterwards has no effect. However, you can adapt the set with:
+
+\starttyping
+\hjcode`a=`a
+\stoptyping
+
+This change is global which makes sense if you keep in mind that the moment that
+hyphenation happens is (normally) when the paragraph or a horizontal box is
+constructed. When \type {\savinghyphcodes} was zero when the language got
+initialized you start out with nothing, otherwise you already have a set.
+
+When a \type {\hjcode} is larger than $0$ but smaller than $32$ is indicates the
+to be used length. In the following example we map a character (\type {x}) onto
+another one in the patterns and tell the engine that \type {œ} counts as one
+character. Because traditionally zero itself is reserved for inhibiting
+hyphenation, a value of $32$ counts as zero.
+
+\starttyping
+% assuming french patterns:
+foobar % foo-bar
+
+\hjcode`x=`o
+
+fxxbar % fxx-bar
+
+\lefthyphenmin3
+
+œdipus % œdi-pus
+
+\lefthyphenmin4
+
+œdipus % œdipus
+
+\hjcode`œ=2
+
+œdipus % œdi-pus
+
+\hjcode`i=32
+\hjcode`d=32
+
+œdipus % œdipus
+\stoptyping
+
+Carrying all this information with each glyph would give too much overhead and
+also make the process of setting up thee codes more complex. A solution with
+\type {hjcode} sets was considered but rejected because in practice the current
+approach is sufficient and it would not be compatible anyway.
+
+Beware: the values are always saved in the format, independent of the setting
+of \type {\savinghyphcodes} at the moment the format is dumped.
+
+A boundary node normally would mark the end of a word which interferes with for
+instance discretionary injection. For this you can use the \type {\wordboundary}
+as trigger. Here are a few examples of usage:
+
+\startbuffer
+ discrete---discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\discretionary{}{}{---}discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{}{}{---}discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{}{}{---}\wordboundary discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{---}{}{}\wordboundary discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+
+We only accept an explicit hyphen when there is a preceding glyph and we skip a
+sequence of explicit hyphens as that normally indicates a \type {--} or \type
+{---} ligature in which case we can in a worse case usage get bad node lists
+later on due to messed up ligature building as these dashes are ligatures in base
+fonts. This is a side effect of the separating the hyphenation, ligaturing and
+kerning steps.
+
+The start and end of a characters is signalled by a glue, penalty, kern or boundary
+node. But by default also a hlist, vlist, rule, dir, whatsit, ins, and adjust node
+indicate a start or end. You can omit the last set from the test by setting
+\type {\hyphenationbounds} to a non|-|zero value:
+
+\starttabulate[|Tl|l|]
+\NC 0 \NC not strict \NC \NR
+\NC 1 \NC strict start \NC \NR
+\NC 2 \NC strict end \NC \NR
+\NC 3 \NC strict start and strict end \NC \NR
+\stoptabulate
+
+\section{The main control loop}
+
+In \LUATEX's main loop, almost all input characters that are to be typeset are
+converted into \type {glyph} node records with subtype \quote {character}, but
+there are a few exceptions.
+
+First, the \type {\accent} primitives creates nodes with subtype \quote {glyph}
+instead of \quote {character}: one for the actual accent and one for the
+accentee. The primary reason for this is that \type {\accent} in \TEX82 is
+explicitly dependent on the current font encoding, so it would not make much
+sense to attach a new meaning to the primitive's name, as that would invalidate
+many old documents and macro packages. \footnote {Of course, modern packages will
+not use the \type {\accent} primitive at all but try to map directly on composed
+characters.} A secondary reason is that in \TEX82, \type {\accent} prohibits
+hyphenation of the current word. Since in \LUATEX\ hyphenation only takes place
+on \quote {character} nodes, it is possible to achieve the same effect.
+
+This change of meaning did happen with \type {\char}, that now generates \quote
+{glyph} nodes with a character subtype. In traditional \TEX\ there was a strong
+relationship between the 8|-|bit input encoding, hyphenation and glyphs taken
+from a font. In \LUATEX\ we have \UTF\ input, and in most cases this maps
+directly to a character in a font, apart from glyph replacement in the font
+engine. If you want to access arbitrary glyphs in a font directly you can always
+use \LUA\ to do so, because fonts are available as \LUA\ table.
+
+Second, all the results of processing in math mode eventually become nodes with
+\quote {glyph} subtypes.
+
+Third, the \ALEPH|-|derived commands \type {\leftghost} and \type {\rightghost}
+create nodes of a third subtype: \quote {ghost}. These nodes are ignored
+completely by all further processing until the stage where inter|-|glyph kerning
+is added.
+
+Fourth, automatic discretionaries are handled differently. \TEX82 inserts an
+empty discretionary after sensing an input character that matches the \type
+{\hyphenchar} in the current font. This test is wrong in our opinion: whether or
+not hyphenation takes place should not depend on the current font, it is a
+language property. \footnote {When \TEX\ showed up we didn't have \UNICODE\ yet
+and being limited to eight bits meant that one sometimes had to compromise
+between supporting character input, glyph rendering, hyphenation.}
+
+In \LUATEX, it works like this: if \LUATEX\ senses a string of input characters
+that matches the value of the new integer parameter \type {\exhyphenchar}, it will
+insert an explicit discretionary after that series of nodes. Initex sets the \type
+{\exhyphenchar=`\-}. Incidentally, this is a global parameter instead of a
+language-specific one because it may be useful to change the value depending on
+the document structure instead of the text language.
+
+The insertion of discretionaries after a sequence of explicit hyphens happens at
+the same time as the other hyphenation processing, {\it not\/} inside the main
+control loop.
+
+The only use \LUATEX\ has for \type {\hyphenchar} is at the check whether a word
+should be considered for hyphenation at all. If the \type {\hyphenchar} of the
+font attached to the first character node in a word is negative, then hyphenation
+of that word is abandoned immediately. This behaviour is added for backward
+compatibility only, and the use of \type {\hyphenchar=-1} as a means of
+preventing hyphenation should not be used in new \LUATEX\ documents.
+
+Fifth, \type {\setlanguage} no longer creates whatsits. The meaning of \type
+{\setlanguage} is changed so that it is now an integer parameter like all others.
+That integer parameter is used in \type {\glyph_node} creation to add language
+information to the glyph nodes. In conjunction, the \type {\language} primitive is
+extended so that it always also updates the value of \type {\setlanguage}.
+
+Sixth, the \type {\noboundary} command (that prohibits word boundary processing
+where that would normally take place) now does create nodes. These nodes are
+needed because the exact place of the \type {\noboundary} command in the input
+stream has to be retained until after the ligature and font processing stages.
+
+Finally, there is no longer a \type {main_loop} label in the code. Remember that
+\TEX82 did quite a lot of processing while adding \type {char_nodes} to the
+horizontal list? For speed reasons, it handled that processing code outside of
+the \quote {main control} loop, and only the first character of any \quote {word}
+was handled by that \quote {main control} loop. In \LUATEX, there is no longer a
+need for that (all hard work is done later), and the (now very small) bits of
+character|-|handling code have been moved back inline. When \type
+{\tracingcommands} is on, this is visible because the full word is reported,
+instead of just the initial character.
+
+\section[patternsexceptions]{Loading patterns and exceptions}
+
+The hyphenation algorithm in \LUATEX\ is quite different from the one in \TEX82,
+although it uses essentially the same user input.
+
+After expansion, the argument for \type {\patterns} has to be proper \UTF8 with
+individual patterns separated by spaces, no \type {\char} or \type {\chardef}d
+commands are allowed. The current implementation quite strict and will reject all
+non|-|\UNICODE\ characters.
+
+Likewise, the expanded argument for \type {\hyphenation} also has to be proper
+\UTF8, but here a bit of extra syntax is provided:
+
+\startitemize[n]
+\startitem
+ Three sets of arguments in curly braces (\type {{}{}{}}) indicates a desired
+ complex discretionary, with arguments as in \type {\discretionary}'s command in
+ normal document input.
+\stopitem
+\startitem
+ A \type {-} indicates a desired simple discretionary, cf.\ \type {\-} and \type
+ {\discretionary{-}{}{}} in normal document input.
+\stopitem
+\startitem
+ Internal command names are ignored. This rule is provided especially for \type
+ {\discretionary}, but it also helps to deal with \type {\relax} commands that
+ may sneak in.
+\stopitem
+\startitem
+ An \type {=} indicates a (non|-|discretionary) hyphen in the document input.
+\stopitem
+\stopitemize
+
+The expanded argument is first converted back to a space-separated string while
+dropping the internal command names. This string is then converted into a
+dictionary by a routine that creates key|-|value pairs by converting the other
+listed items. It is important to note that the keys in an exception dictionary
+can always be generated from the values. Here are a few examples:
+
+\starttabulate[|l|l|l|]
+\NC \bf value \NC \bf implied key (input) \NC \bf effect \NC\NR
+\NC \type {ta-ble} \NC table \NC \type {ta\-ble} ($=$ \type {ta\discretionary{-}{}{}ble}) \NC\NR
+\NC \type {ba{k-}{}{c}ken} \NC backen \NC \type {ba\discretionary{k-}{}{c}ken} \NC\NR
+\stoptabulate
+
+The resultant patterns and exception dictionary will be stored under the language
+code that is the present value of \type {\language}.
+
+In the last line of the table, you see there is no \type {\discretionary} command
+in the value: the command is optional in the \TEX-based input syntax. The
+underlying reason for that is that it is conceivable that a whole dictionary of
+words is stored as a plain text file and loaded into \LUATEX\ using one of the
+functions in the \LUA\ \type {lang} library. This loading method is quite a bit
+faster than going through the \TEX\ language primitives, but some (most?) of that
+speed gain would be lost if it had to interpret command sequences while doing so.
+
+It is possible to specify extra hyphenation points in compound words by using
+\type {{-}{}{-}} for the explicit hyphen character (replace \type {-} by the
+actual explicit hyphen character if needed). For example, this matches the word
+\quote {multi|-|word|-|boundaries} and allows an extra break inbetween \quote
+{boun} and \quote {daries}:
+
+\starttyping
+\hyphenation{multi{-}{}{-}word{-}{}{-}boun-daries}
+\stoptyping
+
+The motivation behind the \ETEX\ extension \type {\savinghyphcodes} was that
+hyphenation heavily depended on font encodings. This is no longer true in
+\LUATEX, and the corresponding primitive is basically ignored. Because we now
+have \type {hjcode}, the case relate codes can be used exclusively for \type
+{\uppercase} and \type {\lowercase}.
+
+\section{Applying hyphenation}
+
+The internal structures \LUATEX\ uses for the insertion of discretionaries in
+words is very different from the ones in \TEX82, and that means there are some
+noticeable differences in handling as well.
+
+First and foremost, there is no \quote {compressed trie} involved in hyphenation.
+The algorithm still reads \PATGEN-generated pattern files, but \LUATEX\ uses a
+finite state hash to match the patterns against the word to be hyphenated. This
+algorithm is based on the \quote {libhnj} library used by \OPENOFFICE, which in
+turn is inspired by \TEX.
+
+There are a few differences between \LUATEX\ and \TEX82 that are a direct result
+of the implementation:
+
+\startitemize
+\startitem
+ \LUATEX\ happily hyphenates the full \UNICODE\ character range.
+\stopitem
+\startitem
+ Pattern and exception dictionary size is limited by the available memory
+ only, all allocations are done dynamically. The trie|-|related settings in
+ \type {texmf.cnf} are ignored.
+\stopitem
+\startitem
+ Because there is no \quote {trie preparation} stage, language patterns never
+ become frozen. This means that the primitive \type {\patterns} (and its \LUA\
+ counterpart \type {lang.patterns}) can be used at any time, not only in
+ ini\TEX.
+\stopitem
+\startitem
+ Only the string representation of \type {\patterns} and \type {\hyphenation} is
+ stored in the format file. At format load time, they are simply
+ re|-|evaluated. It follows that there is no real reason to preload languages
+ in the format file. In fact, it is usually not a good idea to do so. It is
+ much smarter to load patterns no sooner than the first time they are actually
+ needed.
+\stopitem
+\startitem
+ \LUATEX\ uses the language-specific variables \type {\prehyphenchar} and \type
+ {\posthyphenchar} in the creation of implicit discretionaries, instead of
+ \TEX82's \type {\hyphenchar}, and the values of the language|-|specific variables
+ \type {\preexhyphenchar} and \type {\postexhyphenchar} for explicit
+ discretionaries (instead of \TEX82's empty discretionary).
+\stopitem
+\startitem
+ The value of the two counters related to hyphenation, \type {\hyphenpenalty}
+ and \type {\exhyphenpenalty}, are now stored in the discretionary nodes. This
+ permits a local overload for explicit \type {\discretionary} commands. The
+ value current when the hyphenation pass is applied is used. When no callbacks
+ are used this is compatible with traditional \TEX. When you apply the \LUA\
+ \type {lang.hyphenate} function the current values are used.
+\stopitem
+\stopitemize
+
+Because we store penalties in the disc node the \type {\discretionary} command has
+been extended to accept an optional penalty specification, so you can do the
+following:
+
+\startbuffer
+\hsize1mm
+1:foo{\hyphenpenalty 10000\discretionary{}{}{}}bar\par
+2:foo\discretionary penalty 10000 {}{}{}bar\par
+3:foo\discretionary{}{}{}bar\par
+\stopbuffer
+
+\typebuffer
+
+This results in:
+
+\blank \start \getbuffer \stop \blank
+
+Inserted characters and ligatures inherit their attributes from the nearest glyph
+node item (usually the preceding one, but the following one for the items
+inserted at the left-hand side of a word).
+
+Word boundaries are no longer implied by font switches, but by language switches.
+One word can have two separate fonts and still be hyphenated correctly (but it
+can not have two different languages, the \type {\setlanguage} command forces a
+word boundary).
+
+All languages start out with \type {\prehyphenchar=`\-}, \type {\posthyphenchar=0},
+\type {\preexhyphenchar=0} and \type {\postexhyphenchar=0}. When you assign the
+values of one of these four parameters, you are actually changing the settings
+for the current \type {\language}, this behaviour is compatible with \type {\patterns}
+and \type {\hyphenation}.
+
+\LUATEX\ also hyphenates the first word in a paragraph. Words can be up to 256
+characters long (up from 64 in \TEX82). Longer words generate an error right now,
+but eventually either the limitation will be removed or perhaps it will become
+possible to silently ignore the excess characters (this is what happens in
+\TEX82, but there the behaviour cannot be controlled).
+
+If you are using the \LUA\ function \type {lang.hyphenate}, you should be aware
+that this function expects to receive a list of \quote {character} nodes. It will
+not operate properly in the presence of \quote {glyph}, \quote {ligature}, or
+\quote {ghost} nodes, nor does it know how to deal with kerning.
+
+The hyphenation exception dictionary is maintained as key|-|value hash, and that
+is also dynamic, so the \type {hyph_size} setting is not used either.
+
+\section{Applying ligatures and kerning}
+
+After all possible hyphenation points have been inserted in the list, \LUATEX\
+will process the list to convert the \quote {character} nodes into \quote {glyph}
+and \quote {ligature} nodes. This is actually done in two stages: first all
+ligatures are processed, then all kerning information is applied to the result
+list. But those two stages are somewhat dependent on each other: If the used font
+makes it possible to do so, the ligaturing stage adds virtual \quote {character}
+nodes to the word boundaries in the list. While doing so, it removes and
+interprets \type {\noboundary} nodes. The kerning stage deletes those word
+boundary items after it is done with them, and it does the same for \quote
+{ghost} nodes. Finally, at the end of the kerning stage, all remaining \quote
+{character} nodes are converted to \quote {glyph} nodes.
+
+This work separation is worth mentioning because, if you overrule from \LUA\ only
+one of the two callbacks related to font handling, then you have to make sure you
+perform the tasks normally done by \LUATEX\ itself in order to make sure that the
+other, non|-|overruled, routine continues to function properly.
+
+Work in this area is not yet complete, but most of the possible cases are handled
+by our rewritten ligaturing engine. At some point all of the possible inputs will
+become supported. \footnote {Not all of this makes sense because we nowadays have
+\OPENTYPE\ fonts and ligature building can happen in ,any different ways there.}
+
+For example, take the word \type {office}, hyphenated \type {of-fice}, using a
+\quote {normal} font with all the \type {f}-\type {f} and \type {f}-\type {i}
+type ligatures:
+
+\starttabulate[|l|l|]
+\NC Initial: \NC \type {{o}{f}{f}{i}{c}{e}} \NC\NR
+\NC After hyphenation: \NC \type {{o}{f}{{-},{},{}}{f}{i}{c}{e}} \NC\NR
+\NC First ligature stage: \NC \type {{o}{{f-},{f},{<ff>}}{i}{c}{e}} \NC\NR
+\NC Final result: \NC \type {{o}{{f-},{<fi>},{<ffi>}}{c}{e}} \NC\NR
+\stoptabulate
+
+That's bad enough, but let us assume that there is also a hyphenation point
+between the \type {f} and the \type {i}, to create \type {of-f-ice}. Then the
+final result should be:
+
+\starttyping
+{o}{{f-},
+ {{f-},
+ {i},
+ {<fi>}},
+ {{<ff>-},
+ {i},
+ {<ffi>}}}{c}{e}
+\stoptyping
+
+with discretionaries in the post-break text as well as in the replacement text of
+the top-level discretionary that resulted from the first hyphenation point.
+
+Here is that nested solution again, in a different representation:
+
+\starttabulate[|l|l|l|l|]
+\NC \NC pre \NC post \NC replace \NC \NR
+\NC topdisc \NC \type {f-}$^1$ \NC sub1 \NC sub2 \NC \NR
+\NC sub1 \NC \type {f-}$^2$ \NC \type {i}$^3$ \NC \type {<fi>}$^4$ \NC \NR
+\NC sub2 \NC \type {<ff>-}$^5$\NC \type {i}$^6$ \NC \type {<ffi>}$^7$ \NC \NR
+\stoptabulate
+
+When line breaking is choosing its breakpoints, the following fields will
+eventually be selected:
+
+\starttabulate[|l|l|l|]
+\NC \type {of-f-ice} \NC \type {f-}$^1$ \NC \NR
+\NC \NC \type {f-}$^2$ \NC \NR
+\NC \NC \type {i}$^3$ \NC \NR
+\NC \type {of-fice} \NC \type {f-}$^1$ \NC \NR
+\NC \NC \type {<fi>}$^4$ \NC \NR
+\NC \type {off-ice} \NC \type {<ff>-}$^5$ \NC \NR
+\NC \NC \type {i}$^6$ \NC \NR
+\NC \type {office} \NC \type {<ffi>}$^7$ \NC \NR
+\stoptabulate
+
+The current solution in \LUATEX\ is not able to handle nested discretionaries,
+but it is in fact smart enough to handle this fictional \type {of-f-ice} example.
+It does so by combining two sequential discretionary nodes as if they were a
+single object (where the second discretionary node is treated as an extension of
+the first node).
+
+One can observe that the \type {of-f-ice} and \type {off-ice} cases both end with
+the same actual post replacement list (\type {i}), and that this would be the
+case even if that \type {i} was the first item of a potential following ligature
+like \type {ic}. This allows \LUATEX\ to do away with one of the fields, and thus
+make the whole stuff fit into just two discretionary nodes.
+
+The mapping of the seven list fields to the six fields in this discretionary node
+pair is as follows:
+
+\starttabulate[|l|p|]
+\NC \bf field \NC \bf description \NC \NR
+\NC \type {disc1.pre} \NC \type {f-}$^1$ \NC \NR
+\NC \type {disc1.post} \NC \type {<fi>}$^4$ \NC \NR
+\NC \type {disc1.replace} \NC \type {<ffi>}$^7$ \NC \NR
+\NC \type {disc2.pre} \NC \type {f-}$^2$ \NC \NR
+\NC \type {disc2.post} \NC \type {i}$^{3{,}6}$\NC \NR
+\NC \type {disc2.replace} \NC \type {<ff>-}$^5$\NC \NR
+\stoptabulate
+
+What is actually generated after ligaturing has been applied is therefore:
+
+\starttyping
+{o}{{f-},
+ {<fi>},
+ {<ffi>}}
+ {{f-},
+ {i},
+ {<ff>-}}{c}{e}
+\stoptyping
+
+The two discretionaries have different subtypes from a discretionary appearing on
+its own: the first has subtype 4, and the second has subtype 5. The need for
+these special subtypes stems from the fact that not all of the fields appear in
+their \quote {normal} location. The second discretionary especially looks odd,
+with things like the \type {<ff>-} appearing in \type {disc2.replace}. The fact
+that some of the fields have different meanings (and different processing code
+internally) is what makes it necessary to have different subtypes: this enables
+\LUATEX\ to distinguish this sequence of two joined discretionary nodes from the
+case of two standalone discretionaries appearing in a row.
+
+Of course there is still that relationship with fonts: ligatures can be implemented by
+mapping a sequence of glyphs onto one glyph, but also by selective replacement and
+kerning. This means that the above examples are just representing the traditional
+approach.
+
+\section{Breaking paragraphs into lines}
+
+This code is still almost unchanged, but because of the above|-|mentioned changes
+with respect to discretionaries and ligatures, line breaking will potentially be
+different from traditional \TEX. The actual line breaking code is still based on
+the \TEX82 algorithms, and it does not expect there to be discretionaries inside
+of discretionaries.
+
+But that situation is now fairly common in \LUATEX, due to the changes to the
+ligaturing mechanism. And also, the \LUATEX\ discretionary nodes are implemented
+slightly different from the \TEX82 nodes: the \type {no_break} text is now
+embedded inside the disc node, where previously these nodes kept their place in
+the horizontal list. In traditional \TEX\ the discretionary node contains a
+counter indicating how many nodes to skip, but in \LUATEX\ we store the pre, post
+and replace text in the discretionary node.
+
+The combined effect of these two differences is that \LUATEX\ does not always use
+all of the potential breakpoints in a paragraph, especially when fonts with many
+ligatures are used. Of course kerning also complicates matters here.
+
+\section{The \type {lang} library}
+
+This library provides the interface to \LUATEX's structure
+representing a language, and the associated functions.
+
+\startfunctioncall
+<language> l = lang.new()
+<language> l = lang.new(<number> id)
+\stopfunctioncall
+
+This function creates a new userdata object. An object of type \type {<language>}
+is the first argument to most of the other functions in the \type {lang}
+library. These functions can also be used as if they were object methods, using
+the colon syntax.
+
+Without an argument, the next available internal id number will be assigned to
+this object. With argument, an object will be created that links to the internal
+language with that id number.
+
+\startfunctioncall
+<number> n = lang.id(<language> l)
+\stopfunctioncall
+
+returns the internal \type {\language} id number this object refers to.
+
+\startfunctioncall
+<string> n = lang.hyphenation(<language> l)
+lang.hyphenation(<language> l, <string> n)
+\stopfunctioncall
+
+Either returns the current hyphenation exceptions for this language, or adds new
+ones. The syntax of the string is explained in~\in {section}
+[patternsexceptions].
+
+\startfunctioncall
+lang.clear_hyphenation(<language> l)
+\stopfunctioncall
+
+Clears the exception dictionary (string) for this language.
+
+\startfunctioncall
+<string> n = lang.clean(<language> l, <string> o)
+<string> n = lang.clean(<string> o)
+\stopfunctioncall
+
+Creates a hyphenation key from the supplied hyphenation value. The syntax of the
+argument string is explained in~\in {section} [patternsexceptions]. This function
+is useful if you want to do something else based on the words in a dictionary
+file, like spell|-|checking.
+
+\startfunctioncall
+<string> n = lang.patterns(<language> l)
+lang.patterns(<language> l, <string> n)
+\stopfunctioncall
+
+Adds additional patterns for this language object, or returns the current set.
+The syntax of this string is explained in~\in {section} [patternsexceptions].
+
+\startfunctioncall
+lang.clear_patterns(<language> l)
+\stopfunctioncall
+
+Clears the pattern dictionary for this language.
+
+\startfunctioncall
+<number> n = lang.prehyphenchar(<language> l)
+lang.prehyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {pre|-|break} hyphen character for implicit hyphenation
+in this language (initially the hyphen, decimal 45).
+
+\startfunctioncall
+<number> n = lang.posthyphenchar(<language> l)
+lang.posthyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {post|-|break} hyphen character for implicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<number> n = lang.preexhyphenchar(<language> l)
+lang.preexhyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {pre|-|break} hyphen character for explicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<number> n = lang.postexhyphenchar(<language> l)
+lang.postexhyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {post|-|break} hyphen character for explicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<boolean> success = lang.hyphenate(<node> head)
+<boolean> success = lang.hyphenate(<node> head, <node> tail)
+\stopfunctioncall
+
+Inserts hyphenation points (discretionary nodes) in a node list. If \type {tail}
+is given as argument, processing stops on that node. Currently, \type {success}
+is always true if \type {head} (and \type {tail}, if specified) are proper nodes,
+regardless of possible other errors.
+
+Hyphenation works only on \quote {characters}, a special subtype of all the glyph
+nodes with the node subtype having the value \type {1}. Glyph modes with
+different subtypes are not processed. See \in {section~} [charsandglyphs] for
+more details.
+
+The following two commands can be used to set or query hj codes:
+
+\startfunctioncall
+lang.sethjcode(<language> l, <number> char, <number> usedchar)
+<number> usedchar = lang.gethjcode(<language> l, <number> char)
+\stopfunctioncall
+
+When you set a hjcode the current sets get initialized unless the set was already
+initialized due to \type {\savinghyphcodes} being larger than zero.
+
+\stopchapter
+
+\stopcomponent
+
+% \parindent0pt \hsize=1.1cm
+% 12-34-56 \par
+% 12-34-\hbox{56} \par
+% 12-34-\vrule width 1em height 1.5ex \par
+% 12-\hbox{34}-56 \par
+% 12-\vrule width 1em height 1.5ex-56 \par
+% \hjcode`\1=`\1 \hjcode`\2=`\2 \hjcode`\3=`\3 \hjcode`\4=`\4 \vskip.5cm
+% 12-34-56 \par
+% 12-34-\hbox{56} \par
+% 12-34-\vrule width 1em height 1.5ex \par
+% 12-\hbox{34}-56 \par
+% 12-\vrule width 1em height 1.5ex-56 \par
+
diff --git a/doc/context/sources/general/manuals/luatex/luatex-logos.tex b/doc/context/sources/general/manuals/luatex/luatex-logos.tex
new file mode 100644
index 000000000..7406dd602
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-logos.tex
@@ -0,0 +1,19 @@
+\startenvironment luatex-logos
+
+\logo[DFONT] {dfont}
+\logo[CFF] {cff}
+\logo[CMAP] {CMap}
+\logo[PATGEN] {patgen}
+\logo[MP] {MetaPost}
+\logo[METAPOST] {MetaPost}
+\logo[MPLIB] {MPlib}
+\logo[COCO] {coco}
+\logo[SUNOS] {SunOS}
+\logo[BSD] {bsd}
+\logo[SYSV] {sysv}
+\logo[DPI] {dpi}
+\logo[DLL] {dll}
+\logo[OPENOFFICE]{OpenOffice}
+\logo[OCP] {OCP}
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/luatex/luatex-lua.tex b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
new file mode 100644
index 000000000..0960f8032
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
@@ -0,0 +1,572 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-lua
+
+\startchapter[reference=lua,title={\LUA\ general}]
+
+\section[init]{Initialization}
+
+\subsection{\LUATEX\ as a \LUA\ interpreter}
+
+There are some situations that make \LUATEX\ behave like a standalone \LUA\
+interpreter:
+
+\startitemize[packed]
+\startitem
+ if a \type {--luaonly} option is given on the commandline, or
+\stopitem
+\startitem
+ if the executable is named \type {texlua} or \type {luatexlua}, or
+\stopitem
+\startitem
+ if the only non|-|option argument (file) on the commandline has the extension
+ \type {lua} or \type {luc}.
+\stopitem
+\stopitemize
+
+In this mode, it will set \LUA's \type {arg[0]} to the found script name, pushing
+preceding options in negative values and the rest of the command line in the
+positive values, just like the \LUA\ interpreter.
+
+\LUATEX\ will exit immediately after executing the specified \LUA\ script and is,
+in effect, a somewhat bulky stand alone \LUA\ interpreter with a bunch of extra
+preloaded libraries.
+
+\subsection{\LUATEX\ as a \LUA\ byte compiler}
+
+There are two situations that make \LUATEX\ behave like the \LUA\ byte compiler:
+
+\startitemize[packed]
+\startitem if a \type {--luaconly} option is given on the command line, or \stopitem
+\startitem if the executable is named \type {texluac} \stopitem
+\stopitemize
+
+In this mode, \LUATEX\ is exactly like \type {luac} from the stand alone \LUA\
+distribution, except that it does not have the \type {-l} switch, and that it
+accepts (but ignores) the \type {--luaconly} switch.
+
+\subsection{Other commandline processing}
+
+When the \LUATEX\ executable starts, it looks for the \type {--lua} command line
+option. If there is no \type {--lua} option, the command line is interpreted in a
+similar fashion as the other \TEX\ engines. Some options are accepted but have no
+consequence. The following command|-|line options are understood:
+
+\starttabulate[|lT|p|]
+\NC --credits \NC display credits and exit \NC \NR
+\NC --debug-format \NC enable format debugging \NC \NR
+\NC --draftmode \NC switch on draft mode i.e.\ generate no output in \PDF\ mode \NC \NR
+\NC --[no-]file-line-error \NC disable/enable \type {file:line:error} style messages \NC \NR
+\NC --[no-]file-line-error-style \NC aliases of \type {--[no-]file-line-error} \NC \NR
+\NC --fmt=FORMAT \NC load the format file \type {FORMAT} \NC\NR
+\NC --halt-on-error \NC stop processing at the first error\NC \NR
+\NC --help \NC display help and exit \NC\NR
+\NC --ini \NC be \type {iniluatex}, for dumping formats \NC\NR
+\NC --interaction=STRING \NC set interaction mode: \type {batchmode}, \type {nonstopmode}, \type {scrollmode} or \type {errorstopmode} \NC \NR
+\NC --jobname=STRING \NC set the job name to \type {STRING} \NC \NR
+\NC --kpathsea-debug=NUMBER \NC set path searching debugging flags according to the bits of \type {NUMBER} \NC \NR
+\NC --lua=FILE \NC load and execute a \LUA\ initialization script \NC\NR
+\NC --[no-]mktex=FMT \NC disable/enable \type {mktexFMT} generation with \type {FMT} is \type {tex} or \type {tfm} \NC \NR
+\NC --nosocket \NC disable the \LUA\ socket library \NC\NR
+\NC --output-comment=STRING \NC use \type {STRING} for \DVI\ file comment instead of date (no effect for \PDF) \NC \NR
+\NC --output-directory=DIR \NC use \type {DIR} as the directory to write files to \NC \NR
+\NC --output-format=FORMAT \NC use \type {FORMAT} for job output; \type {FORMAT} is \type {dvi} or \type {pdf} \NC \NR
+\NC --progname=STRING \NC set the program name to \type {STRING} \NC \NR
+\NC --recorder \NC enable filename recorder \NC \NR
+\NC --safer \NC disable easily exploitable \LUA\ commands \NC\NR
+\NC --[no-]shell-escape \NC disable/enable system calls \NC \NR
+\NC --shell-restricted \NC restrict system calls to a list of commands given in \type {texmf.cnf} \NC \NR
+\NC --synctex=NUMBER \NC enable \type {synctex} \NC \NR
+\NC --utc \NC use utc times when applicable \NC \NR
+\NC --version \NC display version and exit \NC \NR
+\stoptabulate
+
+Some of the traditional flags are just ignored: \type {--etex}, \type
+{--translate-file}, \type {--8bit}. \type {--[no-]parse-first-line}, \type
+{--default-translate-file}. Also, we no longer support write18 because \type
+{os.execute} can do the same.
+
+The value to use for \type {\jobname} is decided as follows:
+
+\startitemize
+\startitem
+ If \type {--jobname} is given on the command line, its argument will be the
+ value for \type {\jobname}, without any changes. The argument will not be
+ used for actual input so it need not exist. The \type {--jobname} switch only
+ controls the \type {\jobname} setting.
+\stopitem
+\startitem
+ Otherwise, \type {\jobname} will be the name of the first file that is read
+ from the file system, with any path components and the last extension (the
+ part following the last \type {.}) stripped off.
+\stopitem
+\startitem
+ An exception to the previous point: if the command line goes into interactive
+ mode (by starting with a command) and there are no files input via \type
+ {\everyjob} either, then the \type {\jobname} is set to \type {texput} as a
+ last resort.
+\stopitem
+\stopitemize
+
+The file names for output files that are generated automatically are created by
+attaching the proper extension (\type {log}, \type {pdf}, etc.) to the found
+\type {\jobname}. These files are created in the directory pointed to by \type
+{--output-directory}, or in the current directory, if that switch is not present.
+
+\blank
+
+Without the \type {--lua} option, command line processing works like it does in
+any other web2c-based typesetting engine, except that \LUATEX\ has a few extra
+switches.
+
+If the \type {--lua} option is present, \LUATEX\ will enter an alternative mode
+of command line processing in comparison to the standard web2c programs.
+
+In this mode, a small series of actions is taken in order. First, it will parse
+the command line as usual, but it will only interpret a small subset of the
+options immediately: \type {--safer}, \type {--nosocket}, \type
+{--[no-]shell-escape}, \type {--enable-write18}, \type {--disable-write18}, \type
+{--shell-restricted}, \type {--help}, \type {--version}, and \type {--credits}.
+
+Next \LUATEX\ searches for the requested \LUA\ initialization script. If it
+cannot be found using the actual name given on the command line, a second attempt
+is made by prepending the value of the environment variable \type {LUATEXDIR}, if
+that variable is defined in the environment.
+
+Then it checks the various safety switches. You can use those to disable some
+\LUA\ commands that can easily be abused by a malicious document. At the moment,
+\type {--safer} \type {nil}s the following functions:
+
+\starttabulate[|l|l|]
+\NC \bf library \NC \bf functions \NC \NR
+\NC \type {os} \NC \type {execute} \type {exec} \type {spawn} \type {setenv} \type {rename} \type {remove} \type {tmpdir} \NC \NR
+\NC \type {io} \NC \type {popen} \type {output} \type {tmpfile} \NC \NR
+\NC \type {lfs} \NC \type {rmdir} \type {mkdir} \type {chdir} \type {lock} \type {touch} \NC \NR
+\stoptabulate
+
+Furthermore, it disables loading of compiled \LUA\ libraries and it makes \type
+{io.open()} fail on files that are opened for anything besides reading.
+
+When \LUATEX\ starts it set the locale to a neutral value. If for some reason you
+use \type {os.locale}, you need to make sure you \type {nil} it afterwards
+because otherwise it can interfere with code that for instance generates dates.
+You can nil the locale with
+
+\starttyping
+os.setlocale(nil.nil)
+\stoptyping
+
+The \type {--nosocket} option makes the socket library unavailable, so that \LUA\
+cannot use networking.
+
+The switches \type {--[no-]shell-escape}, \type {--[enable|disable]-write18}, and
+\type {--shell-restricted} have the same effects as in \PDFTEX, and additionally
+make \type {io.popen()}, \type {os.execute}, \type {os.exec} and \type {os.spawn}
+adhere to the requested option.
+
+Next the initialization script is loaded and executed. From within the script,
+the entire command line is available in the \LUA\ table \type {arg}, beginning with
+\type {arg[0]}, containing the name of the executable. As consequence warnings
+about unrecognized options are suppressed.
+
+Command line processing happens very early on. So early, in fact, that none of
+\TEX's initializations have taken place yet. For that reason, the tables that
+deal with typesetting, like \type {tex}, \type {token}, \type {node} and
+\type {pdf}, are off|-|limits during the execution of the startup file (they
+are \type {nil}'d). Special care is taken that \type {texio.write} and \type
+{texio.write_nl} function properly, so that you can at least report your actions
+to the log file when (and if) it eventually becomes opened (note that \TEX\ does
+not even know its \type {\jobname} yet at this point). See \in {chapter} [libraries]
+for more information about the \LUATEX-specific \LUA\ extension tables.
+
+Everything you do in the \LUA\ initialization script will remain visible during
+the rest of the run, with the exception of the \TEX\ specific libraries like
+\type {tex}, \type {token}, \type {node} and \type {pdf} tables. These will be
+initialized to their documented state after the execution of the script. You
+should not store anything in variables or within tables with these four global
+names, as they will be overwritten completely.
+
+We recommend you use the startup file only for your own \TEX|-|independent
+initializations (if you need any), to parse the command line, set values in the
+\type {texconfig} table, and register the callbacks you need.
+
+\LUATEX\ allows some of the command line options to be overridden by reading
+values from the \type {texconfig} table at the end of script execution (see the
+description of the \type {texconfig} table later on in this document for more
+details on which ones exactly).
+
+Unless the \type {texconfig} table tells \LUATEX\ not to initialize \KPATHSEA\
+at all (set \type {texconfig.kpse_init} to \type {false} for that), \LUATEX\
+acts on some more command line options after the initialization script is
+finished: in order to initialize the built|-|in \KPATHSEA\ library properly,
+\LUATEX\ needs to know the correct program name to use, and for that it needs to
+check \type {--progname}, or \type {--ini} and \type {--fmt}, if \type
+{--progname} is missing.
+
+\section{\LUA\ behaviour}
+
+\LUA s \type {tostring} function (and \type {string.format} may return values in
+scientific notation, thereby confusing the \TEX\ end of things when it is used as
+the right|-|hand side of an assignment to a \type {\dimen} or \type {\count}.
+
+Loading dynamic \LUA\ libraries will fail if there are two \LUA\ libraries loaded
+at the same time (which will typically happen on \type {win32}, because there is
+one \LUA\ 5.2 inside \LUATEX, and another will likely be linked to the \DLL\ file
+of the module itself).
+
+\LUATEX\ is able to use the kpathsea library to find \type {require()}d modules.
+For this purpose, \type {package.searchers[2]} is replaced by a different loader
+function, that decides at runtime whether to use kpathsea or the built|-|in core
+\LUA\ function. It uses \KPATHSEA\ when that is already initialized at that point
+in time, otherwise it reverts to using the normal \type {package.path} loader.
+
+Initialization of \KPATHSEA\ can happen either implicitly (when \LUATEX\ starts
+up and the startup script has not set \type {texconfig.kpse_init} to false), or
+explicitly by calling the \LUA\ function \type {kpse.set_program_name()}.
+
+\LUATEX\ is able to use dynamically loadable \LUA\ libraries, unless
+\type {--safer} was given as an option on the command line. For this purpose,
+\type {package.searchers[3]} is replaced by a different loader function, that
+decides at runtime whether to use \KPATHSEA\ or the built|-|in core \LUA\
+function. It uses \KPATHSEA\ when that is already initialized at that point in
+time, otherwise it reverts to using the normal \type {package.cpath} loader.
+
+This functionality required an extension to kpathsea:
+
+\startnarrower
+There is a new kpathsea file format: \type {kpse_clua_format} that searches for
+files with extension \type {.dll} and \type {.so}. The \type {texmf.cnf} setting
+for this variable is \type {CLUAINPUTS}, and by default it has this value:
+
+\starttyping
+CLUAINPUTS=.:$SELFAUTOLOC/lib/{$progname,$engine,}/lua//
+\stoptyping
+
+This path is imperfect (it requires a \TDS\ subtree below the binaries
+directory), but the architecture has to be in the path somewhere, and the
+currently simplest way to do that is to search below the binaries directory only.
+Of course it no big deal to write an alternative loader and use that in a macro
+package.
+
+One level up (a \type {lib} directory parallel to \type {bin}) would have been
+nicer, but that is not doable because \TEXLIVE\ uses a \type {bin/<arch>}
+structure.
+\stopnarrower
+
+In keeping with the other \TEX|-|like programs in \TEXLIVE, the two \LUA\ functions
+\type {os.execute} and \type {io.popen}, as well as the two new functions \type
+{os.exec} and \type {os.spawn} that are explained below, take the value of \type
+{shell_escape} and|/|or \type {shell_escape_commands} in account. Whenever
+\LUATEX\ is run with the assumed intention to typeset a document (and by that we
+mean that it is called as \type {luatex}, as opposed to \type {texlua}, and that
+the command line option \type {--luaonly} was not given), it will only run the
+four functions above if the matching \type {texmf.cnf} variable(s) or their \type
+{texconfig} (see \in {section} [texconfig]) counterparts allow execution of the
+requested system command. In \quote {script interpreter} runs of \LUATEX, these
+settings have no effect, and all four functions function as normal.
+
+The \type {f:read("*line")} and \type {f:lines()} functions from the io library
+have been adjusted so that they are line|-|ending neutral: any of \type {LF},
+\type {CR} or \type {CR+LF} are acceptable line endings.
+
+\type {luafilesystem} has been extended: there are two extra boolean functions
+(\type {lfs.isdir(filename)} and \type {lfs.isfile(filename)}) and one extra
+string field in its attributes table (\type {permissions}). There is an
+additional function \type {lfs.shortname()} which takes a file name and returns
+its short name on \type {win32} platforms. On other platforms, it just returns
+the given argument. The file name is not tested for existence. Finally, for
+non|-|\type {win32} platforms only, there is the new function \type
+{lfs.readlink()} hat takes an existing symbolic link as argument and returns its
+content. It returns an error on \type {win32}.
+
+The \type {string} library has an extra function: \type {string.explode(s[,m])}.
+This function returns an array containing the string argument \type {s} split
+into sub-strings based on the value of the string argument \type {m}. The second
+argument is a string that is either empty (this splits the string into
+characters), a single character (this splits on each occurrence of that
+character, possibly introducing empty strings), or a single character followed by
+the plus sign \type {+} (this special version does not create empty sub-strings).
+The default value for \type {m} is \quote {\type { +}} (multiple spaces). Note:
+\type {m} is not hidden by surrounding braces as it would be if this function was
+written in \TEX\ macros.
+
+The \type {string} library also has six extra iterators that return strings
+piecemeal:
+
+\startitemize
+\startitem
+ \type {string.utfvalues(s)}: an integer value in the \UNICODE\ range
+\stopitem
+\startitem
+ \type {string.utfcharacters(s)}: a string with a single \UTF-8 token in it
+\stopitem
+\startitem
+ \type {string.characters(s)} \NC a string containing one byte
+\stopitem
+\startitem
+ \type {string.characterpairs(s)} two strings each containing one byte or an
+ empty second string if the string length was odd
+\stopitem
+\startitem
+ \type {string.bytes(s)} a single byte value
+\stopitem
+\startitem
+ \type {string.bytepairs(s)} two byte values or nil instead of a number as
+ its second return value if the string length was odd
+\stopitem
+\stopitemize
+
+The \type {string.characterpairs()} and \type {string.bytepairs()} iterators
+are useful especially in the conversion of \UTF16 encoded data into \UTF8.
+
+There is also a two|-|argument form of \type {string.dump()}. The second argument
+is a boolean which, if true, strips the symbols from the dumped data. This
+matches an extension made in \type {luajit}.
+
+The \type {string} library functions \type {len}, \type {lower}, \type {sub}
+etc.\ are not \UNICODE|-|aware. For strings in the \UTF8 encoding, i.e., strings
+containing characters above code point 127, the corresponding functions from the
+\type {slnunicode} library can be used, e.g., \type {unicode.utf8.len}, \type
+{unicode.utf8.lower} etc.\ The exceptions are \type {unicode.utf8.find}, that
+always returns byte positions in a string, and \type {unicode.utf8.match} and
+\type {unicode.utf8.gmatch}. While the latter two functions in general {\it
+are} \UNICODE|-|aware, they fall|-|back to non|-|\UNICODE|-|aware behavior when
+using the empty capture \type {()} but other captures work as expected. For the
+interpretation of character classes in \type {unicode.utf8} functions refer to
+the library sources at \hyphenatedurl {http://luaforge.net/projects/sln}. Version
+5.3 of \LUA\ will provide some native \UTF8 support.
+
+\blank
+
+The \type {os} library has a few extra functions and variables:
+
+\startitemize
+
+\startitem
+ \type {os.selfdir} is a variable that holds the directory path of the
+ actual executable. For example: \type {\directlua {tex.sprint(os.selfdir)}}.
+\stopitem
+
+\startitem
+ \type {os.exec(commandline)} is a variation on \type {os.execute}. Here
+ \type {commandline} can be either a single string or a single table.
+
+ If the argument is a table \LUATEX\ first checks if there is a value at
+ integer index zero. If there is, this is the command to be executed.
+ Otherwise, it will use the value at integer index one. If neither are
+ present, nothing at all happens.
+
+ The set of consecutive values starting at integer~1 in the table are the
+ arguments that are passed on to the command (the value at index~1 becomes
+ \type {arg[0]}). The command is searched for in the execution path, so there
+ is normally no need to pass on a fully qualified path name.
+
+ If the argument is a string, then it is automatically converted into a table
+ by splitting on whitespace. In this case, it is impossible for the command
+ and first argument to differ from each other.
+
+ In the string argument format, whitespace can be protected by putting (part
+ of) an argument inside single or double quotes. One layer of quotes is
+ interpreted by \LUATEX, and all occurrences of \type {\"}, \type {\'} or \type
+ {\\} within the quoted text are unescaped. In the table format, there is no
+ string handling taking place.
+
+ This function normally does not return control back to the \LUA\ script: the
+ command will replace the current process. However, it will return the two
+ values \type {nil} and \type {error} if there was a problem while
+ attempting to execute the command.
+
+ On \MSWINDOWS, the current process is actually kept in memory until after the
+ execution of the command has finished. This prevents crashes in situations
+ where \TEXLUA\ scripts are run inside integrated \TEX\ environments.
+
+ The original reason for this command is that it cleans out the current
+ process before starting the new one, making it especially useful for use in
+ \TEXLUA.
+\stopitem
+
+\startitem
+ \type {os.spawn(commandline)} is a returning version of \type {os.exec},
+ with otherwise identical calling conventions.
+
+ If the command ran ok, then the return value is the exit status of the
+ command. Otherwise, it will return the two values \type {nil} and \type
+ {error}.
+\stopitem
+
+\startitem
+ \type {os.setenv(key,value)} sets a variable in the environment. Passing
+ \type {nil} instead of a value string will remove the variable.
+\stopitem
+
+\startitem
+ \type {os.env} is a hash table containing a dump of the variables and
+ values in the process environment at the start of the run. It is writeable,
+ but the actual environment is {\em not\/} updated automatically.
+\stopitem
+
+\startitem
+ \type {os.gettimeofday()} returns the current \quote {\UNIX\ time}, but as a
+ float. This function is not available on the \SUNOS\ platforms, so do not use
+ this function for portable documents.
+\stopitem
+
+\startitem
+ \type {os.times()}returns the current process times according to \ the
+ \UNIX\ C library function \quote {times}. This function is not available on
+ the \MSWINDOWS\ and \SUNOS\ platforms, so do not use this function for
+ portable documents.
+\stopitem
+
+\startitem
+ \type {os.tmpdir()} creates a directory in the \quote {current directory}
+ with the name \type {luatex.XXXXXX} where the \type {X}-es are replaced by a
+ unique string. The function also returns this string, so you can \type
+ {lfs.chdir()} into it, or \type {nil} if it failed to create the directory.
+ The user is responsible for cleaning up at the end of the run, it does not
+ happen automatically.
+\stopitem
+
+\startitem
+ \type {os.type} is a string that gives a global indication of the class of
+ operating system. The possible values are currently \type {windows}, \type
+ {unix}, and \type {msdos} (you are unlikely to find this value \quote {in the
+ wild}).
+\stopitem
+
+\startitem
+ \type {os.name} is a string that gives a more precise indication of the
+ operating system. These possible values are not yet fixed, and for \type
+ {os.type} values \type {windows} and \type {msdos}, the \type {os.name}
+ values are simply \type {windows} and \type {msdos}
+
+ The list for the type \type {unix} is more precise: \type {linux}, \type
+ {freebsd}, \type {kfreebsd}, \type {cygwin}, \type {openbsd}, \type
+ {solaris}, \type {sunos} (pre-solaris), \type {hpux}, \type {irix}, \type
+ {macosx}, \type {gnu} (hurd), \type {bsd} (unknown, but \BSD|-|like), \type
+ {sysv} (unknown, but \SYSV|-|like), \type {generic} (unknown).
+\stopitem
+
+\startitem
+ \type {os.uname()} returns a table with specific operating system
+ information acquired at runtime. The keys in the returned table are all
+ string valued, and their names are: \type {sysname}, \type {machine}, \type
+ {release}, \type {version}, and \type {nodename}.
+\stopitem
+
+\stopitemize
+
+In stock \LUA, many things depend on the current locale. In \LUATEX, we can't do
+that, because it makes documents unportable. While \LUATEX\ is running if
+forces the following locale settings:
+
+\starttyping
+LC_CTYPE=C
+LC_COLLATE=C
+LC_NUMERIC=C
+\stoptyping
+
+\section {\LUA\ modules}
+
+Some modules that are normally external to \LUA\ are statically linked in with
+\LUATEX, because they offer useful functionality:
+
+\startitemize
+
+\startitem
+ \type {slnunicode}, from the \type {selene} libraries, \hyphenatedurl
+ {http://luaforge.net/projects/sln}. This library has been slightly extended
+ so that the \type {unicode.utf8.*} functions also accept the first 256 values
+ of plane~18. This is the range \LUATEX\ uses for raw binary output, as
+ explained above.
+\stopitem
+
+\startitem
+ \type {luazip}, from the kepler project, \hyphenatedurl
+ {http://www.keplerproject.org/luazip/}.
+\stopitem
+
+\startitem
+ \type {luafilesystem}, also from the kepler project, \hyphenatedurl
+ {http://www.keplerproject.org/luafilesystem/}.
+\stopitem
+
+\startitem
+ \type {lpeg}, by Roberto Ierusalimschy, \hyphenatedurl
+ {http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html}. This library is not
+ \UNICODE|-|aware, but interprets strings on a byte|-|per|-|byte basis. This
+ mainly means that \type {lpeg.S} cannot be used with \UTF8 characters encoded
+ in more than two bytes, and thus \type {lpeg.S} will look for one of those
+ two bytes when matching, not the combination of the two. The same is true for
+ \type {lpeg.R}, although the latter will display an error message if used
+ with multibyte characters. Therefore \type {lpeg.R('aä')} results in the
+ message \type {bad argument #1 to 'R' (range must have two characters)},
+ since to \type {lpeg}, \type {ä} is two 'characters' (bytes), so \type {aä}
+ totals three. In practice this is no real issue.
+\stopitem
+
+\startitem
+ \type {lzlib}, by Tiago Dionizio, \hyphenatedurl
+ {http://luaforge.net/projects/lzlib/}.
+\stopitem
+
+\startitem
+ \type {md5}, by Roberto Ierusalimschy \hyphenatedurl
+ {http://www.inf.puc-rio.br/~roberto/md5/md5-5/md5.html}.
+\stopitem
+
+\startitem
+ \type {luasocket}, by Diego Nehab \hyphenatedurl
+ {http://w3.impa.br/~diego/software/luasocket/}. The \type {.lua} support
+ modules from \type {luasocket} are also preloaded inside the executable,
+ there are no external file dependencies.
+\stopitem
+
+\stopitemize
+
+At some point (this also depends on distributions) \LUATEX\ might have these
+libraries loaded on demand. For this reason you can best use \type {require} to
+make sure they are loaded.
+
+\section{Testing}
+
+For development reasons you can influence the used startup date and time. This can
+be done in two ways.
+
+\startitemize[n]
+
+\startitem
+ By setting the environmment variable \type {SOURCE_DATE_EPOCH}. This will
+ influence the \TEX\ parameters \type {time} and \type {date}, the random seed,
+ the \PDF\ timestamp and the \PDF\ id that is derived from the time as well. This
+ variable is consulted when the \KPSE\ library is enabled. Resolving is
+ delegated to this library.
+\stopitem
+
+\startitem
+ By setting the \type {start_time} variable in the \type {texconfig} table; as
+ with other variables we use the internal name there. For compatibility
+ reasons we also honour a \type {SOURCE_DATE_EPOCH} entry. It should be noted
+ that there are no such variables in other engines and this method is only
+ relevant in case the while setup happens in \LUA.
+\stopitem
+
+\stopitemize
+
+When Universal Time is needed, you can pass the flag \type {utc} to the engine. This
+property also works when the date and time are set by \LUATEX\ itself. It has a
+complementary entry \type {use_utc_time} in the \type {texconfig} table.
+
+{\em To some extend a cleaner solution would be to have a flag that disables all
+variable data in one go (like filenames and so) but we just follow the method
+implemented in \PDFTEX\ where primitives are used to influence other properties.}
+
+{\em In \CONTEXT\ we provide the command line argument \type {--nodates} that
+does bit more disabling of dates.}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-math.tex b/doc/context/sources/general/manuals/luatex/luatex-math.tex
new file mode 100644
index 000000000..cb8d198b1
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-math.tex
@@ -0,0 +1,1049 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-math
+
+\startchapter[reference=math,title={Math}]
+
+The handling of mathematics in \LUATEX\ differs quite a bit from how \TEX82 (and
+therefore \PDFTEX) handles math. First, \LUATEX\ adds primitives and extends some
+others so that \UNICODE\ input can be used easily. Second, all of \TEX82's
+internal special values (for example for operator spacing) have been made
+accessible and changeable via control sequences. Third, there are extensions that
+make it easier to use \OPENTYPE\ math fonts. And finally, there are some
+extensions that have been proposed or considered in the past that are now added
+to the engine.
+
+\section{The current math style}
+
+It is possible to discover the math style that will be used for a formula in an
+expandable fashion (while the math list is still being read). To make this
+possible, \LUATEX\ adds the new primitive: \type {\mathstyle}. This is a \quote
+{convert command} like e.g. \type {\romannumeral}: its value can only be read,
+not set.
+
+\subsection{\type {\mathstyle}}
+
+The returned value is between 0 and 7 (in math mode), or $-1$ (all other modes).
+For easy testing, the eight math style commands have been altered so that the can
+be used as numeric values, so you can write code like this:
+
+\starttyping
+\ifnum\mathstyle=\textstyle
+ \message{normal text style}
+\else \ifnum\mathstyle=\crampedtextstyle
+ \message{cramped text style}
+\fi \fi
+\stoptyping
+
+\subsection{\type {\Ustack}}
+
+There are a few math commands in \TEX\ where the style that will be used is not
+known straight from the start. These commands (\type {\over}, \type {\atop},
+\type {\overwithdelims}, \type {\atopwithdelims}) would therefore normally return
+wrong values for \type {\mathstyle}. To fix this, \LUATEX\ introduces a special
+prefix command: \type {\Ustack}:
+
+\starttyping
+$\Ustack {a \over b}$
+\stoptyping
+
+The \type {\Ustack} command will scan the next brace and start a new math group
+with the correct (numerator) math style.
+
+\section{Unicode math characters}
+
+Character handling is now extended up to the full \UNICODE\ range (the \type {\U}
+prefix), which is compatible with \XETEX.
+
+The math primitives from \TEX\ are kept as they are, except for the ones that
+convert from input to math commands: \type {mathcode}, and \type {delcode}. These
+two now allow for a 21-bit character argument on the left hand side of the equals
+sign.
+
+Some of the new \LUATEX\ primitives read more than one separate value. This is
+shown in the tables below by a plus sign in the second column.
+
+The input for such primitives would look like this:
+
+\starttyping
+\def\overbrace{\Umathaccent 0 1 "23DE }
+\stoptyping
+
+The altered \TEX82 primitives are:
+
+\starttabulate[|l|l|r|c|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR
+\NC \type {\mathcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC 8000 \NC \NR
+\NC \type {\delcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC FFFFFF \NC \NR
+\stoptabulate
+
+The unaltered ones are:
+
+\starttabulate[|l|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \NR
+\NC \type {\mathchardef} \NC 0 \NC 8000 \NC \NR
+\NC \type {\mathchar} \NC 0 \NC 7FFF \NC \NR
+\NC \type {\mathaccent} \NC 0 \NC 7FFF \NC \NR
+\NC \type {\delimiter} \NC 0 \NC 7FFFFFF \NC \NR
+\NC \type {\radical} \NC 0 \NC 7FFFFFF \NC \NR
+\stoptabulate
+
+For practical reasons \type {\mathchardef} will silently accept values larger
+that \type {0x8000} and interpret it as \type {\Umathcharnumdef}. This is needed
+to satisfy older macro packages.
+
+The following new primitives are compatible with \XETEX:
+
+% somewhat fuzzy:
+
+\starttabulate[|l|l|r|c|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR
+\NC \type {\Umathchardef} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcharnumdef}\rlap{\high{5}} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcode} \NC 0 \NC 10FFFF \NC = \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NR
+\NC \type {\Udelcode} \NC 0 \NC 10FFFF \NC = \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NR
+\NC \type {\Umathchar} \NC 0+0+0 \NC 7+FF+10FFFF \NC \NC \NC \NC \NR
+\NC \type {\Umathaccent} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2,4}} \NC \NC \NC \NC \NR
+\NC \type {\Udelimiter} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR
+\NC \type {\Uradical} \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcharnum} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR
+\NC \type {\Udelcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR
+\stoptabulate
+
+Specifications typically look like:
+
+\starttyping
+\Umathchardef\xx="1"0"456
+\Umathcode 123="1"0"789
+\stoptyping
+
+Note 1: The new primitives that deal with delimiter|-|style objects do not set up a
+\quote {large family}. Selecting a suitable size for display purposes is expected
+to be dealt with by the font via the \type {\Umathoperatorsize} parameter (more
+information can be found in a following section).
+
+Note 2: For these three primitives, all information is packed into a single
+signed integer. For the first two (\type {\Umathcharnum} and \type
+{\Umathcodenum}), the lowest 21 bits are the character code, the 3 bits above
+that represent the math class, and the family data is kept in the topmost bits
+(This means that the values for math families 128--255 are actually negative).
+For \type {\Udelcodenum} there is no math class. The math family information is
+stored in the bits directly on top of the character code. Using these three
+commands is not as natural as using the two- and three|-|value commands, so
+unless you know exactly what you are doing and absolutely require the speedup
+resulting from the faster input scanning, it is better to use the verbose
+commands instead.
+
+Note 3: The \type {\Umathaccent} command accepts optional keywords to control
+various details regarding math accents. See \in {section} [mathacc] below for
+details.
+
+New primitives that exist in \LUATEX\ only (all of these will be explained
+in following sections):
+
+\starttabulate[|l|l|l|l|]
+\NC \bf primitive \NC \bf value range (in hex) \NC \NR
+\NC \type {\Uroot} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Uoverdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Uunderdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Udelimiterover} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Udelimiterunder} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\stoptabulate
+
+\section{Cramped math styles}
+
+\LUATEX\ has four new primitives to set the cramped math styles directly:
+
+\starttyping
+\crampeddisplaystyle
+\crampedtextstyle
+\crampedscriptstyle
+\crampedscriptscriptstyle
+\stoptyping
+
+These additional commands are not all that valuable on their own, but they come
+in handy as arguments to the math parameter settings that will be added shortly.
+
+In Eijkhouts \quotation {\TEX\ by Topic} the rules for handling styles in scripts
+are described as follows:
+
+\startitemize
+\startitem
+ In any style superscripts and subscripts are taken from the next smaller style.
+ Exception: in display style they are taken in script style.
+\stopitem
+\startitem
+ Subscripts are always in the cramped variant of the style; superscripts are only
+ cramped if the original style was cramped.
+\stopitem
+\startitem
+ In an \type {..\over..} formula in any style the numerator and denominator are
+ taken from the next smaller style.
+\stopitem
+\startitem
+ The denominator is always in cramped style; the numerator is only in cramped
+ style if the original style was cramped.
+\stopitem
+\startitem
+ Formulas under a \type {\sqrt} or \type {\overline} are in cramped style.
+\stopitem
+\stopitemize
+
+In \LUATEX\ one can set the styles in more detail which means that you sometimes
+have to set both normal and cramped styles to get the effect you want. If we
+force styles in the script using \type {\scriptstyle} and \type {\crampedscriptstyle}
+we get this:
+
+\startbuffer[demo]
+\starttabulate
+\NC default \NC $b_{x=xx}^{x=xx}$ \NC \NR
+\NC script \NC $b_{\scriptstyle x=xx}^{\scriptstyle x=xx}$ \NC \NR
+\NC crampedscript \NC $b_{\crampedscriptstyle x=xx}^{\crampedscriptstyle x=xx}$ \NC \NR
+\stoptabulate
+\stopbuffer
+
+\getbuffer[demo]
+
+Now we set the following parameters
+
+\startbuffer[setup]
+\Umathordrelspacing\scriptstyle=30mu
+\Umathordordspacing\scriptstyle=30mu
+\stopbuffer
+
+\typebuffer[setup]
+
+This gives:
+
+\start\getbuffer[setup,demo]\stop
+
+But, as this is not what is expected (visually) we should say:
+
+\startbuffer[setup]
+\Umathordrelspacing\scriptstyle=30mu
+\Umathordordspacing\scriptstyle=30mu
+\Umathordrelspacing\crampedscriptstyle=30mu
+\Umathordordspacing\crampedscriptstyle=30mu
+\stopbuffer
+
+\typebuffer[setup]
+
+Now we get:
+
+\start\getbuffer[setup,demo]\stop
+
+\section{Math parameter settings}
+
+In \LUATEX, the font dimension parameters that \TEX\ used in math typesetting are
+now accessible via primitive commands. In fact, refactoring of the math engine
+has resulted in many more parameters than were accessible before.
+
+\starttabulate
+\NC \bf primitive name \NC \bf description \NC \NR
+\NC \type {\Umathquad} \NC the width of 18 mu's \NC \NR
+\NC \type {\Umathaxis} \NC height of the vertical center axis of
+ the math formula above the baseline \NC \NR
+\NC \type {\Umathoperatorsize} \NC minimum size of large operators in display mode \NC \NR
+\NC \type {\Umathoverbarkern} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathoverbarrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathoverbarvgap} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathunderbarkern} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathunderbarrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathunderbarvgap} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathradicalkern} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathradicalrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathradicalvgap} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathradicaldegreebefore}\NC the forward kern that takes place before placement of
+ the radical degree \NC \NR
+\NC \type {\Umathradicaldegreeafter} \NC the backward kern that takes place after placement of
+ the radical degree \NC \NR
+\NC \type {\Umathradicaldegreeraise} \NC this is the percentage of the total height and depth of
+ the radical sign that the degree is raised by; it is
+ expressed in \type {percents}, so 60\% is expressed as the
+ integer $60$ \NC \NR
+\NC \type {\Umathstackvgap} \NC vertical clearance between the two
+ elements in a \type {\atop} stack \NC \NR
+\NC \type {\Umathstacknumup} \NC numerator shift upward in \type {\atop} stack \NC \NR
+\NC \type {\Umathstackdenomdown} \NC denominator shift downward in \type {\atop} stack \NC \NR
+\NC \type {\Umathfractionrule} \NC the width of the rule in a \type {\over} \NC \NR
+\NC \type {\Umathfractionnumvgap} \NC vertical clearance between the numerator and the rule \NC \NR
+\NC \type {\Umathfractionnumup} \NC numerator shift upward in \type {\over} \NC \NR
+\NC \type {\Umathfractiondenomvgap} \NC vertical clearance between the denominator and the rule \NC \NR
+\NC \type {\Umathfractiondenomdown} \NC denominator shift downward in \type {\over} \NC \NR
+\NC \type {\Umathfractiondelsize} \NC minimum delimiter size for \type {\...withdelims} \NC \NR
+\NC \type {\Umathlimitabovevgap} \NC vertical clearance for limits above operators \NC \NR
+\NC \type {\Umathlimitabovebgap} \NC vertical baseline clearance for limits above operators \NC \NR
+\NC \type {\Umathlimitabovekern} \NC space reserved at the top of the limit \NC \NR
+\NC \type {\Umathlimitbelowvgap} \NC vertical clearance for limits below operators \NC \NR
+\NC \type {\Umathlimitbelowbgap} \NC vertical baseline clearance for limits below operators \NC \NR
+\NC \type {\Umathlimitbelowkern} \NC space reserved at the bottom of the limit \NC \NR
+\NC \type {\Umathoverdelimitervgap} \NC vertical clearance for limits above delimiters \NC \NR
+\NC \type {\Umathoverdelimiterbgap} \NC vertical baseline clearance for limits above delimiters \NC \NR
+\NC \type {\Umathunderdelimitervgap} \NC vertical clearance for limits below delimiters \NC \NR
+\NC \type {\Umathunderdelimiterbgap} \NC vertical baseline clearance for limits below delimiters \NC \NR
+\NC \type {\Umathsubshiftdrop} \NC subscript drop for boxes and subformulas \NC \NR
+\NC \type {\Umathsubshiftdown} \NC subscript drop for characters \NC \NR
+\NC \type {\Umathsupshiftdrop} \NC superscript drop (raise, actually) for boxes and subformulas \NC \NR
+\NC \type {\Umathsupshiftup} \NC superscript raise for characters \NC \NR
+\NC \type {\Umathsubsupshiftdown} \NC subscript drop in the presence of a superscript \NC \NR
+\NC \type {\Umathsubtopmax} \NC the top of standalone subscripts cannot be higher than this
+ above the baseline \NC \NR
+\NC \type {\Umathsupbottommin} \NC the bottom of standalone superscripts cannot be less than
+ this above the baseline \NC \NR
+\NC \type {\Umathsupsubbottommax} \NC the bottom of the superscript of a combined super- and subscript
+ be at least as high as this above the baseline \NC \NR
+\NC \type {\Umathsubsupvgap} \NC vertical clearance between super- and subscript \NC \NR
+\NC \type {\Umathspaceafterscript} \NC additional space added after a super- or subscript \NC \NR
+\NC \type {\Umathconnectoroverlapmin}\NC minimum overlap between parts in an extensible recipe \NC \NR
+\stoptabulate
+
+Each of the parameters in this section can be set by a command like this:
+
+\starttyping
+\Umathquad\displaystyle=1em
+\stoptyping
+
+they obey grouping, and you can use \type {\the\Umathquad\displaystyle} if
+needed.
+
+\section{Skips around display math}
+
+The injection of \type {\abovedisplayskip} and \type {\belowdisplayskip} is not
+symmetrical. An above one is always inserted, also when zero, but the below is
+only inserted when larger than zero. Especially the later mkes it sometimes hard
+to fully control spacing. Therefore \LUATEX\ comes with a new directive: \type
+{\mathdisplayskipmode}. The following values apply:
+
+\starttabulate
+\NC 0 \NC normal \TEX\ behaviour: always above, only below when larger than zero \NC \NR
+\NC 1 \NC always \NC \NR
+\NC 2 \NC only when not zero \NC \NR
+\NC 3 \NC never, not even when not zero \NC \NR
+\stoptabulate
+
+\section{Font-based Math Parameters}
+
+While it is nice to have these math parameters available for tweaking, it would
+be tedious to have to set each of them by hand. For this reason, \LUATEX\
+initializes a bunch of these parameters whenever you assign a font identifier to
+a math family based on either the traditional math font dimensions in the font
+(for assignments to math family~2 and~3 using \TFM|-|based fonts like \type
+{cmsy} and \type {cmex}), or based on the named values in a potential \type
+{MathConstants} table when the font is loaded via Lua. If there is a \type
+{MathConstants} table, this takes precedence over font dimensions, and in that
+case no attention is paid to which family is being assigned to: the \type
+{MathConstants} tables in the last assigned family sets all parameters.
+
+In the table below, the one|-|letter style abbreviations and symbolic tfm font
+dimension names match those using in the \TeX book. Assignments to \type
+{\textfont} set the values for the cramped and uncramped display and text styles,
+\type {\scriptfont} sets the script styles, and \type {\scriptscriptfont} sets
+the scriptscript styles, so we have eight parameters for three font sizes. In the
+\TFM\ case, assignments only happen in family~2 and family~3 (and of course only
+for the parameters for which there are font dimensions).
+
+Besides the parameters below, \LUATEX\ also looks at the \quote {space} font
+dimension parameter. For math fonts, this should be set to zero.
+
+\start
+
+\switchtobodyfont[8pt]
+
+\starttabulate[|l|l|l|p|]
+\NC \bf variable \NC \bf style \NC \bf default value opentype \NC \bf default value tfm \NC \NR
+\NC \type {\Umathaxis} \NC -- \NC AxisHeight \NC axis_height \NC \NR
+\NC \type {\Umathoperatorsize} \NC D, D' \NC DisplayOperatorMinHeight \NC $^6$ \NC \NR
+\NC \type {\Umathfractiondelsize} \NC D, D' \NC FractionDelimiterDisplayStyleSize$^9$ \NC delim1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDelimiterSize$^9$ \NC delim2 \NC \NR
+\NC \type {\Umathfractiondenomdown} \NC D, D' \NC FractionDenominatorDisplayStyleShiftDown \NC denom1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDenominatorShiftDown \NC denom2 \NC \NR
+\NC \type {\Umathfractiondenomvgap} \NC D, D' \NC FractionDenominatorDisplayStyleGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDenominatorGapMin \NC default_rule_thickness \NC \NR
+\NC \type {\Umathfractionnumup} \NC D, D' \NC FractionNumeratorDisplayStyleShiftUp \NC num1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionNumeratorShiftUp \NC num2 \NC \NR
+\NC \type {\Umathfractionnumvgap} \NC D, D' \NC FractionNumeratorDisplayStyleGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionNumeratorGapMin \NC default_rule_thickness \NC \NR
+\NC \type {\Umathfractionrule} \NC -- \NC FractionRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathskewedfractionhgap} \NC -- \NC SkewedFractionHorizontalGap \NC math_quad/2 \NC \NR
+\NC \type {\Umathskewedfractionvgap} \NC -- \NC SkewedFractionVerticalGap \NC math_x_height \NC \NR
+\NC \type {\Umathlimitabovebgap} \NC -- \NC UpperLimitBaselineRiseMin \NC big_op_spacing3 \NC \NR
+\NC \type {\Umathlimitabovekern} \NC -- \NC 0$^1$ \NC big_op_spacing5 \NC \NR
+\NC \type {\Umathlimitabovevgap} \NC -- \NC UpperLimitGapMin \NC big_op_spacing1 \NC \NR
+\NC \type {\Umathlimitbelowbgap} \NC -- \NC LowerLimitBaselineDropMin \NC big_op_spacing4 \NC \NR
+\NC \type {\Umathlimitbelowkern} \NC -- \NC 0$^1$ \NC big_op_spacing5 \NC \NR
+\NC \type {\Umathlimitbelowvgap} \NC -- \NC LowerLimitGapMin \NC big_op_spacing2 \NC \NR
+\NC \type {\Umathoverdelimitervgap} \NC -- \NC StretchStackGapBelowMin \NC big_op_spacing1 \NC \NR
+\NC \type {\Umathoverdelimiterbgap} \NC -- \NC StretchStackTopShiftUp \NC big_op_spacing3 \NC \NR
+\NC \type {\Umathunderdelimitervgap} \NC-- \NC StretchStackGapAboveMin \NC big_op_spacing2 \NC \NR
+\NC \type {\Umathunderdelimiterbgap} \NC-- \NC StretchStackBottomShiftDown \NC big_op_spacing4 \NC \NR
+\NC \type {\Umathoverbarkern} \NC -- \NC OverbarExtraAscender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathoverbarrule} \NC -- \NC OverbarRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathoverbarvgap} \NC -- \NC OverbarVerticalGap \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathquad} \NC -- \NC <font_size(f)>$^1$ \NC math_quad \NC \NR
+\NC \type {\Umathradicalkern} \NC -- \NC RadicalExtraAscender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathradicalrule} \NC -- \NC RadicalRuleThickness \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicalvgap} \NC D, D' \NC RadicalDisplayStyleVerticalGap \NC (default_rule_thickness+\crlf
+ (abs(math_x_height)/4))$^3$ \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC RadicalVerticalGap \NC (default_rule_thickness+\crlf
+ (abs(default_rule_thickness)/4))$^3$ \NC \NR
+\NC \type {\Umathradicaldegreebefore} \NC -- \NC RadicalKernBeforeDegree \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicaldegreeafter} \NC -- \NC RadicalKernAfterDegree \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicaldegreeraise} \NC -- \NC RadicalDegreeBottomRaisePercent \NC <not set>$^{2,7}$ \NC \NR
+\NC \type {\Umathspaceafterscript} \NC -- \NC SpaceAfterScript \NC script_space$^4$ \NC \NR
+\NC \type {\Umathstackdenomdown} \NC D, D' \NC StackBottomDisplayStyleShiftDown \NC denom1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackBottomShiftDown \NC denom2 \NC \NR
+\NC \type {\Umathstacknumup} \NC D, D' \NC StackTopDisplayStyleShiftUp \NC num1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackTopShiftUp \NC num3 \NC \NR
+\NC \type {\Umathstackvgap} \NC D, D' \NC StackDisplayStyleGapMin \NC 7*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathsubshiftdown} \NC -- \NC SubscriptShiftDown \NC sub1 \NC \NR
+\NC \type {\Umathsubshiftdrop} \NC -- \NC SubscriptBaselineDropMin \NC sub_drop \NC \NR
+\NC \type {\Umathsubsupshiftdown} \NC -- \NC SubscriptShiftDownWithSuperscript$^8$ \NC \NC \NR
+\NC \NC \NC \quad\ or SubscriptShiftDown \NC sub2 \NC \NR
+\NC \type {\Umathsubtopmax} \NC -- \NC SubscriptTopMax \NC (abs(math_x_height * 4) / 5) \NC \NR
+\NC \type {\Umathsubsupvgap} \NC -- \NC SubSuperscriptGapMin \NC 4*default_rule_thickness \NC \NR
+\NC \type {\Umathsupbottommin} \NC -- \NC SuperscriptBottomMin \NC (abs(math_x_height) / 4) \NC \NR
+\NC \type {\Umathsupshiftdrop} \NC -- \NC SuperscriptBaselineDropMax \NC sup_drop \NC \NR
+\NC \type {\Umathsupshiftup} \NC D \NC SuperscriptShiftUp \NC sup1 \NC \NR
+\NC \NC T, S, SS, \NC SuperscriptShiftUp \NC sup2 \NC \NR
+\NC \NC D', T', S', SS' \NC SuperscriptShiftUpCramped \NC sup3 \NC \NR
+\NC \type {\Umathsupsubbottommax} \NC -- \NC SuperscriptBottomMaxWithSubscript \NC (abs(math_x_height * 4) / 5) \NC \NR
+\NC \type {\Umathunderbarkern} \NC -- \NC UnderbarExtraDescender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathunderbarrule} \NC -- \NC UnderbarRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathunderbarvgap} \NC -- \NC UnderbarVerticalGap \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathconnectoroverlapmin} \NC -- \NC MinConnectorOverlap \NC 0$^5$ \NC \NR
+\stoptabulate
+
+\stop
+
+Note 1: \OPENTYPE\ fonts set \type {\Umathlimitabovekern} and \type
+{\Umathlimitbelowkern} to zero and set \type {\Umathquad} to the font size of the
+used font, because these are not supported in the \type {MATH} table,
+
+Note 2: Traditional \TFM\ fonts do not set \type {\Umathradicalrule} because
+\TEX82\ uses the height of the radical instead. When this parameter is indeed not
+set when \LUATEX\ has to typeset a radical, a backward compatibility mode will
+kick in that assumes that an oldstyle \TEX\ font is used. Also, they do not set
+\type {\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type
+{\Umathradicaldegreeraise}. These are then automatically initialized to
+$5/18$quad, $-10/18$quad, and 60.
+
+Note 3: If \TFM\ fonts are used, then the \type {\Umathradicalvgap} is not set
+until the first time \LUATEX\ has to typeset a formula because this needs
+parameters from both family~2 and family~3. This provides a partial backward
+compatibility with \TEX82, but that compatibility is only partial: once the \type
+{\Umathradicalvgap} is set, it will not be recalculated any more.
+
+Note 4: When \TFM\ fonts are used a similar situation arises with respect to
+\type {\Umathspaceafterscript}: it is not set until the first time \LUATEX\ has
+to typeset a formula. This provides some backward compatibility with \TEX82. But
+once the \type {\Umathspaceafterscript} is set, \type {\scriptspace} will never
+be looked at again.
+
+Note 5: Traditional \TFM\ fonts set \type {\Umathconnectoroverlapmin} to zero
+because \TEX82\ always stacks extensibles without any overlap.
+
+Note 6: The \type {\Umathoperatorsize} is only used in \type {\displaystyle}, and
+is only set in \OPENTYPE\ fonts. In \TFM\ font mode, it is artificially set to
+one scaled point more than the initial attempt's size, so that always the \quote
+{first next} will be tried, just like in \TEX82.
+
+Note 7: The \type {\Umathradicaldegreeraise} is a special case because it is the
+only parameter that is expressed in a percentage instead of as a number of scaled
+points.
+
+Note 8: \type {SubscriptShiftDownWithSuperscript} does not actually exist in the
+\quote {standard} \OPENTYPE\ math font Cambria, but it is useful enough to be
+added.
+
+Note 9: \type {FractionDelimiterDisplayStyleSize} and \type
+{FractionDelimiterSize} do not actually exist in the \quote {standard} \OPENTYPE\
+math font Cambria, but were useful enough to be added.
+
+\section{Math spacing setting}
+
+Besides the parameters mentioned in the previous sections, there are also 64 new
+primitives to control the math spacing table (as explained in Chapter~18 of the
+\TEX book). The primitive names are a simple matter of combining two math atom
+types, but for completeness' sake, here is the whole list:
+
+\starttwocolumns
+\starttyping
+\Umathordordspacing
+\Umathordopspacing
+\Umathordbinspacing
+\Umathordrelspacing
+\Umathordopenspacing
+\Umathordclosespacing
+\Umathordpunctspacing
+\Umathordinnerspacing
+\Umathopordspacing
+\Umathopopspacing
+\Umathopbinspacing
+\Umathoprelspacing
+\Umathopopenspacing
+\Umathopclosespacing
+\Umathoppunctspacing
+\Umathopinnerspacing
+\Umathbinordspacing
+\Umathbinopspacing
+\Umathbinbinspacing
+\Umathbinrelspacing
+\Umathbinopenspacing
+\Umathbinclosespacing
+\Umathbinpunctspacing
+\Umathbininnerspacing
+\Umathrelordspacing
+\Umathrelopspacing
+\Umathrelbinspacing
+\Umathrelrelspacing
+\Umathrelopenspacing
+\Umathrelclosespacing
+\Umathrelpunctspacing
+\Umathrelinnerspacing
+\Umathopenordspacing
+\Umathopenopspacing
+\Umathopenbinspacing
+\Umathopenrelspacing
+\Umathopenopenspacing
+\Umathopenclosespacing
+\Umathopenpunctspacing
+\Umathopeninnerspacing
+\Umathcloseordspacing
+\Umathcloseopspacing
+\Umathclosebinspacing
+\Umathcloserelspacing
+\Umathcloseopenspacing
+\Umathcloseclosespacing
+\Umathclosepunctspacing
+\Umathcloseinnerspacing
+\Umathpunctordspacing
+\Umathpunctopspacing
+\Umathpunctbinspacing
+\Umathpunctrelspacing
+\Umathpunctopenspacing
+\Umathpunctclosespacing
+\Umathpunctpunctspacing
+\Umathpunctinnerspacing
+\Umathinnerordspacing
+\Umathinneropspacing
+\Umathinnerbinspacing
+\Umathinnerrelspacing
+\Umathinneropenspacing
+\Umathinnerclosespacing
+\Umathinnerpunctspacing
+\Umathinnerinnerspacing
+\stoptyping
+\stoptwocolumns
+
+These parameters are of type \type {\muskip}, so setting a parameter can be done
+like this:
+
+\starttyping
+\Umathopordspacing\displaystyle=4mu plus 2mu
+\stoptyping
+
+They are all initialized by \type {initex} to the values mentioned in the table
+in Chapter~18 of the \TEX book.
+
+Note 1: for ease of use as well as for backward compatibility, \type
+{\thinmuskip}, \type {\medmuskip} and \type {\thickmuskip} are treated
+especially. In their case a pointer to the corresponding internal parameter is
+saved, not the actual \type {\muskip} value. This means that any later changes to
+one of these three parameters will be taken into account.
+
+Note 2: Careful readers will realise that there are also primitives for the items
+marked \type {*} in the \TEX book. These will not actually be used as those
+combinations of atoms cannot actually happen, but it seemed better not to break
+orthogonality. They are initialized to zero.
+
+\section[mathacc]{Math accent handling}
+
+\LUATEX\ supports both top accents and bottom accents in math mode, and math
+accents stretch automatically (if this is supported by the font the accent comes
+from, of course). Bottom and combined accents as well as fixed-width math accents
+are controlled by optional keywords following \type {\Umathaccent}.
+
+The keyword \type {bottom} after \type {\Umathaccent} signals that a bottom accent
+is needed, and the keyword \type {both} signals that both a top and a bottom
+accent are needed (in this case two accents need to be specified, of course).
+
+Then the set of three integers defining the accent is read. This set of integers
+can be prefixed by the \type {fixed} keyword to indicate that a non-stretching
+variant is requested (in case of both accents, this step is repeated).
+
+A simple example:
+
+\starttyping
+\Umathaccent both fixed 0 0 "20D7 fixed 0 0 "20D7 {example}
+\stoptyping
+
+If a math top accent has to be placed and the accentee is a character and has a
+non-zero \type {top_accent} value, then this value will be used to place the
+accent instead of the \type {\skewchar} kern used by \TEX82.
+
+The \type {top_accent} value represents a vertical line somewhere in the
+accentee. The accent will be shifted horizontally such that its own \type
+{top_accent} line coincides with the one from the accentee. If the \type
+{top_accent} value of the accent is zero, then half the width of the accent
+followed by its italic correction is used instead.
+
+The vertical placement of a top accent depends on the \type {x_height} of the
+font of the accentee (as explained in the \TEX book), but if value that turns out
+to be zero and the font had a \type {MathConstants} table, then \type
+{AccentBaseHeight} is used instead.
+
+The vertical placement of a bottom accent is straight below the accentee, no
+correction takes place.
+
+Possible locations are \type {top}, \type {bottom}, \type {both} and \type
+{center}. When no location is given \type {top} is assumed. An additional
+parameter \type {fraction} can be specified followed by a number; a value of for
+instance 1200 means that the criterium is 1.2 times the width of the nuclues. The
+fraction only applies to the stepwise selected shapes and is mostly meant for the
+\type {overlay} location. It also works for the other locations but then it
+concerns the width.
+
+\section{Math root extension}
+
+The new primitive \type {\Uroot} allows the construction of a radical noad
+including a degree field. Its syntax is an extension of \type {\Uradical}:
+
+\starttyping
+\Uradical <fam integer> <char integer> <radicand>
+\Uroot <fam integer> <char integer> <degree> <radicand>
+\stoptyping
+
+The placement of the degree is controlled by the math parameters \type
+{\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type
+{\Umathradicaldegreeraise}. The degree will be typeset in \type
+{\scriptscriptstyle}.
+
+\section{Math kerning in super- and subscripts}
+
+The character fields in a \LUA|-|loaded \OPENTYPE\ math font can have a \quote
+{mathkern} table. The format of this table is the same as the \quote {mathkern}
+table that is returned by the \type {fontloader} library, except that all height
+and kern values have to be specified in actual scaled points.
+
+When a super- or subscript has to be placed next to a math item, \LUATEX\ checks
+whether the super- or subscript and the nucleus are both simple character items.
+If they are, and if the fonts of both character items are \OPENTYPE\ fonts (as
+opposed to legacy \TEX\ fonts), then \LUATEX\ will use the \OPENTYPE\ math
+algorithm for deciding on the horizontal placement of the super- or subscript.
+
+This works as follows:
+
+\startitemize
+ \startitem
+ The vertical position of the script is calculated.
+ \stopitem
+ \startitem
+ The default horizontal position is flat next to the base character.
+ \stopitem
+ \startitem
+ For superscripts, the italic correction of the base character is added.
+ \stopitem
+ \startitem
+ For a superscript, two vertical values are calculated: the bottom of the
+ script (after shifting up), and the top of the base. For a subscript, the two
+ values are the top of the (shifted down) script, and the bottom of the base.
+ \stopitem
+ \startitem
+ For each of these two locations:
+ \startitemize
+ \startitem
+ find the math kern value at this height for the base (for a subscript
+ placement, this is the bottom_right corner, for a superscript
+ placement the top_right corner)
+ \stopitem
+ \startitem
+ find the math kern value at this height for the script (for a
+ subscript placement, this is the top_left corner, for a superscript
+ placement the bottom_left corner)
+ \stopitem
+ \startitem
+ add the found values together to get a preliminary result.
+ \stopitem
+ \stopitemize
+ \stopitem
+ \startitem
+ The horizontal kern to be applied is the smallest of the two results from
+ previous step.
+ \stopitem
+\stopitemize
+
+The math kern value at a specific height is the kern value that is specified by the
+next higher height and kern pair, or the highest one in the character (if there is no
+value high enough in the character), or simply zero (if the character has no math kern
+pairs at all).
+
+\section{Scripts on horizontally extensible items like arrows}
+
+The primitives \type {\Uunderdelimiter} and \type {\Uoverdelimiter} allow the
+placement of a subscript or superscript on an automatically extensible item and
+\type {\Udelimiterunder} and \type {\Udelimiterover} allow the placement of an
+automatically extensible item as a subscript or superscript on a nucleus. The
+input:
+
+% these produce radical noads .. in fact the code base has the numbers wrong for
+% quite a while, so no one seems to use this
+
+\startbuffer
+$\Uoverdelimiter 0 "2194 {\hbox{\strut overdelimiter}}$
+$\Uunderdelimiter 0 "2194 {\hbox{\strut underdelimiter}}$
+$\Udelimiterover 0 "2194 {\hbox{\strut delimiterover}}$
+$\Udelimiterunder 0 "2194 {\hbox{\strut delimiterunder}}$
+\stopbuffer
+
+\typebuffer will render this:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+The vertical placements are controlled by \type {\Umathunderdelimiterbgap}, \type
+{\Umathunderdelimitervgap}, \type {\Umathoverdelimiterbgap}, and \type
+{\Umathoverdelimitervgap} in a similar way as limit placements on large operators.
+The superscript in \type {\Uoverdelimiter} is typeset in a suitable scripted style,
+the subscript in \type {\Uunderdelimiter} is cramped as well.
+
+These primitives accepts an option \type {width} specification. When used the
+also optional keywords \type {left}, \type {middle} and \type {right} will
+determine what happens when a requested size can't be met (which can happen when
+we step to successive larger variants).
+
+An extra primitive \type {\Uhextensible} is available that can be used like this:
+
+\startbuffer
+$\Uhextensible width 10cm 0 "2194$
+\stopbuffer
+
+\typebuffer This will render this:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+Here you can also pass options, like:
+
+\startbuffer
+$\Uhextensible width 1pt middle 0 "2194$
+\stopbuffer
+
+\typebuffer This gives:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+\LUATEX\ internally uses a structure that supports \OPENTYPE\ \quote
+{MathVariants} as well as \TFM\ \quote {extensible recipes}. In most cases where
+font metrics are involved we have a different code path for traditional fonts end
+\OPENTYPE\ fonts.
+
+\section {Extracting values}
+
+You can extract the components of a math character. Say that we have defined:
+
+\starttyping
+\Umathcode 1 2 3 4
+\stoptyping
+
+then
+
+\starttyping
+[\Umathcharclass1] [\Umathcharfam1] [\Umathcharslot1]
+\stoptyping
+
+will return:
+
+\starttyping
+[2] [3] [4]
+\stoptyping
+
+These commands are provides as convenience. Before they came available you could
+do the following:
+
+\starttyping
+\def\Umathcharclass{\directlua{tex.print(tex.getmathcode(token.scan_int())[1])}}
+\def\Umathcharfam {\directlua{tex.print(tex.getmathcode(token.scan_int())[2])}}
+\def\Umathcharslot {\directlua{tex.print(tex.getmathcode(token.scan_int())[3])}}
+\stoptyping
+
+\section{fractions}
+
+The \type {\abovewithdelims} command accepts a keyword \type {exact}. When issued
+the extra space relative to the rule thickness is not added. One can of course
+use the \type {\Umathfraction..gap} commands to influence the spacing. Also the
+rule is still positioned around the math axis.
+
+\starttyping
+$$ { {a} \abovewithdelims() exact 4pt {b} }$$
+\stoptyping
+
+The math parameter table contains some parameters that specify a horizontal and
+vertical gap for skewed fractions. Of course some guessing is needed in order to
+implement something that uses them. And so we now provide a primitive similar to the
+other fraction related ones but with a few options so that one can influence the
+rendering. Of course a user can also mess around a bit with the parameters
+\type {\Umathskewedfractionhgap} and \type {\Umathskewedfractionvgap}.
+
+The syntax used here is:
+
+\starttyping
+{ {1} \Uskewed / <options> {2} }
+{ {1} \Uskewedwithdelims / () <options> {2} }
+\stoptyping
+
+where the options can be \type {noaxis} and \type {exact}. By default we add half
+the axis to the shifts and by default we zero the width of the middle character.
+For Latin Modern The result looks as follows:
+
+\def\ShowA#1#2#3{$x + { {#1} \Uskewed / #3 {#2} } + x$}
+\def\ShowB#1#2#3{$x + { {#1} \Uskewedwithdelims / () #3 {#2} } + x$}
+
+\start
+ \switchtobodyfont[modern]
+ \starttabulate[||||||]
+ \NC \NC
+ \ShowA{a}{b}{} \NC
+ \ShowA{1}{2}{} \NC
+ \ShowB{a}{b}{} \NC
+ \ShowB{1}{2}{} \NC
+ \NR
+ \NC \type{exact} \NC
+ \ShowA{a}{b}{exact} \NC
+ \ShowA{1}{2}{exact} \NC
+ \ShowB{a}{b}{exact} \NC
+ \ShowB{1}{2}{exact} \NC
+ \NR
+ \NC \type{noaxis} \NC
+ \ShowA{a}{b}{noaxis} \NC
+ \ShowA{1}{2}{noaxis} \NC
+ \ShowB{a}{b}{noaxis} \NC
+ \ShowB{1}{2}{noaxis} \NC
+ \NR
+ \NC \type{exact noaxis} \NC
+ \ShowA{a}{b}{exact noaxis} \NC
+ \ShowA{1}{2}{exact noaxis} \NC
+ \ShowB{a}{b}{exact noaxis} \NC
+ \ShowB{1}{2}{exact noaxis} \NC
+ \NR
+ \stoptabulate
+\stop
+
+\section {Other Math changes}
+
+\subsection {Verbose versions of single-character math commands}
+
+\LUATEX\ defines six new primitives that have the same function as
+\type {^}, \type {_}, \type {$}, and \type {$$}: %$
+
+\starttabulate[|l|l|l|l|]
+\NC \bf primitive \NC \bf explanation \NC \NR
+\NC \type {\Usuperscript} \NC Duplicates the functionality of \type {^} \NC \NR
+\NC \type {\Usubscript} \NC Duplicates the functionality of \type {_} \NC \NR
+\NC \type {\Ustartmath} \NC Duplicates the functionality of \type {$}, % $
+ when used in non-math mode. \NC \NR
+\NC \type {\Ustopmath} \NC Duplicates the functionality of \type {$}, % $
+ when used in inline math mode. \NC \NR
+\NC \type {\Ustartdisplaymath} \NC Duplicates the functionality of \type {$$}, % $$
+ when used in non-math mode. \NC \NR
+\NC \type {\Ustopdisplaymath} \NC Duplicates the functionality of \type {$$}, % $$
+ when used in display math mode. \NC \NR
+\stoptabulate
+
+The \type {\Ustopmath} and \type {\Ustopdisplaymath} primitives check if the current
+math mode is the correct one (inline vs.\ displayed), but you can freely intermix
+the four mathon|/|mathoff commands with explicit dollar sign(s).
+
+\subsection{Allowed math commands in non-math modes}
+
+The commands \type {\mathchar}, and \type {\Umathchar} and control sequences that
+are the result of \type {\mathchardef} or \type {\Umathchardef} are also
+acceptable in the horizontal and vertical modes. In those cases, the \type
+{\textfont} from the requested math family is used.
+
+\section{Math surrounding skips}
+
+Inline math is surrounded by (optional) \type {\mathsurround} spacing but that is fixed
+dimension. There is now an additional parameter \type {\mathsurroundskip}. When set to a
+non|-|zero value (or zero with some stretch or shrink) this parameter will replace
+\type {\mathsurround}. By using an additional parameter instead of changing the nature
+of \type {\mathsurround}, we can remain compatible.
+
+% \section{Math todo}
+%
+% The following items are still todo.
+%
+% \startitemize
+% \startitem
+% Pre-scripts.
+% \stopitem
+% \startitem
+% Multi-story stacks.
+% \stopitem
+% \startitem
+% Flattened accents for high characters (maybe).
+% \stopitem
+% \startitem
+% Better control over the spacing around displays and handling of equation numbers.
+% \stopitem
+% \startitem
+% Support for multi|-|line displays using \MATHML\ style alignment points.
+% \stopitem
+% \stopitemize
+
+\subsection {Delimiters: \type{\Uleft}, \type {\Umiddle} and \type {\Uright}}
+
+Normally you will force delimiters to certain sizes by putting an empty box or
+rule next to it. The resulting delimiter will either be a character from the
+stepwise size range or an extensible. The latter can be quite differently
+positioned that the characters as it depends on the fit as well as the fact if
+the used characters in the font have depth or height. Commands like (plain \TEX
+s) \type {\big} need use this feature. In \LUATEX\ we provide a bit more control
+by three variants that supporting optional parameters \type {height}, \type
+{depth} and \type {axis}. The following example uses this:
+
+\startbuffer
+\Uleft height 30pt depth 10pt \Udelimiter "0 "0 "000028
+\quad x\quad
+\Umiddle height 40pt depth 15pt \Udelimiter "0 "0 "002016
+\quad x\quad
+\Uright height 30pt depth 10pt \Udelimiter "0 "0 "000029
+\quad \quad \quad
+\Uleft height 30pt depth 10pt axis \Udelimiter "0 "0 "000028
+\quad x\quad
+\Umiddle height 40pt depth 15pt axis \Udelimiter "0 "0 "002016
+\quad x\quad
+\Uright height 30pt depth 10pt axis \Udelimiter "0 "0 "000029
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\ruledhbox{\mathematics{\getbuffer}}
+\stoplinecorrection
+
+The keyword \type {exact} can be used as directive that the real dimensions
+should be applied when the criteria can't be met which can happen when we're
+still stepping through the successively larger variants. When no dimensions are
+given the \type {noaxis} command can be used to prevent shifting over the axis.
+
+You can influence the final class with the keyword \type {class} which will
+influence the spacing.
+
+\subsection{Fixed scripts}
+
+We have three parameters that are used for this fixed anchoring:
+
+\starttabulate[|l|l|]
+\NC $d$ \NC \type {\Umathsubshiftdown} \NC \NR
+\NC $u$ \NC \type {\Umathsupshiftup} \NC \NR
+\NC $s$ \NC \type {\Umathsubsupshiftdown} \NC \NR
+\stoptabulate
+
+When we set \type {\mathscriptsmode} to a value other than zero these are used
+for calculating fixed positions. This is something that is needed for instance
+for chemistry. You can manipulate the mentioned variables to achive different
+effects.
+
+\def\SampleMath#1%
+ {$\mathscriptsmode#1\mathupright CH_2 + CH^+_2 + CH^2_2$}
+
+\starttabulate[|c|c|c|l|]
+\NC \bf mode \NC \bf down \NC \bf up \NC \NC \NR
+\NC 0 \NC dynamic \NC dynamic \NC \SampleMath{0} \NC \NR
+\NC 1 \NC $d$ \NC $u$ \NC \SampleMath{1} \NC \NR
+\NC 2 \NC $s$ \NC $u$ \NC \SampleMath{2} \NC \NR
+\NC 3 \NC $s$ \NC $u + s - d$ \NC \SampleMath{3} \NC \NR
+\NC 4 \NC $d + (s-d)/2$ \NC $u + (s-d)/2$ \NC \SampleMath{4} \NC \NR
+\NC 5 \NC $d$ \NC $u + s - d$ \NC \SampleMath{5} \NC \NR
+\stoptabulate
+
+The value of this parameter obeys grouping but applies to the whole current
+formula.
+
+% if needed we can put the value in stylenodes but maybe more should go there
+
+\subsection {Tracing}
+
+Because there are quite some math related parameters and values, it is possible
+to limit tracing. Only when \type {tracingassigns} and|/|or \type
+{tracingrestores} are set to~2 or more they will be traced.
+
+\subsection {Math options}
+
+The logic in the math engine is rather complex and there are often no universal
+solutions (read: what works out well for one font, fails for another). Therefore
+some variations in the implementation will be driven by options for which a new
+primitive \type {\mathoption} has been introduced (so that we don't end up with
+many new commands). The approach of options also permits us to see what effect a
+specific solution has.
+
+\subsubsection {\type {\mathoption noitaliccompensation}}
+
+This option compensates placement for characters with a built|-|in italic
+correction.
+
+\startbuffer
+{\showboxes\int}\quad
+{\showboxes\int_{|}^{|}}\quad
+{\showboxes\int\limits_{|}^{|}}
+\stopbuffer
+
+\typebuffer
+
+Gives (with computer modern that has such italics):
+
+\startlinecorrection[blank]
+ \switchtobodyfont[modern]
+ \startcombination[nx=2,ny=2,distance=5em]
+ {\mathoption noitaliccompensation 0\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{0:inline}}
+ {\mathoption noitaliccompensation 0\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{0:display}}
+ {\mathoption noitaliccompensation 1\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{1:inline}}
+ {\mathoption noitaliccompensation 1\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{1:display}}
+ \stopcombination
+\stoplinecorrection
+
+\subsubsection {\type {\mathoption nocharitalic}}
+
+When two characters follow each other italic correction can interfere. The
+following example shows what this option does:
+
+\startbuffer
+\catcode"1D443=11
+\catcode"1D444=11
+\catcode"1D445=11
+P( PP PQR
+\stopbuffer
+
+\typebuffer
+
+Gives (with computer modern that has such italics):
+
+\startlinecorrection[blank]
+ \switchtobodyfont[modern]
+ \startcombination[nx=2,ny=2,distance=5em]
+ {\mathoption nocharitalic 0\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{0:inline}}
+ {\mathoption nocharitalic 0\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{0:display}}
+ {\mathoption nocharitalic 1\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{1:inline}}
+ {\mathoption nocharitalic 1\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{1:display}}
+ \stopcombination
+\stoplinecorrection
+
+\subsubsection {\type {\mathoption useoldfractionscaling}}
+
+This option has been introduced as solution for tracker item 604 for fuzzy cases
+around either or not present fraction related settings for new fonts.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-modifications.tex b/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
new file mode 100644
index 000000000..549cfe377
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
@@ -0,0 +1,1220 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-modifications
+
+\startchapter[reference=modifications,title={Modifications}]
+
+\startsection[title=The merged engines]
+
+\startsubsection[title=The need for change]
+
+The first version of \LUATEX\ only had a few extra primitives and it was largely
+the same as \PDFTEX. Then we merged substantial parts of \ALEPH\ into the code
+and got more primitives. When we got more stable the decision was made to clean
+up the rather hybrid nature of the program. This means that some primitives have
+been promoted to core primitives, often with a different name, and that others
+were removed. This made it possible to start cleaning up the code base. In \in
+{chapter} [enhancements] we discussed some new primitives, here we will cover
+most of the adapted ones.
+
+Besides the expected changes caused by new functionality, there are a number of
+not|-|so|-|expected changes. These are sometimes a side|-|effect of a new
+(conflicting) feature, or, more often than not, a change neccessary to clean up
+the internal interfaces. These will also be mentioned.
+
+\stopsubsection
+
+\startsubsection[title=Changes from \TEX\ 3.1415926]
+
+Of course it all starts with traditional \TEX. Even if we started with \PDFTEX,
+most still comes from the original. But we divert a bit.
+
+\startitemize
+
+\startitem
+ The current code base is written in \CCODE, not \PASCAL. We use \CWEB\ when
+ possible. As a consequence instead of one large file plus change files, we
+ now have multiple files organized in categories like \type {tex}, \type
+ {pdf}, \type {lang}, \type {font}, \type {lua}, etc. There are some artefacts
+ of the conversion to \CCODE, but in due time we will clean up the source code
+ and make sure that the documentation is done right. Many files are in the
+ \CWEB\ format, but others, like those interfacing to \LUA, are \CCODE\ files.
+ Of course we want to stay as close as possible to the original so that the
+ documentation of the fundamentals behind \TEX\ by Don Knuth still applies.
+\stopitem
+
+\startitem
+ See \in {chapter} [languages] for many small changes related to paragraph
+ building, language handling and hyphenation. The most important change is
+ that adding a brace group in the middle of a word (like in \type {of{}fice})
+ does not prevent ligature creation.
+\stopitem
+
+\startitem
+ There is no pool file, all strings are embedded during compilation.
+\stopitem
+
+\startitem
+ The specifier \type {plus 1 fillll} does not generate an error. The extra
+ \quote{l} is simply typeset.
+\stopitem
+
+\startitem
+ The upper limit to \type {\endlinechar} and \type {\newlinechar} is 127.
+\stopitem
+
+\startitem
+ Magnification (\type {\mag}) is only supported in \DVI\ output mode. You can
+ set this parameter and it even works with \type {true} units till you switch
+ to \PDF\ output mode. When you use \PDF\ output you can best not touch the
+ \type {\mag} variable. This fuzzy behaviour is not much different from using
+ \PDF\ backend related functionality while eventually \DVI\ output is
+ required.
+
+ After the output mode has been frozen (normally that happens when the first
+ page is shipped out) or when \PDF\ output is enabled, the \type {true}
+ specification is ignored. When you preload a plain format adapted to
+ \LUATEX\ it can be that the \type {\mag} parameter already has been set.
+\stopitemize
+
+\stopsubsection
+
+\startsubsection[title=Changes from \ETEX\ 2.2]
+
+Being the de factor standard extension of course we provide the \ETEX\
+functionality, but with a few small adaptations.
+
+\startitemize
+
+\startitem
+ The \ETEX\ functionality is always present and enabled so the prepended
+ asterisk or \type {-etex} switch for \INITEX\ is not needed.
+\stopitem
+
+\startitem
+ The \TEXXET\ extension is not present, so the primitives \type
+ {\TeXXeTstate}, \type {\beginR}, \type {\beginL}, \type {\endR} and \type
+ {\endL} are missing. Instead we use the \OMEGA\ approach to directionality.
+\stopitem
+
+\startitem
+ Some of the tracing information that is output by \ETEX's \type
+ {\tracingassigns} and \type {\tracingrestores} is not there.
+\stopitem
+
+\startitem
+ Register management in \LUATEX\ uses the \ALEPH\ model, so the maximum value
+ is 65535 and the implementation uses a flat array instead of the mixed
+ flat|\&|sparse model from \ETEX.
+\stopitem
+
+\startitem
+ When kpathsea is used to find files, \LUATEX\ uses the \type {ofm} file
+ format to search for font metrics. In turn, this means that \LUATEX\ looks at
+ the \type {OFMFONTS} configuration variable (like \OMEGA\ and \ALEPH) instead
+ of \type {TFMFONTS} (like \TEX\ and \PDFTEX). Likewise for virtual fonts
+ (\LUATEX\ uses the variable \type {OVFFONTS} instead of \type {VFFONTS}).
+\stopitem
+
+\stopitemize
+
+\stopsubsection
+
+\startsubsection[title=Changes from \PDFTEX\ 1.40]
+
+Because we want to produce \PDF\ the most natural starting point was the popular
+\PDFTEX\ program. We inherit the stable features, dropped most of the
+experimental code and promoted some functionality to core \LUATEX\ functionality
+which in turn triggered renaming primitives.
+
+For compatibility reasons we still refer to \type {\pdf...} commands but \LUATEX\
+has a different backend interface. Instead of these primitives there are three
+interfacing primitives: \type {\pdfextension}, \type {\pdfvariable} and
+\type {\pdffeedback} that take keywords and optional further arguments. This way
+we can extend the features when needed but don't need to adapt the core engine.
+The front- and backend are decoupled as much as possible.
+
+\startitemize
+
+\startitem
+ The (experimental) support for snap nodes has been removed, because it is
+ much more natural to build this functionality on top of node processing and
+ attributes. The associated primitives that are now gone are: \type
+ {\pdfsnaprefpoint}, \type {\pdfsnapy}, and \type {\pdfsnapycomp}.
+\stopitem
+
+\startitem
+ The (experimental) support for specialized spacing around nodes has also been
+ removed. The associated primitives that are now gone are: \type
+ {\pdfadjustinterwordglue}, \type {\pdfprependkern}, and \type
+ {\pdfappendkern}, as well as the five supporting primitives \type
+ {\knbscode}, \type {\stbscode}, \type {\shbscode}, \type {\knbccode}, and
+ \type {\knaccode}.
+\stopitem
+
+\startitem
+ A number of \quote {\PDFTEX\ primitives} have been removed as they can be
+ implemented using \LUA:
+
+ \start \raggedright
+ \type {\pdfelapsedtime}, \type {\pdfescapehex}, \type {\pdfescapename}, \type
+ {\pdfescapestring}, \type {\pdffiledump}, \type {\pdffilemoddate}, \type
+ {\pdffilesize}, \type {\pdfforcepagebox}, \type {\pdflastmatch}, \type
+ {\pdfmatch}, \type {\pdfmdfivesum}, \type {\pdfmovechars}, \type
+ {\pdfoptionalwaysusepdfpagebox}, \type {\pdfoptionpdfinclusionerrorlevel},
+ \type {\pdfresettimer}, \type {\pdfshellescape}, \type {\pdfstrcmp} and \type
+ {\pdfunescapehex}
+ \par \stop
+\stopitem
+
+\startitem
+ The version related primitives \type {\pdftexbanner}, \type {\pdftexversion}
+ and \type {\pdftexrevision} are no longer present as there is no longer a
+ relationship with \PDFTEX\ development.
+\stopitem
+
+\startitem
+ The experimental snapper mechanism has been removed and therefore also the
+ primitives:
+
+ \start \raggedright
+ \type {\pdfignoreddimen}, \type {\pdffirstlineheight}, \type
+ {\pdfeachlineheight}, \type {\pdfeachlinedepth} and \type
+ {\pdflastlinedepth}
+ \par \stop
+\stopitem
+
+\startitem
+ The experimental primitives \type {\primitive}, \type {\ifprimitive}, \type
+ {\ifabsnum} and \type {\ifabsdim} are promoted to core primitives. The \type
+ {\pdf*} prefixed originals are not available.
+\stopitem
+
+\startitem
+ The \PNG\ transparency fix from 1.40.6 is not applied as high|-|level support
+ is pending. Because \LUATEX\ has a different subsystem for managing images,
+ more diversion from its ancestor happened in the meantime.
+\stopitem
+
+\startitem
+ Two extra token lists are provides, \type {\pdfxformresources} and \type
+ {\pdfxformattr}, as an alternative to \type {\pdfxform} keywords.
+\stopitem
+
+\startitem
+ The current version of \LUATEX\ no longer replaces and|/|or merges fonts in
+ embedded \PDF\ files with fonts of the enveloping \PDF\ document. This
+ regression may be temporary, depending on how the rewritten font backend will
+ look like.
+\stopitem
+
+\startitem
+ The primitives \type {\pdfpagewidth} and \type {\pdfpageheight} have been removed
+ because \type {\pagewidth} and \type {\pageheight} have that purpose.
+\stopitem
+
+\startitem
+ The primitives \type {\pdfnormaldeviate}, \type {\pdfuniformdeviate}, \type
+ {\pdfsetrandomseed} and \type {\pdfrandomseed} have been promoted to core
+ primitives without \type {pdf} prefix so the original commands are no longer
+ recognized.
+\stopitem
+
+\startitem
+ The primitives \type {\ifincsname}, \type {\expanded} and \type {\quitvmode}
+ are now core primitives.
+\stopitem
+
+\startitem
+ As the hz and protrusion mechanism are part of the core the related
+ primitives \type {\lpcode}, \type {\rpcode}, \type {\efcode}, \type
+ {\leftmarginkern}, \type {\rightmarginkern} are promoted to core primitives. The
+ two commands \type {\protrudechars} and \type {\adjustspacing} replace their
+ prefixed with \type {\pdf} originals.
+\stopitem
+
+\startitem
+ The hz optimization code has been partially redone so that we no longer need
+ to create extra font instances. The front- and backend have been decoupled
+ and more efficient (\PDF) code is generated.
+\stopitem
+
+\startitem
+ When \type {\adjustspacing} has value~2, hz optimization will be applied to
+ glyphs and kerns. When the value is~3, only glyphs will be treated. A value
+ smaller than~2 disables this feature.
+\stopitem
+
+\startitem
+ The \type {\tagcode} primitive is promoted to core primitive.
+\stopitem
+
+\startitem
+ The \type {\letterspacefont} feature is now part of the core but will not be
+ changed (improved). We just provide it for legacy use.
+\stopitem
+
+\startitem
+ The \type {\pdfnoligatures} primitive is now \type {\ignoreligaturesinfont}.
+\stopitem
+
+\startitem
+ The \type {\pdfcopyfont} primitive is now \type {\copyfont}.
+\stopitem
+
+\startitem
+ The \type {\pdffontexpand} primitive is now \type {\expandglyphsinfont}.
+\stopitem
+
+\startitem
+ Because position tracking is also available in \DVI\ mode the \type
+ {\savepos}, \type {\lastxpos} and \type {\lastypos} commands now replace
+ their \type {pdf} prefixed originals.
+\stopitem
+
+\startitem
+ The introspective primitives \type {\pdflastximagecolordepth} and \type
+ {\pdfximagebbox} have been removed. One can use external applications to
+ determine these properties or use the built|-|in \type {img} library.
+\stopitem
+
+\startitem
+ The initializers \type {\pdfoutput} has been replaced by \type {\outputmode} and
+ \type {\pdfdraftmode} is now \type {\draftmode}.
+\stopitem
+
+\startitem
+ The pixel multiplier dimension \type {\pdfpxdimen} lots its prefix and is now calles
+ \type {\pxdimen}.
+\stopitem
+
+\startitem
+ An extra \type {\pdfimageaddfilename} option has been added that can be used to block
+ writing the filename to the \PDF\ file.
+\stopitem
+
+\startitem
+ The primitive \type {\pdftracingfonts} is now \type {\tracingfonts} as it
+ doesn't relate to the backend.
+\stopitem
+
+\startitem
+ The experimental primitive \type {\pdfinsertht} is kept as \type {\insertht}.
+\stopitem
+
+\startitem
+ The promotion of primitives to core primitives as well as the separation of
+ font- and backend means that the initialization namespace \type {pdftex} is
+ gone.
+\stopitem
+
+\stopitemize
+
+One change involves the so called xforms and ximages. In \PDFTEX\ these are
+implemented as so called whatsits. But contrary to other whatsits they have
+dimensions that need to be taken into account when for instance calculating
+optimal line breaks. In \LUATEX\ these are now promoted to normal nodes, which
+simplifies code that needs those dimensions.
+
+Another reason for promotion is that these are useful concepts. Backends can
+provide the ability to use content that has been rendered in several places,
+and images are also common. For that reason we also changed the names:
+
+\starttabulate[|l|l|]
+\NC \bf new name \NC \bf old name \NC \NR
+\NC \type {\saveboxresource} \NC \type {\pdfxform} \NC \NR
+\NC \type {\saveimageresource} \NC \type {\pdfximage} \NC \NR
+\NC \type {\useboxresource} \NC \type {\pdfrefxform} \NC \NR
+\NC \type {\useimageresource} \NC \type {\pdfrefximage} \NC \NR
+\NC \type {\lastsavedboxresourceindex} \NC \type {\pdflastxform} \NC \NR
+\NC \type {\lastsavedimageresourceindex} \NC \type {\pdflastximage} \NC \NR
+\NC \type {\lastsavedimageresourcepages} \NC \type {\pdflastximagepages} \NC \NR
+\stoptabulate
+
+There are a few \type {\pdffeedback} features that relate to this but these are
+typical backend specific ones. The index that gets returned is to be considered
+as \quote {just a number} and although it still has the same meaning (object
+related) as before, you should not depend on that.
+
+The protrusion detection mechanism is enhanced a bit to enable a bit more complex
+situations. When protrusion characters are identified some nodes are skipped:
+
+\startitemize[packed]
+\startitem zero glue \stopitem
+\startitem penalties \stopitem
+\startitem empty discretionaries \stopitem
+\startitem normal zero kerns \stopitem
+\startitem rules with zero dimensions \stopitem
+\startitem math nodes with a surround of zero \stopitem
+\startitem dir nodes \stopitem
+\startitem empty horizontal lists \stopitem
+\startitem local par nodes \stopitem
+\startitem inserts, marks and adjusts \stopitem
+\startitem boundaries \stopitem
+\startitem whatsits \stopitem
+\stopitemize
+
+Because this can not be enough, you can also use a protrusion boundary node to
+make the next node being ignored. When the value is~1 or~3, the next node will be
+ignored in the test when locating a left boundary condition. When the value is~2
+or~3, the previous node will be ignored when locating a right boundary condition
+(the search goes from right to left). This permits protrusion combined with for
+instance content moved into the margin:
+
+\starttyping
+\protrusionboundary1\llap{!\quad}«Who needs protrusion?»
+\stoptyping
+
+\stopsubsection
+
+\startsubsection[title=Changes from \ALEPH\ RC4]
+
+Because we wanted proper directional typesetting the \ALEPH\ mechanisms looked
+most attractive. These are rather close to the ones provided by \OMEGA, so what
+we say next applies to both these programs.
+
+\startitemize
+
+\startitem
+ The extended 16-bit math primitives (\type {\omathcode} etc.) have been
+ removed.
+\stopitem
+
+\startitem
+ The \OCP\ processing has been removed completely and as a consequence, the
+ following primitives have been removed:
+
+ \start \raggedright
+ \type {\ocp}, \type {\externalocp}, \type {\ocplist}, \type {\pushocplist},
+ \type {\popocplist}, \type {\clearocplists}, \type {\addbeforeocplist}, \type
+ {\addafterocplist}, \type {\removebeforeocplist}, \type {\removeafterocplist}
+ and \type {\ocptracelevel}
+ \par \stop
+\stopitem
+
+\startitem
+ \LUATEX\ only understands 4~of the 16~direction specifiers of \ALEPH: \type
+ {TLT} (latin), \type {TRT} (arabic), \type {RTT} (cjk), \type {LTL}
+ (mongolian). All other direction specifiers generate an error.
+\stopitem
+
+\startitem
+ The input translations from \ALEPH\ are not implemented, the related
+ primitives are not available:
+
+ \start \raggedright
+ \type {\DefaultInputMode}, \type {\noDefaultInputMode}, \type {\noInputMode},
+ \type {\InputMode}, \type {\DefaultOutputMode}, \type {\noDefaultOutputMode},
+ \type {\noOutputMode}, \type {\OutputMode}, \type {\DefaultInputTranslation},
+ \type {\noDefaultInputTranslation}, \type {\noInputTranslation}, \type
+ {\InputTranslation}, \type {\DefaultOutputTranslation}, \type
+ {\noDefaultOutputTranslation}, \type {\noOutputTranslation} and \type
+ {\OutputTranslation}
+ \par \stop
+\stopitem
+
+\startitem
+ Several bugs have been fixed an confusing implementation details have been sorted
+ out.
+\stopitem
+
+\startitem
+ The scanner for direction specifications now allows an optional space after
+ the direction is completely parsed.
+\stopitem
+
+\startitem
+ The \type {^^} notation has been extended: after \type {^^^^} four hexadecimal
+ characters are expected and after \type {^^^^^^} six hexadecimal characters
+ have to be given. The original \TEX\ interpretation is still valid for the
+ \type {^^} case but the four and six variants do no backtracking, i.e.\ when
+ they are not followed by the right number of hexadecimal digits they issue an
+ error message. Because \type{^^^} is a normal \TEX\ case, we don't support the
+ odd number of \type {^^^^^} either.
+\stopitem
+
+\startitem
+ Glues {\it immediately after} direction change commands are not legal
+ breakpoints.
+\stopitem
+
+\startitem
+ Several mechanisms that need to be right|-|to|-|left aware have been
+ improved. For instance placement of formula numbers.
+\stopitem
+
+\startitem
+ The page dimension related primitives \type {\pagewidth} and \type
+ {\pageheight} have been promoted to core primitives. The \type {\hoffset} and
+ \type {\voffset} primitives have been fixed.
+\stopitem
+
+\startitem
+ The primitives \type {\charwd}, \type {\charht}, \type {\chardp} and \type
+ {\charit} have been removed as we have the \ETEX\ variants \type
+ {\fontchar*}.
+\stopitem
+
+\startitem
+ The two dimension registers \type {\pagerightoffset} and \type
+ {\pagebottomoffset} are now core primitives.
+\stopitem
+
+\startitem
+ The direction related primitives \type {\pagedir}, \type {\bodydir}, \type
+ {\pardir}, \type {\textdir}, \type {\mathdir} and \type {\boxdir} are now
+ core primitives.
+\stopitem
+
+\startitem
+ The promotion of primitives to core primitives as well as the removed of all
+ others means that the initialization namespace \type {aleph} is gone.
+\stopitem
+
+\stopitemize
+
+The above let's itself summarize as: we took the 32 bit aspects and much of the
+directional mechanisms.
+
+\stopsubsection
+
+\startsubsection[title=Changes from standard \WEBC]
+
+The compilation framework is \WEBC\ and we keep using that but without the
+\PASCAL\ to \CCODE\ step. This framework also provides some common features that
+deal with reading bytes from files and locating files in \TDS. This is what we do
+different:
+
+\startitemize
+
+\startitem
+ There is no mltex support.
+\stopitem
+
+\startitem
+ There is no enctex support.
+\stopitem
+
+\startitem
+ The following encoding related command line switches are silently ignored,
+ even in non|-|\LUA\ mode: \type {-8bit}, \type {-translate-file}, \type
+ {-mltex}, \type {-enc} and \type {-etex}.
+\stopitem
+
+\startitem
+ The \type {\openout} whatsits are not written to the log file.
+\stopitem
+
+\startitem
+ Some of the so|-|called \WEBC\ extensions are hard to set up in non|-|\KPSE\
+ mode because \type {texmf.cnf} is not read: \type {shell-escape} is off (but
+ that is not a problem because of \LUA's \type {os.execute}), and the paranoia
+ checks on \type {openin} and \type {openout} do not happen. However, it is
+ easy for a \LUA\ script to do this itself by overloading \type {io.open}.
+\stopitem
+
+\startitem
+ The \quote{E} option does not do anything useful.
+\stopitem
+
+\stopitemize
+
+\stopsubsection
+
+\stopsection
+
+\startsection[reference=backendprimitives,title=The backend primitives \type {\pdf*}]
+
+In a previous section we mentioned that some \PDFTEX\ primitives were removed and
+others promoted to core \LUATEX\ primitives. That is only part of the story. In
+order to separate the backend specific primitives in de code these commands are
+now replaced by only a few. In traditional \TEX\ we only had the \DVI\ backend
+but now we have two: \DVI\ and \PDF. Additional functionality is implemented as
+\quote {extensions} in \TEX speak. By separating more strickly we are able to
+keep the core (fontend) clean and stable. If for some reason an extra backend
+option is needed, it can be implemented without touching the core. The three
+\PDF\ backend related primitives are
+
+\starttyping
+\pdfextension command [specification]
+\pdfvariable name
+\pdffeedback name
+\stoptyping
+
+An extension triggers further parsing, depending on the command given. A variable is
+a (kind of) register and can be read and written, while a feedback is reporting
+something (as it comes from the backend it's normally a sequence of tokens).
+
+In order for \LUATEX\ to be more than just \TEX\ you need to enable primitives. That
+has already be the case right from the start. If you want the traditional \PDFTEX\
+primitives (for as far their functionality is still around) you now can do this:
+
+\starttyping
+\protected\def\pdfliteral {\pdfextension literal}
+\protected\def\pdfcolorstack {\pdfextension colorstack}
+\protected\def\pdfsetmatrix {\pdfextension setmatrix}
+\protected\def\pdfsave {\pdfextension save\relax}
+\protected\def\pdfrestore {\pdfextension restore\relax}
+\protected\def\pdfobj {\pdfextension obj }
+\protected\def\pdfrefobj {\pdfextension refobj }
+\protected\def\pdfannot {\pdfextension annot }
+\protected\def\pdfstartlink {\pdfextension startlink }
+\protected\def\pdfendlink {\pdfextension endlink\relax}
+\protected\def\pdfoutline {\pdfextension outline }
+\protected\def\pdfdest {\pdfextension dest }
+\protected\def\pdfthread {\pdfextension thread }
+\protected\def\pdfstartthread {\pdfextension startthread }
+\protected\def\pdfendthread {\pdfextension endthread\relax}
+\protected\def\pdfinfo {\pdfextension info }
+\protected\def\pdfcatalog {\pdfextension catalog }
+\protected\def\pdfnames {\pdfextension names }
+\protected\def\pdfincludechars {\pdfextension includechars }
+\protected\def\pdffontattr {\pdfextension fontattr }
+\protected\def\pdfmapfile {\pdfextension mapfile }
+\protected\def\pdfmapline {\pdfextension mapline }
+\protected\def\pdftrailer {\pdfextension trailer }
+\protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+\stoptyping
+
+The introspective primitives can be defined as:
+
+\starttyping
+\def\pdftexversion {\numexpr\pdffeedback version\relax}
+\def\pdftexrevision {\pdffeedback revision}
+\def\pdflastlink {\numexpr\pdffeedback lastlink\relax}
+\def\pdfretval {\numexpr\pdffeedback retval\relax}
+\def\pdflastobj {\numexpr\pdffeedback lastobj\relax}
+\def\pdflastannot {\numexpr\pdffeedback lastannot\relax}
+\def\pdfxformname {\numexpr\pdffeedback xformname\relax}
+\def\pdfcreationdate {\pdffeedback creationdate}
+\def\pdffontname {\numexpr\pdffeedback fontname\relax}
+\def\pdffontobjnum {\numexpr\pdffeedback fontobjnum\relax}
+\def\pdffontsize {\dimexpr\pdffeedback fontsize\relax}
+\def\pdfpageref {\numexpr\pdffeedback pageref\relax}
+\def\pdfcolorstackinit {\pdffeedback colorstackinit}
+\stoptyping
+
+The configuration related registers have become:
+
+\starttyping
+\edef\pdfcompresslevel {\pdfvariable compresslevel}
+\edef\pdfobjcompresslevel {\pdfvariable objcompresslevel}
+\edef\pdfdecimaldigits {\pdfvariable decimaldigits}
+\edef\pdfgamma {\pdfvariable gamma}
+\edef\pdfimageresolution {\pdfvariable imageresolution}
+\edef\pdfimageapplygamma {\pdfvariable imageapplygamma}
+\edef\pdfimagegamma {\pdfvariable imagegamma}
+\edef\pdfimagehicolor {\pdfvariable imagehicolor}
+\edef\pdfimageaddfilename {\pdfvariable imageaddfilename}
+\edef\pdfpkresolution {\pdfvariable pkresolution}
+\edef\pdfpkfixeddpi {\pdfvariable pkfixeddpi}
+\edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts}
+\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
+\edef\pdfignoreunknownimages {\pdfvariable ignoreunknownimages}
+\edef\pdfgentounicode {\pdfvariable gentounicode}
+\edef\pdfpagebox {\pdfvariable pagebox}
+\edef\pdfminorversion {\pdfvariable minorversion}
+\edef\pdfuniqueresname {\pdfvariable uniqueresname}
+
+\edef\pdfhorigin {\pdfvariable horigin}
+\edef\pdfvorigin {\pdfvariable vorigin}
+\edef\pdflinkmargin {\pdfvariable linkmargin}
+\edef\pdfdestmargin {\pdfvariable destmargin}
+\edef\pdfthreadmargin {\pdfvariable threadmargin}
+\edef\pdfxformmargin {\pdfvariable xformmargin}
+
+\edef\pdfpagesattr {\pdfvariable pagesattr}
+\edef\pdfpageattr {\pdfvariable pageattr}
+\edef\pdfpageresources {\pdfvariable pageresources}
+\edef\pdfxformattr {\pdfvariable xformattr}
+\edef\pdfxformresources {\pdfvariable xformresources}
+\edef\pdfpkmode {\pdfvariable pkmode}
+
+\edef\pdfsuppressoptionalinfo {\pdfvariable suppressoptionalinfo }
+\edef\pdftrailerid {\pdfvariable trailerid }
+\stoptyping
+
+The variables are internal ones, so they are anonymous. When you ask for the
+meaning of a few previously defined ones:
+
+\starttyping
+\meaning\pdfhorigin
+\meaning\pdfcompresslevel
+\meaning\pdfpageattr
+\stoptyping
+
+you will get:
+
+\starttyping
+macro:->[internal backend dimension]
+macro:->[internal backend integer]
+macro:->[internal backend tokenlist]
+\stoptyping
+
+The \type {\edef} can also be an \type {\def} but it's a bit more efficient
+to expand the lookup related register beforehand. After that you can adapt
+the defaults; these are:
+
+\starttyping
+\pdfcompresslevel 9
+\pdfobjcompresslevel 1 % used: (0,9)
+\pdfdecimaldigits 4 % used: (3,6)
+\pdfgamma 1000
+\pdfimageresolution 71
+\pdfimageapplygamma 0
+\pdfimagegamma 2200
+\pdfimagehicolor 1
+\pdfimageaddfilename 1
+\pdfpkresolution 72
+\pdfpkfixeddpi 0
+\pdfinclusioncopyfonts 0
+\pdfinclusionerrorlevel 0
+\pdfignoreunknownimages 0
+\pdfgentounicode 0
+\pdfpagebox 0
+\pdfminorversion 4
+\pdfuniqueresname 0
+
+\pdfhorigin 1in
+\pdfvorigin 1in
+\pdflinkmargin 0pt
+\pdfdestmargin 0pt
+\pdfthreadmargin 0pt
+\pdfxformmargin 0pt
+\stoptyping
+
+If you also want some backward compatibility, you can add:
+
+\starttyping
+\let\pdfpagewidth \pagewidth
+\let\pdfpageheight \pageheight
+
+\let\pdfadjustspacing \adjustspacing
+\let\pdfprotrudechars \protrudechars
+\let\pdfnoligatures \ignoreligaturesinfont
+\let\pdffontexpand \expandglyphsinfont
+\let\pdfcopyfont \copyfont
+
+\let\pdfxform \saveboxresource
+\let\pdflastxform \lastsavedboxresourceindex
+\let\pdfrefxform \useboxresource
+
+\let\pdfximage \saveimageresource
+\let\pdflastximage \lastsavedimageresourceindex
+\let\pdflastximagepages\lastsavedimageresourcepages
+\let\pdfrefximage \useimageresource
+
+\let\pdfsavepos \savepos
+\let\pdflastxpos \lastxpos
+\let\pdflastypos \lastypos
+
+\let\pdfoutput \outputmode
+\let\pdfdraftmode \draftmode
+
+\let\pdfpxdimen \pxdimen
+
+\let\pdfinsertht \insertht
+
+\let\pdfnormaldeviate \normaldeviate
+\let\pdfuniformdeviate \uniformdeviate
+\let\pdfsetrandomseed \setrandomseed
+\let\pdfrandomseed \randomseed
+
+\let\pdfprimitive \primitive
+\let\ifpdfprimitive \ifprimitive
+
+\let\ifpdfabsnum \ifabsnum
+\let\ifpdfabsdim \ifabsdim
+\stoptyping
+
+And even:
+
+\starttyping
+\newdimen\pdfeachlineheight
+\newdimen\pdfeachlinedepth
+\newdimen\pdflastlinedepth
+\newdimen\pdffirstlineheight
+\newdimen\pdfignoreddimen
+\stoptyping
+
+The backend is derived from \PDFTEX\ so the same syntax applies. However, the
+\type {outline} command accepts a \type {objnum} followed by a number. No
+checking takes place so when this is used it had better be a valid (flushed)
+object.
+
+In order to be (more or less) compatible with \PDFTEX\ we also support the
+option to suppress some info:
+
+\starttyping
+\pdfvariable suppressoptionalinfo \numexpr
+ 0
+ + 1 % PTEX.FullBanner
+ + 2 % PTEX.FileName
+ + 4 % PTEX.PageNumber
+ + 8 % PTEX.InfoDict
+ + 16 % Creator
+ + 32 % CreationDate
+ + 64 % ModDate
+ + 128 % Producer
+ + 256 % Trapped
+ + 512 % ID
+\relax
+\stoptyping
+
+In addition you can overload the trailer id, but we don't do any checking on
+validity, so you have to pass a valid array. The following is like the ones
+normally generated by the engine:
+
+\starttyping
+\pdfvariable trailerid {[
+ <FA052949448907805BA83C1E78896398>
+ <FA052949448907805BA83C1E78896398>
+]}
+\stoptyping
+
+So, you even need to include the brackets!
+
+Although we started from a merge of \PDFTEX\ and \ALEPH, by now the code base as
+well as functionality has diverted from those parents. Here we show the options
+that can be passed to the extensions.
+
+\starttexsyntax
+\pdfextension literal
+ [ direct | page ] { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension dest
+ num integer | name { tokens }!crlf
+ [ fitbh | fitbv | fitb | fith| fitv | fit |
+ fitr <rule spec> | xyz [ zoom <integer> ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension annot
+ reserveobjnum | useobjnum <integer>
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension save
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension restore
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension setmatrix
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+[ \immediate ] \pdfextension obj
+ reserveobjnum
+\stoptexsyntax
+
+\starttexsyntax
+[ \immediate ] \pdfextension obj
+ [ useobjnum <integer> ]
+ [ uncompressed ]
+ [ stream [ attr { tokens } ] ]
+ [ file ]
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension refobj
+ <integer>
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension colorstack
+ <integer>
+ set { tokens } | push { tokens } | pop | current
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension startlink
+ [ attr { tokens } ]
+ user { tokens } | goto | thread
+ [ file { tokens } ]
+ [ page <integer> { tokens } | name { tokens } | num integer ]
+ [ newwindow | nonewwindow ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension endlink
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension startthread
+ num <integer> | name { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension endthread
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension thread
+ num <integer> | name { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension outline
+ [ attr { tokens } ]
+ [ useobjnum <integer> ]
+ [ count <integer> ]
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension glyphtounicode
+ { tokens }
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension catalog
+ { tokens }
+ [ openaction
+ user { tokens } | goto | thread
+ [ file { tokens } ]
+ [ page <integer> { tokens } | name { tokens } | num <integer> ]
+ [ newwindow | nonewwindow ] ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension fontattr
+ <integer>
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension mapfile
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension mapline
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension includechars
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension info
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension names
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension trailer
+ {tokens}
+\stoptexsyntax
+
+\stopsection
+
+\startsection[title=Directions]
+
+The directional model in \LUATEX\ is inherited from \OMEGA|/|\ALEPH\ but we tried
+to improve it a bit. At some point we played with recovery of modes but that was
+disabled later on when we found that it interfered with nested directions. That
+itself had as side effect that the node list was no longer balanced with respect
+to directional nodes which in turn can give side effects when a series of dir
+changes happens without grouping.
+
+The current (0.97 onward) approach is that we again make the list balanced but
+try to avoid some side effects. What happens is quite intuitive if we forget
+about spaces (turned into glue) but even there what happens makes sense if you
+look at it in detail. However that logic makes in|-|group switching kind of
+useless when no proper nested grouping is used: switching from right to left
+several times nested, results in spacing ending up after each other due to nested
+mirroring. Of course a sane macro package will manage this for the user but here
+we are discussing the low level dir injection.
+
+This is what happens:
+
+\starttyping
+\textdir TRT nur {\textdir TLT run \textdir TRT NUR} nur
+\stoptyping
+
+This becomes stepwise:
+
+\startnarrower
+\starttyping
+injected: [+TRT]nur {[+TLT]run [+TRT]NUR} nur
+balanced: [+TRT]nur {[+TLT]run [-TLT][+TRT]NUR[-TRT]} nur[-TRT]
+result : run {RUNrun } run
+\stoptyping
+\stopnarrower
+
+And this:
+
+\starttyping
+\textdir TRT nur {nur \textdir TLT run \textdir TRT NUR} nur
+\stoptyping
+
+becomes:
+
+\startnarrower
+\starttyping
+injected: [+TRT]nur {nur [+TLT]run [+TRT]NUR} nur
+balanced: [+TRT]nur {nur [+TLT]run [-TLT][+TRT]NUR[-TRT]} nur[-TRT]
+result : run {run RUNrun } run
+\stoptyping
+\stopnarrower
+
+Now, in the following examples watch where we put the braces:
+
+\startbuffer
+\textdir TRT nur {{\textdir TLT run} {\textdir TRT NUR}} nur
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\startnarrower
+\getbuffer
+\stopnarrower
+
+Compare this to:
+
+\startbuffer
+\textdir TRT nur {{\textdir TLT run }{\textdir TRT NUR}} nur
+\stopbuffer
+
+\typebuffer
+
+Which renders as:
+
+\startnarrower
+\getbuffer
+\stopnarrower
+
+So how do we deal with the next?
+
+\startbuffer
+\def\ltr{\textdir TLT\relax}
+\def\rtl{\textdir TRT\relax}
+
+run {\rtl nur {\ltr run \rtl NUR \ltr run \rtl NUR} nur}
+run {\ltr run {\rtl nur \ltr RUN \rtl nur \ltr RUN} run}
+\stopbuffer
+
+\typebuffer
+
+It gets typeset as:
+
+\startnarrower
+\startlines
+\getbuffer
+\stoplines
+\stopnarrower
+
+We could define the two helpers to look back, pick up a skip, remove it and
+inject it after the dir node. But that way we loose the subtype information that
+for some applications can be handy to be kept as|-|is. This is why we now have a
+variant of \type {\textdir} which injects the balanced node before the skip.
+Instead of the previous definition we can use:
+
+\startbuffer[def]
+\def\ltr{\linedir TLT\relax}
+\def\rtl{\linedir TRT\relax}
+\stopbuffer
+
+\typebuffer[def]
+
+and this time:
+
+\startbuffer[txt]
+run {\rtl nur {\ltr run \rtl NUR \ltr run \rtl NUR} nur}
+run {\ltr run {\rtl nur \ltr RUN \rtl nur \ltr RUN} run}
+\stopbuffer
+
+\typebuffer[txt]
+
+comes out as a properly spaced:
+
+\startnarrower
+\startlines
+\getbuffer[def,txt]
+\stoplines
+\stopnarrower
+
+Anything more complex that this, like combination of skips and penalties, or
+kerns, should be handled in the input or macro package because there is no way we
+can predict the expected behaviour. In fact, the \type {\linedir} is just a
+convenience extra which could also have been implemented using node list parsing.
+
+Another adaptation to the \ALEPH\ directional model is control over shapes driven
+by \type {\hangindent} and \type {\parshape}. This is controlled by a new parameter
+\type {\shapemode}:
+
+\starttabulate[|cTB|c|]
+\NC \NC \bf \type {\hangindent} \NC \bf \type {\parshape} \NC \NR
+\NC 0 \NC normal \NC normal \NC \NR
+\NC 1 \NC mirrored \NC normal \NC \NR
+\NC 2 \NC normal \NC mirrored \NC \NR
+\NC 3 \NC mirrored \NC mirrored \NC \NR
+\stoptabulate
+
+The value is reset to zero (like \type {\hangindent} and \type {\parshape})
+after the paragraph is done with. You can use negative values to preven t
+this.
+
+In \in {figure} [fig:shapemode] a few examples are given.
+
+\startplacefigure[reference=fig:shapemode,title={The effect of \type {shapemode}.}]
+ \startcombination[2*3]
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TLT \textdir TLT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TLT: hangindent}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TLT \textdir TLT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TLT: parshape}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TRT \textdir TRT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TRT: hangindent mode 0}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TRT \textdir TRT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TRT: parshape mode 0}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \shapemode=3
+ \pardir TRT \textdir TRT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TRT: hangindent mode 1 & 3}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \shapemode=3
+ \pardir TRT \textdir TRT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TRT: parshape mode 2 & 3}
+ \stopcombination
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Implementation notes]
+
+\startsubsection[title=Memory allocation]
+
+The single internal memory heap that traditional \TEX\ used for tokens and nodes
+is split into two separate arrays. Each of these will grow dynamically when
+needed.
+
+The \type {texmf.cnf} settings related to main memory are no longer used (these
+are: \type {main_memory}, \type {mem_bot}, \type {extra_mem_top} and \type
+{extra_mem_bot}). \quote {Out of main memory} errors can still occur, but the
+limiting factor is now the amount of RAM in your system, not a predefined limit.
+
+Also, the memory (de)allocation routines for nodes are completely rewritten. The
+relevant code now lives in the C file \type {texnode.c}, and basically uses a
+dozen or so \quote {avail} lists instead of a doubly|-|linked model. An extra
+function layer is added so that the code can ask for nodes by type instead of
+directly requisitioning a certain amount of memory words.
+
+Because of the split into two arrays and the resulting differences in the data
+structures, some of the macros have been duplicated. For instance, there are now
+\type {vlink} and \type {vinfo} as well as \type {token_link} and \type
+{token_info}. All access to the variable memory array is now hidden behind a
+macro called \type {vmem}. We mention this because using the \TEX book as
+reference is still quite valid but not for memory related details. Another
+significate detail is that we have double linked node lists and that some nodes
+carry more data.
+
+The implementation of the growth of two arrays (via reallocation) introduces a
+potential pitfall: the memory arrays should never be used as the left hand side
+of a statement that can modify the array in question. Details like this are
+of no concern to users.
+
+The input line buffer and pool size are now also reallocated when needed, and the
+\type {texmf.cnf} settings \type {buf_size} and \type {pool_size} are silently
+ignored.
+
+\stopsubsection
+
+\startsubsection[title=Sparse arrays]
+
+The \type {\mathcode}, \type {\delcode}, \type {\catcode}, \type {\sfcode}, \type
+{\lccode} and \type {\uccode} (and the new \type {\hjcode}) tables are now sparse
+arrays that are implemented in~\CCODE. They are no longer part of the \TEX\
+\quote {equivalence table} and because each had 1.1 million entries with a few
+memory words each, this makes a major difference in memory usage.
+
+The \type {\catcode}, \type {\sfcode}, \type {\lccode}, \type {\uccode} and \type
+{\hjcode} assignments do not yet show up when using the \ETEX\ tracing routines
+\type {\tracingassigns} and \type {\tracingrestores}.
+
+A side|-|effect of the current implementation is that \type {\global} is now more
+expensive in terms of processing than non|-|global assignments.
+
+The glyph ids within a font are also managed by means of a sparse array as glyph
+ids can go up to index $2^{21}-1$.
+
+\stopsubsection
+
+\startsubsection[title=Simple single-character csnames]
+
+Single|-|character commands are no longer treated specially in the internals,
+they are stored in the hash just like the multiletter csnames.
+
+The code that displays control sequences explicitly checks if the length is one
+when it has to decide whether or not to add a trailing space.
+
+Active characters are internally implemented as a special type of multi|-|letter
+control sequences that uses a prefix that is otherwise impossible to obtain.
+
+\stopsubsection
+
+\startsubsection[title=Compressed format]
+
+The format is passed through \type {zlib}, allowing it to shrink to roughly half
+of the size it would have had in uncompressed form. This takes a bit more \CPU\
+cycles but much less disk \IO, so it should still be faster.
+
+\stopsubsection
+
+\startsubsection[title=Binary file reading]
+
+All of the internal code is changed in such a way that if one of the \type
+{read_xxx_file} callbacks is not set, then the file is read by a \CCODE\ function
+using basically the same convention as the callback: a single read into a buffer
+big enough to hold the entire file contents. While this uses more memory than the
+previous code (that mostly used \type {getc} calls), it can be quite a bit faster
+(depending on your \IO\ subsystem).
+
+\stopsubsection
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
new file mode 100644
index 000000000..8d32ab287
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
@@ -0,0 +1,1915 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-nodes
+
+\startchapter[reference=nodes,title={Nodes}]
+
+\section{\LUA\ node representation}
+
+\TEX's nodes are represented in \LUA\ as userdata object with a variable set of
+fields. In the following syntax tables, such the type of such a userdata object
+is represented as \syntax {<node>}.
+
+The current return value of \type {node.types()} is:
+\startluacode
+ for id, name in table.sortedhash(node.types()) do
+ context.type(name)
+ context(" (%s), ",id)
+ end
+ context.removeunwantedspaces()
+ context.removepunctuation()
+\stopluacode
+. % period
+
+The \type {\lastnodetype} primitive is \ETEX\ compliant. The valid range is still
+$[-1,15]$ and glyph nodes (formerly known as char nodes) have number~0 while
+ligature nodes are mapped to~7. That way macro packages can use the same symbolic
+names as in traditional \ETEX. Keep in mind that these \ETEX\ node numbers are
+different from the real internal ones and that there are more \ETEX\ node types
+than~15.
+
+You can ask for a list of fields with the \type {node.fields} (which takes an id)
+and for valid subtypes with \type {node.subtypes} (which takes a string because
+eventually we might support more used enumerations).
+
+\subsection{Attributes}
+
+The newly introduced attribute registers are non|-|trivial, because the value
+that is attached to a node is essentially a sparse array of key|-|value pairs. It
+is generally easiest to deal with attribute lists and attributes by using the
+dedicated functions in the \type {node} library, but for completeness, here is
+the low|-|level interface.
+
+\subsubsection{attribute_list nodes}
+
+An \type {attribute_list} item is used as a head pointer for a list of attribute
+items. It has only one user-visible field:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC pointer to the first attribute \NC \NR
+\stoptabulate
+
+\subsubsection{attribute nodes}
+
+A normal node's attribute field will point to an item of type \type
+{attribute_list}, and the \type {next} field in that item will point to the first
+defined \quote {attribute} item, whose \type {next} will point to the second
+\quote {attribute} item, etc.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC pointer to the next attribute \NC \NR
+\NC number \NC number \NC the attribute type id \NC \NR
+\NC value \NC number \NC the attribute value \NC \NR
+\stoptabulate
+
+As mentioned it's better to use the official helpers rather than edit these
+fields directly. For instance the \type {prev} field is used for other purposes
+and there is no double linked list.
+
+\subsection{Main text nodes}
+
+These are the nodes that comprise actual typesetting commands. A few fields are
+present in all nodes regardless of their type, these are:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC the next node in a list, or nil \NC \NR
+\NC id \NC number \NC the node's type (\type {id}) number \NC \NR
+\NC subtype \NC number \NC the node \type {subtype} identifier \NC \NR
+\stoptabulate
+
+The \type {subtype} is sometimes just a stub entry. Not all nodes actually use
+the \type {subtype}, but this way you can be sure that all nodes accept it as a
+valid field name, and that is often handy in node list traversal. In the
+following tables \type {next} and \type {id} are not explicitly mentioned.
+
+Besides these three fields, almost all nodes also have an \type {attr} field, and
+there is a also a field called \type {prev}. That last field is always present,
+but only initialized on explicit request: when the function \type {node.slide()}
+is called, it will set up the \type {prev} fields to be a backwards pointer in
+the argument node list. By now most of \TEX's node processing makes sure that the
+\type {prev} nodes are valid but there can be exceptions, especially when the
+internal magic uses a leading \type {temp} nodes to temporarily store a state.
+
+\subsubsection{hlist nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{list} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width of the box \NC \NR
+\NC height \NC number \NC the height of the box \NC \NR
+\NC depth \NC number \NC the depth of the box \NC \NR
+\NC shift \NC number \NC a displacement perpendicular to the character progression direction \NC \NR
+\NC glue_order \NC number \NC a number in the range $[0,4]$, indicating the glue order \NC \NR
+\NC glue_set \NC number \NC the calculated glue ratio \NC \NR
+\NC glue_sign \NC number \NC 0 = \type {normal}, 1 = \type {stretching}, 2 = \type {shrinking} \NC \NR
+\NC head/list \NC node \NC the first node of the body of this list \NC \NR
+\NC dir \NC string \NC the direction of this box, see~\in[dirnodes] \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may result.
+
+Note: the field name \type {head} and \type {list} are both valid. Sometimes it
+makes more sense to refer to a list by \type {head}, sometimes \type {list} makes
+more sense.
+
+\subsubsection{vlist nodes}
+
+This node is similar to \type {hlist}, except that \quote {shift} is a displacement
+perpendicular to the line progression direction, and \quote {subtype} only has
+the values 0, 4, and~5.
+
+\subsubsection{rule nodes}
+
+Contrary to traditional \TEX, \LUATEX\ has more subtypes because we also use
+rules to store reuseable objects and images. User nodes are invisible and can be
+intercepted by a callback.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{rule} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width of the rule where the special value $-1073741824$ is used for \quote {running} glue dimensions \NC \NR
+\NC height \NC number \NC the height of the rule (can be negative) \NC \NR
+\NC depth \NC number \NC the depth of the rule (can be negative) \NC \NR
+\NC dir \NC string \NC the direction of this rule, see~\in[dirnodes] \NC \NR
+\NC index \NC number \NC an optional index that can be referred to \NC \NR
+\stoptabulate
+
+\subsubsection{ins nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC the insertion class \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC cost \NC number \NC the penalty associated with this insert \NC \NR
+\NC height \NC number \NC height of the insert \NC \NR
+\NC depth \NC number \NC depth of the insert \NC \NR
+\NC head/list \NC node \NC the first node of the body of this insert \NC \NR
+\stoptabulate
+
+There is a set of extra fields that concern the associated glue: \type {width},
+\type {stretch}, \type {stretch_order}, \type {shrink} and \type {shrink_order}.
+These are all numbers.
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result. You can use
+\type {list} instead (often in functions you want to use local variable swith similar
+names and both names are equally sensible).
+
+\subsubsection{mark nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC unused \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC class \NC number \NC the mark class \NC \NR
+\NC mark \NC table \NC a table representing a token list \NC \NR
+\stoptabulate
+
+\subsubsection{adjust nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{adjust} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC head/list \NC node \NC adjusted material \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result.
+
+\subsubsection{disc nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{disc} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC pre \NC node \NC pointer to the pre|-|break text \NC \NR
+\NC post \NC node \NC pointer to the post|-|break text \NC \NR
+\NC replace \NC node \NC pointer to the no|-|break text \NC \NR
+\NC penalty \NC number \NC the penalty associated with the break, normally \type {\hyphenpenalty} or \type {\exhyphenpenalty} \NC \NR
+\stoptabulate
+
+The subtype numbers~4 and~5 belong to the \quote {of-f-ice} explanation given
+elsewhere.
+
+These disc nodes are kind of special as at some point they also keep information
+about breakpoints and nested ligatures. The \type {pre}, \type {post} and \type
+{replace} fields at the \LUA\ end are in fact indirectly accessed and have a
+\type {prev} pointer that is not \type {nil}. This means that when you mess
+around with the head of these (three) lists, you also need to reassign them
+because that will restore the proper \type {prev} pointer, so:
+
+\starttyping
+pre = d.pre
+-- change the list starting with pre
+d.pre = pre
+\stoptyping
+
+Otherwise you can end up with an invalid internal perception of reality and
+\LUATEX\ might even decide to crash on you. It also means that running forward
+over for instance \type {pre} is ok but backward you need to stop at \type {pre}.
+And you definitely must not mess with the node that \type {prev} points to, if
+only because it is not really an node but part of the disc data structure (so
+freeing it again might crash \LUATEX).
+
+\subsubsection{math nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{math} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC surround \NC number \NC width of the \type {\mathsurround} kern \NC \NR
+\stoptabulate
+
+There is a set of extra fields that concern the associated glue: \type {width},
+\type {stretch}, \type {stretch_order}, \type {shrink} and \type {shrink_order}.
+These are all numbers.
+
+\subsubsection{glue nodes}
+
+Skips are about the only type of data objects in traditional \TEX\ that are not a
+simple value. The structure that represents the glue components of a skip is
+called a \type {glue_spec}, and it has the following accessible fields:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf explanation \NC \NR
+\NC width \NC number \NC the horizontal or vertical displacement \NC \NR
+\NC stretch \NC number \NC extra (positive) displacement or stretch amount \NC \NR
+\NC stretch_order \NC number \NC factor applied to stretch amount \NC \NR
+\NC shrink \NC number \NC extra (negative) displacement or shrink amount\NC \NR
+\NC shrink_order \NC number \NC factor applied to shrink amount \NC \NR
+\stoptabulate
+
+The effective width of some glue subtypes depends on the stretch or shrink needed
+to make the encapsulating box fit its dimensions. For instance, in a paragraph
+lines normally have glue representing spaces and these stretch of shrink to make
+the content fit in the available space. The \type {effective_glue} function that
+takes a glue node and a parent (hlist or vlist) returns the effective width of
+that glue item.
+
+A gluespec node is a special kind of node that is used for storing a set of glue
+values in registers. Originally they were also used to store properties of glue
+nodes (using a system of reference counts) but we now keep these properties in
+the glue nodes themselves, which gives a cleaner interface to \LUA.
+
+The indirect spec approach was in fact an optimization in the original \TEX\
+code. First of all it can save quite some memory because all these spaces that
+become glue now share the same specification (only the reference count is
+incremented), and zero testing is also a bit faster because only the pointer has
+to be checked (this is no longer true for engines that implement for instance
+protrusion where we really need to ensure that zero is zero when we test for
+bounds). Another side effect is that glue specifications are read|-|only, so in
+the end copies need to be made when they are used from \LUA\ (each assignment to
+a field can result in a new copy). So in the end the advantages of sharing are
+not that high (and nowadays memory is less an issue, also given that a glue node
+is only a few memory words larger than a spec).
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{glue} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC leader \NC node \NC pointer to a box or rule for leaders \NC \NR
+\stoptabulate
+
+In addition there are the \type {width}, \type {stretch} \type {stretch_order},
+\type {shrink}, and \type {shrink_order} fields. Note that we use the key \type
+{width} in both horizontal and vertical glue. This suits the \TEX\ internals well
+so we decided to stick to that naming.
+
+A regular word space also results in a \type {spaceskip} subtype (this used to be
+a \type {userskip} with subtype zero).
+
+\subsubsection{kern nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{kern} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC kern \NC number \NC fixed horizontal or vertical advance \NC \NR
+\stoptabulate
+
+\subsubsection{penalty nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC not used \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC penalty \NC number \NC the penalty value \NC \NR
+\stoptabulate
+
+\subsubsection[glyphnodes]{glyph nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \rmbf type \NC \rmbf explanation \NC \NR
+\NC subtype \NC number \NC bitfield \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC char \NC number \NC the chatacter index in the font \NC \NR
+\NC font \NC number \NC the font identifier \NC \NR
+\NC lang \NC number \NC the language identifier \NC \NR
+\NC left \NC number \NC the frozen \type {\lefthyphenmnin} value \NC \NR
+\NC right \NC number \NC the frozen \type {\righthyphenmnin} value \NC \NR
+\NC uchyph \NC boolean \NC the frozen \type {\uchyph} value \NC \NR
+\NC components \NC node \NC pointer to ligature components \NC \NR
+\NC xoffset \NC number \NC a virtual displacement in horizontal direction \NC \NR
+\NC yoffset \NC number \NC a virtual displacement in vertical direction \NC \NR
+\NC xadvance \NC number \NC an additional advance after the glyph (experimental) \NC \NR
+\NC width \NC number \NC the (original) width of the character \NC \NR
+\NC height \NC number \NC the (original) height of the character\NC \NR
+\NC depth \NC number \NC the (original) depth of the character\NC \NR
+\NC expansion_factor \NC number \NC the to be applied expansion_factor \NC \NR
+\stoptabulate
+
+The \type {width}, \type {height} and \type {depth} values are read|-|only. The
+\type {expansion_factor} is assigned in the parbuilder and used in the backend.
+
+A warning: never assign a node list to the components field unless you are sure
+its internal link structure is correct, otherwise an error may be result. Valid
+bits for the \type {subtype} field are:
+
+\starttabulate[|c|l|]
+\NC \rmbf bit \NC \bf meaning \NC \NR
+\NC 0 \NC character \NC \NR
+\NC 1 \NC ligature \NC \NR
+\NC 2 \NC ghost \NC \NR
+\NC 3 \NC left \NC \NR
+\NC 4 \NC right \NC \NR
+\stoptabulate
+
+See \in {section} [charsandglyphs] for a detailed description of the \type
+{subtype} field.
+
+The \type {expansion_factor} has been introduced as part of the separation
+between font- and backend. It is the result of extensive experiments with a more
+efficient implementation of expansion. Early versions of \LUATEX\ already
+replaced multiple instances of fonts in the backend by scaling but contrary to
+\PDFTEX\ in \LUATEX\ we now also got rid of font copies in the frontend and
+replaced them by expansion factors that travel with glyph nodes. Apart from a
+cleaner approach this is also a step towards a better separation between front-
+and backend.
+
+The \type {is_char} function checks if a node is a glyph node with a subtype still
+less than 256. This function can be used to determine if applying font logic to a
+glyph node makes sense. The value \type {nil} gets returned when the node is not
+a glyph, a character number is returned if the node is still tagged as character
+and \type {false} gets returned otherwise. When nil is returned, the id is also
+returned. The \type {is_glyph} variant doesn't check for a subtype being less
+than 256, so it returns either the character value or nil plus the id. These
+helpers are not always faster than separate calls but they sometimes permit
+making more readable tests.
+
+\subsubsection{boundary nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{boundary} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC value \NC number \NC values 0--255 are reserved \NC \NR
+\stoptabulate
+
+This node relates to the \type {\noboundary}, \type {\boundary}, \type
+{\protrusionboundary} and \type {\wordboundary} primitives.
+
+\subsubsection{local_par nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC pen_inter \NC number \NC local interline penalty (from \type {\localinterlinepenalty}) \NC \NR
+\NC pen_broken \NC number \NC local broken penalty (from \type {\localbrokenpenalty}) \NC \NR
+\NC dir \NC string \NC the direction of this par. see~\in [dirnodes] \NC \NR
+\NC box_left \NC node \NC the \type {\localleftbox} \NC \NR
+\NC box_left_width \NC number \NC width of the \type {\localleftbox} \NC \NR
+\NC box_right \NC node \NC the \type {\localrightbox} \NC \NR
+\NC box_right_width \NC number \NC width of the \type {\localrightbox} \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {box_left} or \type {box_right}
+field unless you are sure its internal link structure is correct, otherwise an
+error may be result.
+
+\subsubsection[dirnodes]{dir nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC dir \NC string \NC the direction (but see below) \NC \NR
+\NC level \NC number \NC nesting level of this direction whatsit \NC \NR
+\stoptabulate
+
+A note on \type {dir} strings. Direction specifiers are three|-|letter
+combinations of \type {T}, \type {B}, \type {R}, and \type {L}.
+
+These are built up out of three separate items:
+
+\startitemize[packed]
+\startitem
+ the first is the direction of the \quote{top} of paragraphs.
+\stopitem
+\startitem
+ the second is the direction of the \quote{start} of lines.
+\stopitem
+\startitem
+ the third is the direction of the \quote{top} of glyphs.
+\stopitem
+\stopitemize
+
+However, only four combinations are accepted: \type {TLT}, \type {TRT}, \type
+{RTT}, and \type {LTL}.
+
+Inside actual \type {dir} whatsit nodes, the representation of \type {dir} is not
+a three-letter but a four|-|letter combination. The first character in this case
+is always either \type {+} or \type {-}, indicating whether the value is pushed
+or popped from the direction stack.
+
+\subsubsection{margin_kern nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{margin_kern} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the advance of the kern \NC \NR
+\NC glyph \NC node \NC the glyph to be used \NC \NR
+\stoptabulate
+
+\subsection{Math nodes}
+
+These are the so||called \quote {noad}s and the nodes that are specifically
+associated with math processing. Most of these nodes contain subnodes so that the
+list of possible fields is actually quite small. First, the subnodes:
+
+\subsubsection{Math kernel subnodes}
+
+Many object fields in math mode are either simple characters in a specific family
+or math lists or node lists. There are four associated subnodes that represent
+these cases (in the following node descriptions these are indicated by the word
+\type {<kernel>}).
+
+The \type {next} and \type {prev} fields for these subnodes are unused.
+
+\subsubsubsection{math_char and math_text_char subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC char \NC number \NC the character index \NC \NR
+\NC fam \NC number \NC the family number \NC \NR
+\stoptabulate
+
+The \type {math_char} is the simplest subnode field, it contains the character
+and family for a single glyph object. The \type {math_text_char} is a special
+case that you will not normally encounter, it arises temporarily during math list
+conversion (its sole function is to suppress a following italic correction).
+
+\subsubsubsection{sub_box and sub_mlist subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC head/list \NC node \NC list of nodes \NC \NR
+\stoptabulate
+
+These two subnode types are used for subsidiary list items. For \type {sub_box},
+the \type {head} points to a \quote {normal} vbox or hbox. For \type {sub_mlist},
+the \type {head} points to a math list that is yet to be converted.
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result.
+
+\subsubsection{Math delimiter subnode}
+
+There is a fifth subnode type that is used exclusively for delimiter fields. As
+before, the \type {next} and \type {prev} fields are unused.
+
+\subsubsubsection{delim subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC small_char \NC number \NC character index of base character \NC \NR
+\NC small_fam \NC number \NC family number of base character \NC \NR
+\NC large_char \NC number \NC character index of next larger character \NC \NR
+\NC large_fam \NC number \NC family number of next larger character \NC \NR
+\stoptabulate
+
+The fields \type {large_char} and \type {large_fam} can be zero, in that case the
+font that is sed for the \type {small_fam} is expected to provide the large
+version as an extension to the \type {small_char}.
+
+\subsubsection{Math core nodes}
+
+First, there are the objects (the \TEX book calls then \quote {atoms}) that are
+associated with the simple math objects: ord, op, bin, rel, open, close, punct,
+inner, over, under, vcent. These all have the same fields, and they are combined
+into a single node type with separate subtypes for differentiation.
+
+\subsubsubsection{simple nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{noad} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\stoptabulate
+
+\subsubsubsection{accent nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{accent} \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\NC accent \NC kernel node \NC top accent \NC \NR
+\NC bot_accent \NC kernel node \NC bottom accent \NC \NR
+\stoptabulate
+
+\subsubsubsection{style nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC style \NC string \NC contains the style \NC \NR
+\stoptabulate
+
+There are eight possibilities for the string value: one of \quote {display},
+\quote {text}, \quote {script}, or \quote {scriptscript}. Each of these can have
+a trailing \type {'} to signify \quote {cramped} styles.
+
+\subsubsubsection{choice nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC display \NC node \NC list of display size alternatives \NC \NR
+\NC text \NC node \NC list of text size alternatives \NC \NR
+\NC script \NC node \NC list of scriptsize alternatives \NC \NR
+\NC scriptscript \NC node \NC list of scriptscriptsize alternatives \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the display, text, script, or
+scriptscript field unless you are sure its internal link structure is
+correct, otherwise an error may be result.
+
+\subsubsubsection{radical nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{radical} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\NC left \NC delimiter node \NC \NC \NR
+\NC degree \NC kernel node \NC only set by \type {\Uroot} \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the nucleus, sub, sup, left, or degree
+field unless you are sure its internal link structure is correct, otherwise an
+error may be result.
+
+\subsubsubsection{fraction nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC (optional) width of the fraction \NC \NR
+\NC num \NC kernel node \NC numerator \NC \NR
+\NC denom \NC kernel node \NC denominator \NC \NR
+\NC left \NC delimiter node \NC left side symbol \NC \NR
+\NC right \NC delimiter node \NC right side symbol\NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the num, or denom field unless you are
+sure its internal link structure is correct, otherwise an error may be result.
+
+\subsubsubsection{fence nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{fence} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC delim \NC delimiter node \NC delimiter specification \NC \NR
+\stoptabulate
+
+\subsection{whatsit nodes}
+
+Whatsit nodes come in many subtypes that you can ask for by running
+\type {node.whatsits()}:
+\startluacode
+ for id, name in table.sortedpairs(node.whatsits()) do
+ context.type(name)
+ context(" (%s), ",id)
+ end
+ context.removeunwantedspaces()
+ context.removepunctuation()
+\stopluacode
+. % period
+
+\subsubsection{front|-|end whatsits}
+
+\subsubsubsection{open whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\NC name \NC string \NC file name \NC \NR
+\NC ext \NC string \NC file extension \NC \NR
+\NC area \NC string \NC file area (this may become obsolete) \NC \NR
+\stoptabulate
+
+\subsubsubsection{write whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\NC data \NC table \NC a table representing the token list to be written \NC \NR
+\stoptabulate
+
+\subsubsubsection{close whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\stoptabulate
+
+\subsubsubsection{user_defined whatsits}
+
+User|-|defined whatsit nodes can only be created and handled from \LUA\ code. In
+effect, they are an extension to the extension mechanism. The \LUATEX\ engine
+will simply step over such whatsits without ever looking at the contents.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC user_id \NC number \NC id number \NC \NR
+\NC type \NC number \NC type of the value \NC \NR
+\NC value \NC number \NC a \LUA\ number \NC \NR
+\NC \NC node \NC a node list \NC \NR
+\NC \NC string \NC a \LUA\ string \NC \NR
+\NC \NC table \NC a \LUA\ table \NC \NR
+\stoptabulate
+
+The \type {type} can have one of six distinct values. The number is the \ASCII\
+value if the first character if the type name (so you can use string.byte("l")
+instead of \type {108}).
+
+\starttabulate[|lT|lT|p|]
+\NC \rmbf value \NC \bf meaning \NC \bf explanation \NC \NR
+\NC 97 \NC a \NC list of attributes (a node list) \NC \NR
+\NC 100 \NC d \NC a \LUA\ number \NC \NR
+\NC 108 \NC l \NC a \LUA\ value (table, number, boolean, etc) \NC \NR
+\NC 110 \NC n \NC a node list \NC \NR
+\NC 115 \NC s \NC a \LUA\ string \NC \NR
+\NC 116 \NC t \NC a \LUA\ token list in \LUA\ table form (a list of triplets) \NC \NR
+\stoptabulate
+
+\subsubsubsection{save_pos whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\subsubsubsection{late_lua whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC data to execute \NC \NR
+\NC string \NC string \NC data to execute \NC \NR
+\NC name \NC string \NC the name to use for \LUA\ error reporting \NC \NR
+\stoptabulate
+
+The difference between \type {data} and \type {string} is that on assignment, the
+\type {data} field is converted to a token list, cf. use as \type {\latelua}. The
+\type {string} version is treated as a literal string.
+
+\subsubsection{\DVI\ backend whatsits}
+
+\subsubsection{special whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC the \type {\special} information \NC \NR
+\stoptabulate
+
+\subsubsection{\PDF\ backend whatsits}
+
+\subsubsubsection{pdf_literal whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC mode \NC number \NC the \quote {mode} setting of this literal \NC \NR
+\NC data \NC string \NC the \type {\pdfliteral} information \NC \NR
+\stoptabulate
+
+Possible mode values are:
+
+\starttabulate[|lT|p|]
+\NC \rmbf value \NC \rmbf \PDFTEX\ keyword \NC \NR
+\NC 0 \NC setorigin \NC \NR
+\NC 1 \NC page \NC \NR
+\NC 2 \NC direct \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_refobj whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_annot whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\NC data \NC string \NC the annotation data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_start_link whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\NC link_attr \NC table \NC the link attribute token list \NC \NR
+\NC action \NC node \NC the action to perform \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_end_link whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_dest whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is the \type {dest_id} a string value? \NC \NR
+\NC dest_id \NC number \NC the destination id \NC \NR
+\NC \NC string \NC the destination name \NC \NR
+\NC dest_type \NC number \NC type of destination \NC \NR
+\NC xyz_zoom \NC number \NC the zoom factor (times 1000) \NC \NR
+\NC objnum \NC number \NC the \PDF\ object number \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_action whatsits}
+
+These are a special kind of item that only appears inside \PDF\ start link
+objects.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC action_type \NC number \NC the kind of action involved \NC \NR
+\NC action_id \NC number or string \NC token list reference or string \NC \NR
+\NC named_id \NC number \NC the index of the destination \NC \NR
+\NC file \NC string \NC the target filename \NC \NR
+\NC new_window \NC number \NC the window state of the target \NC \NR
+\NC data \NC string \NC the name of the destination \NC \NR
+\stoptabulate
+
+Valid action types are:
+
+\starttabulate[|lT|lT|]
+\NC 0 \NC page \NC \NR
+\NC 1 \NC goto \NC \NR
+\NC 2 \NC thread \NC \NR
+\NC 3 \NC user \NC \NR
+\stoptabulate
+
+Valid window types are:
+
+\starttabulate[|lT|lT|]
+\NC 0 \NC notset \NC \NR
+\NC 1 \NC new \NC \NR
+\NC 2 \NC nonew \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_thread whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is \type {tread_id} a string value? \NC \NR
+\NC tread_id \NC number \NC the thread id \NC \NR
+\NC \NC string \NC the thread name \NC \NR
+\NC thread_attr \NC number \NC extra thread information \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_start_thread whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is \type {tread_id} a string value? \NC \NR
+\NC tread_id \NC number \NC the thread id \NC \NR
+\NC \NC string \NC the thread name \NC \NR
+\NC thread_attr \NC number \NC extra thread information \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_end_thread whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_colorstack whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stack \NC number \NC colorstack id number \NC \NR
+\NC command \NC number \NC command to execute \NC \NR
+\NC data \NC string \NC data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_setmatrix whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_save whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_restore whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\section{The \type {node} library}
+
+The \type {node} library contains functions that facilitate dealing with (lists
+of) nodes and their values. They allow you to create, alter, copy, delete, and
+insert \LUATEX\ node objects, the core objects within the typesetter.
+
+\LUATEX\ nodes are represented in \LUA\ as userdata with the metadata type
+\type {luatex.node}. The various parts within a node can be accessed using
+named fields.
+
+Each node has at least the three fields \type {next}, \type {id}, and \type
+{subtype}:
+
+\startitemize[intro]
+
+\startitem
+ The \type {next} field returns the userdata object for the next node in a
+ linked list of nodes, or \type {nil}, if there is no next node.
+\stopitem
+
+\startitem
+ The \type {id} indicates \TEX's \quote{node type}. The field \type {id} has a
+ numeric value for efficiency reasons, but some of the library functions also
+ accept a string value instead of \type {id}.
+\stopitem
+
+\startitem
+ The \type {subtype} is another number. It often gives further information
+ about a node of a particular \type {id}, but it is most important when
+ dealing with \quote {whatsits}, because they are differentiated solely based
+ on their \type {subtype}.
+\stopitem
+
+\stopitemize
+
+The other available fields depend on the \type {id} (and for \quote {whatsits},
+the \type {subtype}) of the node. Further details on the various fields and their
+meanings are given in~\in{chapter}[nodes].
+
+Support for \type {unset} (alignment) nodes is partial: they can be queried and
+modified from \LUA\ code, but not created.
+
+Nodes can be compared to each other, but: you are actually comparing indices into
+the node memory. This means that equality tests can only be trusted under very
+limited conditions. It will not work correctly in any situation where one of the
+two nodes has been freed and|/|or reallocated: in that case, there will be false
+positives.
+
+At the moment, memory management of nodes should still be done explicitly by the
+user. Nodes are not \quote {seen} by the \LUA\ garbage collector, so you have to
+call the node freeing functions yourself when you are no longer in need of a node
+(list). Nodes form linked lists without reference counting, so you have to be
+careful that when control returns back to \LUATEX\ itself, you have not deleted
+nodes that are still referenced from a \type {next} pointer elsewhere, and that
+you did not create nodes that are referenced more than once.
+
+There are statistics available with regards to the allocated node memory, which
+can be handy for tracing.
+
+\subsection{Node handling functions}
+
+\subsubsection{\type {node.is_node}}
+
+\startfunctioncall
+<boolean> t =
+ node.is_node(<any> item)
+\stopfunctioncall
+
+This function returns true if the argument is a userdata object of
+type \type {<node>}.
+
+\subsubsection{\type {node.types}}
+
+\startfunctioncall
+<table> t =
+ node.types()
+\stopfunctioncall
+
+This function returns an array that maps node id numbers to node type strings,
+providing an overview of the possible top|-|level \type {id} types.
+
+\subsubsection{\type {node.whatsits}}
+
+\startfunctioncall
+<table> t =
+ node.whatsits()
+\stopfunctioncall
+
+\TEX's \quote{whatsits} all have the same \type {id}. The various subtypes are
+defined by their \type {subtype} fields. The function is much like \type
+{node.types}, except that it provides an array of \type {subtype} mappings.
+
+\subsubsection{\type {node.id}}
+
+\startfunctioncall
+<number> id =
+ node.id(<string> type)
+\stopfunctioncall
+
+This converts a single type name to its internal numeric representation.
+
+\subsubsection{\type {node.subtype}}
+
+\startfunctioncall
+<number> subtype =
+ node.subtype(<string> type)
+\stopfunctioncall
+
+This converts a single whatsit name to its internal numeric representation (\type
+{subtype}).
+
+\subsubsection{\type {node.type}}
+
+\startfunctioncall
+<string> type =
+ node.type(<any> n)
+\stopfunctioncall
+
+In the argument is a number, then this function converts an internal numeric
+representation to an external string representation. Otherwise, it will return
+the string \type {node} if the object represents a node, and \type {nil}
+otherwise.
+
+\subsubsection{\type {node.fields}}
+
+\startfunctioncall
+<table> t =
+ node.fields(<number> id)
+<table> t =
+ node.fields(<number> id, <number> subtype)
+\stopfunctioncall
+
+This function returns an array of valid field names for a particular type of
+node. If you want to get the valid fields for a \quote {whatsit}, you have to
+supply the second argument also. In other cases, any given second argument will
+be silently ignored.
+
+This function accepts string \type {id} and \type {subtype} values as well.
+
+\subsubsection{\type {node.has_field}}
+
+\startfunctioncall
+<boolean> t =
+ node.has_field(<node> n, <string> field)
+\stopfunctioncall
+
+This function returns a boolean that is only true if \type {n} is
+actually a node, and it has the field.
+
+\subsubsection{\type {node.new}}
+
+\startfunctioncall
+<node> n =
+ node.new(<number> id)
+<node> n =
+ node.new(<number> id, <number> subtype)
+\stopfunctioncall
+
+Creates a new node. All of the new node's fields are initialized to either zero
+or \type {nil} except for \type {id} and \type {subtype} (if supplied). If you
+want to create a new whatsit, then the second argument is required, otherwise it
+need not be present. As with all node functions, this function creates a node on
+the \TEX\ level.
+
+This function accepts string \type {id} and \type {subtype} values as well.
+
+\subsubsection{\type {node.free} and \type {node.flush_node}}
+
+\startfunctioncall
+<node> next =
+ node.free(<node> n)
+flush_node(<node> n)
+\stopfunctioncall
+
+Removes the node \type {n} from \TEX's memory. Be careful: no checks are done on
+whether this node is still pointed to from a register or some \type {next} field:
+it is up to you to make sure that the internal data structures remain correct.
+
+The \type {free} function returns the next field of the freed node, while the
+\type {flush_node} alternative returns nothing.
+
+\subsubsection{\type {node.flush_list}}
+
+\startfunctioncall
+node.flush_list(<node> n)
+\stopfunctioncall
+
+Removes the node list \type {n} and the complete node list following \type {n}
+from \TEX's memory. Be careful: no checks are done on whether any of these nodes
+is still pointed to from a register or some \type {next} field: it is up to you
+to make sure that the internal data structures remain correct.
+
+\subsubsection{\type {node.copy}}
+
+\startfunctioncall
+<node> m =
+ node.copy(<node> n)
+\stopfunctioncall
+
+Creates a deep copy of node \type {n}, including all nested lists as in the case
+of a hlist or vlist node. Only the \type {next} field is not copied.
+
+\subsubsection{\type {node.copy_list}}
+
+\startfunctioncall
+<node> m =
+ node.copy_list(<node> n)
+<node> m =
+ node.copy_list(<node> n, <node> m)
+\stopfunctioncall
+
+Creates a deep copy of the node list that starts at \type {n}. If \type {m} is
+also given, the copy stops just before node \type {m}.
+
+Note that you cannot copy attribute lists this way, specialized functions for
+dealing with attribute lists will be provided later but are not there yet.
+However, there is normally no need to copy attribute lists as when you do
+assignments to the \type {attr} field or make changes to specific attributes, the
+needed copying and freeing takes place automatically.
+
+\subsubsection{\type {node.next}}
+
+\startfunctioncall
+<node> m =
+ node.next(<node> n)
+\stopfunctioncall
+
+Returns the node following this node, or \type {nil} if there is no such node.
+
+\subsubsection{\type {node.prev}}
+
+\startfunctioncall
+<node> m =
+ node.prev(<node> n)
+\stopfunctioncall
+
+Returns the node preceding this node, or \type {nil} if there is no such node.
+
+\subsubsection{\type {node.current_attr}}
+
+\startfunctioncall
+<node> m =
+ node.current_attr()
+\stopfunctioncall
+
+Returns the currently active list of attributes, if there is one.
+
+The intended usage of \type {current_attr} is as follows:
+
+\starttyping
+local x1 = node.new("glyph")
+x1.attr = node.current_attr()
+local x2 = node.new("glyph")
+x2.attr = node.current_attr()
+\stoptyping
+
+or:
+
+\starttyping
+local x1 = node.new("glyph")
+local x2 = node.new("glyph")
+local ca = node.current_attr()
+x1.attr = ca
+x2.attr = ca
+\stoptyping
+
+The attribute lists are ref counted and the assignment takes care of incrementing
+the refcount. You cannot expect the value \type {ca} to be valid any more when
+you assign attributes (using \type {tex.setattribute}) or when control has been
+passed back to \TEX.
+
+Note: this function is somewhat experimental, and it returns the {\it actual}
+attribute list, not a copy thereof. Therefore, changing any of the attributes in
+the list will change these values for all nodes that have the current attribute
+list assigned to them.
+
+\subsubsection{\type {node.hpack}}
+
+\startfunctioncall
+<node> h, <number> b =
+ node.hpack(<node> n)
+<node> h, <number> b =
+ node.hpack(<node> n, <number> w, <string> info)
+<node> h, <number> b =
+ node.hpack(<node> n, <number> w, <string> info, <string> dir)
+\stopfunctioncall
+
+This function creates a new hlist by packaging the list that begins at node \type
+{n} into a horizontal box. With only a single argument, this box is created using
+the natural width of its components. In the three argument form, \type {info}
+must be either \type {additional} or \type {exactly}, and \type {w} is the
+additional (\type {\hbox spread}) or exact (\type {\hbox to}) width to be used. The
+second return value is the badness of the generated box.
+
+Caveat: at this moment, there can be unexpected side|-|effects to this function,
+like updating some of the \type {\marks} and \type {\inserts}. Also note that the
+content of \type {h} is the original node list \type {n}: if you call \type
+{node.free(h)} you will also free the node list itself, unless you explicitly set
+the \type {list} field to \type {nil} beforehand. And in a similar way, calling
+\type {node.free(n)} will invalidate \type {h} as well!
+
+\subsubsection{\type {node.vpack}}
+
+\startfunctioncall
+<node> h, <number> b =
+ node.vpack(<node> n)
+<node> h, <number> b =
+ node.vpack(<node> n, <number> w, <string> info)
+<node> h, <number> b =
+ node.vpack(<node> n, <number> w, <string> info, <string> dir)
+\stopfunctioncall
+
+This function creates a new vlist by packaging the list that begins at node \type
+{n} into a vertical box. With only a single argument, this box is created using
+the natural height of its components. In the three argument form, \type {info}
+must be either \type {additional} or \type {exactly}, and \type {w} is the
+additional (\type {\vbox spread}) or exact (\type {\vbox to}) height to be used.
+
+The second return value is the badness of the generated box.
+
+See the description of \type {node.hpack()} for a few memory allocation caveats.
+
+\subsubsection{\type {node.dimensions}}
+
+\startfunctioncall
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <string> dir)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <node> t)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <node> t, <string> dir)
+\stopfunctioncall
+
+This function calculates the natural in|-|line dimensions of the node list starting
+at node \type {n} and terminating just before node \type {t} (or the end of the
+list, if there is no second argument). The return values are scaled points. An
+alternative format that starts with glue parameters as the first three arguments
+is also possible:
+
+\startfunctioncall
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <string> dir)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <node> t)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <node> t, <string> dir)
+\stopfunctioncall
+
+This calling method takes glue settings into account and is especially useful for
+finding the actual width of a sublist of nodes that are already boxed, for
+example in code like this, which prints the width of the space in between the
+\type {a} and \type {b} as it would be if \type {\box0} was used as-is:
+
+\starttyping
+\setbox0 = \hbox to 20pt {a b}
+
+\directlua{print (node.dimensions(
+ tex.box[0].glue_set,
+ tex.box[0].glue_sign,
+ tex.box[0].glue_order,
+ tex.box[0].head.next,
+ node.tail(tex.box[0].head)
+)) }
+\stoptyping
+
+You need to keep in mind that this is one of the few places in \TEX\ where floats
+are used, which means that you can get small differences in rounding when you
+compare the width repported by \type {hpack} with \type {dimensions}.
+
+\subsubsection{\type {node.mlist_to_hlist}}
+
+\startfunctioncall
+<node> h =
+ node.mlist_to_hlist(<node> n, <string> display_type, <boolean> penalties)
+\stopfunctioncall
+
+This runs the internal mlist to hlist conversion, converting the math list in
+\type {n} into the horizontal list \type {h}. The interface is exactly the same
+as for the callback \type {mlist_to_hlist}.
+
+\subsubsection{\type {node.slide}}
+
+\startfunctioncall
+<node> m =
+ node.slide(<node> n)
+\stopfunctioncall
+
+Returns the last node of the node list that starts at \type {n}. As a
+side|-|effect, it also creates a reverse chain of \type {prev} pointers between
+nodes.
+
+\subsubsection{\type {node.tail}}
+
+\startfunctioncall
+<node> m =
+ node.tail(<node> n)
+\stopfunctioncall
+
+Returns the last node of the node list that starts at \type {n}.
+
+\subsubsection{\type {node.length}}
+
+\startfunctioncall
+<number> i =
+ node.length(<node> n)
+<number> i =
+ node.length(<node> n, <node> m)
+\stopfunctioncall
+
+Returns the number of nodes contained in the node list that starts at \type {n}.
+If \type {m} is also supplied it stops at \type {m} instead of at the end of the
+list. The node \type {m} is not counted.
+
+\subsubsection{\type {node.count}}
+
+\startfunctioncall
+<number> i =
+ node.count(<number> id, <node> n)
+<number> i =
+ node.count(<number> id, <node> n, <node> m)
+\stopfunctioncall
+
+Returns the number of nodes contained in the node list that starts at \type {n}
+that have a matching \type {id} field. If \type {m} is also supplied, counting
+stops at \type {m} instead of at the end of the list. The node \type {m} is not
+counted.
+
+This function also accept string \type {id}'s.
+
+\subsubsection{\type {node.traverse}}
+
+\startfunctioncall
+<node> t =
+ node.traverse(<node> n)
+\stopfunctioncall
+
+This is a \LUA\ iterator that loops over the node list that starts at \type {n}.
+Typically code looks like this:
+
+\starttyping
+for n in node.traverse(head) do
+ ...
+end
+\stoptyping
+
+is functionally equivalent to:
+
+\starttyping
+do
+ local n
+ local function f (head,var)
+ local t
+ if var == nil then
+ t = head
+ else
+ t = var.next
+ end
+ return t
+ end
+ while true do
+ n = f (head, n)
+ if n == nil then break end
+ ...
+ end
+end
+\stoptyping
+
+It should be clear from the definition of the function \type {f} that even though
+it is possible to add or remove nodes from the node list while traversing, you
+have to take great care to make sure all the \type {next} (and \type {prev})
+pointers remain valid.
+
+If the above is unclear to you, see the section \quote {For Statement} in the
+\LUA\ Reference Manual.
+
+\subsubsection{\type {node.traverse_id}}
+
+\startfunctioncall
+<node> t =
+ node.traverse_id(<number> id, <node> n)
+\stopfunctioncall
+
+This is an iterator that loops over all the nodes in the list that starts at
+\type {n} that have a matching \type {id} field.
+
+See the previous section for details. The change is in the local function \type
+{f}, which now does an extra while loop checking against the upvalue \type {id}:
+
+\starttyping
+ local function f(head,var)
+ local t
+ if var == nil then
+ t = head
+ else
+ t = var.next
+ end
+ while not t.id == id do
+ t = t.next
+ end
+ return t
+ end
+\stoptyping
+
+\subsubsection{\type {node.traverse_char}}
+
+This iterators loops over the glyph nodes in a list. Only nodes with a subtype
+less than 256 are seen.
+
+\startfunctioncall
+<node> n =
+ node.traverse_char(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.has_glyph}}
+
+This function returns the first glyph or disc node in the given list:
+
+\startfunctioncall
+<node> n =
+ node.has_glyph(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.end_of_math}}
+
+\startfunctioncall
+<node> t =
+ node.end_of_math(<node> start)
+\stopfunctioncall
+
+Looks for and returns the next \type {math_node} following the \type {start}. If
+the given node is a math endnode this helper return that node, else it follows
+the list and return the next math endnote. If no such node is found nil is
+returned.
+
+\subsubsection{\type {node.remove}}
+
+\startfunctioncall
+<node> head, current =
+ node.remove(<node> head, <node> current)
+\stopfunctioncall
+
+This function removes the node \type {current} from the list following \type
+{head}. It is your responsibility to make sure it is really part of that list.
+The return values are the new \type {head} and \type {current} nodes. The
+returned \type {current} is the node following the \type {current} in the calling
+argument, and is only passed back as a convenience (or \type {nil}, if there is
+no such node). The returned \type {head} is more important, because if the
+function is called with \type {current} equal to \type {head}, it will be
+changed.
+
+\subsubsection{\type {node.insert_before}}
+
+\startfunctioncall
+<node> head, new =
+ node.insert_before(<node> head, <node> current, <node> new)
+\stopfunctioncall
+
+This function inserts the node \type {new} before \type {current} into the list
+following \type {head}. It is your responsibility to make sure that \type
+{current} is really part of that list. The return values are the (potentially
+mutated) \type {head} and the node \type {new}, set up to be part of the list
+(with correct \type {next} field). If \type {head} is initially \type {nil}, it
+will become \type {new}.
+
+\subsubsection{\type {node.insert_after}}
+
+\startfunctioncall
+<node> head, new =
+ node.insert_after(<node> head, <node> current, <node> new)
+\stopfunctioncall
+
+This function inserts the node \type {new} after \type {current} into the list
+following \type {head}. It is your responsibility to make sure that \type
+{current} is really part of that list. The return values are the \type {head} and
+the node \type {new}, set up to be part of the list (with correct \type {next}
+field). If \type {head} is initially \type {nil}, it will become \type {new}.
+
+\subsubsection{\type {node.first_glyph}}
+
+\startfunctioncall
+<node> n =
+ node.first_glyph(<node> n)
+<node> n =
+ node.first_glyph(<node> n, <node> m)
+\stopfunctioncall
+
+Returns the first node in the list starting at \type {n} that is a glyph node
+with a subtype indicating it is a glyph, or \type {nil}. If \type {m} is given,
+processing stops at (but including) that node, otherwise processing stops at the
+end of the list.
+
+\subsubsection{\type {node.ligaturing}}
+
+\startfunctioncall
+<node> h, <node> t, <boolean> success =
+ node.ligaturing(<node> n)
+<node> h, <node> t, <boolean> success =
+ node.ligaturing(<node> n, <node> m)
+\stopfunctioncall
+
+Apply \TEX-style ligaturing to the specified nodelist. The tail node \type {m} is
+optional. The two returned nodes \type {h} and \type {t} are the new head and
+tail (both \type {n} and \type {m} can change into a new ligature).
+
+\subsubsection{\type {node.kerning}}
+
+\startfunctioncall
+<node> h, <node> t, <boolean> success =
+ node.kerning(<node> n)
+<node> h, <node> t, <boolean> success =
+ node.kerning(<node> n, <node> m)
+\stopfunctioncall
+
+Apply \TEX|-|style kerning to the specified node list. The tail node \type {m} is
+optional. The two returned nodes \type {h} and \type {t} are the head and tail
+(either one of these can be an inserted kern node, because special kernings with
+word boundaries are possible).
+
+\subsubsection{\type {node.unprotect_glyphs}}
+
+\startfunctioncall
+node.unprotect_glyphs(<node> n)
+\stopfunctioncall
+
+Subtracts 256 from all glyph node subtypes. This and the next function are
+helpers to convert from \type {characters} to \type {glyphs} during node
+processing.
+
+\subsubsection{\type {node.protect_glyphs} and \type {node.protect_glyph}}
+
+\startfunctioncall
+node.protect_glyphs(<node> n)
+\stopfunctioncall
+
+Adds 256 to all glyph node subtypes in the node list starting at \type {n},
+except that if the value is 1, it adds only 255. The special handling of 1 means
+that \type {characters} will become \type {glyphs} after subtraction of 256. A
+single character can be marked by the singular call.
+
+\subsubsection{\type {node.last_node}}
+
+\startfunctioncall
+<node> n =
+ node.last_node()
+\stopfunctioncall
+
+This function pops the last node from \TEX's \quote{current list}. It returns
+that node, or \type {nil} if the current list is empty.
+
+\subsubsection{\type {node.write}}
+
+\startfunctioncall
+node.write(<node> n)
+\stopfunctioncall
+
+This is an experimental function that will append a node list to \TEX's \quote
+{current list} The node list is not deep|-|copied! There is no error checking
+either!
+
+\subsubsection{\type {node.protrusion_skippable}}
+
+\startfunctioncall
+<boolean> skippable =
+ node.protrusion_skippable(<node> n)
+\stopfunctioncall
+
+Returns \type {true} if, for the purpose of line boundary discovery when
+character protrusion is active, this node can be skipped.
+
+\subsection{Glue handling}
+
+\subsubsection{\type {node.setglue}}
+
+You can set the properties of a glue in one go. If you pass no values, the glue
+will become a zero glue.
+
+\startfunctioncall
+node.setglue(<node> n)
+node.setglue(<node> n,width,stretch,shrink,stretch_order,shrink_order)
+\stopfunctioncall
+
+When you pass values, only arguments that are numbers
+are assigned so
+
+\starttyping
+node.setglue(n,655360,false,65536)
+\stoptyping
+
+will only adapt the width and shrink.
+
+\subsubsection{\type {node.getglue}}
+
+The next call will return 5 values (or northing when no glue is passed).
+
+\startfunctioncall
+<integer> width, <integer> stretch, <integer> shrink, <integer> stretch_order,
+ <integer> shrink_order = node.getglue(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.is_zero_glue}}
+
+This function returns \type {true} when the width, stretch and shrink properties
+are zero.
+
+\startfunctioncall
+<boolean> isglue =
+ node.is_zero_glue(<node> n)
+\stopfunctioncall
+
+\subsection{Attribute handling}
+
+Attributes appear as linked list of userdata objects in the \type {attr} field of
+individual nodes. They can be handled individually, but it is much safer and more
+efficient to use the dedicated functions associated with them.
+
+\subsubsection{\type {node.has_attribute}}
+
+\startfunctioncall
+<number> v =
+ node.has_attribute(<node> n, <number> id)
+<number> v =
+ node.has_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Tests if a node has the attribute with number \type {id} set. If \type {val} is
+also supplied, also tests if the value matches \type {val}. It returns the value,
+or, if no match is found, \type {nil}.
+
+\subsubsection{\type {node.get_attribute}}
+
+\startfunctioncall
+<number> v =
+ node.get_attribute(<node> n, <number> id)
+\stopfunctioncall
+
+Tests if a node has an attribute with number \type {id} set. It returns the
+value, or, if no match is found, \type {nil}.
+
+\subsubsection{\type {node.find_attribute}}
+
+\startfunctioncall
+<number> v, <node> n =
+ node.find_attribute(<node> n, <number> id)
+\stopfunctioncall
+
+Finds the first node that has attribute with number \type {id} set. It returns
+the value and the node if there is a match and otherwise nothing.
+
+\subsubsection{\type {node.set_attribute}}
+
+\startfunctioncall
+node.set_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Sets the attribute with number \type {id} to the value \type {val}. Duplicate
+assignments are ignored. {\em [needs explanation]}
+
+\subsubsection{\type {node.unset_attribute}}
+
+\startfunctioncall
+<number> v =
+ node.unset_attribute(<node> n, <number> id)
+<number> v =
+ node.unset_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Unsets the attribute with number \type {id}. If \type {val} is also supplied, it
+will only perform this operation if the value matches \type {val}. Missing
+attributes or attribute|-|value pairs are ignored.
+
+If the attribute was actually deleted, returns its old value. Otherwise, returns
+\type {nil}.
+
+\subsubsection{\type {node.slide}}
+
+This helper makes sure that the node lists is double linked and returns the found
+tail node.
+
+\startfunctioncall
+<node> tail =
+ node.slide(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.check_discretionary} and \type {node.check_discretionaries}}
+
+When you fool around with disc nodes you need to be aware of the fact that they
+have a special internal data structure. As long as you reassign the fields when
+you have extended the lists it's ok because then the tail pointers get updated,
+but when you add to list without reassigning you might end up in troubles when
+the linebreak routien kicks in. You can call this function to check the list for
+issues with disc nodes.
+
+\startfunctioncall
+node.check_discretionary(<node> n)
+node.check_discretionaries(<node> head)
+\stopfunctioncall
+
+The plural variant runs over all disc nodes in a list, the singular variant
+checks one node only (it also checks if the node is a disc node).
+
+\subsubsection{\type {node.family_font}}
+
+When you pass it a proper family identifier the next helper will return the font
+currently associated with it. You can normally also access the font with the normal
+font field or getter because it will resolve the family automatically for noads.
+
+\startfunctioncall
+<integer> id =
+ node.family_font(<integer> fam)
+\stopfunctioncall
+
+\section{Two access models}
+
+Deep down in \TEX\ a node has a number which is an numeric entry in a memory
+table. In fact, this model, where \TEX\ manages memory is real fast and one of
+the reasons why plugging in callbacks that operate on nodes is quite fast too.
+Each node gets a number that is in fact an index in the memory table and that
+number often gets reported when you print node related information.
+
+There are two access models, a robust one using a so called user data object that
+provides a virtual interface to the internal nodes, and a more direct access which
+uses the node numbers directly. The first model provide key based access while
+the second always accesses fields via functions:
+
+\starttyping
+nodeobject.char
+getfield(nodenumber,"char")
+\stoptyping
+
+If you use the direct model, even if you know that you deal with numbers, you
+should not depend on that property but treat it an abstraction just like
+traditional nodes. In fact, the fact that we use a simple basic datatype has the
+penalty that less checking can be done, but less checking is also the reason why
+it's somewhat faster. An important aspect is that one cannot mix both methods,
+but you can cast both models. So, multiplying a node number makes no sense.
+
+So our advice is: use the indexed (table) approach when possible and investigate
+the direct one when speed might be an real issue. For that reason we also provide
+the \type {get*} and \type {set*} functions in the top level node namespace.
+There is a limited set of getters. When implementing this direct approach the
+regular index by key variant was also optimized, so direct access only makes
+sense when we're accessing nodes millions of times (which happens in some font
+processing for instance).
+
+We're talking mostly of getters because setters are less important. Documents
+have not that many content related nodes and setting many thousands of properties
+is hardly a burden contrary to millions of consultations.
+
+Normally you will access nodes like this:
+
+\starttyping
+local next = current.next
+if next then
+ -- do something
+end
+\stoptyping
+
+Here \type {next} is not a real field, but a virtual one. Accessing it results in
+a metatable method being called. In practice it boils down to looking up the node
+type and based on the node type checking for the field name. In a worst case you
+have a node type that sits at the end of the lookup list and a field that is last
+in the lookup chain. However, in successive versions of \LUATEX\ these lookups
+have been optimized and the most frequently accessed nodes and fields have a
+higher priority.
+
+Because in practice the \type {next} accessor results in a function call, there
+is some overhead involved. The next code does the same and performs a tiny bit
+faster (but not that much because it is still a function call but one that knows
+what to look up).
+
+\starttyping
+local next = node.next(current)
+if next then
+ -- do something
+end
+\stoptyping
+
+If performance matters you can use an function instead:
+
+\starttabulate[|T|p|]
+\NC getnext \NC parsing nodelist always involves this one \NC \NR
+\NC getprev \NC used less but is logical companion to \type {getnext} \NC \NR
+\NC getboth \NC returns the next and prev pointer of a node \NC \NR
+\NC getid \NC consulted a lot \NC \NR
+\NC getsubtype \NC consulted less but also a topper \NC \NR
+\NC getfont \NC used a lot in \OPENTYPE\ handling (glyph nodes are consulted a lot) \NC \NR
+\NC getchar \NC idem and also in other places \NC \NR
+\NC getdisc \NC returns the \type {pre}, \type {post} and \type {replace} fields and
+ optionally when true is passed also the tail fields. \NC \NR
+\NC getlist \NC we often parse nested lists so this is a convenient one too
+ (only works for hlist and vlist!) \NC \NR
+\NC getleader \NC comparable to list, seldom used in \TEX\ (but needs frequent consulting
+ like lists; leaders could have been made a dedicated node type) \NC \NR
+\NC getfield \NC generic getter, sufficient for the rest (other field names are
+ often shared so a specific getter makes no sense then) \NC \NR
+\NC getbox \NC gets the given box (a list node) \NC \NR
+\stoptabulate
+
+The direct variants also have setters, where the discretionary setter takes three
+(optional) arguments plus an optional fourth indicating the subtype. An additional
+setter is \type {setlink} which will link two nodes.
+
+It doesn't make sense to add getters for all fields, also because some are not
+unique to one node type. Profiling demonstrated that these fields can get
+accesses way more times than other fields. Even in complex documents, many node
+and fields types never get seen, or seen only a few times. Most functions in the
+\type {node} namespace have a companion in \type {node.direct}, but of course not
+the ones that don't deal with nodes themselves. The following table summarized
+this:
+
+% \startcolumns[balance=yes]
+
+\def\yes{$+$} \def\nop{$-$}
+
+\starttabulate[|T|c|c|]
+\HL
+\NC \bf function \NC \bf node \NC \bf direct \NC \NR
+\HL
+\NC \type {check_discretionaries}\NC \yes \NC \yes \NC \NR
+\NC \type {copy_list} \NC \yes \NC \yes \NC \NR
+\NC \type {copy} \NC \yes \NC \yes \NC \NR
+\NC \type {count} \NC \yes \NC \yes \NC \NR
+\NC \type {current_attr} \NC \yes \NC \yes \NC \NR
+\NC \type {dimensions} \NC \yes \NC \yes \NC \NR
+%NC \type {do_ligature_n} \NC \yes \NC \yes \NC \NR % was never documented and experimental
+\NC \type {effective_glue} \NC \yes \NC \yes \NC \NR
+\NC \type {end_of_math} \NC \yes \NC \yes \NC \NR
+\NC \type {family_font} \NC \yes \NC \nop \NC \NR
+\NC \type {fields} \NC \yes \NC \nop \NC \NR
+\NC \type {find_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {first_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {flush_list} \NC \yes \NC \yes \NC \NR
+\NC \type {flush_node} \NC \yes \NC \yes \NC \NR
+\NC \type {free} \NC \yes \NC \yes \NC \NR
+\NC \type {get_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {getboth} \NC \yes \NC \yes \NC \NR
+\NC \type {getbox} \NC \nop \NC \yes \NC \NR
+\NC \type {getchar} \NC \yes \NC \yes \NC \NR
+\NC \type {getdisc} \NC \yes \NC \yes \NC \NR
+\NC \type {getfield} \NC \yes \NC \yes \NC \NR
+\NC \type {getfont} \NC \yes \NC \yes \NC \NR
+\NC \type {getglue} \NC \yes \NC \yes \NC \NR
+\NC \type {getid} \NC \yes \NC \yes \NC \NR
+\NC \type {getleader} \NC \yes \NC \yes \NC \NR
+\NC \type {getlist} \NC \yes \NC \yes \NC \NR
+\NC \type {getnext} \NC \yes \NC \yes \NC \NR
+\NC \type {getprev} \NC \yes \NC \yes \NC \NR
+\NC \type {getsubtype} \NC \yes \NC \yes \NC \NR
+\NC \type {has_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {has_field} \NC \yes \NC \yes \NC \NR
+\NC \type {has_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {hpack} \NC \yes \NC \yes \NC \NR
+\NC \type {id} \NC \yes \NC \nop \NC \NR
+\NC \type {insert_after} \NC \yes \NC \yes \NC \NR
+\NC \type {insert_before} \NC \yes \NC \yes \NC \NR
+\NC \type {is_char} \NC \yes \NC \yes \NC \NR
+\NC \type {is_direct} \NC \nop \NC \yes \NC \NR
+\NC \type {is_glue_zero} \NC \yes \NC \yes \NC \NR
+\NC \type {is_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {is_node} \NC \yes \NC \yes \NC \NR
+\NC \type {kerning} \NC \yes \NC \yes \NC \NR
+\NC \type {last_node} \NC \yes \NC \yes \NC \NR
+\NC \type {length} \NC \yes \NC \yes \NC \NR
+\NC \type {ligaturing} \NC \yes \NC \yes \NC \NR
+\NC \type {mlist_to_hlist} \NC \yes \NC \nop \NC \NR
+\NC \type {new} \NC \yes \NC \yes \NC \NR
+\NC \type {next} \NC \yes \NC \nop \NC \NR
+\NC \type {prev} \NC \yes \NC \nop \NC \NR
+\NC \type {protect_glyphs} \NC \yes \NC \yes \NC \NR
+\NC \type {protect_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {protrusion_skippable} \NC \yes \NC \yes \NC \NR
+\NC \type {remove} \NC \yes \NC \yes \NC \NR
+\NC \type {set_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {setboth} \NC \yes \NC \yes \NC \NR
+\NC \type {setbox} \NC \nop \NC \yes \NC \NR
+\NC \type {setbox} \NC \yes \NC \yes \NC \NR
+\NC \type {setchar} \NC \yes \NC \yes \NC \NR
+\NC \type {setdisc} \NC \yes \NC \yes \NC \NR
+\NC \type {setfield} \NC \yes \NC \yes \NC \NR
+\NC \type {setglue} \NC \yes \NC \yes \NC \NR
+\NC \type {setlink} \NC \yes \NC \yes \NC \NR
+\NC \type {setnext} \NC \yes \NC \yes \NC \NR
+\NC \type {setprev} \NC \yes \NC \yes \NC \NR
+\NC \type {slide} \NC \yes \NC \yes \NC \NR
+\NC \type {subtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {subtype} \NC \yes \NC \nop \NC \NR
+\NC \type {tail} \NC \yes \NC \yes \NC \NR
+\NC \type {todirect} \NC \yes \NC \yes \NC \NR
+\NC \type {tonode} \NC \yes \NC \yes \NC \NR
+\NC \type {tostring} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse_char} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse_id} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse} \NC \yes \NC \yes \NC \NR
+\NC \type {types} \NC \yes \NC \nop \NC \NR
+\NC \type {type} \NC \yes \NC \nop \NC \NR
+\NC \type {unprotect_glyphs} \NC \yes \NC \yes \NC \NR
+\NC \type {unset_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {usedlist} \NC \yes \NC \yes \NC \NR
+\NC \type {vpack} \NC \yes \NC \yes \NC \NR
+\NC \type {whatsitsubtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {whatsits} \NC \yes \NC \nop \NC \NR
+\NC \type {write} \NC \yes \NC \yes \NC \NR
+\stoptabulate
+
+% \stopcolumns
+
+The \type {node.next} and \type {node.prev} functions will stay but for
+consistency there are variants called \type {getnext} and \type {getprev}. We had
+to use \type {get} because \type {node.id} and \type {node.subtype} are already
+taken for providing meta information about nodes. Note: The getters do only basic
+checking for valid keys. You should just stick to the keys mentioned in the
+sections that describe node properties.
+
+Some nodes have indirect references. For instance a math character refers to a
+family instead of a font. In that case we provide a virtual font field as
+accessor. So, \type {getfont} and \type {.font} can be used on them. The same is
+true for the \type {width}, \type {height} and \type {depth} of glue nodes. These
+actually access the spec node properties, and here we can set as well as get the
+values.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-style.tex b/doc/context/sources/general/manuals/luatex/luatex-style.tex
new file mode 100644
index 000000000..c07dc3b76
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-style.tex
@@ -0,0 +1,362 @@
+\startenvironment luatex-style
+
+% todo: use \useMPlibrary[lua]
+
+\usemodule[abr-02]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ backspace=2cm,
+ topspace=10mm,
+ bottomspace=10mm,
+ header=10mm,
+ footer=10mm,
+ footerdistance=10mm,
+ headerdistance=10mm]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setuptolerance
+ [stretch,tolerant]
+
+\setuptype
+ [lines=hyphenated]
+
+\setuptyping
+ [lines=hyphenated]
+
+\setupitemize
+ [each]
+ [packed]
+
+\setupwhitespace
+ [medium]
+
+\startluacode
+ local skipped = table.tohash { 'id', 'subtype', 'next', 'prev' }
+
+ function document.functions.showfields(s)
+ local t = string.split(s,',')
+ local f = node.fields(t[1],t[2])
+ if f then
+ local d = false
+ for i=1,#f do
+ local fi = f[i]
+ if skipped[fi] then
+ -- okay
+ elseif d then
+ context(', {\tttf %s}', fi)
+ else
+ context('{\tttf %s}', fi)
+ d = true
+ end
+ end
+ end
+ end
+
+ function document.functions.showid(s)
+ local t = string.split(s,',')
+ context('{tttf %s}',node.id(t[1]))
+ if t[2] then
+ context(', {tttf %s}',node.subtype(t[2]))
+ end
+ end
+
+ function document.functions.showsubtypes(s)
+ local s = node.subtypes(s)
+ local d = false
+ for k, v in table.sortedhash(s) do
+ if d then
+ context(', %s = {\\tttf %s}',k,v)
+ else
+ context('%s = {\\tttf %s}',k,v)
+ d = true
+ end
+ end
+ end
+\stopluacode
+
+\unexpanded\def\showfields #1{\ctxlua{document.functions.showfields("#1")}}
+\unexpanded\def\showid #1{\ctxlua{document.functions.showid("#1")}}
+\unexpanded\def\showsubtypes#1{\ctxlua{document.functions.showsubtypes("#1")}}
+
+\definecolor[blue] [b=.5]
+\definecolor[red] [r=.5]
+\definecolor[green] [g=.5]
+\definecolor[maincolor] [b=.5]
+\definecolor[keptcolor] [b=.5]
+\definecolor[othercolor][r=.5,g=.5]
+
+\setupbodyfont[modern] % we need this in examples so we predefine
+
+% \doifmodeelse {atpragma} {
+%
+% % \setupbodyfont
+% % [lucidaot,10pt]
+%
+% \setupbodyfont
+% [dejavu,10pt]
+%
+% \setuphead [chapter] [style=\bfd]
+% \setuphead [section] [style=\bfb]
+% \setuphead [subsection] [style=\bfa]
+% \setuphead [subsubsection][style=\bf]
+%
+% } {
+%
+% \definetypeface[mainfacenormal] [ss][sans] [iwona] [default]
+% \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+% \definetypeface[mainfacenormal] [tt][mono] [modern] [default][rscale=1.1]
+% \definetypeface[mainfacenormal] [mm][math] [iwona] [default]
+%
+% \definetypeface[mainfacemedium] [ss][sans] [iwona-medium][default]
+% \definetypeface[mainfacemedium] [rm][serif][palatino] [default]
+% \definetypeface[mainfacemedium] [tt][mono] [modern] [default][rscale=1.1]
+% \definetypeface[mainfacemedium] [mm][math] [iwona-medium][default]
+%
+% \setupbodyfont
+% [mainfacenormal,10pt]
+%
+% \setuphead [chapter] [style=\mainfacemedium\bfd]
+% \setuphead [section] [style=\mainfacemedium\bfb]
+% \setuphead [subsection] [style=\mainfacemedium\bfa]
+% \setuphead [subsubsection][style=\mainfacemedium\bf]
+%
+% }
+
+\writestatus{luatex manual}{we assume that dejavu math is available}
+
+\setupbodyfont % assumes dejavu-math
+ [dejavu,10pt]
+
+\setuphead [chapter] [align={flushleft,broad},style=\bfd]
+\setuphead [section] [align={flushleft,broad},style=\bfb]
+\setuphead [subsection] [align={flushleft,broad},style=\bfa]
+\setuphead [subsubsection][align={flushleft,broad},style=\bf]
+
+\setuphead [chapter] [color=maincolor]
+\setuphead [section] [color=maincolor]
+\setuphead [subsection] [color=maincolor]
+\setuphead [subsubsection][color=maincolor]
+
+\definehead
+ [remark]
+ [subsubsubject]
+
+\setupheadertexts
+ []
+
+\definemixedcolumns
+ [twocolumns]
+ [n=2,
+ balance=yes,
+ before=\blank,
+ after=\blank]
+
+\definemixedcolumns
+ [threecolumns]
+ [twocolumns]
+ [n=3]
+
+\definemixedcolumns
+ [fourcolumns]
+ [threecolumns]
+ [n=4]
+
+% if we do this we also need to do it in table cells
+%
+% \setuptyping
+% [color=maincolor]
+%
+% \setuptype
+% [color=maincolor]
+
+\definetyping
+ [functioncall]
+
+\startMPdefinitions
+
+ color luaplanetcolor ; luaplanetcolor := \MPcolor{maincolor} ;
+ color luaholecolor ; luaholecolor := white ;
+ numeric luaextraangle ; luaextraangle := 0 ;
+ numeric luaorbitfactor ; luaorbitfactor := .25 ;
+
+ vardef lualogo = image (
+
+ % Graphic design by A. Nakonechnyj. Copyright (c) 1998, All rights reserved.
+
+ save d, r, p ; numeric d, r, p ;
+
+ d := sqrt(2)/4 ; r := 1/4 ; p := r/8 ;
+
+ fill fullcircle scaled 1
+ withcolor luaplanetcolor ;
+ draw fullcircle rotated 40.5 scaled (1+r)
+ dashed evenly scaled p
+ withpen pencircle scaled (p/2)
+ withcolor (luaorbitfactor * luaholecolor) ;
+ fill fullcircle scaled r shifted (d+1/8,d+1/8)
+ rotated - luaextraangle
+ withcolor luaplanetcolor ;
+ fill fullcircle scaled r shifted (d-1/8,d-1/8)
+ withcolor luaholecolor ;
+ luaorbitfactor := .25 ;
+ ) enddef ;
+
+\stopMPdefinitions
+
+\startuseMPgraphic{luapage}
+ StartPage ;
+
+ fill Page withcolor \MPcolor{othercolor} ;
+
+ luaorbitfactor := 1 ;
+ picture p ; p := lualogo xsized (3PaperWidth/5) ;
+ draw p shifted center Page shifted (0,-.5ypart center ulcorner p) ;
+
+ StopPage ;
+\stopuseMPgraphic
+
+% \starttexdefinition luaextraangle
+% % we can also just access the last page and so in mp directly
+% \ctxlua {
+% context(\lastpage == 0 and 0 or \realfolio*360/\lastpage)
+% }
+% \stoptexdefinition
+
+\startuseMPgraphic{luanumber}
+ % luaextraangle := \luaextraangle;
+ luaextraangle := if (LastPageNumber == 0) : 0 else : (RealPageNumber / LastPageNumber) * 360 fi;
+ luaorbitfactor := 0.25 ;
+ picture p ; p := lualogo ;
+ setbounds p to boundingbox fullcircle ;
+ draw p ysized 1cm ;
+\stopuseMPgraphic
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\setupbackgrounds
+ [leftpage]
+ [background=page]
+
+\setupbackgrounds
+ [rightpage]
+ [background=page]
+
+\startsetups pagenumber:right
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\useMPgraphic{luanumber}}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm,x=1.5cm]
+ [frame=off,height=1cm,width=1cm,offset=overlay]
+ {\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm,x=2.5cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\getmarking[chapter]}
+\stopsetups
+
+\startsetups pagenumber:left
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm,x=2.5cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\getmarking[chapter]}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm,x=1.5cm]
+ [frame=off,height=1cm,width=1cm,offset=overlay]
+ {\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\useMPgraphic{luanumber}}
+\stopsetups
+
+\unexpanded\def\nonterminal#1>{\mathematics{\langle\hbox{\rm #1}\rangle}}
+
+% taco's brainwave -) .. todo: create a typing variant so that we can avoid the !crlf
+
+\newcatcodetable\syntaxcodetable
+
+\unexpanded\def\makesyntaxcodetable
+ {\begingroup
+ \catcode`\<=13 \catcode`\|=12
+ \catcode`\!= 0 \catcode`\\=12
+ \savecatcodetable\syntaxcodetable
+ \endgroup}
+
+\makesyntaxcodetable
+
+\unexpanded\def\startsyntax {\begingroup\catcodetable\syntaxcodetable \dostartsyntax}
+\unexpanded\def\syntax {\begingroup\catcodetable\syntaxcodetable \dosyntax}
+ \let\stopsyntax \relax
+
+\unexpanded\def\syntaxenvbody#1%
+ {\par
+ \tt
+ \startnarrower
+ \maincolor #1
+ \stopnarrower
+ \par}
+
+\unexpanded\def\syntaxbody#1%
+ {\begingroup
+ \maincolor \tt #1%
+ \endgroup}
+
+\bgroup \catcodetable\syntaxcodetable
+
+!gdef!dostartsyntax#1\stopsyntax{!let<!nonterminal!syntaxenvbody{#1}!endgroup}
+!gdef!dosyntax #1{!let<!nonterminal!syntaxbody{#1}!endgroup}
+
+!egroup
+
+\definetyping
+ [texsyntax]
+ [color=maincolor]
+
+% end of wave
+
+\setupinteraction
+ [state=start,
+ focus=standard,
+ style=,
+ color=,
+ contrastcolor=]
+
+\placebookmarks
+ [chapter,section,subsection]
+
+\setuplist
+ [chapter,section,subsection,subsubsection]
+ [interaction=all,
+ width=3em]
+
+\setuplist
+ [chapter]
+ [style=bold,
+ color=keptcolor]
+
+\setuplist
+ [subsection,subsubsection]
+ [margin=3em,
+ width=5em]
+
+% Hans doesn't like the bookmarks opening by default so we comment this:
+%
+% \setupinteractionscreen
+% [option=bookmark]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex b/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
new file mode 100644
index 000000000..8ab56f85d
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
@@ -0,0 +1,70 @@
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-titlepage
+
+\startstandardmakeup
+
+ \switchtobodyfont
+ [mainfacemedium]
+
+ \definedfont[Bold*default at \the\dimexpr.08\paperheight\relax] \setupinterlinespace
+
+ \setlayer
+ [page]
+ {\useMPgraphic{luapage}}
+
+ \setlayerframed
+ [page]
+ [preset=middletop,
+ voffset=.05\paperheight]
+ [align=middle,
+ foregroundcolor=blue,
+ frame=off]
+ {Lua\TeX\\Reference}
+
+ \definedfont[Bold*default at 18pt] \setupinterlinespace
+
+ \setlayerframed
+ [page]
+ [preset=rightbottom,
+ offset=.01\paperheight]
+ [align=flushright,
+ foregroundcolor=blue,
+ frame=off]
+ {\doifsomething{\documentvariable{status}}{\documentvariable{status}\par}
+ \currentdate[month,space,year]\par
+ Version \documentvariable{version}}
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \start
+ \raggedleft
+ \definedfont[Bold*default at 48pt]
+ \setupinterlinespace
+ \blue Lua\TeX \endgraf Reference \endgraf Manual \endgraf
+ \stop
+
+ \vfill
+
+ \definedfont[Bold*default at 12pt]
+
+ \starttabulate[|l|l|]
+ \NC copyright \EQ Lua\TeX\ development team \NC \NR
+ \NC more info \EQ www.luatex.org \NC \NR
+ \NC version \EQ \currentdate \doifsomething{\documentvariable{snapshot}}{(snapshot \documentvariable{snapshot})} \NC \NR
+ \stoptabulate
+
+\stopstandardmakeup
+
+\setupbackgrounds
+ [leftpage]
+ [setups=pagenumber:left]
+
+\setupbackgrounds
+ [rightpage]
+ [setups=pagenumber:right]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex.tex b/doc/context/sources/general/manuals/luatex/luatex.tex
new file mode 100644
index 000000000..cd67f07f2
--- /dev/null
+++ b/doc/context/sources/general/manuals/luatex/luatex.tex
@@ -0,0 +1,40 @@
+% macros=mkvi
+
+% \tex vs \type vs \syntax vs. \luatex
+% \em \it \/
+
+% "context --nodates --nocompression luatex" can be used for comparison
+% runs, not that we do it
+
+\environment luatex-style
+\environment luatex-logos
+
+\dontcomplain
+
+\startdocument
+ [version=0.98.0,
+ status=Pre-release]
+
+\component luatex-titlepage
+
+\startfrontmatter
+ \component luatex-contents
+ \component luatex-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component luatex-enhancements
+ \component luatex-modifications
+ \component luatex-lua
+ \component luatex-languages
+ \component luatex-fonts
+ \component luatex-math
+ \component luatex-nodes
+ \component luatex-callbacks
+ \component luatex-tex
+ \component luatex-graphics
+ \component luatex-fontloader
+ \component luatex-backend
+\stopbodymatter
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/manuals-explaining-contents.tex b/doc/context/sources/general/manuals/manuals-explaining-contents.tex
new file mode 100644
index 000000000..3e1fadabc
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-contents.tex
@@ -0,0 +1,11 @@
+% language=uk
+
+\startcomponent manuals-explaining-contents
+
+ \starttitle[title=Contents][color=darkgray]
+
+ \placelist[chapter][criterium=text]
+
+ \stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/manuals-explaining-cover.tex b/doc/context/sources/general/manuals/manuals-explaining-cover.tex
new file mode 100644
index 000000000..8b4f3e891
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-cover.tex
@@ -0,0 +1,199 @@
+% language=uk
+
+% Please try to be original and don't just copy this cover page as I don't want
+% confusion and be associated with (or responsibility for the look of) similar
+% looking documents.
+
+\startenvironment manuals-explaining-cover
+
+\startsetups document:abstract
+ \framed [
+ foregroundstyle=bold,
+ foregroundcolor=white,
+ width=7.5cm,
+ align={normal,tolerant},
+ frame=off,
+ strut=no,
+ ] {
+ \getbuffer[abstract]
+ }
+\stopsetups
+
+\startMPinclusions
+
+ def DrawCoverPage (expr what) =
+
+ numeric variant ; variant := 1 ;
+
+ StartCover ;
+
+ save width, height, size, anchor, offset, colors ;
+
+ numeric width, height, size ; pair anchor, offset ; string colors[] ;
+
+ colors[1] := "\documentvariable{cover:color:1}" ;
+ colors[2] := "\documentvariable{cover:color:2}" ;
+ colors[3] := "\documentvariable{cover:color:3}" ;
+ colors[4] := "\documentvariable{cover:color:4}" ;
+ colors[5] := "\documentvariable{cover:color:5}" ;
+
+ fill CoverPage enlarged PaperBleed withcolor colors[5] ;
+
+ fill Spine bottomenlarged -.5PaperHeight withcolor colors[3] ;
+ fill Spine topenlarged -.5PaperHeight withcolor colors[2] ;
+
+ width := FrontPageWidth ;
+ height := FrontPageHeight ;
+ size := 4 * width / 3 ;
+ offset := (-1cm,1cm) ;
+ anchor := .5[lrcorner CoverPage,urcorner CoverPage] ;
+
+ fill anchored.llft(lltriangle scaled size, urcorner FrontPage) withcolor colors[1] ;
+ fill anchored.urt (urtriangle scaled size, llcorner FrontPage) withcolor colors[2] ;
+ fill anchored.lrt (lrtriangle scaled size, ulcorner FrontPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner FrontPage) withcolor colors[4] ;
+
+ fill anchored.lrt (lrtriangle scaled size, ulcorner BackPage) withcolor colors[1] ;
+ fill anchored.llft(lltriangle scaled size, urcorner BackPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner BackPage) withcolor colors[2] ;
+ fill anchored.urt (urtriangle scaled size, llcorner BackPage) withcolor colors[4] ;
+
+ draw thetextext.llft(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 45 ysized .350height,
+ anchor shifted (6*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{subtitle}")
+ rotated 45 ysized .275height,
+ anchor shifted (5*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{author}")
+ rotated 45 ysized .200height,
+ anchor shifted (2*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{affiliation}")
+ rotated 45 ysized .200height,
+ anchor shifted (1*offset+offset)
+ ) withcolor white ;
+
+ % for the moment
+
+ if (what = "back") or (what = "cover") :
+
+ draw
+ thetextext.top(
+ textext("\bf \documentvariable{comment}")
+ xsized 4cm,
+ lrcorner Page shifted (-3cm,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ % till here
+
+ width := BackPageWidth ;
+
+ if (what = "back") or (what = "cover") :
+
+ draw thetextext(
+ textext("\bf\setups[document:abstract]")
+ xsized .65width rotated 45,
+ center BackPage
+ ) withcolor white ;
+
+ fi ;
+
+ if what = "cover" :
+
+ draw thetextext.bot(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 90 xsized .8SpineWidth,
+ .5[ulcorner Spine,urcorner Spine] shifted (0,-1cm)
+ ) withcolor white ;
+
+ draw thetextext.top(
+ textext("\bf \documentvariable{author}")
+ rotated 90 xsized .8SpineWidth,
+ .5[llcorner Spine,lrcorner Spine] shifted (0,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ StopCover ;
+
+ if what = "front" :
+ clip currentpicture to FrontPage ;
+ elseif what = "back" :
+ clip currentpicture to BackPage ;
+ else :
+ drawboundary CoverPage ;
+ fi ;
+
+ enddef ;
+
+\stopMPinclusions
+
+\startsetups document:start
+
+ % \startcovermatter[front]
+
+ \setupbackgrounds[page][background=]
+
+ \doifmodeelse {simple} {
+
+ \startMPpage
+ DrawCoverPage("front") ;
+ \stopMPpage
+
+ } {
+
+ \startMPpage
+ DrawCoverPage("cover") ;
+ \stopMPpage
+
+ }
+
+ \page[dummy]
+
+ \setupbackgrounds[page][background=page]
+
+ \resetuserpagenumber
+
+ % \stopcovermatter
+
+\stopsetups
+
+\startsetups document:stop
+
+ \doifmodeelse {simple} {
+
+ % \startcovermatter[back]
+
+ \page
+
+ \setuppagenumbering[page=]
+
+ \setupbackgrounds[page][background=]
+
+ \page[empty,left]
+
+ \setupmakeup[doublesided=no,page=no]
+
+ \startMPpage
+ DrawCoverPage("back") ;
+ \stopMPpage
+
+ % \stopcovermatter
+
+ } {
+
+ % not needed as it's part of the cover page
+
+ }
+
+\stopsetups
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/manuals-explaining-environment.tex b/doc/context/sources/general/manuals/manuals-explaining-environment.tex
new file mode 100644
index 000000000..f896c219b
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-environment.tex
@@ -0,0 +1,325 @@
+\startenvironment manuals-explaining-environment
+
+\usemodule[abr-01]
+\usemodule[visual]
+\usemodule[simulate]
+\usemodule[chart]
+\usemodule[nodechart]
+
+% done
+
+\dontcomplain
+
+\definepapersize
+ [book]
+ [width=18cm,
+ height=24cm]
+
+\setuppapersize
+ [book]
+
+\startmode[oversized]
+
+ \setuppapersize
+ [book]
+ [oversized]
+
+ \setuplayout
+ [marking=on]
+
+\stopmode
+
+\setuplayout
+ [location=middle,
+ topspace=1.5cm,
+ bottomspace=2cm,
+ backspace=2cm,
+ cutspace=2cm,
+ header=0cm,
+ footer=0cm,
+ margindistance=.25cm,
+ margin=1.25cm,
+ width=middle,
+ height=middle]
+
+\setuplayout
+ [style=\ss]
+
+\usetypescript
+ [dejavu-condensed]
+
+\setupbodyfont
+ [ipaex,9pt]
+
+\setupbodyfont
+ [dejavu,9pt]
+
+\definetyping
+ [narrowtyping]
+ [typing]
+ [bodyfont=dejavu-condensed]
+
+% This is way too ugly for a manual:
+%
+% \setuptyping
+% [indentnext=no]
+%
+% \setupindenting
+% [medium,yes]
+
+\setupwhitespace
+ [big]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setuphead
+ [chapter,section,subsection]
+ [color=\namedstructureuservariable{chapter}{color}]
+
+\setuphead
+ [chapter]
+ [style=\bfc]
+
+\setuphead
+ [section]
+ [style=\bfb]
+
+\setuphead
+ [subsection]
+ [style=\bf,
+ before=\blank,
+ after=\blank]
+
+\startsetups document:chapter:inside
+ \definecolor[maincolor][1.0(\namedheadparameter{chapter}{color})] % this expands the color
+ \definecolor[halfcolor][0.5(maincolor,white)]
+\stopsetups
+
+\setuphead
+ [chapter]
+ [insidesection=\directsetup{document:chapter:inside}]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setuplist
+ [aligntitle=yes]
+
+\setuplist
+ [chapter]
+ [pagenumber=no,
+ style=bold,
+ before={\blank\startcolor[\structurelistuservariable{color}]},
+ after={\placelist[section]\stopcolor}]
+
+\setuplist
+ [chapter,section]
+ [width=3em]
+
+\startuseMPgraphic{page}
+
+ StartPage ;
+
+ linecap := butt ;
+
+ if OnRightPage :
+
+ path p ; p := (
+ urcorner Page shifted (-2cm,0) --
+ urcorner Page --
+ urcorner Page shifted (0,-2cm) -- cycle
+ ) shifted (-2.5mm,-2.5mm) ;
+
+ else :
+
+ path p ; p := (
+ ulcorner Page shifted (2cm,0) --
+ ulcorner Page --
+ ulcorner Page shifted (0,-2cm) -- cycle
+ ) shifted (2.5mm,-2.5mm) ;
+
+ fi ;
+
+ fill p
+ withpen pencircle scaled 1mm
+ withcolor "maincolor" ;
+
+ draw thetextext("\bf\userpagenumber",
+ if OnRightPage : urcorner p shifted (-5mm,-5mm) else : ulcorner p shifted (5mm,-5mm) fi)
+ withcolor white ;
+
+ if OnRightPage :
+
+ path p ; p := (
+ lrcorner Page shifted (-5cm,0) --
+ lrcorner Page
+ ) shifted (-5mm,10mm)
+
+ else :
+
+ path p ; p := (
+ llcorner Page shifted (5cm,0) --
+ llcorner Page
+ ) shifted (5mm,10mm) ;
+
+ fi ;
+
+ draw p
+ withpen pencircle scaled 1mm
+ withcolor "maincolor" ;
+
+ draw if OnRightPage :
+ thetextext.lft("\bf\getspecificstructuretitle{chapter}",lrcorner Page shifted (-5mm,5mm))
+ else :
+ thetextext.rt ("\bf\getspecificstructuretitle{chapter}",llcorner Page shifted ( 5mm,5mm))
+ fi withcolor "\namedstructureuservariable{chapter}{color}" ;
+
+ StopPage ;
+\stopuseMPgraphic
+
+\definecolor[orange] [r=1,g=.6,b=.1]
+
+\definecolor[middlegray] [s=.75]
+\definecolor[darkgray] [s=.25]
+\definecolor[darkred] [r=.5]
+\definecolor[darkgreen] [g=.5]
+\definecolor[darkblue] [b=.5]
+
+\definecolor[darkyellow] [.5(red,green)]
+\definecolor[darkmagenta][.5(red,blue)]
+\definecolor[darkcyan] [.5(green,blue)]
+
+\definecolor[darkorange] [.5(orange)]
+
+\definecolor[maincolor] [darkgray]
+
+\definecolor [mix-1] [r=1,g=.75,b=.25] \definecolor [darkmix-1][.5(mix-1)]
+\definecolor [mix-2] [r=1,g=.25,b=.75] \definecolor [darkmix-2][.5(mix-2)]
+\definecolor [mix-3] [r=.75,g=1,b=.25] \definecolor [darkmix-3][.5(mix-3)]
+\definecolor [mix-4] [r=.75,g=.25,b=1] \definecolor [darkmix-4][.5(mix-4)]
+\definecolor [mix-5] [r=.25,g=1,b=.75] \definecolor [darkmix-5][.5(mix-5)]
+\definecolor [mix-6] [r=.25,g=.75,b=1] \definecolor [darkmix-6][.5(mix-6)]
+
+% \blackrule[height=1cm,width=10cm,color=mix-1] \blackrule[height=1cm,width=10cm,color=darkmix-1]
+% \blackrule[height=1cm,width=10cm,color=mix-2] \blackrule[height=1cm,width=10cm,color=darkmix-2]
+% \blackrule[height=1cm,width=10cm,color=mix-3] \blackrule[height=1cm,width=10cm,color=darkmix-3]
+% \blackrule[height=1cm,width=10cm,color=mix-4] \blackrule[height=1cm,width=10cm,color=darkmix-4]
+% \blackrule[height=1cm,width=10cm,color=mix-5] \blackrule[height=1cm,width=10cm,color=darkmix-5]
+% \blackrule[height=1cm,width=10cm,color=mix-6] \blackrule[height=1cm,width=10cm,color=darkmix-6]
+
+% modules
+
+\setupsorting
+ [logo]
+ [style=]
+
+\setupFLOWchart
+ [width=6em,
+ height=3em,
+ offset=-2em, % maybe default : todo: hoffset and voffset
+ dx=2em,
+ dy=2em]
+
+\setupFLOWlines
+ [color=maincolor]
+
+\setupFLOWshapes
+ [rulecolor=maincolor]
+
+% tables
+
+\setuptabulate
+ [rulethickness=.5mm,
+ rulecolor=maincolor]
+
+% special commands
+
+\startuniqueMPgraphic{reference}{color}
+ fill
+ .5[llcorner OverlayBox,ulcorner OverlayBox] --
+ .5[ulcorner OverlayBox,urcorner OverlayBox] --
+ .5[urcorner OverlayBox,lrcorner OverlayBox] --
+ .5[lrcorner OverlayBox,llcorner OverlayBox] -- cycle
+ withcolor \MPvar{color} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{reference}{color}
+ path p ; p := OverlayBox enlarged -1mm ;
+ filldraw
+ ulcorner p --
+ urcorner p --
+ lrcorner p --
+ .5[lrcorner p,llcorner p] shifted (0,-1ExHeight) --
+ llcorner p -- cycle
+ withpen pencircle scaled 1mm
+ withcolor \MPvar{color} ;
+ setbounds currentpicture to OverlayBox enlarged 1ExHeight ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [reference]
+ [\uniqueMPgraphic{reference}{color=maincolor,}]
+
+\definecolor
+ [maincolor]
+ [red]
+
+\definemargindata
+ [appendixdata]
+ %[inner]
+ [outer]
+ [stack=yes]
+
+\definemarginframed
+ [appendixdata]
+ [width=3.5em,
+ height=\lineheight, % we know what goes in there
+ align=middle,
+ offset=overlay,
+ foregroundcolor=white,
+ background=reference]
+
+% todo:
+%
+% \appendixdata[reference=bla]{}
+%
+% whole data
+
+% interaction
+
+\setupinteraction
+ [state=start,
+ click=no,
+ color=,
+ contrastcolor=,
+ style=]
+
+% whatever
+
+\definestartstop
+ [notabene]
+ [before=\blank,
+ after=\blank,
+ style=\em]
+
+\setuphyphenation
+ [method=default]
+
+
+\startbuffer[underconstruction]
+\startnotabene
+ This document is still under construction. The functionality discussed here
+ will stay and more might show up. Of course there are errors, and they're all
+ mine. The text is not checked for spelling errors. Feel free to let me know
+ what should get added.
+\stopnotabene
+\stopbuffer
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/manuals-xml-environment.tex b/doc/context/sources/general/manuals/manuals-xml-environment.tex
new file mode 100644
index 000000000..5a5d9a92d
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-xml-environment.tex
@@ -0,0 +1,385 @@
+% language=uk
+%
+% author : Hans Hagen, PRAGMA ADE, NL
+% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported
+
+\usemodule[abr-01]
+
+\startmode[booklet]
+
+ \setuppapersize [A4][oversized]
+
+\stopmode
+
+% \setuppapersize[A4][doubleoversized,landscape]
+% \setuparranging[2UP]
+% \setuppagenumbering[alternative={singlesided,doublesided}]
+
+\setuplayout
+ [location=middle,
+ marking=on]
+
+% \logo [EXAMPLE] {eXaMpLe}
+
+\setuptabulate
+ [rulethickness=1pt,
+ rulecolor=darkgreen]
+
+\setuptables
+ [rulethickness=1pt,
+ rulecolor=darkgreen]
+
+% \usesymbols
+% [cc]
+
+\setuplayout
+ [width=middle,
+ topspace=2cm,
+ top=1cm,
+ cutspace=1.5cm, % 2.0cm
+ backspace=3.5cm,
+ header=1cm,
+ footer=1.5cm,
+ bottom=1cm,
+ leftmargin=2.5cm,
+ rightmargin=1cm,
+ margindistance=.5cm,
+ height=middle]
+
+\definelayout
+ [titlepage]
+ [topspace=2cm,
+ backspace=1.5cm,
+ bottomspace=1.5cm]
+
+\startmode[screen]
+
+ \setuppapersize
+ [S6][S6]
+
+ \setuplayout
+ [topspace=1cm,
+ bottomspace=1.5cm,
+ top=1cm,
+ header=0cm,
+ footer=.5cm,
+ bottom=1cm]
+
+ \setupinteraction
+ [state=start,
+ color=,
+ contrastcolor=,
+ style=,
+ menu=on]
+
+ \setupinteractionmenu
+ [bottom]
+ [left=\hfill,
+ middle=\hskip.25cm,
+ background=color,
+ backgroundcolor=darkgray,
+ color=lightgray,
+ contrastcolor=lightgray,
+ style=\bfb\setstrut\strut,
+ offset=2pt,
+ height=fit,
+ frame=off]
+
+ \startinteractionmenu[bottom]
+ \startbut [PreviousJump] GoBack \stopbut
+ \startbut [previouspage] Previous \stopbut
+ \startbut [nextpage] Next \stopbut
+ \startbut [CloseDocument] Exit \stopbut
+ \stopinteractionmenu
+
+\stopmode
+
+\setupbodyfont[dejavu,11pt]
+
+\definecolor [cyan] [g=.4,b=.4]
+\definecolor [magenta] [r=.4,b=.4]
+\definecolor [yellow] [r=.4,g=.4]
+\definecolor [red] [r=.4]
+\definecolor [green] [g=.4]
+\definecolor [blue] [b=.4]
+\definecolor [gray] [s=.4]
+
+\definecolor [lightgray] [s=.8]
+
+\definecolor [FillColor] [gray]
+
+\definecolor [NumberColor] [red]
+\definecolor [BannerColor] [green]
+\definecolor [AspectColor] [blue]
+
+% *rgb *rgy *rby *gby *rgc *rbc *gbc rgm rbm gbm
+% *cmy cmr cyr myr cmg cyr myg cmb cyb myb
+
+\definepalet[steps] [NumberColor=red, BannerColor=green, AspectColor=blue]
+\definepalet[mathml] [NumberColor=cyan, BannerColor=magenta,AspectColor=yellow]
+\definepalet[chemml] [NumberColor=red, BannerColor=green, AspectColor=yellow]
+\definepalet[physml] [NumberColor=red, BannerColor=blue, AspectColor=yellow]
+\definepalet[figures][NumberColor=green,BannerColor=blue, AspectColor=yellow]
+\definepalet[charts] [NumberColor=red, BannerColor=green, AspectColor=cyan]
+\definepalet[examns] [NumberColor=red, BannerColor=green, AspectColor=cyan]
+\definepalet[general][NumberColor=red, BannerColor=blue, AspectColor=cyan]
+\definepalet[tables] [NumberColor=green,BannerColor=blue, AspectColor=cyan]
+
+\setupindenting
+ [medium]
+
+\indenting
+ [yes]
+
+\defineoverlay
+ [nextpage]
+ [\overlaybutton{nextpage}]
+
+\startusableMPgraphic{cover}
+ path p, q ; color maincolor[], fillcolor ; numeric r, w, h ;
+ numeric cellwidth, cellspread, linewidth ;
+ maincolor[0] := \MPcolor{BannerColor} ;
+ maincolor[1] := \MPcolor{AspectColor} ;
+ maincolor[2] := \MPcolor{NumberColor} ;
+ fillcolor := \MPcolor{FillColor} ;
+ cellwidth := 75pt ;
+ cellspread := 50pt ;
+ linewidth := 1/10pt ;
+ w := OverlayWidth + cellwidth ;
+ h := OverlayHeight + cellwidth ;
+ q := unitsquare xyscaled (OverlayWidth,OverlayHeight) ;
+ fill unitsquare xyscaled (w,h) withcolor fillcolor ;
+ set_grid (w,h,cellwidth-cellspread,cellwidth-cellspread) ;
+ forever :
+ if new_on_grid(uniformdeviate w, uniformdeviate h) :
+ draw image (
+ p := unitsquare ;
+ r := floor(uniformdeviate 3) ;
+ fill p enlarged linewidth withcolor fillcolor ;
+ fill p withcolor maincolor[r] ;
+ draw
+ if r = 0 :
+ urcorner p -- .5[llcorner p,ulcorner p] -- lrcorner p
+ elseif r = 1 :
+ ulcorner p -- .5[lrcorner p,urcorner p] -- llcorner p
+ else :
+ urcorner p -- llcorner p
+ fi
+ withpen pencircle scaled linewidth withcolor fillcolor ;
+ )
+ scaled (cellwidth randomized cellspread)
+ shifted (dx,dy) ;
+ fi ;
+ exitif grid_full ;
+ endfor ;
+ % currentpicture := currentpicture shifted -(cellwidth,cellwidth) ;
+ % clip currentpicture to q ;
+\stopusableMPgraphic
+
+\defineoverlay
+ [cover]
+ [\useMPgraphic{cover}]
+
+\setupbackgrounds
+ [page]
+ [offset=3mm]
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ path p ; p :=
+ ulcorner Page --
+ llcorner Page --
+ llcorner Page shifted (BackSpace-LeftMarginDistance,0) --
+ ulcorner Page shifted (BackSpace-LeftMarginDistance,0) -- cycle ;
+ fill
+ (p enlarged PageOffset) rightenlarged -PageOffset
+ withcolor \MPcolor{FillColor} ;
+ picture t ; t := textext("\bfb \lightgray \ConTeXt\ XML") rotated 90 ;
+ setbounds t to boundingbox t enlarged ExHeight ;
+ t := image ( label.llft(t,urcorner Page )) ;
+ fill boundingbox t topenlarged PageOffset rightenlarged PageOffset withcolor \MPcolor{FillColor} ;
+ draw t ;
+ StopPage ;
+ setbounds currentpicture to boundingbox currentpicture enlarged PageOffset ;
+\stopreusableMPgraphic
+
+\setuphead
+ [section]
+ [command=\texdefinition{document:head:section},
+ color=lightgray,
+ style=\bfb,
+ before={\blank[2*big]},
+ after={\blank[2*big]},]
+
+\starttexdefinition document:head:section #1#2
+ \hbox {
+ \hskip-\marginwidth
+ \hskip-\margindistance
+ \framed [
+ width=.5\textwidth,
+ offset=2pt,
+ frame=off,
+ background=color,
+ backgroundcolor=AspectColor
+ ] {
+ \hskip.25cm
+ #2
+ \hfill
+ }
+ }
+\stoptexdefinition
+
+\setupheadertexts
+ []
+
+\setupbottom
+ [margin]
+ [color=lightgray,
+ style=\bfb]
+
+\setuptyping
+ [color=green]
+
+\setuptype
+ [color=green]
+
+\doifmodeelse {booklet} {
+
+ \setupbottomtexts
+ [margin]
+ [\setup{document:pagenumber}] []
+ [\setup{document:pagenumber}] []
+
+} {
+
+ \setupbottomtexts
+ [margin]
+ [\setup{document:pagenumber}] []
+
+}
+
+\setvariables
+ [document]
+ [title=No Title,
+ author=No Author]
+
+\startmode[atpragma]
+
+ \setvariables
+ [document]
+ [line:1=Con\TeX t XML,
+ line:2=Pragma ADE / Hasselt NL,
+ line:3=MkIV]
+
+\stopmode
+
+\startsetups document:pagenumber
+ \hbox to \marginwidth {
+ \framed [
+ width=.25\textwidth,
+ offset=2pt,
+ frame=off,
+ background=color,
+ backgroundcolor=NumberColor
+ ] {
+ \hskip.25cm
+ \documentvariable{title}
+ \hfill
+ \pagenumber
+ \hskip.25cm
+ }
+ }
+\stopsetups
+
+\startsetups document:start
+
+ \doifsomething {\documentvariable{palet}} {
+ \setuppalet[\documentvariable{palet}]
+ }
+
+ \setupbackgrounds
+ [page]
+ [background={cover,nextpage}]
+
+ \setuplayout
+ [titlepage]
+
+ \startstandardmakeup[bottomstate=stop]
+ \raggedcenter
+ \lightgray
+ \start
+ \definedfont[SansBold at 100pt]
+ \setupinterlinespace
+ \WORD{\documentvariable{title}}
+ \par
+ \stop
+ \vfilll
+ \doifsomething {\documentvariable{line:1}} {
+ \dontleavehmode\hbox{\definedfont[SansBold at 50pt]\setstrut\strut\documentvariable{line:1}}
+ }
+ \doifsomething {\documentvariable{line:2}} {
+ \vskip25pt
+ \dontleavehmode\hbox{\definedfont[SansBold at 25pt]\setstrut\strut\documentvariable{line:2}}
+ }
+ \doifsomething {\documentvariable{line:3}} {
+ \vskip25pt
+ \dontleavehmode\hbox{\definedfont[SansBold at 25pt]\setstrut\strut\documentvariable{line:3}}
+ }
+ \stopstandardmakeup
+
+ \setuplayout
+
+ \setupbackgrounds
+ [page]
+ [background={page,banner}]
+
+\stopsetups
+
+\startsetups document:stop
+
+ \definecolor[AspectColor][green]
+
+ \startsubject[title=Colofon]
+
+ This manual is part of the \CONTEXT\ distribution, and is authored and maintained by \space
+ \documentvariable{author}. \CONTEXT\ is developed at \PRAGMA, Hasselt, The Netherlands.\space
+ This manual is produced on \currentdate.
+
+ \stopsubject
+
+\stopsetups
+
+% \usemodule[set-11]
+
+% \setupframedtexts
+% [setuptext]
+% [rulethickness=1pt,
+% framecolor=green,
+% background=color,
+% backgroundcolor=lightgray]
+
+% titles:
+
+% Description
+% Structure
+% Usage
+% XML example
+% \TeX\ example
+% Configuring
+% Documentation
+
+\continueifinputfile{s-man-10.mkiv}
+
+\startdocument[title=Title,author=Author,palet=steps]
+
+ \startsection[title=Test]
+
+ \input knuth
+
+ \stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/math/math-framing-001.tex b/doc/context/sources/general/manuals/math/math-framing-001.tex
new file mode 100644
index 000000000..5081b8ad2
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-framing-001.tex
@@ -0,0 +1,113 @@
+\setuplayout[topspace=5mm,bottomspace=5mm,height=middle,header=1cm,footer=0cm]
+
+\starttext
+
+\startbuffer[sample]
+ \enabletrackers[formulas.framed] \showboxes
+ \startformula
+ e = mc^2
+ \stopformula
+ \par
+ \startformula
+ e = mc^2
+ \stopformula
+ \startformula
+ e = mc^2
+ \stopformula
+ \startformula
+ e \dorecurse{12} { = mc^2 }
+ \stopformula
+ \startplaceformula
+ \startformula
+ e = mc^2
+ \stopformula
+ \stopplaceformula
+ \startplaceformula
+ \startformula
+ e \dorecurse{12} { = mc^2 }
+ \stopformula
+ \stopplaceformula
+\stopbuffer
+
+\startbuffer[setup-b]
+\setupformula
+ [option=frame]
+\stopbuffer
+
+\startbuffer[setup-d]
+\setupformulaframed
+ [frame=on,
+ %toffset=10pt,
+ %boffset=10pt,
+ foregroundcolor=white,
+ background=color,
+ backgroundcolor=gray]
+\stopbuffer
+
+\startbuffer[setup-c]
+\setupformula
+ [frame=number]
+\stopbuffer
+
+\startbuffer[all]
+\start
+ \typebuffer[setup-a]
+ \getbuffer[setup-a]
+ \getbuffer[sample]
+ \typebuffer[setup-b]
+ \typebuffer[setup-d]
+ \getbuffer[setup-b]
+ \getbuffer[setup-d]
+ \getbuffer[sample]
+ \typebuffer[setup-c]
+ \getbuffer[setup-c]
+ \getbuffer[sample]
+ \page
+\stop
+\stopbuffer
+
+\startbuffer
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushleft]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushleft,location=left]
+ \stopbuffer
+ \getbuffer[all]
+
+ \startbuffer[setup-a]
+ \setupformula
+ [align=middle]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=middle,location=left]
+ \stopbuffer
+ \getbuffer[all]
+
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushright]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushright,location=left]
+ \stopbuffer
+ \getbuffer[all]
+\stopbuffer
+
+\getbuffer
+
+\startbuffer[setup-b]
+\setupformula
+ [option={tight,frame}]
+\stopbuffer
+
+\getbuffer
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/math/math-mkiv.tex b/doc/context/sources/general/manuals/math/math-mkiv.tex
new file mode 100644
index 000000000..c20f12049
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-mkiv.tex
@@ -0,0 +1,58 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\environment math-layout
+
+\startproduct math-mkiv
+
+\startdocument
+
+\component math-titlepage
+
+\startfrontmatter
+ \component math-contents
+ \component math-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component math-spacing
+ \component math-framing
+ \component math-numbering
+ \component math-combining
+\stopbodymatter
+
+\stopdocument
+
+\stopproduct
+
+% when we compare these tables with the one that the ff loader produces we notice
+% some differences: this is because (deduced from source) that ff does some kind
+% of interpolation for missing heights for the last kern (for n=2 adding 100 and
+% for adding 1 the max height) ... this is probably a side effect if missing specs
+% here we don't do that
+% \enabledirectives[fontgoodies.mathkerning]
+
+% \startTEXpage[offset=2mm]
+% \startcombination[4*2]
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [modern]$V_i^i = W_i^i$\hss}} {\infofont modern}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [cambria]$V_i^i = W_i^i$\hss}} {\infofont cambria}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont[lucidaot]$V_i^i = W_i^i$\hss}} {\infofont lucida}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [dejavu]$V_i^i = W_i^i$\hss}} {\infofont dejavu}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [pagella]$V_i^i = W_i^i$\hss}} {\infofont pagella}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [termes]$V_i^i = W_i^i$\hss}} {\infofont termes}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [bonum]$V_i^i = W_i^i$\hss}} {\infofont bonum}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [schola]$V_i^i = W_i^i$\hss}} {\infofont schola}
+% \stopcombination
+% \stopTEXpage
diff --git a/doc/context/sources/general/manuals/math/math-spacing-001.tex b/doc/context/sources/general/manuals/math/math-spacing-001.tex
new file mode 100644
index 000000000..a0ccda449
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-spacing-001.tex
@@ -0,0 +1,73 @@
+\doifmodeelse {with-struts} {
+ \def\Line{\dontleavehmode{\showstruts\dorecurse{18}{x \strut x }}}
+} {
+ \def\Line{\dontleavehmode{\showstruts\dorecurse{18}{x x }}}
+}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=1mm,
+ topspace=1cm]
+
+\setupbodyfont
+ [17.3pt]
+
+\starttext
+
+\Line
+
+\startformula
+ x
+\stopformula
+
+\Line
+
+\startformula
+ y
+\stopformula
+
+\Line
+
+\startformula
+ \strut x
+\stopformula
+
+\Line
+
+\startformula \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+\stopalign \stopformula
+
+\Line
+
+\startformula \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+\stopalign \stopformula
+
+\Line
+
+\startformula
+\mframed
+ [offset=1mm,loffset=3mm,roffset=3mm] {
+ a + b = c
+ }
+\stopformula
+
+\Line
+
+\startformula
+\mframed
+ [offset=1mm,loffset=3mm,roffset=3mm] {
+ \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+ \stopalign
+ }
+\stopformula
+
+\Line
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/mcommon.tex b/doc/context/sources/general/manuals/mcommon.tex
new file mode 100644
index 000000000..94b5f9bf5
--- /dev/null
+++ b/doc/context/sources/general/manuals/mcommon.tex
@@ -0,0 +1,210 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\startenvironment mcommon
+
+% modules
+
+\usemodule[abr-02]
+
+% layout
+
+% \startmode[screen]
+% \setuppapersize[S6][S6]
+% \setupinteractionscreen[options=max]
+% \stopmode
+
+\setuplayout
+ [topspace=15mm,
+ header=15mm,
+ headerdistance=0mm,
+ footer=0cm,
+ width=middle,
+ height=middle]
+
+\setupinteraction
+ [state=start,
+ color=,
+ contrastcolor=,
+ style=]
+
+% fonts
+
+\definetypeface [mainface] [rm] [serif] [pagella] [default]
+\definetypeface [mainface] [ss] [sans] [heros] [default] % [rscale=1.1]
+\definetypeface [mainface] [tt] [mono] [heros] [default] % [rscale=1.1]
+\definetypeface [mainface] [mm] [math] [pagella] [default]
+
+\setupbodyfont[mainface,12pt]
+
+\definefont [BigFont] [SansBold*default at 60pt]
+\definefont [MedFont] [SansBold*default at 30pt]
+
+% colors (historically)
+
+\definecolor [NopColor] [r=.6,g=.4,b=.5]
+\definecolor [AltColor] [r=.4,g=.6,b=.5]
+\definecolor [TheColor] [r=.4,g=.5,b=.6]
+\definecolor [TmpColor] [r=.6,g=.5,b=.4]
+
+\definecolor [NopColor] [r=.40,g=.20,b=.20]
+\definecolor [AltColor] [r=.20,g=.40,b=.20]
+\definecolor [TheColor] [r=.20,g=.20,b=.40]
+\definecolor [TmpColor] [r=.40,g=.40,b=.20]
+
+\definecolor [red] [NopColor]
+\definecolor [green] [AltColor]
+\definecolor [blue] [TheColor]
+\definecolor [yellow][TmpColor]
+
+% spacing
+
+\setupwhitespace
+ [big]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+% verbatim
+
+\setuptype
+ [color=AltColor]
+
+\setuptyping
+ [color=AltColor]
+
+% structure
+
+\setupitemize
+ [each]
+ [color=TheColor]
+
+\definedescription
+ [switch]
+ [headstyle=type,
+ headcolor=TheColor,
+ location=serried,
+ width=broad]
+
+\defineenumeration
+ [topic]
+ [location=serried,
+ width=broad,
+ headstyle=,
+ headcolor=TheColor,
+ text=,
+ left={[},
+ right={]}]
+
+\setuphead
+ [section]
+ [style=\bfb,
+ color=TheColor]
+
+\setuplist
+ [section]
+ [alternative=c,
+ color=TheColor,
+ textcolor=black,
+ pagecolor=black]
+
+% whatever
+
+\setupsystem
+ [random=medium]
+
+\setupfloats
+ [ntop=100]
+
+\setupinteraction
+ [style=,
+ color=NopColor,
+ contrastcolor=NopColor]
+
+% tables and frames
+
+\setuptabulate
+ [rulethickness=.5pt,
+ rulecolor=AltColor]
+
+\setuptables
+ [rulethickness=.5pt,
+ rulecolor=AltColor]
+
+\setupframedtexts
+ [rulethickness=.5pt,
+ framecolor=TheColor,
+ width=\textwidth]
+
+% quick reference things
+
+\usemodule[set-11] \loadsetups
+
+\setupframedtexts
+ [setuptext]
+ [rulethickness=.5pt,
+ framecolor=AltColor]
+
+% titlepage
+
+\startsetups titlepage
+ \defineoverlay
+ [logo]
+ [\useMPgraphic{titlepage}{width=\overlaywidth,height=\overlayheight}]
+ \setupbackgrounds
+ [page]
+ [background=logo]
+ \startstandardmakeup
+ \dontcomplain
+ \BigFont
+ \setupinterlinespace
+ \vfill
+ \setupalign[left]
+ \let\\=\par
+ \dontleavehmode
+ \rotate
+ [rotation=90]
+ {\color
+ [lightgray]
+ {\getvariable{document}{title}}}
+ \par
+ \stopstandardmakeup
+ \setupbackgrounds
+ [page]
+ [background=]
+\stopsetups
+
+\startsetups colofon
+ \blank[2*big]
+ \testpage[3]
+ \startpacked
+ \getvariable{document}{author}\par
+ \getvariable{document}{affiliation}\par
+ \getvariable{document}{location}\par
+ \stoppacked
+\stopsetups
+
+\setupdocument
+ [title=No Title,
+ before=\setups{titlepage},
+ after=\setups{colofon}]
+
+% urls
+
+\useurl[gpl-simple] [http://creativecommons.org/licenses/GPL/2.0/]
+\useurl[gpl-legal] [http://creativecommons.org/licenses/GPL/2.0/legalcode]
+\useurl[bysa-simple][http://creativecommons.org/licenses/by-sa/4.0/]
+\useurl[bysa-legal] [http://creativecommons.org/licenses/by-sa/4.0/legalcode]
+
+\useurl[garden] [http://contextgarden.net]
+\useurl[install] [http://wiki.contextgarden.net/ConTeXt_Standalone]
+\useurl[texlive] [http://www.tug.org/texlive/]
+\useurl[group] [http://group.contextgarden.net]
+\useurl[list] [http://www.ntg.nl/mailman/listinfo/ntg-context]
+\useurl[development][http://www.ntg.nl/mailman/listinfo/dev-context]
+\useurl[announce] [http://www.ntg.nl/mailman/listinfo/ann-context]
+\useurl[collector] [http://tracker.luatex.org]
+\useurl[pragma] [http://www.pragma-ade.com]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/readme/mreadme.tex b/doc/context/sources/general/manuals/readme/mreadme.tex
new file mode 100644
index 000000000..32c1684d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/readme/mreadme.tex
@@ -0,0 +1,390 @@
+% interface=en engine=luatex language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\environment mcommon
+
+% copied from cont-log: readme_logo
+
+\startuseMPgraphic{titlepage}{width,height}
+ numeric width ; width = \MPvar{width} ;
+ numeric height ; height = \MPvar{height} ;
+ numeric delta ; delta := width/10 ;
+ numeric circle ; circle := 2.5delta ;
+ color c ; c := (.2,.4,.6) ;
+ path p, q, r ;
+ p := unitsquare xscaled width yscaled height ;
+ z1 = (delta,height-2delta) ;
+ z2 = (width-delta,height-delta) ;
+ z3 = (width/2-delta,2delta+circle) ;
+ z4 = (x3,delta+circle/2) ;
+ q := z1 { dir -15 } .. z2 & z2 { dir -105 } .. z3 & z3 { dir 135 } .. z1 & cycle ;
+ r := fullcircle xscaled circle yscaled (.85circle) rotated 15 shifted z4 ;
+ pickup pencircle scaled (delta/1.5) ;
+ fill p withcolor .50c ;
+ fill q withcolor .75c ;
+ fill r withcolor .75c ;
+ draw p withcolor c ;
+ draw q withcolor c ;
+ pickup pencircle scaled (delta/2) ;
+ draw r withcolor c ;
+ setbounds currentpicture to p ;
+\stopuseMPgraphic
+
+\startdocument
+ [title={Read Me First},
+ author={Hans Hagen},
+ affiliation={PRAGMA ADE},
+ location={Hasselt NL}]
+
+\startsubject[title={Introduction}]
+
+What licence suits best for a \TEX\ like system is a matter of taste. Personally
+we dislike any licence that needs more than a few pages of dense legal code to
+get the message across. A \TEX\ related system like \CONTEXT\ is a hybrid of
+programs, scripts and|/|or macro code as well as documentation and sample code,
+including graphics. \TEX\ related systems also have a long standing tradition of
+providing support structures for users. In order to make support feasible, a
+\TEX\ based system like \CONTEXT\ assumes a certain logic and structure in the
+way the related files are named and organized in a tree structure. Even a small
+change in one of the elements may let such a system behave differently than
+manuals suggest. Swap a font, change some style defaults, leave out some pieces,
+and users may end up in confusion. A licence does not give a user any guarantees!
+
+In order to satisfy those responsible for distributing \CONTEXT, we need to
+choose a licence that makes them feel comfortable. Unfortunately we don't feel
+that comfortable with a licence that does not provide the guarantees that a
+system will not be adapted in such ways that the advertised behaviour changes. On
+the other hand, it is the responsibility of those distributing and extending the
+system to make sure that this does not happen. However, users should not
+automatically assume that what they get shipped is the same as the original,
+which is why we stress that support (from our side) will only be given on
+unaltered systems.
+
+First of all, what is \CONTEXT ? It's just a bunch of macros, written in \TEX\
+and \METAPOST, meant for typesetting documents. The macros are accompanied by
+some scripts, written in \PERL\ (mainly the older scripts) \RUBY\ (also older
+ones) and \LUA\ (the current fashion). The \CONTEXT\ distribution comes with a
+few fonts, files that help manage resources (e.g.\ map files needed for \MKII),
+as well as patterns (based on official ones, so this is a derived work).
+
+The \CONTEXT\ distribution is packaged in a zip file organized in the \TDS\
+structure.
+
+\starttabulate[|lT|p|]
+\NC \type {cont-tmf.zip} \NC the main distribution that has all relevant files \NC \NR
+\NC \type {cont-tst.7z} \NC a bunch of test files that can also serve as examples \NC \NR
+\NC \type {cont-mpd.zip} \NC a \METAPOST\ to \PDF\ converter (not needed in \CONTEXT) \NC \NR
+\NC \type {cont-ppc.zip} \NC a macro package for typesetting chemistry (not needed in \CONTEXT) \NC \NR
+\NC \type {cont-sci.zip} \NC configuration files for using \CONTEXT\ in the \SCITE\ editor \NC \NR
+\stoptabulate
+
+There are two flavours of \CONTEXT: \MKII\ and \MKIV. The first one is frozen and
+will not be extended. It runs on top of \PDFTEX\ or \XETEX. The \MKIV\ version is
+actively developed and runs on top of \LUATEX\ (an engine that is developed
+alongside \CONTEXT\ but that can also be used for other macro packages).
+
+The documentation can be downloaded from our website or the Wiki. Some manuals
+ship with source code. We might ship more source code but only when the source is
+stable and clean and can serve as an example.
+
+That said, what licence does apply? We need to distinguish between things that
+resemble a program on the one hand and documentation on the other hand. We
+(currently) use a different licence for either of them.
+
+\stopsubject
+
+\startsubject[title={The Code}]
+
+The program code (i.e. anything not under the \type {/doc} subtree) is
+distributed under the
+
+\startnarrower
+\goto{Creative Commons GNU GPL}[url(gpl-simple)]
+\stopnarrower
+
+For practical purposes distributers may also choose the \LATEX\ project licence,
+which is considered to be a bit more \TEX\ friendly. (BSD alike licences also
+apply well for \CONTEXT.)
+
+In practice, users may forget about the legal part, if only because I haven't
+even read (and understood) it completely myself, so let's stick to what Creative
+Commons makes of it:
+
+\startcolor[blue]
+The GNU General Public License is a Free Software license. Like any Free Software
+license, it grants to you the four following freedoms:
+
+\startitemize
+ \startitem
+ The freedom to run the program for any purpose.
+ \stopitem
+ \startitem
+ The freedom to study how the program works and adapt it to your needs.
+ \stopitem
+ \startitem
+ The freedom to redistribute copies so you can help your neighbour.
+ \stopitem
+ \startitem
+ The freedom to improve the program and release your improvements to the
+ public, so that the whole community benefits.
+ \stopitem
+\stopitemize
+
+You may exercise the freedoms specified here provided that you comply with the
+express conditions of this license. The principal conditions are:
+
+You must conspicuously and appropriately publish on each copy distributed an
+appropriate copyright notice and disclaimer of warranty and keep intact all the
+notices that refer to this License and to the absence of any warranty; and give
+any other recipients of the Program a copy of the GNU General Public License
+along with the Program. Any translation of the GNU General Public License must be
+accompanied by the GNU General Public License.
+
+If you modify your copy or copies of the program or any portion of it, or develop
+a program based upon it, you may distribute the resulting work provided you do so
+under the GNU General Public License. Any translation of the GNU General Public
+License must be accompanied by the GNU General Public License.
+
+If you copy or distribute the program, you must accompany it with the complete
+corresponding machine-readable source code or with a written offer, valid for at
+least three years, to furnish the complete corresponding machine-readable source
+code.
+
+Any of these conditions can be waived if you get permission from the copyright
+holder.
+
+Your fair use and other rights are in no way affected by the above.
+\stopcolor
+
+Many source filed mention the \quotation {\CONTEXT\ Development Team} as
+copyright holder. This is because over time users submit patches and whenever
+something happens to the main author, those involved in development can take
+over without the need to bother about derived work. In the end the \CONTEXT\
+group is the place to get more information.
+
+\stopsubject
+
+\startsubject[title={Recommendations}]
+
+Here are a few recommendations in case you want to distribute, extend of embed
+\CONTEXT\ in applications:
+
+\startitemize
+
+\startitem
+ You can best leave the code base untouched. Most of \CONTEXT\ provides hooks
+ and it's relatively easy to overload code. Leave the lower level system code
+ untouched: changes may backfire when you update. Asking for more hooks is the
+ best way to go.
+\stopitem
+
+\startitem
+ Put your own code in the right subpaths, i.e.\ modules approved by the
+ development team under \type {.../third}, and styles and whatever else under
+ \type {.../user}. This way your code will not interfere with existing code
+ and updating will give less problems. Keep in mind that \TEX\ systems have
+ their own way and order in locating files, and the load order often matters.
+\stopitem
+
+\startitem
+ Don't copy styles and change a few lines, but load the base one and
+ built|/|patch on top of that. In the end you may benefit from improvements to
+ the base style.
+\stopitem
+
+\startitem
+ Be original. The whole idea behind \CONTEXT\ is that you can write your own
+ styles. On the \CONTEXT\ mailing list as well as on the Wiki there are enough
+ advanced users to help you make a start.
+\stopitem
+
+\startitem
+ Don't hesitate to submit bugs reports and ask for extensions. It may even be
+ that what you want is already present but yet undocumented.
+\stopitem
+
+\startitem
+ If things don't work as expected, check to what extend your system matches
+ the (more or less) standard. We provide so called minimal \CONTEXT\ trees
+ that can serve as a reference. Because \CONTEXT\ evolves, make sure your
+ system is up to date. The \CONTEXT\ garden provides ways to install and
+ update the standard distribution.
+\stopitem
+
+\startitem
+ The scripts can best be called using \type {mtxrun}. This lessens dependencies
+ on the location in the tree and ensures upward compatibility. It also prevents
+ clashes with similar scripts.
+\stopitem
+
+\startitem
+ Some scripts depend on each other. Don't mess around with the existing
+ functionality and names of the scripts and then feed them back into the
+ standard distributions.
+\stopitem
+
+\stopitemize
+
+\stopsubject
+
+\startsubject[title={Documents}]
+
+The documentation is provided under another Creative Commons licence:
+
+\startnarrower
+ \goto{Attribution ShareAlike}[url(bysa-simple)]
+\stopnarrower
+
+The manuals that are distributed with \CONTEXT\ comes with a rather liberal
+license. However, we try to adapt these documents to upgrades in the (sub)systems
+that they describe and derived work can therefore conflict with existing
+functionality and we cannot be held responsible for that. Many of the manuals
+contain characteristic graphics and personal notes or examples that make no sense
+when used out|-|of|-|context.
+
+The mentioned license says:
+
+\startcolor[blue]
+You are free:
+
+\startitemize
+ \startitem to copy, distribute, display, and perform the work \stopitem
+ \startitem to make derivative works \stopitem
+\stopitemize
+
+{\sc Attribution:} You must attribute the work in the manner specified by the
+author or licensor.
+
+{\sc Share Alike:} If you alter, transform, or build upon this work, you may
+distribute the resulting work only under a license identical to this one.
+
+\startitemize
+ \startitem
+ For any reuse or distribution, you must make clear to others the license
+ terms of this work.
+ \stopitem
+ \startitem
+ Any of these conditions can be waived if you get permission from the
+ copyright holder.
+ \stopitem
+\stopitemize
+
+Your fair use and other rights are in no way affected by the above.
+\stopcolor
+
+If you distribute \CONTEXT\ and related software on electronic media as part of
+\TEX\ distributions (either or not for money), you may also distribute the
+manuals and their sources in electronic form, preferable as provided by the
+maintainers of \CONTEXT.
+
+Keep in mind that logos and cover designs are not meant to be copied. We provide
+the source code for some manuals, but we don't always provide all graphics and
+other resources. For instance, in some manuals we use commercial fonts and you
+have to buy those yourself.
+
+We provide the typeset manuals at our website. Those are the official ones. We
+appreciate it if you do not to distribute manuals compiled on your own system as
+substitutes. The manuals are a showcase for what \CONTEXT\ provides. Help us to
+assure the quality.
+
+\stopsubject
+
+\startsubject[title={More information}]
+
+We're not going to fill \mathematics{n}~pages with legal stuff, so if you want to
+know more, you have to consult the web for the legalities mentioned. Here are a
+few starting points:
+
+\startlines
+\goto{\url[gpl-simple]}[url(gpl-simple)]
+\goto{\url[gpl-legal]}[url(gpl-legal)]
+\stoplines
+
+\startlines
+\goto{\url[bysa-simple]}[url(bysa-simple)]
+\goto{\url[bysa-legal]}[url(bysa-legal)]
+\stoplines
+
+\CONTEXT\ itself can be fetched from the main site or the garden:
+
+\startlines
+\goto{\url[pragma]}[url(pragma)]
+\goto{\url[install]}[url(install)]
+\stoplines
+
+These always ship the latest versions. Alternatively you can install the whole
+\TEX\ distribution, which is a yearly snapshot:
+
+\startlines
+\goto{\url[texlive]}[url(texlive)]
+\stoplines
+
+A starting point for support can be found at:
+
+\startlines
+\goto{\url[list]}[url(list)]
+\goto{\url[garden]}[url(garden)]
+\stoplines
+
+And of course there is the \CONTEXT\ group:
+
+\startlines
+\goto{\url[group]}[url(group)]
+\stoplines
+
+Bugs and feature requests can be registered at the collector:
+
+\startlines
+\goto{\url[collector]}[url(collector)]
+\stoplines
+
+Releases are announced at:
+
+\startlines
+\goto{\url[announce]}[url(announce)]
+\stoplines
+
+The developers can be met at:
+
+\startlines
+\goto{\url[development]}[url(development)]
+\stoplines
+
+\stopsubject
+
+\startsubject[title={Disclaimer}]
+
+To play safe we include a disclaimer here, taken from the BSD style licence. For
+some reason such a text is always in unreadable capitals, so \unknown
+
+\start \txx \blue
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR \quotation {AS IS} AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+\stop
+
+\unknown\ and don't bother discussing licence issues and related things with us
+for the mere sake of discussing licence stuff.
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/spacing/spacing-contents.tex b/doc/context/sources/general/manuals/spacing/spacing-contents.tex
new file mode 100644
index 000000000..d7c709e2e
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-contents.tex
@@ -0,0 +1,9 @@
+\startcomponent spacing-contents
+
+\starttitle[title=Contents]
+
+\placelist[chapter,section]
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/spacing/spacing-introduction.tex b/doc/context/sources/general/manuals/spacing/spacing-introduction.tex
new file mode 100644
index 000000000..d4d385c5e
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-introduction.tex
@@ -0,0 +1,19 @@
+\environment spacing-style
+
+\startcomponent spacing-introduction
+
+\startchapter[title=Introduction]
+
+ In this document I will collext some remarks about spacing (related) commands
+ but it will happen stepwise. Feel free to contribute.
+
+ \blank
+
+ \startlines
+ Hans Hagen
+ Hasselt NL
+ \stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex b/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
new file mode 100644
index 000000000..c16afbf0a
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
@@ -0,0 +1,108 @@
+% language=uk
+
+\environment spacing-style
+
+\startcomponent spacing-linecorrection
+
+\startchapter[title=Line correction]
+
+\startbuffer[linecorrection]
+\typebuffer
+\blank
+\enabletrackers[linecorrection.boxes]
+\getbuffer
+\disabletrackers[linecorrection.boxes]
+\blank
+\stopbuffer
+
+We really do out best to make the spacing look as good as possible
+(or at least consistent) but sometimes \TEX\ needs a bit of help.
+An example of a helper is the following:
+
+\startbuffer
+\startlinecorrection
+ \input ward
+\stoplinecorrection
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+When we use the same command with some left and/or right margins set, we get
+this:
+
+\startbuffer
+\startnarrower
+ \startlinecorrection
+ \input ward
+ \stoplinecorrection
+\stopnarrower
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Here we do obey the margins inside the correction box but the box itself is still
+as wide as the current width. A typical case where this happens is:
+
+\startbuffer
+\startitemize
+ \startitem an item:
+ \startlinecorrection
+ \input ward
+ \stoplinecorrection
+ \stopitem
+\stopitemize
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Here is a variant:
+
+\startbuffer
+\startitemize
+ \startitem a local linecorrection:
+ \startlocallinecorrection
+ \input ward
+ \stoplocallinecorrection
+ \stopitem
+\stopitemize
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Both types of correction wrap their content in a box and make sure that the
+spacing around it is visually as good as possible. The local variant uses a box
+fitting the available width taking margins into account and but resetting them
+inside the box. The normal variant applies the margins inside the box. Which one
+you use depends on the situation and content.
+
+You can pass an optional argument that indicates the amount of spacing to be
+added before and after the correction.
+
+\startbuffer
+\startlinecorrection[3*line]
+ \input ward
+\stoplinecorrection
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Normally you don't need this correction. It is mainly used for correcting spacing
+around boxed material, like \type {\framed}:
+
+\startbuffer
+before
+\startlinecorrection
+ \framed{something inbetween}
+\stoplinecorrection
+after
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Because in this document we have set the whitespace this also gets added around
+the box. So, in case your spacing around some special content looks bad, consider
+using these commands.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex b/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
new file mode 100644
index 000000000..4261a3884
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
@@ -0,0 +1,16 @@
+\environment spacing-style
+
+\startdocument
+
+ \component spacing-titlepage
+
+ \startfrontmatter
+ \component spacing-contents
+ \component spacing-introduction
+ \stopfrontmatter
+
+ \startbodymatter
+ \component spacing-linecorrection
+ \stopbodymatter
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/spacing/spacing-style.tex b/doc/context/sources/general/manuals/spacing/spacing-style.tex
new file mode 100644
index 000000000..cf0bae7bf
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-style.tex
@@ -0,0 +1,55 @@
+\startenvironment spacing-style
+
+\setupbodyfont
+ [pagella]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=15mm,
+ header=15mm,
+ footer=0pt,
+ bottomspace=20mm]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupwhitespace
+ [big]
+
+\definecolor
+ [blackcolor]
+ [r=0,b=0,g=0]
+
+\definecolor
+ [whitecolor]
+ [r=1,b=1,g=1]
+
+\definecolor
+ [maincolor]
+ [.25(blackcolor,green)]
+
+\definecolor
+ [extracolor]
+ [.25(whitecolor,green)]
+
+% \blackrule[color=maincolor,width=10cm,,height=10cm]
+% \blackrule[color=extracolor,width=10cm,,height=10cm]
+
+\setuptyping
+ [color=maincolor]
+
+\setuptype
+ [color=maincolor]
+
+\setuphead
+ [chapter]
+ [style=\bfd,
+ color=maincolor]
+
+\setuphead
+ [section]
+ [style=\bfc,
+ color=maincolor]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex b/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex
new file mode 100644
index 000000000..1f21d769a
--- /dev/null
+++ b/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex
@@ -0,0 +1,37 @@
+\environment spacing-style
+
+\startcomponent spacing-titlepage
+
+% This titlepage demonstrates once again how well designed the computer modern monospaced
+% font is, especially when we look at the consistent grayness.
+
+\startMPpage
+
+ fill Page enlarged 4mm withcolor \MPcolor{maincolor} ;
+
+ draw image (
+ for i=1 upto 20 :
+ draw bottomboundary Page shifted (0,100*log(i)) ;
+ endfor ;
+ )
+ xysized (PaperWidth-6mm,PaperHeight-6mm)
+ shifted (3mm,3mm)
+ withcolor \MPcolor{extracolor}
+ withpen pencircle scaled 1mm ;
+
+ numeric a ; a := log(1)*PaperHeight/(log(20)) ;
+ numeric b ; b := log(2)*PaperHeight/(log(20)) ;
+
+ picture p ; p := textext.lrt("\ttbf Spacing in Con\TeX t") xsized(.9PaperWidth) ;
+
+ draw p
+ shifted (.05PaperWidth,(b+a)/2 - ypart center p)
+ withcolor \MPcolor{extracolor} ;
+
+ setbounds currentpicture to Page ;
+
+\stopMPpage
+
+\page[right] \setuppagenumber[number=1]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/sql/sql-mkiv.tex b/doc/context/sources/general/manuals/sql/sql-mkiv.tex
new file mode 100644
index 000000000..ec2c999aa
--- /dev/null
+++ b/doc/context/sources/general/manuals/sql/sql-mkiv.tex
@@ -0,0 +1,492 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[art-01,abr-02]
+
+\definecolor
+ [maincolor]
+ [r=.4]
+
+\setupbodyfont
+ [10pt]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\definefont
+ [TitlePageFont]
+ [file:lmmonolt10-bold.otf]
+
+\setuphead
+ [color=maincolor]
+
+\usesymbols
+ [cc]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=SQL in ConTeXt,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=SQL in \CONTEXT,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage ;
+
+ numeric w ; w := bbwidth(Page) ;
+ numeric h ; h := bbheight(Page) ;
+
+ fill Page withcolor \MPcolor{maincolor} ;
+
+ draw textext.urt("\TitlePageFont Q") xysized (1.1 w,0.9 h) shifted (-.05w,.05h) withcolor .20white ;
+ draw textext.top("\TitlePageFont SQL") xysized (0.4725w,0.13h) shifted (.675w,.24w) withcolor .60white ;
+ draw textext.top("\TitlePageFont CONTEXT") xsized (0.6 w) shifted (.675w,.10w) withcolor .60white ;
+
+ StopPage ;
+
+\stopMPpage
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title=Introduction]
+
+Although \CONTEXT\ is a likely candidate for typesetting content that comes from
+databases it was only in 2011 that I ran into a project where a connection was
+needed. After all, much document related typesetting happens on files or
+dedicated storage systems.
+
+Because we run most projects in an infrastructure suitable for \TEX, it made
+sense to add some helper scripts to the \CONTEXT\ core distribution that deal
+with getting data from (in our case) \MYSQL\ databases. That way we can use the
+already stable infrastructure for installing and updating files that comes with
+\CONTEXT.
+
+As \LUA\ support is nicely integrated in \CONTEXT, and as dealing with
+information from databases involves some kind of programming anyway, there is (at
+least currently) no \TEX\ interface. The examples shown here work in \CONTEXT,
+but you need to keep in mind that \LUA\ scripts can also use this interface.
+
+{\em Although this code is under construction the interfaces are unlikely to
+change, if only because we use it on production.}
+
+\stopsection
+
+\startsection[title=Presets]
+
+In order to consult a database you need to provide credentials. You also need
+to reach the database server, either by using some client program or via a
+library. More about that later.
+
+Because we don't want to key in all that information again and again, we will
+collect it in a table. This also permits us to store it in a file and load it
+on demand. For instance:
+
+\starttyping
+local presets = {
+ database = "test",
+ username = "root",
+ password = "none",
+ host = "localhost",
+ port = 3306,
+}
+\stoptyping
+
+You can put a table in a file \type {presets.lua} like this:
+
+\starttyping
+return {
+ database = "test",
+ username = "root",
+ password = "none",
+ host = "localhost",
+ port = 3306,
+}
+\stoptyping
+
+and then load it as follows:
+
+\starttyping
+local presets = table.load("presets.lua")
+\stoptyping
+
+If you really want, you can use some library to open a connection, execute a
+query, collect results and close the connection, but here we use just one
+function that does it all. The presets are used to access the database and the
+same presets will be used more often it makes sense to keep a connection open as
+long as possible. That way you can execute much more queries per second,
+something that makes sense when there are many small ones, as in web related
+services. A connection is made persistent when the presets have an \type {id}
+key, like
+
+\starttyping
+presets.id = "myproject"
+\stoptyping
+
+\stopsection
+
+\startsection[title=Templates]
+
+A query often looks like this:
+
+\starttyping
+SELECT
+ `artist`, `title`
+FROM
+ `cd`
+WHERE
+ `artist` = 'archive' ;
+\stoptyping
+
+However, often you want to use the same query for multiple lookups, in which case
+you can do this:
+
+\starttyping
+SELECT
+ `artist`, `title`
+FROM
+ `cd`
+WHERE
+ `artist` = '%artist%' ;
+\stoptyping
+
+In the next section we will see how \type {%artist%} can be replaced by a more
+meaningful value. You can a percent sign by entering two in a row: \type {%%}.
+
+As with any programming language that deals with strings natively, you need a
+way to escape the characters that fence the string. In \SQL\ a field name is
+fenced by \type {``} and a string by \type {''}. Field names can often be
+used without \type {``} but you can better play safe.
+
+\starttyping
+`artist` = 'Chilly Gonzales'
+\stoptyping
+
+Escaping of the \type {'} is simple:
+
+\starttyping
+`artist` = 'Jasper van''t Hof'
+\stoptyping
+
+When you use templates you often pass a string as variable and you don't want to
+be bothered with escaping them. In the previous example we used:
+
+\starttyping
+`artist` = '%artist%'
+\stoptyping
+
+When you expect embedded quotes you can use this:
+
+\starttyping
+`artist` = '%[artist]%'
+\stoptyping
+
+In this case the variable {artist} will be escaped. When we reuse a template we
+store it in a variable:
+
+\starttyping
+local template = [[
+ SELECT
+ `artist`, `title`
+ FROM
+ `cd`
+ WHERE
+ `artist` = '%artist%' ;
+]]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Queries]
+
+In order to execute a query you need to pass the previously discussed presets
+as well as the query itself.
+
+\starttyping
+local data, keys = utilities.sql.execute {
+ presets = presets,
+ template = template,
+ variables = {
+ artist = "Dream Theater",
+ },
+}
+\stoptyping
+
+The variables in the presets table can also be passed at the outer
+level. In fact there are three levels of inheritance: settings, presets
+and module defaults.
+
+\starttabulate
+\NC presets \NC a table with values \NC \NR
+\NC template \NC a query string \NC \NR
+\NC templatefile \NC a file containing a template \NC \NR
+\NC \em resultfile \NC a (temporary) file to store the result \NC \NR
+\NC \em queryfile \NC a (temporary) file to store a query \NC \NR
+\NC variables \NC variables that are subsituted in the template \NC \NR
+\NC username \NC used to connect to the database \NC \NR
+\NC password \NC used to connect to the database \NC \NR
+\NC host \NC the \quote {machine} where the database server runs on \NC \NR
+\NC port \NC the port where the database server listens to \NC \NR
+\NC database \NC the name of the database \NC \NR
+\stoptabulate
+
+The \type {resultfile} and \type {queryfile} parameters are used when a client
+approach is used. When a library is used all happens in memory.
+
+When the query succeeds two tables are returned: \type {data} and \type {keys}. The
+first is an indexed table where each entry is a hash. So, if we have only one
+match and that match has only one field, you get something like this:
+
+\starttyping
+data = {
+ {
+ key = "value"
+ }
+}
+
+keys = {
+ "key"
+}
+\stoptyping
+
+\stopsection
+
+\startsection[title=Converters]
+
+All values in the result are strings. Of course we could have provided some
+automatic type conversion but there are more basetypes in \MYSQL\ and some are
+not even standard \SQL. Instead the module provides a converter mechanism
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ { name = "id", type = "number" },
+ { name = "name", type = "string" },
+ { name = "enabled", type = "boolean" },
+}
+\stoptyping
+
+You can pass the converter to the execute function:
+
+\starttyping
+local data, keys = utilities.sql.execute {
+ presets = presets,
+ template = template,
+ converter = converter,
+ variables = {
+ name = "Hans Hagen",
+ },
+}
+\stoptyping
+
+In addition to numbers, strings and booleans you can also use a function
+or table:
+
+\starttyping
+local remap = {
+ ["1"] = "info"
+ ["2"] = "warning"
+ ["3"] = "debug"
+ ["4"] = "error"
+}
+
+local converter = utilities.sql.makeconverter {
+ { name = "id", type = "number" },
+ { name = "status", type = remap },
+}
+\stoptyping
+
+I use this module for managing \CONTEXT\ jobs in web services. In that case we
+need to store jobtickets and they have some common properties. The definition of
+the table looks as follows: \footnote {The tickets manager is part of the
+\CONTEXT\ distribution.}
+
+\starttyping
+CREATE TABLE IF NOT EXISTS %basename% (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `token` varchar(50) NOT NULL,
+ `subtoken` INT(11) NOT NULL,
+ `created` int(11) NOT NULL,
+ `accessed` int(11) NOT NULL,
+ `category` int(11) NOT NULL,
+ `status` int(11) NOT NULL,
+ `usertoken` varchar(50) NOT NULL,
+ `data` longtext NOT NULL,
+ `comment` longtext NOT NULL,
+
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `id_unique_index` (`id` ASC),
+ KEY `token_unique_key` (`token`)
+)
+DEFAULT CHARSET = utf8 ;
+\stoptyping
+
+We can register a ticket from (for instance) a web service and use an independent
+watchdog to consult the database for tickets that need to be processed. When the
+job is finished we register this in the database and the web service can poll for
+the status.
+
+It's easy to imagine more fields, for instance the way \CONTEXT\ is called, what
+files to use, what results to expect, what extra data to pass, like style
+directives, etc. Instead of putting that kind of information in fields we store
+them in a \LUA\ table, serialize that table, and put that in the data field.
+
+The other way around is that we take this data field and convert it back to \LUA.
+For this you can use a helper:
+
+\starttyping
+local results = utilities.sql.execute { ... }
+
+for i=1,#results do
+ local result = results[i]
+ result.data = utilities.sql.deserialize(result.data)
+end
+\stoptyping
+
+Much more efficient is to use a converter:
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ ...
+ { name = "data", type = "deserialize" },
+ ...
+}
+\stoptyping
+
+This way you don't need to loop over the result and deserialize each data
+field which not only takes less runtime (often neglectable) but also takes
+less (intermediate) memory. Of course in some cases it can make sense to
+postpone the deserialization.
+
+A variant is not to store a serialized data table, but to store a key|-|value
+list, like:
+
+\starttyping
+data = [[key_1="value_1" key_2="value_2"]]
+\stoptyping
+
+Such data fields can be converted with:
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ ...
+ { name = "data", type = utilities.parsers.keq_to_hash },
+ ...
+}
+\stoptyping
+
+You can imagine more converters like this, and if needed you can use them to
+preprocess data as well.
+
+\starttabulate[|Tl|p|]
+\NC "boolean" \NC This converts a string into the value \type {true} or \type {false}.
+ Valid values for \type {true} are: \type {1}, \type {true}, \type
+ {yes}, \type {on} and \type {t} \NC \NR
+\NC "number" \NC This one does a straightforward \type {tonumber} on the value. \NC \NR
+\NC function \NC The given function is applied to value. \NC \NR
+\NC table \NC The value is resolved via the given table. \NC \NR
+\NC "deserialize" \NC The value is deserialized into \LUA\ code. \NC \NR
+\NC "key" \NC The value is used as key which makes the result table is now hashed
+ instead of indexed. \NC \NR
+\NC "entry" \NC An entry is added with the given name and optionally with a default
+ value. \NC \NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Typesetting]
+
+For good reason a \CONTEXT\ job often involves multiple passes. Although the
+database related code is quite efficient it can be considered a waste of time
+and bandwidth to fetch the data several times. For this reason there is
+another function:
+
+\starttyping
+local data, keys = utilities.sql.prepare {
+ tag = "table-1",
+ ...
+}
+
+-- do something useful with the result
+
+local data, keys = utilities.sql.prepare {
+ tag = "table-2",
+ ...
+}
+
+-- do something useful with the result
+\stoptyping
+
+The \type {prepare} alternative stores the result in a file and reuses
+it in successive runs.
+
+\stopsection
+
+\startsection[title=Methods]
+
+Currently we have several methods for accessing a database:
+
+\starttabulate
+\NC client \NC use the command line tool, pass arguments and use files \NC \NR
+\NC library \NC use the standard library (somewhat tricky in \LUATEX\ as we need to work around bugs) \NC \NR
+\NC lmxsql \NC use the library with a \LUA\ based pseudo client (stay in the \LUA\ domain) \NC \NR
+\NC swiglib \NC use the (still experimental) library that comes with \LUATEX \NC \NR
+\stoptabulate
+
+All methods use the same interface (\type {execute}) and hide the dirty details
+for the user. All return the data and keys tables and all take care of the proper
+escaping and parsing.
+
+\stopsection
+
+\startsection[title=Helpers]
+
+There are some helper functions and extra modules that will be described when
+they are stable.
+
+There is an \quote {extra} option to the \type {context} command that can be used
+to produce an overview of a database. You can get more information about this
+with the command:
+
+\starttyping
+context --extra=sql-tables --help
+\stoptyping
+
+\stopsection
+
+\startsection[title=Colofon]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/start/cont-en-extra.xml b/doc/context/sources/general/manuals/start/cont-en-extra.xml
new file mode 100644
index 000000000..4d41391d0
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/cont-en-extra.xml
@@ -0,0 +1,749 @@
+<?xml version="1.0"?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2004.11.17">
+
+<!--
+Todo:
+
+ -- bycd:section (\setuppagenumbering)
+ -- cd:sectionnumber (\setuppagenumbering)
+-->
+
+<cd:command name="textbackground" type="environment">
+ <cd:sequence>
+ <cd:string value="textbackground"/>
+ </cd:sequence>
+</cd:command>
+
+<cd:command name="textbackground">
+ <cd:sequence>
+ <cd:string value="textbackground"/>
+ </cd:sequence>
+</cd:command>
+
+<cd:command name="setuptextbackground" file="core-pgr.tex">
+ <cd:sequence>
+ <cd:string value="setuptextbackground"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="leftoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="0" default="yes"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="defineinteractionmenu" variant="1" file="core-int.tex">
+ <cd:sequence>
+ <cd:string value="defineinteractionmenu"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords interactive="exclusive">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords interactive="exclusive" list="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="overlay"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="yes"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="unknownreference">
+ <cd:constant type="yes"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="position">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupframed" file="core-rul.tex">
+ <!-- new: rulethickness -->
+ <cd:sequence>
+ <cd:string value="setupframed"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="local"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="autowidth">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="force"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="depth"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="high"/>
+ <cd:constant type="lohi"/>
+ <cd:constant type="low"/>
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="keep"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="none"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="global"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:resolve name="align"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ <cd:parameter name="topframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="bottomframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="leftframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="rightframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="frameoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framedepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecorner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="frameradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="screen"/>
+ <cd:constant type="color"/>
+ <cd:constant type="none"/>
+ <cd:constant type="foreground"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundscreen">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundoffset">
+ <cd:constant type="frame"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgrounddepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcorner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="corner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="radius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="empty">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="namemakeup" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="name"/>
+ <cd:string value="makeup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="startmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="hiding" type="environment">
+ <cd:sequence>
+ <cd:string value="hiding"/>
+ </cd:sequence>
+ <cd:arguments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupthinrules" file="core-rul.tex">
+ <cd:sequence>
+ <cd:string value="setupthinrules"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <!--<cd:constant type="b"/>-->
+ <cd:constant type="c"/>
+ <!--<cd:constant type="d"/>-->
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupitemize" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="setupitemize"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="each"/>
+ </cd:keywords>
+ <cd:keywords optional="yes" list="yes">
+ <cd:constant type="standard" default="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="unpacked"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="autointro"/>
+ <cd:constant type="loose"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="intext"/>
+ <cd:constant type="random"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:parameter name="margin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="items">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="beforehead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="afterhead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:resolve name="align"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="indentnext"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="itemize" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="itemize"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes" list="yes">
+ <cd:constant type="a"/>
+ <cd:constant type="A"/>
+ <cd:constant type="KA"/>
+ <cd:constant type="n"/>
+ <cd:constant type="N"/>
+ <cd:constant type="m"/>
+ <cd:constant type="r"/>
+ <cd:constant type="R"/>
+ <cd:constant type="KR"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="continue"/>
+ <cd:constant type="standard" default="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="intro"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="repeat"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="setupitemize"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="framedtext" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="framedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="setupframedtexts"/>
+ </cd:assignments>
+ <!-- new -->
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="tabulate" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="tabulate"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <!-- change! -->
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupcolors" file="colo-ini.tex">
+ <cd:sequence>
+ <cd:string value="setupcolors"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <!-- change! -->
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="global"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="reduction">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="rgb">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cmyk">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mpcmyk">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mpspot">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="c"/>
+ <cd:constant type="m"/>
+ <cd:constant type="y"/>
+ <cd:constant type="k"/>
+ <cd:constant type="p"/>
+ <cd:constant type="s"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="all"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupinteraction" file="core-nav.tex">
+ <cd:sequence>
+ <cd:string value="setupinteraction"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments interactive="exclusive" list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <!-- change! -->
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="menu">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="click">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="new"/>
+ </cd:parameter>
+ <cd:parameter name="openaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closeaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="openpageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closepageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="calculate">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="symbolset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="date">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keyword">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <!-- maybe this will move elsewhere -->
+ <cd:parameter name="fieldlayer">
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:define name="regime">
+ <cd:constant type="Latin1"/>
+ <cd:constant type="Latin2"/>
+ <cd:constant type="Latin7"/>
+ <cd:constant type="Latin15"/>
+ <cd:constant type="iso-8859-1"/>
+ <cd:constant type="iso-8859-2"/>
+ <cd:constant type="iso-8859-7"/>
+ <cd:constant type="iso-8859-15"/>
+ <cd:constant type="cp1250"/>
+ <cd:constant type="cp1251"/>
+ <cd:constant type="cp1252"/>
+ <cd:constant type="cp1253"/>
+ <cd:constant type="cp1254"/>
+ <cd:constant type="cp1257"/>
+ <cd:constant type="viscii"/>
+ <cd:constant type="cyr"/>
+ <cd:constant type="grk"/>
+ <cd:constant type="mac"/>
+ <cd:constant type="utf8"/>
+ <cd:constant type="unicode"/>
+</cd:define>
+
+<cd:command name="enableregime" file="regi-ini.tex">
+ <cd:sequence>
+ <cd:string value="enableregime"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="regime"/>
+ </cd:keywords>
+ </cd:arguments>
+</cd:command>
+
+</cd:interface>
+
diff --git a/doc/context/sources/general/manuals/start/en/hasseltbook.bib b/doc/context/sources/general/manuals/start/en/hasseltbook.bib
new file mode 100644
index 000000000..ea7bbfd31
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/hasseltbook.bib
@@ -0,0 +1,7 @@
+@INBOOK{book01,
+ author = "Jonker, J.",
+ title = "From Hasselt to America",
+ publisher = "Bookplan Publishers",
+ year = "2012",
+ chapter = "1.2",
+}
diff --git a/doc/context/sources/general/manuals/start/en/hasseltbook.pdf b/doc/context/sources/general/manuals/start/en/hasseltbook.pdf
new file mode 100644
index 000000000..03c894ff4
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/hasseltbook.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/en/hasseltbook.tex b/doc/context/sources/general/manuals/start/en/hasseltbook.tex
new file mode 100644
index 000000000..9c0d319f5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/hasseltbook.tex
@@ -0,0 +1,30 @@
+
+\starttext
+
+\startstandardmakeup
+ \midaligned{\tfd Festivities in Hasselt}
+\stopstandardmakeup
+
+\completecontent
+
+\startchapter[title=Introduction]
+ An introduction.
+\stopchapter
+
+\startchapter[title=Kingsday]
+ Something about the Kingsday in Hasselt.\index{Kingsday}
+\stopchapter
+
+\startchapter[title=Hassailt]
+ Something about Hassailt.\index{Hassailt}
+\stopchapter
+
+\startchapter[title=Euifeest,reference=euifeest]
+ Something about the Euifeest.\index{Euifeest}
+\stopchapter
+
+\completeindex
+
+\stoptext
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex
new file mode 100644
index 000000000..327bc8a6b
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex
@@ -0,0 +1,73 @@
+\startcomponent ma-cb-en-alignments
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Alignment]
+
+\index{alignment}
+
+\Command{\tex{setupalign}}
+\Command{\tex{setup tolerance}}
+\Command{\tex{rightaligned}}
+\Command{\tex{leftlines}}
+\Command{\tex{midaligned}}
+
+Horizontal and vertical alignment can be set up with:
+
+\shortsetup{setupalign}
+
+Single lines can be aligned with:
+
+\starttyping
+\rightaligned{}
+\leftaligned{}
+\midaligned{}
+\stoptyping
+
+An example can illustrate the alignment behavior:
+
+\startbuffer
+\leftaligned {Hasselt was built on a sandhill.}
+\midaligned {Hasselt was built on the crossing of two rivers.}
+\rightaligned {Hasselt's name stems from hazelwood.}
+\stopbuffer
+
+\typebuffer
+
+After processing this would look like:
+
+\getbuffer
+
+Alignment of a paragraph is done with:
+
+\shortsetup{startalignment}
+
+\startbuffer
+\startalignment[flushright,nothyphenated]
+ For Hasselt the 15th and 16th century were relatively unstable times.
+ There were uprises and disputes with neighbouring cities. To be
+ able to defend themselves the city council ordered a number of
+ arquebuses (very primitive firearms). Fourteen of these have survived
+ and now form one of the greatest arquebus collections in Europe.
+\stopalignment
+\stopbuffer
+
+\typebuffer
+
+This will become a rightaligned paragraph without hyphenations:
+
+\getbuffer
+
+In case of alignment you can specify a tolerance and the direction (vertical or
+horizontal). Normally the tolerance is \type{verystrict}. In colums you could
+specify \type{verytolerant}. The tolerance in this manual is:
+
+\starttyping
+\setuptolerance[horizontal,verystrict]
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex
new file mode 100644
index 000000000..bb7ae0250
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex
@@ -0,0 +1,40 @@
+\startcomponent ma-cb-en-backpage
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+This manual describes some features of \CONTEXT, a document
+production system, based on \TEX.
+
+\vfil
+
+\CONTEXT\ offers the user a flexible and high quality
+typesetting environment. No in||depth knowledge of \TEX\
+is needed. The parameter driven character of \CONTEXT\
+enables users to define their own layout rather easy.
+
+\vfil
+
+\CONTEXT\ is developed and tested in a production
+environment and is used for typesetting simple books as
+well as complex documents, paper and/or screen based. This
+introduction manual describes the functionality needed for
+everyday publications, like manuals and educational
+materials.
+
+\vfil
+
+This manual is also available as an interactive document, be
+it in a bit different layout. The macro package \CONTEXT,
+some more advanced examples and additional information can
+be found at www.pragma-ade.com.
+
+\vfil
+
+PRAGMA ADE \break
+Ridderstraat 27 \break
+8061 GH Hasselt NL \break
+www.pragma-ade.com
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex
new file mode 100644
index 000000000..1b8451934
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex
@@ -0,0 +1,63 @@
+\startcomponent ma-cb-en-bibliography
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Bibliography]
+
+\index{bibliography}
+\index{\BIBTEX}
+
+\Command{\tex{setuppublications}}
+\Command{\tex{placepublications}}
+\Command{\tex{setupbibtex}}
+
+\CONTEXT\ support the \BIBTEX\ way of managing article and book references. The data
+is stored in a \type{.bib} file. A data entry in a \BIBTEX\ data file could be:
+
+\startbuffer
+@INBOOK{book01,
+ author = "Jonker, J.",
+ title = "From Hasselt to America",
+ publisher = "Bookplan Publishers",
+ year = "2012",
+ chapter = "1.2",
+}
+\stopbuffer
+
+\typebuffer
+
+After loading the database with \type{\setupbibtex[database=hasseltbook]} the following
+command is available:
+
+\setupbibtex[database={hasseltbook},sort=author]
+\setuppublications[refcommand=authoryear]
+
+\startbuffer
+Please refer to \cite[book01] for more information on famous people
+that were born in Hasselt.
+\stopbuffer
+
+\typebuffer
+
+Which would produce:
+
+\getbuffer
+
+In an appendix you can place the complete book list with:
+
+\startbuffer
+\placepublications[criterium=text]
+\stopbuffer
+
+\typebuffer
+
+At this moment (2013 -- 2014) the bibliography mechanism is being completely
+overhauled, so please visit the \goto {\CONTEXTWIKI} [ url
+(http://wiki.contextgarden.net) ] and the \goto {Pragma ADE website} [ url
+(http://www.pragma-ade.com/overview.htm) ] regularly for information.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex
new file mode 100644
index 000000000..3919ccb01
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex
@@ -0,0 +1,77 @@
+\startcomponent ma-cb-en-chemical
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Chemical stuf,reference=chemical]
+
+\index{chemistry}
+\index{chemical equitation}
+
+\Command{\tex{}chemical}
+
+Chemical structures may look very impressive.
+
+\startbuffer
+\startchemical[scale=small,width=fit,top=3000,bottom=3000]
+ \chemical[SIX,SB2356,DB14,Z2346,SR3,RZ3,SR6,-RZ6,+RZ6]
+ [C,N,C,C,H,H]
+ \chemical[PB:Z1,ONE,Z0,MOV8,Z0,SB24,DB7,Z27,PE][C,C,CH_3,O]
+ \chemical[PB:Z5,ONE,Z0,MOV6,Z0,SB24,DB7,Z47,PE][C,C,H_3C,O]
+ \chemical[SR24,RZ24][CH_3,H_3C]
+ \bottext{Compound A}
+\stopchemical
+\stopbuffer
+
+\placeformula[-]
+\startformula
+ \getbuffer
+\stopformula
+
+\CONTEXT\ relies on \METAPOST\ to draw these kind of chemical structures.
+Although these chemical structures are defined with only two or three commands,
+it takes some practice to get the right results. This is how the input looks:
+
+\typebuffer
+
+Chemical reactions can be typeset within a paragraph or as a display formula with
+the \type{\inlinechemical} and \type{\startchemicalformula} commands:
+
+\startbuffer
+\definefloat
+ [chemicalformula]
+ [chemicalformulas]
+
+One of the steps in the Hasselt canal water treatment is the removal of
+phosphate by means of a chemical reaction with iron:
+
+\placechemicalformula[none][]{}
+ {\startchemicalformula
+ \chemical{Fe(OH)_3}{iron hydroxide}
+ \chemical{PLUS}
+ \chemical{H_3PO_4}{phosphoric acid}
+ \chemical{GIVES}{\hphantom{whatever}}
+ \chemical{FePO_4}{iron phosphate}
+ \chemical{PLUS}
+ \chemical{H_2O}{water}
+ \stopchemicalformula}
+
+The \inlinechemical{FePO_4} is a solid and precipitates in water. It
+is filtered and re-used as a furtilizer resource.
+\stopbuffer
+
+\getbuffer
+
+This is defined by:
+
+\typebuffer
+
+The use of the chemical commands is described in the \goto{PPCHTeX Manual}[ url(manual:chemic) ]
+and the example manual \goto{Chemical Formulas in \CONTEXT} [ url(manual:chemic-ex) ].
+
+\stopchapter
+
+\stopcomponent
+
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex
new file mode 100644
index 000000000..b0e416ee0
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex
@@ -0,0 +1,64 @@
+\startcomponent ma-cb-en-citations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Citations and quotations, reference=quotations]
+
+\index{citation}
+\index{quote}
+
+\Command{\tex{quote}}
+
+The consistent use of quote and quotation marks in the running text is invoked by
+the use of \type{\quote} or \type{\quotation}. For longer text fragments you can use:
+
+\shortsetup{startquotation}
+
+\startbuffer
+In the book \quote{Hasselt, beelden van een middeleeuwse stad} it says:
+\startquotation
+Het stadhuis wordt voor het eerst vermeld in 1431. Oorspronkelijk
+is het een houten huis, dat wordt afgebroken om plaats te maken voor
+een nieuw stadhuis van steen. Dit wordt echter halverwege de 16e eeuw
+ook afgebroken en vervangen door een nog groter pand. Het nieuwe
+stadhuis wordt weer in dezelfde fraaie stijl opgebouwd. De bestuurders
+laten daarmee zien dat het is gebouwd in een tijd van grote welvaart.
+\stopquotation
+\stopbuffer
+
+\typebuffer
+
+In the example below you can see that quotation is language sensitive:
+
+\startbuffer
+\nl Hij zei tegen me: \quotation{In Hasselt noemen ze dat
+ \quote{noaberschop} of zoiets.}
+
+\en He told me: \quotation{In Hasselt they call this
+ \quote{noaberschop} or something like that.}
+
+\de Er sagte zu mir: \quotation{In Hasselt nennt man das
+ \quote{noaberschop} oder so etwas.}
+
+\fr Il a dit: \quotation{À Hasselt on c'appelle \quote{noaberschop}
+ ou quelque chose comme ça.}
+\stopbuffer
+
+\typebuffer
+
+Note the automatic change of the quotation marks in case of a quote within a
+quote.
+
+\startpacked
+\getbuffer
+\stoppacked
+
+You can alter the default settings with:
+
+\shortsetup{setuplanguage}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex
new file mode 100644
index 000000000..1cfeadf9a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex
@@ -0,0 +1,71 @@
+\startcomponent ma-cb-en-color
+
+\project ma-cb
+
+\startchapter[title=Color]
+
+\index{color}
+
+\Command{\tex{setupcolors}}
+\Command{\tex{color}}
+\Command{\tex{definecolor}}
+
+Text, frames or backgrounds can be set in color with:
+
+\shortsetup{color}
+
+Default the basic colors are available. Basic colors are for example
+red, white and blue. A color like orange can be defined with:
+
+\shortsetup{definecolor}
+
+You can define orange like this:
+
+\startbuffer[a]
+\definecolor [darkorange] [c=0.0,m=0.60,y=1.00,k=0.0]
+\definecolor [middleorange] [.5(darkorange)]
+\stopbuffer
+
+\typebuffer[a]
+
+\getbuffer[a]
+
+It is of good practice to check (combinations of) colors on a larger
+surface:
+
+\startbuffer
+\blackrule[width=\hsize,height=1cm,color=red,after=]
+\blackrule[width=\hsize,height=1cm,color=white,after=]
+\blackrule[width=\hsize,height=1cm,color=blue,after=]
+\blackrule[width=\hsize,height=1cm,color=darkorange]
+\stopbuffer
+
+\typebuffer
+
+so you can see if they fit together:
+
+\blank
+
+\getbuffer
+
+A color can be invoked in a number of ways:
+
+\startbuffer
+\startcolor[red]
+On {\darkorange Kingsday} {\blue Hasselt} turns into a
+\color[darkorange]{colorfull} city.
+\stopcolor
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+More information on the use of color models, transparency and palets can be found
+on the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Color) ]
+and in the
+\goto {\em Color Separation} [ url (manual:color) ] manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex
new file mode 100644
index 000000000..06bb30259
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex
@@ -0,0 +1,154 @@
+\startcomponent ma-cb-en-columns
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Columns]
+
+\index{columns}
+
+\Command{\tex{startcolums}}
+\Command{\tex{setupcolumns}}
+\Command{\tex{column}}
+
+Simple sections of text can be typeset in columns. If you preceed a text fragment
+by \type{\startcolumns} and close the text fragment by \type{\stopcolumns}
+everything in between will be set in columns.
+
+\shortsetup{startcolumns}
+
+Let's give an example:
+
+\startbuffer
+\startcolumns[n=3,tolerance=verytolerant]
+ Hasselt is an old Hanseatic City, situated 12~km north of Zwolle
+ at the river Zwartewater.
+
+ ...
+
+ Furthermore some events of special interest should be
+ mentioned. Every year at the end of August Hasselt celebrates
+ the \quote{Eui Festival} (hay festival).
+\stopcolumns
+\stopbuffer
+
+\typebuffer
+
+\startbuffer
+\hyphenation{Ste-pha-nus}
+\startcolumns[n=3,tolerance=verytolerant]
+Hasselt is an old Hanseatic City, situated 12~km north of Zwolle at
+the river Zwartewater.
+
+The city has a long history since obtaining the city charter around
+1252. Part and parcel of this history can be traced back to a large
+number of monuments to be admired in the city center.
+
+There you will find the St. Stephanus church, a late gothic church
+dating back to 1479 with a magnificent organ. The former Municipal
+Building is situated on The Market Place. Constituted between 1500
+and 1550 it houses a large collection of weapons, amongst which one
+of the largest collection of black powder guns (haakhussen) in the
+whole world should be mentioned.
+
+Furthermore there is a corn windmill \quote{The Swallow}, dating back to
+1748 as well as the \quote{Stenendijk}, a unique embankment and the last
+shell limekiln in Europe still in full operation.
+
+The city center with the townmoat adorned by lime-trees, the Van
+Stolkspark and the hustle and bustle at the docks are ideally suited
+for a stroll.
+
+The area around Hasselt is also worth mentioning. In wintertime
+polder Mastenbroek harbours large numbers of geese. In summertime the
+hamlets Gen\-ne, Streukel and Celle\-mui\-den form, together with the very
+rare lapwing flowers (Lat. Fritillaria meleagris) found on the banks
+of the river Zwatewater, the ideal surroundings for walking or
+cycling trips.
+
+Hasselt also is a very important center for watersports. The lakes of
+northwest Overijssel, the river IJssel, the Overijsselse Vecht and
+the Randmeren are within easy reach from the yacht harbour `De
+Molenwaard'. Sailing, fishing, swimming and ca\-noe\-ing can be fully
+enjoyed in Hasselt.
+
+Furthermore some events of special interest should be
+mentioned. Every year at the end of August Hasselt celebrates the
+\quote{Eui Festival} (hay festival).
+\stopcolumns
+\stopbuffer
+
+The result will be a three column text.
+
+\start
+\switchtobodyfont[9pt]
+\getbuffer
+\stop
+
+If possible a new column can be enforced with \type{\column}. You can set up
+columns with:
+
+\shortsetup{setupcolumns}
+
+In most cases you will obtain a better result by type setting the text on
+\quote{grid}. This is done by typing \type{grid=yes} in the command \type
+{\setuplayout}.
+
+If you want to use columns within a framed text \type{\start ... \stopframedtext}
+there is the simple column mechanism.
+
+\startbuffer
+\startframedtext[background=color,backgroundcolor=gray]
+\startsimplecolumns
+ In Hasselt's local newspaper there was a column on the
+ local customs during New Years Eve.
+ ...
+ \midaligned{\inlinechemical{CaC_2,+,2H_2O,GIVES,C_2H_2(g),+,Ca(OH)_2}}
+ ...
+ Nowadays the heavy metal lid of the milk can is replaced by
+ a football. This does not reduce the sound but it is much
+ saver.
+\stopsimplecolumns
+\stopbuffer
+
+\typebuffer
+
+\startbuffer
+\startframedtext[background=color,backgroundcolor=gray,width=\textwidth]
+\startsimplecolumns
+ In Hasselt's local newspaper there was a column on the
+ local customs during new years Eve. Next to the more
+ general custom of eating Dutch doughnuts (oliebollen)
+ and lighting fireworks there is the carbide shooting.
+ What you need is an oldfashioned metal milk can, carbide,
+ a little water and a lighter.
+
+ The carbide and water is mixed in the closed milk can and
+ will produce \inlinechemical{C_2H_2} gas (acetylene), via:
+
+ \midaligned{\inlinechemical{CaC_2,+,2H_2O,GIVES,C_2H_2 (g),+,Ca(OH)_2}}
+
+ The volatile acetylene gas in the milk can is ignited via a small
+ opening in the can. The result is a very loud detonation and the lid
+ flies off.
+
+ It will not surprise you that Hasselts youth has a designated
+ shooting ground for carbide shooting. Nowadays the heavy
+ metal lid of the milk can is replaced by a football. This
+ does not reduce the sound but it is much saver!
+\stopsimplecolumns
+\stopframedtext
+\stopbuffer
+
+This will result in:
+
+\getbuffer
+
+There is an advanced column mechanism available that is described in the
+\goto {\em Columns} [ url (manual:columns)
+] manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex
new file mode 100644
index 000000000..d14d9d202
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex
@@ -0,0 +1,16 @@
+\startcomponent ma-cb-en-commandlist
+
+\project ma-cb
+
+Here we summarize the commands we introduced in the previous chapters. This is
+just a selection of the whole repertoire of \CONTEXT\ commands. Those who want to
+see them all can take a look at the more extensive manual or the {\em Quick
+Reference Manuals} that give a complete overview of all \CONTEXT||commands.
+
+Arguments that are typeset {\sl slanted} are optional and can be omited. The
+number points to the page where the command is explained. Black arrows indicate
+that the command is only of use in interactive documents and gray arrows tell us
+that additional functionality is provided in interactive mode. Keep in mind that
+we only show the commands we described in this manual, there are many more.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex
new file mode 100644
index 000000000..df0d2a293
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex
@@ -0,0 +1,94 @@
+\startcomponent ma-cb-en-commands
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Defining commands / macros]
+
+\CONTEXT\ is a set of macros based on \TEX. \TEX\ is a programming language as
+well as a typographical system. This means that you can do the programming
+yourself if you need that kind of flexability.
+
+You can define a new command with:
+
+\shortsetup{define}
+
+The next example will explain its meaning.
+
+You may have a well illustrated document and you are tired of typing:
+
+\startbuffer
+\placefigure
+ [here,force]
+ [fig:logical name]
+ {Caption.}
+ {\externalfigure[filename][width=5cm]}
+\stopbuffer
+
+\typebuffer
+
+You could define your own command with a few variables like:
+
+\startitemize[packed]
+\item logical name
+\item caption
+\item file name
+\stopitemize
+
+Your command definition and call could look something like
+this:
+
+\startbuffer
+\define[3]\myputfigure
+ {\placefigure
+ [here,force][fig:#1]
+ {#2}{\externalfigure[#3][width=5cm]}}
+
+\myputfigure{lion}{The Dutch lion is a sentry.}{ma-cb-13}
+\stopbuffer
+
+\typebuffer
+
+From then on the \type{\myputfigure} is available.
+Between brackets \type{[3]} indicates that you want to use three variables
+\type{#1}, \type{#2} and \type{#3}. In the command call \type{\myputfigure} you
+have to place these variables between curly braces. The result is shown in
+\in{figure}[fig:lion].
+
+\getbuffer
+
+Very sophisticated commands can be programmed, but this is left to your own
+inventiveness.
+
+In addition to defining commands you can also define \type{\start...\stop}
+command pairs.
+
+\shortsetup{definestartstop}
+
+For example:
+
+\startbuffer
+\definestartstop
+ [attention]
+ [before=\blank\startmarginrule,
+ after=\stopmarginrule\blank]
+
+\startattention
+{\em Hasselter Juffers} are sweet cookies but the name is no
+coincidence. On July 21 in 1233 the {\em Zwartewaterklooster}
+(Blackwater Monastery) was founded. The monastery was meant
+for unmarried girls and women belonging to the nobility of
+Hasselt. These girls and women were called {\em juffers}.
+\stopattention
+\stopbuffer
+
+\typebuffer
+
+This will result in:
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex
new file mode 100644
index 000000000..59c176004
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex
@@ -0,0 +1,55 @@
+\startcomponent ma-cb-en-composedcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Composite characters]
+
+\index{accents}
+\index{foreign characters}
+
+In \in{chapter}[special chars] you have already seen that you have to type more
+than one token to obtain special characters like \# \$ \% \& \_ $\{$ and $\}$.
+
+Characters with accents for example can be composed or coded with specific
+\CONTEXT\ commands in order to display them on paper. In case you have a text
+editor that can display utf8 you can type the composed characters directly.
+
+It is not within the scope of this manual to go into accented characters in math
+mode. See the {\TEX Book} by Donald E. Knuth on that subject.
+
+\in{Table}[tab:composed-characters] shows a few examples and the way you can code
+composed characters.
+
+\placetable
+ [here,force]
+ [tab:composed-characters]
+ {Composed characters.}
+ {\starttable[|c|l|l|c|]
+ \HL
+ \NC \bf Character \NC \bf Composed \NC \bf \CONTEXT\ command \NC \bf UTF8 \NC\SR
+ \HL
+ \NC ü \NC \type{\"u} \NC \type{\uacute} \NC \type{ü} \NC\FR
+ \NC é \NC \type{\'e} \NC \type{\egrave} \NC \type{é} \NC\MR
+ \NC â \NC \type{\^a} \NC \type{\acircumflex} \NC \type{â} \NC\MR
+ \NC ä \NC \type{\"a} \NC \type{\aacute} \NC \type{ä} \NC\MR
+ \NC à \NC \type{\`a} \NC \type{\agrave} \NC \type{à} \NC\MR
+ \NC å \NC \type{\aa} \NC \type{\aring} \NC \type{å} \NC\MR
+ \NC ç \NC \type{\c{c}} \NC \type{\ccedilla} \NC \type{ç} \NC\MR
+ \NC ï \NC \type{\"{\i}} \NC \type{\idiaeresis} \NC \type{ï} \NC\MR
+ \NC î \NC \type{\^{\i}} \NC \type{\icircumflex} \NC \type{î} \NC\MR
+ \NC Ä \NC \type{\"A} \NC \type{\Adiaeresis} \NC \type{Ä} \NC\MR
+ \NC Å \NC \type{\AA} \NC \type{\Aring} \NC \type{Å} \NC\MR
+ \NC É \NC \type{\'E} \NC \type{\Egrave} \NC \type{É} \NC\MR
+ \NC æ \NC \type{\ae} \NC \type{\aeligature} \NC \type{æ} \NC\MR
+ \NC Æ \NC \type{\AE} \NC \type{\AEligature} \NC \type{Æ} \NC\MR
+ \NC ÿ \NC \type{\"y} \NC \type{\ydiaeresis} \NC \type{ÿ} \NC\LR
+ \HL
+ \stoptable}
+
+The character you want to display should be in the font.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex
new file mode 100644
index 000000000..01c8fb608
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex
@@ -0,0 +1,94 @@
+\startcomponent ma-cb-en-descriptions
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Definitions]
+
+\index{definition}
+
+\Command{\tex{definedescription}}
+\Command{\tex{setupdescriptions}}
+
+If you want to display notions, concepts and ideas in a consistent manner you can
+use:
+
+\shortsetup{definedescription}
+
+For example:
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=serried,headstyle=bold,width=broad]
+
+\concept{Hasselter juffer} A sort of biscuit made of puff pastry and
+covered with sugar. It tastes very sweet. \par
+\stopbuffer
+
+\typebuffer
+
+It would look like this:
+
+\getbuffer
+
+But you can also choose other layouts:
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=top,
+ inbetween={\blank[none]},
+ headstyle=bold,
+ width=broad,
+ style=slanted]
+
+\concept{Hasselter bitter} A very strong alcoholic drink (up to 40\%)
+mixed with herbs to give it a special taste. It is sold in a stone
+flask and it should be served {\em ijskoud} (as cold as ice). \par
+
+\definedescription
+ [concept]
+ [alternative=inmargin,headstyle=bold,width=broad]
+
+\concept{Euifeest} A harvest home to celebrate the end of a period of
+hard work. The festivities take place in the last week of August. \par
+\stopbuffer
+
+\start
+\getbuffer
+\stop
+
+If you want to avoid the \type{\par} or when you have more than one paragraph in
+the definition you can use the \type{\start...\stop} construct.
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=right,
+ headstyle=bold,
+ width=broad]
+
+\startconcept{Euifeest} A harvest home to celebrate the end of a
+period of hard work.
+This event takes place at the end of August and lasts one week. The
+city is completely illuminated and the streets are decorated. This
+feast week ends with a {\em Braderie}.
+\stopconcept
+\stopbuffer
+
+\typebuffer
+
+This would become:
+
+\getbuffer
+
+Layout is set up within the second bracket pair of
+\type{\definedescription[][]}. But you can also use:
+
+\shortsetup{setupdescriptions}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex
new file mode 100644
index 000000000..94fdb7ea2
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex
@@ -0,0 +1,117 @@
+\startcomponent ma-cb-en-document
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=How to create a textbook]
+
+\index{input file}
+
+Let's assume you want to create a simple textbook. It has some structure and
+contains a title page, a few chapters, sections and sub sections. Of course there
+is a table of contents.
+
+\CONTEXT\ can create such a document automatically if you offer the right input
+by means of a file. So first you have to create an input file. An input file
+consists of a name and an extension. You can choose any name you want but the
+extension has to be \type{.tex}. If you create a file with the name
+\type{mybook.tex} you will find no difficulties in running \CONTEXT.
+
+An \pagereference[inputfile] input file could look like this:
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\placecombinedlist[content]
+
+\chapter{Introduction}
+
+... ties between Hasselt and America ...
+
+\chapter[rensselaer]{The Rensselaer family}
+
+\section{The first born}
+
+... was born in the year ...
+
+\section{The early years}
+
+... in those days Hasselt was ...
+
+\section{Living and workin in America}
+
+... life in America was ...
+
+\chapter[lansing]{The Lansing family}
+
+... the Lansing family was also ...
+
+\chapter[cuyler]{The Cuyler family}
+
+... much later Tydeman Cuyler ...
+
+\stoptext
+\stopbuffer
+
+{\switchtobodyfont[9pt]\typebuffer}
+
+\CONTEXT\ expects a plain \ASCII\ input file. Of course you can use any
+text|-|editor, as long as you save the file as standard \ASCII\ (also called txt
+file) with the extension \type{.tex}. Note that spaces in the filename are
+not allowed.
+
+The input file contains the text you want to typeset and the \CONTEXT\ commands.
+A \CONTEXT\ command begins with a backslash~\tex{}. With the command
+\type{\starttext} you indicate the beginning of your text.
+
+A command is sometimes followed by an argument which is enclosed by curly braces
+\type{{}}. The command \type{\chapter[cuyler]{The Cuyler family}} that you see in
+the example will have its effect on {\em The Cuyler family}. Its actions will
+have effect on the design, typography and structure. The actions may be:
+
+\startitemize[n,packed]
+\item start a new page
+\item increase chapter number by one
+\item place chapter number in front of chapter title
+\item reserve some vertical space
+\item use a big font
+\item put chapter title (and page number) in the table of contents
+\stopitemize
+
+Other actions concerning running heads, number resetting and interactivity are
+disregarded at this moment.
+
+Sometimes you will see two brackets (\type{[]}) directly after the command. These
+brackets are used to feed specific options to the command. Further on in this
+manual you will get more information on these brackets.
+
+The commands in your input file can have the following appearance:
+
+\starttabulate[|||]
+\HL
+\NC \bf Appearance of command \NC \bf Example \NC\NR
+\HL
+\NC \type{\startcommand ... \stopcommand} \NC \type{\starttext ... \stoptext} \NC\NR
+\NC \type{\startcommand[] ... \stopcommand} \NC \type{\startitemize[packed] ... \stopitemize} \NC\NR
+\NC \type{\command} \NC \type{\item} \NC\NR
+\NC \type{\command[]} \NC \type{\in[cuyler]} \NC\NR
+\NC \type{\command{}[]} \NC \type{\at{page}[cuyler]} \NC\NR
+\NC \type{\command{}} \NC \type{\index{America}} \NC\NR
+\NC \type{\command[]{}} \NC \type{\chapter[cuyler]{The Cuyler family}} \NC\NR
+\HL
+\stoptabulate
+
+If you have \CONTEXT\ process the above example file, you would obtain a very
+simple document with a title page, a few numbered chapters and section headers
+and a table of content (because of \type{\placecombinedlist[content]}).
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex
new file mode 100644
index 000000000..6f2fa5f22
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex
@@ -0,0 +1,106 @@
+\startcomponent ma-cb-en-enumerations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Numbered definitions]
+
+\index{numbered definition}
+
+\Command{\tex{defineenumeration}}
+\Command{\tex{setupenumerations}}
+
+With \type{\defineenumeration} you can number text elements like remarks or
+questions. If you want to make numbered remarks in your document you use:
+
+\shortsetup{defineenumeration}
+
+For example:
+
+\startbuffer[a]
+\defineenumeration
+ [remark]
+ [alternative=top,
+ text=Remark,
+ inbetween={\blank[none]},
+ after=\blank]
+\stopbuffer
+
+\typebuffer[a]
+
+Now the new commands \type{\remark}, \type{\subremark}, \type{\resetremark} and
+\type{\nextremark} are available and you can type remarks like this:
+
+\startbuffer[b]
+\remark In the early medieval times Hasselt was a place of
+pilgrimage. The {\em Heilige Stede} (Holy Place) was torn down during
+the Reformation. In 1930, after 300 years, the {\em Heilige Stede} was
+reopened.
+
+\subremark Nowadays the {\em Heilige Stede} is closed again but once
+a year an open air service is held on the same spot. \par
+\stopbuffer
+
+\typebuffer[b]
+
+This becomes:
+
+\start
+\getbuffer[a]\getbuffer[b]
+\stop
+
+You can reset numbering with \type{\resetremark} or \type{\resetsubremark} or
+increment a number with \type{\nextremark} or \type{\nextsubremark}. This is
+normally done automatically per chapter, section or whatever.
+
+You can set up the layout of \type{\defineenumeration} with:
+
+\shortsetup{setupenumerations}
+
+You can also vary the layout of \type{remark} and \type{subremark} in the example
+above with:
+
+\starttyping
+\setupenumeration[remark][headstyle=bold]
+\setupenumeration[subremark][headstyle=slanted]
+\stoptyping
+
+If a number becomes obsolete you can type:
+
+\starttyping
+\remark[-]
+\stoptyping
+
+If the \type{remark} contains several paragraphs you should use the command
+pair \type{\start ... \stopremark} that becomes available after defining
+\type{remark} with \type{\defineenumeration[remark]}.
+
+\startbuffer[c]
+\setupenumeration
+ [remark]
+ [alternative=hanging,
+ width=broad]
+
+\startremark
+In the early medieval times Hasselt was a place of pilgrimage. The
+{\em Heilige Stede} (Holy Place) was torn down during the
+Reformation.
+
+After 300 years in 1930 the {\em Heilige Stede} was reopened.
+Nowadays the {\em Heilige Stede} is closed again but once a year an
+open air service is held on the same spot.
+\stopremark
+\stopbuffer
+
+\typebuffer[c]
+
+So the example above would look like this:
+
+\start
+\getbuffer[a]\getbuffer[c] \par
+\stop
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex
new file mode 100644
index 000000000..229cb66bc
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex
@@ -0,0 +1,79 @@
+\startcomponent ma-cb-en-errors
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=trouble,title=Problems during processing]
+
+\index{errors}
+\index{problems}
+
+If processing is not succesful ---for example because you typed \type{\stptext}
+instead of \type{\stoptext}--- \CONTEXT\ produces a \type{ ? } on your screen
+and tells you it has just processed an error. It will give you some basic
+information on the type of error and the line number where the error becomes
+effective.
+
+At the instant of \type{ ? } you can type:
+
+\starttabulate[|||]
+\NC \type{H} \NC for help information on your error \NC\NR
+\NC \type{I} \NC for inserting the correct \CONTEXT\ command \NC\NR
+\NC \type{Q} \NC for quiting and entering batch mode \NC\NR
+\NC \type{X} \NC for exiting the running mode \NC\NR
+\NC \Enter \NC for ignoring the error \NC\NR
+\stoptabulate
+
+Most of the time you will type \Enter\ and processing will continue. Then you can
+edit the input file and fix the error.
+
+Some errors will produce a~\type{ * } on your screen and processing will stop.
+This error is due to a fatal error in your input file. You can't ignore this
+error and the only option you have is to type \type{\stop} or {\sc Ctrl}~Z. The
+program will be halted and you can fix the error in your text editor.
+
+\startframedtext[width=\hsize]
+A well known error is:
+
+\starttyping
+! I can't write on file 'myfile.pdf'.
+Please type another filename for output:
+\stoptyping
+
+This error is due to the fact that the file \type{myfile.pdf} is stil open
+in \READER.
+
+\blank
+
+The best way to proceed is:
+
+\startitemize[packed]
+\item close the file in \READER
+\item type \Enter\ at the console
+\stopitemize
+\stopframedtext
+
+Sometimes the error messages are very obscure. Finding the location of the error
+in an extensive document can then be a tedious job. You could try to isolate
+the error:
+
+\startitemize[packed]
+\item open the file in your text editor
+\item save a copy of your file (to be on the safe side)
+\item isolate the error
+ \startitemize[n,packed]
+ \item place a \type{\stoptext} command higher up in your text
+ \item process the file
+ \item repeat step 1 and 2 until the file processes correctly
+ \stopitemize
+\item study the content that produces the error
+\item fix the error
+\item place the \type{\stoptext} command after the corrected error
+\item process your file
+\item etc.
+\stopitemize
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex
new file mode 100644
index 000000000..90f249359
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex
@@ -0,0 +1,258 @@
+\startcomponent ma-cb-en-figures
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=figures,title=Figures]
+
+\index{figure}
+\seeindex{picture}{figure}
+\index{floating blocks}
+
+\Command{\tex{placefigure}}
+\Command{\tex{startfiguretext}}
+\Command{\tex{setupfigures}}
+\Command{\tex{startcombination}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{externalfigure}}
+
+Images can be placed in your document with the command \type{\externalfigure}.
+
+\startbuffer
+\externalfigure
+ [cow.pdf]
+ [width=.1\textwidth,
+ frame=on,
+ framecolor=gray,
+ frameoffset=3pt,
+ rulethickness=3pt,
+ framecorner=round]
+\stopbuffer
+
+\typebuffer
+
+Such an image will be placed on the location where you defined it \space \getbuffer
+\space and can have some strange effects on the surrounding white space. By the way,
+the cow image is always available for \CONTEXT\ users which is very convenient when
+you are testing the figure related commands.
+
+You can use the command \type{\placefigure} to influence the positioning of
+images in your document.
+
+\startbuffer
+\placefigure
+ [][fig:church]
+ {Stephanus Church.}
+ {\externalfigure[ma-cb-24][width=.4\textwidth]}
+\stopbuffer
+
+\typebuffer
+
+After processing this will come out as \in{figure}[fig:church] at the first
+available location.
+
+\getbuffer
+
+The command \type{\placefigure} handles numbering and vertical spacing before and
+after your figure. Furthermore this command initializes a float mechanism, which
+means that \CONTEXT\ looks whether there is enough space for your figure on the
+page. If not, the figure will be placed at another location and the text carries
+on, while the figure floats in your document until the optimal location is found.
+You can influence this mechanism within the first bracket
+pair.
+
+The command \type{\placefigure} is a predefined example of:
+
+\shortsetup{placefloat}
+
+A number of basic options is described in \in{table}[tab:placefigure].
+
+\placetable
+ [here]
+ [tab:placefigure]
+ {Options in \type{\placefigure}.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC here \NC put figure at this location if possible \NC\FR
+\NC force \NC force figure placement here \NC\MR
+\NC page \NC put figure on its own page \NC\MR
+\NC top \NC put the figure at the top of the page \NC\MR
+\NC bottom \NC put the figure at the botom of the page \NC\MR
+\NC left \NC place figure at the left margin \NC\MR
+\NC right \NC place figure at the right margin \NC\MR
+\NC margin \NC place figure in the margin \NC\MR
+\NC none \NC set no caption \NC\LR
+\HL
+\stoptable
+
+The second bracket pair is used for cross-referencing. You can refer to this
+particular figure by typing:
+
+\starttyping
+\in{figure}[fig:church]
+\stoptyping
+
+The first brace pair is used for the caption. You can type any text you want. The
+figure labels are set up with \type{\setupcaptions} and the numbering is (re)set
+by \type{\setupnumbering} (see \in{paragraph}[floatingblocks]).
+
+The second brace pair is used for defining the figure and addressing the file
+names of external figures.
+
+In the next example you see how \inframed{Hasselt} is defined within
+the last brace pair to show you the function of \type{\placefigure{}{}}.
+
+\startbuffer
+\placefigure
+ {The boundaries of Hasselt.}
+ {\framed{\tfd Hasselt}}
+\stopbuffer
+
+\typebuffer
+
+This will produce:
+
+\getbuffer
+
+However, your images are often created using programs like Illustrator and photos
+are --- after scanning --- improved in packages like PhotoShop. Then the images
+are available as files. \CONTEXT\ supports image file types like \type {JPG},
+\type {PNG} and (pages from) \type {PDF} files as well as \METAPOST\ output
+(\type {MPS} files). Users normally can trust \CONTEXT\ to find the best possible
+file type.
+
+In \in{figure}[fig:canals] you see a photo and a graphic combined into one
+figure.
+
+\startbuffer
+\placefigure
+ [here,force]
+ [fig:canals]
+ {The Hasselt Canals.}
+ {\startcombination[2*1]
+ {\externalfigure[ma-cb-03][width=.4\textwidth]}{a bitmap picture}
+ {\externalfigure[ma-cb-00][width=.4\textwidth]}{a vector graphic}
+ \stopcombination}
+\stopbuffer
+
+\getbuffer
+
+You can produce this figure by typing something like:
+
+\typebuffer
+
+In this figure two pictures are combined with:
+
+\shortsetup{startcombination}
+
+The \type{\start ...\stopcombination} pair is used for
+combining two pictures in one figure. You can type the number of pictures within
+the bracket pair. If you want to display one picture below the other you would
+have typed \type{[1*2]}. You can imagine what happens when you combine 6~pictures
+as \type{[3*2]} (\type{[rows*columns]}).
+
+The examples shown above are enough for creating illustrated documents. Sometimes
+however you want a more integrated layout of the picture and the text. For that
+purpose you can use \type{\start ...\stopfiguretext} command pair.
+
+\startbuffer
+\startfiguretext
+ [left,none]
+ [fig:citizens]
+ {}
+ {\externalfigure[ma-cb-18][width=.5\makeupwidth]}
+ Hasselt has always had a varying number of citizens due to
+ economic events. For example the Dedemsvaart was dug around
+ 1810. This canal runs through Hasselt and therefore trade
+ flourished. This led to a population growth of almost 40\%
+ within 10~years. Nowadays the Dedemsvaart has no commercial
+ value anymore and the canals have become a tourist
+ attraction. But reminders of these prosperous times can be
+ found everywhere.
+\stopfiguretext
+\stopbuffer
+
+The effect of:
+
+\typebuffer
+
+is shown in the figure below.
+
+\start
+\setuptolerance[verytolerant]
+\getbuffer
+\stop
+
+
+\startbuffer[marginpicture]
+\inmargin
+ {\externalfigure
+ [ma-cb-23]
+ [width=.7\marginwidth]}
+\stopbuffer
+
+As you have seen you in the examples above you can summon a figure with the
+command:
+
+\shortsetup{externalfigure}
+
+The command \type{\externalfigure} has two bracket pairs. The first is used for
+the exact file name without extension, the second for file formats and
+dimensions. It is not difficult to guess what happens if you
+type:\getbuffer[marginpicture]
+
+\typebuffer[marginpicture]
+
+You can set up the layout of figures with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaptions}
+
+\startbuffer[figuresetups]
+\setupfloat
+ [figure]
+ [default=right,
+ spacebefore=none]
+
+\setupcaptions
+ [location=bottom,
+ style=boldslanted]
+\stopbuffer
+
+\startbuffer[figuredefinition]
+\placefigure
+ {A characteristic view on Hasselt.}
+ {\externalfigure[ma-cb-12][width=6cm]}
+\stopbuffer
+
+\start
+\getbuffer[figuresetups]
+\getbuffer[figuredefinition]
+\stop
+
+These commands are typed in the set up area of your input file and have a global
+effect on all floating blocks.
+
+\typebuffer[figuresetups,figuredefinition]
+
+For figure management there are commands like \crlf
+\type{\setupexternalfigure}.
+
+Please refer to the \goto {\CONTEXTWIKI} [
+url(http://wiki.contextgarden.net/Command/defineexternalfigure) ] for practical
+applications of these commands.
+
+If you want to work with a \XML\ based figure database please see the \goto
+{Figures} [ url (manual:figures) ]
+manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex
new file mode 100644
index 000000000..029386ec1
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex
@@ -0,0 +1,299 @@
+\startcomponent ma-cb-en-fonts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Fonts and font switches]
+
+\startsection[title=Introduction]
+
+\index{Computer Modern Roman}
+\index{Lucida Bright}
+\index{AMS}
+
+The default font in \CONTEXT\ is the {\em Computer Modern Roman} (\type{cmr}).
+In \CONTEXT\ the following fonts are available.
+
+\startplacetable[reference=tab:fonts in context,title={Fonts in \CONTEXT.}]
+\starttable[|l|l|l|]
+\HL
+\NC \bf Name \NC \bf Logical name \NC \bf Also known as \NC\MR
+\HL
+\NC Computer Modern Roman \NC cmr \NC Computer Modern Roman \NC\FR
+\NC Termes \NC termes \NC Times New Roman \NC\MR
+\NC Adventor \NC adventor \NC Avant Garde \NC\MR
+\NC Bonum \NC bonum \NC Bookman \NC\MR
+\NC Chorus \NC chorus \NC Zapf Chancery \NC\MR
+\NC Cursor \NC cursor \NC Courier \NC\MR
+\NC Heros \NC heros \NC Helvetica \NC\MR
+\NC Pagella \NC pagella \NC Palatino \NC\MR
+\NC Schola \NC schola \NC Century Schoolbook \NC\MR
+\NC Dejavu \NC dejavu \NC \NC\MR
+\NC Iwona \NC iwona \NC \NC\MR
+\NC Gentium \NC gentium \NC \NC\MR
+\NC Cambria \NC cambria \NC \NC\MR
+\NC Antykwa \NC antykwa \NC \NC\MR
+\NC Utopia \NC utopia \NC \NC\MR
+\NC LucidaBright \NC lucidanova \NC \NC\LR
+\HL
+\stoptable
+\stopplacetable
+
+% in map: tex-context\tex\texmf\fonts
+
+For further reading we refer to the \goto {\em Fonts in \CONTEXT}
+[ url (manual:fonts) ] manual where you can find information on how to install
+your own font.
+
+\stopsection
+
+\startsection[title=Fontstyle and size]
+
+\index{font+style}
+\index{font+size}
+
+\Command{\tex{setupbodyfont}}
+\Command{\tex{switchtobodyfont}}
+
+You can select the font family, style and size for a document with:
+
+\shortsetup{setupbodyfont}
+
+If you typed \type{\setupbodyfont[chorus,9pt]} {\switchtobodyfont[chorus,9pt] in
+the setup area of the input file your text would look something like this.}
+
+For changes in mid-document and on section level you should use:
+
+\shortsetup{switchtobodyfont}
+
+\startbuffer
+On November 10th (one day before Saint Martinsday) the youth of
+Hasselt go from door to door to sing a special song and they
+accompany themselves on a {\em foekepot}. They won't leave
+before you give them some money or sweets. The song goes like this:
+
+\startnarrower
+\switchtobodyfont[heros,small]
+\startlines
+Foekepotterij, foekepotterij,
+Geef mij een centje dan ga'k voorbij.
+Geef mij een alfje dan blijf ik staan,
+'k Zal nog liever naar m'n arrenmoeder gaan.
+Hier woont zo'n rieke man, die zo vulle gèven kan.
+Gèf wat, old wat, gèf die arme stumpers wat,
+'k Eb zo lange met de foekepot elopen.
+'k Eb gien geld om brood te kopen.
+Foekepotterij, foekepotterij,
+Geef mij een centje dan ga'k voorbij.
+\stoplines
+\stopnarrower
+\stopbuffer
+
+\typebuffer
+
+Notice that \type{\start...\stopnarrower} is also used as a begin and end of the
+fontswitch. The function of \type{\start...\stoplines} in this example is
+obvious.
+
+\start
+\getbuffer
+\stop
+
+If you want an overview of the available font family you can type:
+
+\startbuffer
+\showbodyfont[pagella]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Style and size switch in commands]
+
+In a number of commands one of the parameters is \type{style} to indicate the
+desired typestyle. For example:
+
+\startbuffer
+\setuphead[chapter][style=\tfd]
+\stopbuffer
+
+\typebuffer
+
+In this case the character size for chapters is indicated with a command
+\type{\tfd}. But instead of a command you could use the predefined options that
+are related to the actual typeface:
+
+\startbuffer
+normal bold slanted boldslanted type mediaeval
+small smallbold smallslanted smallboldslanted smalltype
+capital cap
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Local font style and size]
+
+\Command{\tex{rm}}
+\Command{\tex{ss}}
+\Command{\tex{tt}}
+\Command{\tex{sl}}
+\Command{\tex{bf}}
+\Command{\tex{tfa}}
+\Command{\tex{tfb}}
+\Command{\tex{tfc}}
+\Command{\tex{tfd}}
+
+In the running text (local) you can change the {\em typestyle} into roman, sans
+serif and teletype with \type{\rm}, \type{\ss} and \type{\tt}.
+
+You can change the {\em typeface} like italic and boldface with \type{\sl} and
+\type{\bf}.
+
+The {\em typesize} is changed with \type{\switchtobodyfont}.
+
+The actual style is indicated with \type{\tf}. If you want to change into a
+somewhat greater size you can type \type{\tfa}, \type{\tfb}, \type{\tfc} and
+\type{\tfd}. An addition of \type{a}, \type{b}, \type{c} and \type{d} to
+\type{\sl}, \type{\it} and \type{\bf} is also allowed.
+
+\startbuffer
+{\tfc Mintage}
+
+In the period from {\tt 1404} till {\tt 1585} Hasselt had its own
+{\sl right of coinage}. This right was challenged by other cities,
+but the {\switchtobodyfont[7pt] bishops of Utrecht} did not honour
+these {\slb protests}.
+\stopbuffer
+
+\typebuffer
+
+The curly braces indicate begin and end of style or size switches.
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Redefining fontsize]
+
+\index{fontsize}
+
+\Command{\tex{definebodyfont}}
+
+For special purposes you can define your own size of the bodyfont.
+
+\shortsetup{definebodyfont}
+
+A definition could look like this:
+
+\startbuffer
+\definebodyfont[10pt][rm][tfe=Regular at 36pt]
+
+{\tfe Hasselt!}
+\stopbuffer
+
+\typebuffer
+
+Now \type{\tfe} will produce 36pt characters saying:
+{\hbox{\getbuffer}}
+
+\stopsection
+
+\startsection[title=Small caps]
+
+\index{small caps}
+
+\Command{\tex{cap}}
+
+Abbreviations like \PDF\ (\infull{PDF}) are printed in pseudo small caps. A small
+capital is somewhat smaller than the capital of the actual typeface. Pseudo small
+caps are produced with:
+
+\shortsetup{cap}
+
+If you compare \type{\cap{hasselt}} and \type{\sc hasselt}: \cap{hasselt} and
+{\sc hasselt} you can see the difference. The command \type{\sc} shows the real
+small caps. The reason for using pseudo small caps instead of real small caps is
+just a matter of taste.
+
+\stopsection
+
+\startsection[title=Emphasized]
+
+\index{emphasized}
+
+\Command{\tex{em}}
+
+To emphasize words consistently throughout your document
+you use:
+
+\starttyping
+\em
+\stoptyping
+
+Empasized words appear in a slanted style.
+
+\startbuffer
+If you walk through Hasselt you should {\bf \em watch out} for
+{\em Amsterdammers}. An {\em Amsterdammer} is {\bf \em not} a
+person from Amsterdam but a little stone pillar used to separate
+sidewalk and road. A pedestrian should be protected by these
+{\em Amsterdammers} against cars but more often people get hurt
+from tripping over them.
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\getbuffer
+
+{\em An emphasize within an emphasize is {\em normal} again
+and a boldface emphasize looks like {\bf this or \em this}}.
+
+\stopsection
+
+\startsection[title=Teletype / verbatim]
+
+\index{type}
+\index{verbatim}
+
+\Command{\tex{starttyping}}
+\Command{\tex{type}}
+\Command{\tex{setuptyping}}
+\Command{\tex{setuptype}}
+
+If you want to display typed text and want to keep your line breaking exactly as
+it is you use:
+
+\shortsetup{starttyping}
+
+In the text you can use:
+
+\shortsetup{type}
+
+The curly braces enclose the text you want in teletype. You have to be careful
+with \type{\type} because the line breaking mechanism does not work anymore.
+
+You can set up the 'typing' with:
+
+\shortsetup{setuptyping}
+\shortsetup{setuptype}
+
+\stopsection
+
+\startsection[title=Encodings]
+
+In \CONTEXT\ \MKIV\ font ecoding is no issue (anymore).
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex
new file mode 100644
index 000000000..5eeade383
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex
@@ -0,0 +1,99 @@
+\startcomponent ma-cb-en-footnotes
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Footnotes]
+
+\index{footnote}
+
+\Command{\tex{footnote}}
+\Command{\tex{setupfootnotes}}
+
+If you want to annotate your text you can use \type{\footnote}. The command looks
+like this:
+
+\shortsetup{footnote}
+
+The bracket pair is optional and contains a logical name. The curly braces
+contain the text you want to display at the foot of the page.
+
+The same footnote number can be called with its logical name.
+
+\shortsetup{note}
+
+If you have typed this text:
+
+\startbuffer
+The Hanse was a late medieval commercial alliance of towns in the
+regions of the North and the Baltic Sea. The association was formed
+for the furtherance and protection of the commerce of its
+members.\footnote[war]{This was the source of jealousy and fear among
+other towns that caused a number of wars.} In the Hanse period there
+was a lively trade in all sorts of articles such as wood, wool,
+metal, cloth, salt, wine and beer.\note[war] The prosperous trade
+caused an enormous growth of welfare in the Hanseatic
+towns.\footnote{Hasselt is one of these towns.}
+\stopbuffer
+
+\typebuffer
+
+It would look like this:
+
+\getbuffer
+
+The footnote numbering is done automatically. The command \type{\setupfootnotes}
+enables you to influence the display of footnotes:
+
+\shortsetup{setupfootnotes}
+
+Footnotes can be set at the bottom of a page but also at other locations, like
+the end of a chapter. This is done with the command:
+
+\shortsetup{placefootnotes}
+
+The footnotes will be placed at the end of your document with
+\type{\setupfootnotes[location=text]} in combination with \type{\placefootnotes}
+at the desired location.
+
+You can also couple footnotes to a table. In that case we speak of local
+footnotes. The commands are:
+
+\shortsetup{startlocalfootnotes}
+
+\shortsetup{placelocalfootnotes}
+
+An example illustrates the use of local footnotes:
+
+\startbuffer
+
+\placetable[][productivity]
+ {Decline of Hasselt's productivity.\footnote{Source: {\em Uit
+ de geschiedenis van Hasselt.}}}
+ {\startlocalfootnotes
+ \starttable[|l|c|c|c|c|]
+ \HL
+ \NC
+ \NC Ovens
+ \NC Blacksmiths
+ \NC Breweries
+ \NC Tile works\footnote{The factories that produced roof tiles.} \NC\SR
+ \HL
+ \NC 1682 \NC 15 \NC 9 \NC 3 \NC 2 \NC\FR
+ \NC 1752 \NC ~6 \NC 4 \NC 0 \NC 0 \NC\LR
+ \HL
+ \NC \use5 \JustLeft{\placelocalfootnotes} \NC\FR
+ \stoptable
+ \stoplocalfootnotes}
+\stopbuffer
+
+\typebuffer
+
+This will result in \in{table}[productivity] with a local footnote. The footnote
+in the caption will appear at the bottom of the page.
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex
new file mode 100644
index 000000000..2f422344b
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex
@@ -0,0 +1,58 @@
+\startcomponent ma-cb-en-framedtexts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Outlined paragraphs]
+
+\index{outline+paragraph}
+
+\Command{\tex{startframedtext}}
+\Command{\tex{setupframedtext}}
+
+Complete paragraphs can be outlined with:
+
+\shortsetup{startframedtext}
+
+\startbuffer
+\definefloat[intermezzo]
+\setupframedtexts
+ [width=.8\makeupwidth,
+ background=color,
+ backgroundcolor=gray,
+ corner=round,
+ framecolor=blue,
+ rulethickness=2pt]
+
+\placeintermezzo[here][block:bridge]{An intermezzo.}
+\startframedtext
+ It was essential for Hasselt to have a bridge across the Zwarte
+ Water river. The bishop of Utrecht gave Hasselt his consent in
+ 1486.
+ \blank
+ Other cities in the neighbourhood of Hasselt were afraid of the
+ toll money to be paid when crossing this bridge so they
+ prevented the construction for many years.
+\stopframedtext
+\stopbuffer
+
+Let's give an example:
+
+\typebuffer
+
+This example also illustrates the command \type{\definefloat}. You can find more
+information on this command in \in{paragraph}[floatingblocks]. The \type{\blank}
+is necessary to enforce a blank line.
+
+\start
+\getbuffer
+\stop
+
+The outlining can be set up with:
+
+\shortsetup{setupframedtexts}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex
new file mode 100644
index 000000000..bbdb6a61c
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex
@@ -0,0 +1,144 @@
+\startcomponent ma-cb-en-frames
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Outlined text]
+
+\index{outline+text}
+
+\Command{\tex{framed}}
+\Command{\tex{setupframed}}
+\Command{\tex{inframed}}
+
+You can \inframed{outline} a text with \type{\framed}. The
+command looks like this:
+
+\shortsetup{framed}
+
+The bracket pair is optional and contains the set up parameters. The curly braces
+enclose the text. To be honest, the outlined text in the first paragraph was done
+with \type{\inframed}. This command takes care of the interline spacing.
+
+Some other examples of \type{\framed} and its set up parameters are shown below.
+
+\startbuffer[a]
+\framed
+ [height=fit,
+ width=.5\textwidth]
+ {Hasselt}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[a][type=buffer]}
+\typebuffer[a]
+
+\startbuffer[b]
+\framed
+ [height=3em,
+ width=.5\textwidth]
+ {Hasselt now has more space}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[b][type=buffer]}
+\typebuffer[b]
+
+\startbuffer[d]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue]
+ {Hasselt now has some color}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[d][type=buffer]}
+\typebuffer[d]
+
+\startbuffer[e]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt]
+ {Hasselt now has more frame}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[e][type=buffer]}
+\typebuffer[e]
+
+\startbuffer[f]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=color,
+ backgroundcolor=green]
+ {Hasselt now has a colorful background}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[f][type=buffer]}
+\typebuffer[f]
+
+\startbuffer[g]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=color,
+ backgroundcolor=green,
+ foregroundstyle=bold]
+ {Hasselt now has another style}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[g][type=buffer]}
+\typebuffer[g]
+
+\startbuffer[needed-for-h]
+\definecolor[a][black]
+\definecolor[b][white]
+
+\startuniqueMPgraphic{LinearShade}
+ fill OverlayBox
+ withshademethod "linear" withcolor \MPcolor{a} shadedinto \MPcolor{b} ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [linear shade]
+ [\uniqueMPgraphic{LinearShade}]
+\stopbuffer
+
+\getbuffer[needed-for-h]
+
+\startbuffer[h]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=linear shade,
+ foregroundstyle=bold]
+ {Hasselt now has a little shade}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[h][type=buffer]}
+\typebuffer[h]
+
+The shady background was defined with:
+
+\typebuffer[needed-for-h]
+
+The \type{\framed} command is very sophisticated and is used in many macros.
+The command to set up frames is:
+
+\shortsetup{setupframed}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex
new file mode 100644
index 000000000..6314aeec5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex
@@ -0,0 +1,46 @@
+\startcomponent ma-cb-en-gettingstarted
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=How to process a file]
+
+\index{input file+processing}
+\index[pdffile]{\type{pdf}--file}
+
+In this chapter we assume that you have installed and initiated \CONTEXT\ \MKIV\
+correctly so that you can run it from the commandline in your working directory.
+You can find the \CONTEXT\ installation procedure on the \goto {\CONTEXTWIKI}
+[ url (http://wiki.contextgarden.net/ConTeXt_Standalone#Windows) ].
+
+If you want to process a \CONTEXT\ input file, you should type at the command line
+prompt:
+
+\starttyping
+context myfile.tex
+\stoptyping
+
+the extension \type{.tex} is not needed. See \in{appendices}[contextcommand] and
+\in[runtimefiles] for more information on the \type{context} command.
+
+After pressing \Enter\ processing will be started. \CONTEXT\ will show processing
+information on your screen. During the processing of your input file \CONTEXT\
+will also inform you of what it is doing with your document. For example it will
+show page numbers and information about processing steps. Further more it gives
+warnings. These are of a typographical order and tells you when line breaking is
+not successful. All information on processing is stored in a \type{log} file that
+can be used for reviewing warnings and errors and the respective line numbers
+where they occur in your file.
+
+If processing is succesful the command line prompt will return and \CONTEXT\ will
+produce the file \type{myfile.pdf}. The abbreviation \PDF\ stands for Portable
+Document Format. This is a platform independent format for printing and viewing
+with \READER.
+
+When you use a configurable text editor you can also run \CONTEXT\ from that editor.
+More information on that topic can be found \in{appendix}[texteditor].
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex
new file mode 100644
index 000000000..d51403d5d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex
@@ -0,0 +1,53 @@
+\startcomponent ma-cb-en-headers
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page headers and footers]
+
+\index{page header}
+\index{page footer}
+
+\Command{\tex{setupfootertexts}}
+\Command{\tex{setupheadertexts}}
+\Command{\tex{setupheader}}
+\Command{\tex{setupfooter}}
+\Command{\tex{noheaderandfooterlines}}
+
+In some cases you want to give your document a page header and footer. The
+commands to do this are:
+
+\shortsetup{setupfootertexts}
+\shortsetup{setupheadertexts}
+
+The first bracket pair is used for the location of the footer or header
+(\type{text}, \type{edge} etc). Footer and header are placed within the second
+and third bracket pairs. In a double sided document a fourth and fifth bracket
+pair is used for footer and header on the left-hand side page and the right-hand
+side page. In most cases you can omit these last two bracket pairs.
+
+\startbuffer
+\setupfootertexts[Manual][section]
+\stopbuffer
+
+\typebuffer
+
+In this case the text {\em Manual} will appear in the left-hand side corner and
+the title of the actual section on the right-hand side of the page. This footer
+will change with the beginning of a new section.
+
+You can set up the layout of the header and footer with:
+
+\shortsetup{setupheader}
+\shortsetup{setupfooter}
+
+If you want to leave out the page header and footer you can type:
+
+\starttyping
+\noheaderandfooterlines
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex
new file mode 100644
index 000000000..aa7e7b161
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex
@@ -0,0 +1,135 @@
+\startcomponent ma-cb-en-heads
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=heads,title=Heads]
+
+\index{headers}
+
+\Command{\tex{chapter}}
+\Command{\tex{paragraph}}
+\Command{\tex{subparagraph}}
+\Command{\tex{title}}
+\Command{\tex{subject}}
+\Command{\tex{subsubject}}
+\Command{\tex{setuphead}}
+\Command{\tex{setupheads}}
+
+The structure of a document is determined by its chapter and section titles.
+These titles are created with the commands shown in \in{table}[tab:headers]:
+
+\placetable[here][tab:headers]{Headers.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Numbered header \NC \bf Unnumbered header \NC\SR
+ \HL
+ \NC \type{\chapter} \NC \type{\title} \NC\FR
+ \NC \type{\section} \NC \type{\subject} \NC\MR
+ \NC \type{\subsection} \NC \type{\subsubject} \NC\MR
+ \NC \type{\subsubsection} \NC \type{\subsubsubject} \NC\MR
+ \NC \unknown \NC \unknown \NC\LR
+ \HL
+ \stoptable}
+
+\shortsetup{chapter}
+\shortsetup{section}
+\shortsetup{subsection}
+\shortsetup{title}
+\shortsetup{subject}
+\shortsetup{subsubject}
+
+These commands will produce a numbered or unnumbered title in a predefined
+fontsize and fonttype with some vertical spacing before and after the header.
+
+The title commands can take several arguments, like in:
+
+\starttyping
+\title[hasselt by night]{Hasselt by night}
+\stoptyping
+
+and
+
+\starttyping
+\title{Hasselt by night}
+\stoptyping
+
+The bracket pair is optional and used for internal references. If you want to
+refer to this chapter you type for example \type{\at{page}[hasselt by night]}.
+
+For a more structured way to define chapters and sections you can use the more
+preferred \type{\start ... \stop} construction.
+
+\placetable[here][tab:headers]{Structured headers.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Numbered header \NC \bf Un-numbered header \NC\SR
+ \HL
+ \NC \type{\start ... \stopchapter} \NC \type{\start ... \stoptitle} \NC\FR
+ \NC \type{\start ... \stopsection} \NC \type{\start ... \stopsubject} \NC\MR
+ \NC \type{\start ... \stopsubsection} \NC \type{\start ... \stopsubsubject} \NC\MR
+ \NC \type{\start ... \stopsubsubsection} \NC \type{\start ... \stopsubsubsubject} \NC\MR
+ \NC \unknown \NC \unknown \NC\LR
+ \HL
+ \stoptable}
+
+In that case the definition looks like this:
+
+\starttyping
+\starttitle[reference="hasselt by night",title="Hasselt by night"}
+ ...
+\stoptitle
+\stoptyping
+
+Of course the chapter and section titles can be set to your own preferences and you can even
+define your own sections. This is done with the \type{\setuphead} and
+\type{\definehead} command.
+
+\shortsetup{definehead}
+
+\shortsetup{setuphead}
+
+\startbuffer
+\definehead
+ [myhead]
+ [section]
+
+\setuphead
+ [myhead]
+ [numberstyle=bold,
+ textstyle=bold,
+ before=\hairline\blank,
+ after=\nowhitespace\hairline]
+
+\myhead[headlines]{Hasselt makes headlines}
+\stopbuffer
+
+\typebuffer
+
+A new header \type{\myhead} is defined and it inherits the properties of
+\type{\section}. It would look something like this:
+
+\getbuffer
+
+There is one other command you should know now, and that is \type{\setupheads}.
+You can use this command to set up the numbering of the numbered chapters and
+sections. If you type:
+
+\startbuffer
+\setupheads
+ [alternative=inmargin,
+ separator=--]
+\stopbuffer
+
+\typebuffer
+
+all numbers will appear in the margin. Section 1.1 would look like 1--1.
+
+Commands like \type{\setupheads} are typed in the set up area of your input file.
+
+\shortsetup{setupheads}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex
new file mode 100644
index 000000000..64beb179d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex
@@ -0,0 +1,310 @@
+\startcomponent ma-cb-en-interactivity
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Interactive mode in electronic documents,reference=interactivity]
+
+\startsection[title=Introduction]
+
+\index[reader]{\READER}
+
+Documents that are electronically available for consulting and displaying on a
+computer screen are called interactive documents.
+
+Interaction means that you can click on active areas and jump to the indicated
+locations. For example if you consult a register you can click on a (active) page
+number and you will jump to the corresponding page.
+
+Interaction relates to:
+
+\startitemize[packed]
+\item active chapter numbers in the table of content
+\item active page numbers in registers
+\item active page numbers, chapter numbers and figure numbers in internal
+ references to pages, chapters, figures etc. in the running text
+\item active titles, page numbers, and chapter numbers in external references to
+ other interactive documents
+\item active menus as navigation tools
+\item references to webpages and programs
+\stopitemize
+
+Interactivity depends on the program you use to view the interactive document. We
+assume here that you will use \READER\ for viewing.
+
+\CONTEXT\ is a very powerful system for producing electronic or interactive \PDF\
+documents. However, only a few standard features are described in this chapter. As
+the authors of this manual are planning to make all \CONTEXT\ related manuals
+electronically (sources included) available, reverse engineering is one of the
+options to become more acquainted with the possibilities of \CONTEXT.
+
+Good examples of interactive documents are \CONTEXT\ presentations (see \in{chapter}[presentations]).
+For more complex interactive \PDF\ documents with forms you should read the
+\goto {Widgets} [ url (manual:widget) ]
+manual.
+
+\stopsection
+
+\startsection[title=Interactive mode]
+
+\index{interactive mode}
+
+\Command{\tex{setupinteraction}}
+
+The interactive mode is activated by:
+
+\shortsetup{setupinteraction}
+
+For example:
+
+\startbuffer
+\setupinteraction
+ [state=start,
+ color=green,
+ style=bold]
+\stopbuffer
+
+\typebuffer
+
+The hyper links are now generated automatically and the active words are
+displayed in bold green.
+
+The interactive document is considerably bigger (in MB's) than its paper cousin
+because hyperlinks consume space. You will also notice that processing time
+becomes longer. Therefore it is advisable to de-activate the interactive mode as
+long as your document is under construction.
+
+\stopsection
+
+\startsection[title=Interaction within a document]
+
+\index{interaction+internal}
+
+\Command{\tex{in}}
+\Command{\tex{at}}
+\Command{\tex{goto}}
+
+Earlier you have seen how to make a reference with \type{\in} and \type{\at}. You
+may have wondered why you had to type \type{\in{chapter}[chap:introduction]}. In
+the first place {\em chapter} and its corresponding chapter number will not be
+separated at line breaking. In the second place the word {\em chapter} and its
+number are typeset differently in the interactive mode. This gives the user a
+larger clickable area.
+
+\stopsection
+
+\startsection[title=Interaction between documents]
+
+\index{interaction+external}
+
+\Command{\tex{from}}
+\Command{\tex{useexternaldocument}}
+
+It is possible to link one document to another. First you have to state that you
+want to refer to another document. This is done by:
+
+\shortsetup{useexternaldocument}
+
+The first bracket pair must contain a logical name of the document, the second
+pair the file name of the other document and the third pair is used for the title
+of the document.
+
+For refering to these other documents you can use:
+
+\shortsetup{from}
+
+The curly braces contain text and the brackets contain the reference.
+
+Look at the example below.
+
+\startbuffer
+\useexternaldocument
+ [hia][hasseltbook][Festivities in Hasselt]
+
+Most tourist attractions are described in \from[hia].\crlf
+A description of the \about[hia::euifeest] is found in \from[hia].\crlf
+The eui||feest is described on \at{page}[hia::euifeest] in \from[hia].\crlf
+See for more information \in{chapter}[hia::euifeest] in \from[hia].
+\stopbuffer
+
+\typebuffer
+
+The \type{\useexternaldocument} is usually typed in the set up area of your input
+file.
+
+After processing your input file and the file \type{hasseltbook.tex},
+you will have two \PDF\ documents. The references come out like this:
+
+\start
+\setupinteraction[state=start]
+\getbuffer
+\stop
+
+For more information on cross referencing look at
+\goto {\CONTEXT\ Magazine 1103} [ url (thisway:crossrefs)].
+
+\stopsection
+
+\startsection[title=Interaction with the world wide web]
+
+In interactive mode there is one other command that has little meaning in the
+paper version.
+
+\shortsetup{goto}
+
+The curly braces contain text, the brackets contain a reference (logical name or a
+location).
+
+\startbuffer
+In \goto {Hasselt} [ url(http://www.stadindex.nl/plattegrond/hasselt) ]
+all streets are build in a circular way.
+\stopbuffer
+
+\typebuffer
+
+In the interactive document \goto{Hasselt}[ url(http://www.stadindex.nl/plattegrond/hasselt) ]
+will be green and active. When you click the text you will jump to a map of Hasselt.
+
+For a consistent definition of the urls there is the command:
+
+\shortsetup{useURL}
+
+The adress is defined with:
+
+\startbuffer
+\useURL
+ [loc:cityplan] % id
+ [http://www.stadindex.nl/plattegrond/hasselt] % adress
+ [] % document
+ [] % text
+\stopbuffer
+
+\typebuffer
+
+The webadress is recalled by its logical name:
+\type{\goto {Hasselt} [ url(loc:cityplan) ]}.
+
+It is of good practice to define and maintain the urls in a separate
+file.
+
+\stopsection
+
+\startsection[title=Buttons]
+
+The command to define a button is:
+
+\shortsetup{button}
+
+The first bracket pair contains the setup keys, the curly brackets contain the
+button text and the last bracket pair the destination.
+
+\startbuffer
+\useexternalsoundtrack
+ [stranger][wayfaring_stranger.mp3]
+
+\button{Website Hasselt} [ url(http://www.hasselt.nl) ]
+\button{MSWord Document} [ program(hasselt.doc) ]
+\button{Sound Clip} [ StartSound{stranger} ]
+\stopbuffer
+
+\typebuffer
+
+The first example results in a jump to a webpage, the second opens the file
+\type{hasselt.doc} in \MSWORD\ and the third plays a tune. Note the use of the
+\type{\useexternalsoundtrack} command.
+
+\stopsection
+
+\startsection[title=Menus]
+
+You can define a menu with:
+
+\shortsetup{startinteractionmenu}
+
+And set it up with:
+
+\shortsetup{setupinteractionmenu}
+
+The first bracket pair is used for its name and the second pair for setting up
+the menu.
+
+A menu can be used in an interactive document. Below you can find a simple
+example that you can copy to do some experimenting:
+
+\startbuffer
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [header=0cm, topspace=.5cm, backspace=2cm,
+ margindistance=.5cm, margin=1cm, rightmargin=0cm,
+ edgedistance=.5cm, rightedge=2cm, width=fit,
+ height=13.8cm, footer=1cm, bottom=1cm]
+
+\setupinteraction
+ [state=start, menu=on]
+
+\setupinteractionmenu
+ [bottom]
+ [background=color, backgroundcolor=gray, frame=off]
+
+\startinteractionmenu[bottom]
+\hfill
+\startbut [content] contents \stopbut \quad
+\startbut [index] index \stopbut \quad
+\startbut [PreviousJump] last location \stopbut \quad
+\startbut [NextPage] next page \stopbut \quad
+\startbut [CloseDocument] exit \stopbut \quad
+\stopinteractionmenu
+
+\starttext
+
+\startstandardmakeup
+ \midaligned{\tfd Festivities in Hasselt}
+\stopstandardmakeup
+
+\completecontent
+
+\startchapter[title=Introduction]
+ An introduction.
+\stopchapter
+
+\startchapter[title=Kingsday]
+ Something about Kingsday in Hasselt.\index{Kingsday}
+\stopchapter
+
+\startchapter[title=Hassailt]
+ Something about Hassailt.\index{Hassailt}
+\stopchapter
+
+\startchapter[title=Euifeest,reference=euifeest]
+ Something about the Euifeest.\index{Euifeest}
+\stopchapter
+
+\completeindex
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+The definition of the \type{\startinteractionmenu} will produce a menu at the
+bottom of every screen. The menu buttons contain the text {\em contents}, {\em
+index}, {\em last location}, {\em next page} and {\em exit} with respectively the
+following functions: jump to the table of contents, jump to the index, goto the
+last location in the document, goto next page and close the document. The labels
+to obvious destinations like \type{content} and \type{index} are predefined.
+Other predefined destinations are \type{FirstPage}, \type{LastPage},
+\type{NextPage} and \type{PreviousPage}.
+
+An action like \type{CloseDocument} is necessary to make an electronic document
+self containing. Other predefined actions you can use are \type{PrintDocument},
+\type{SearchDocument} and \type{PreviousJump}. The meaning of these actions is
+obvious.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex
new file mode 100644
index 000000000..11acf8f9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex
@@ -0,0 +1,33 @@
+\startcomponent ma-cb-en-introduction
+
+\project ma-cb
+
+\startchapter[title=Introduction]
+
+\CONTEXT\ is a document engineering system based on \TEX, a typesetting
+system and programming language to typeset and produce documents. Ths system is
+easy to use and enables you to make complex paper and electronic documents.
+
+This manual describes the capabilities of \CONTEXT\ \MKIV, the available commands
+and their functionality.\footnote {All paper and electronic products around
+\CONTEXT\ are produced with \CONTEXT. All sources of these products are or will
+be made available electronically to give you insight in the way these products
+are made up.}
+
+This system is developed for practical applications: the typesetting and
+production of documents ranging from simple straight forward books up to very
+complex and advanced technical manuals and textbooks in a paper or an electronic
+version. This introductory manual describes the functionality necessary to apply
+standard text elements in a manual or textbook. \CONTEXT, however, is capable of
+much more and for users who want more there are other manuals and sources
+available.
+
+\CONTEXT\ has a multi lingual interface to enable users to work with the system
+in their own language. This manual is available in Dutch and English.
+
+If you want to install \CONTEXT\ on your computer you can follow the installation
+description on the \goto {\CONTEXTWIKI} [url(install)].
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex
new file mode 100644
index 000000000..ac711be63
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex
@@ -0,0 +1,297 @@
+\startcomponent ma-cb-en-itemizations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=itemize,title=Itemize]
+
+\index{itemize}
+\index{columns in itemize}
+
+\Command{\tex{startitemize}}
+\Command{\tex{setupitemize}}
+\Command{\tex{definesymbol}}
+\Command{\tex{item}}
+\Command{\tex{head}}
+
+One way of structuring your information is by way of enumeration or summing up
+items. The itemize command looks like this:
+
+\shortsetup{startitemize}
+
+For example:
+
+\startbuffer
+\startitemize[R,packed,broad]
+\item Hasselt was founded in the 14th century.
+\item Hasselt is known as a so called Hanze town.
+\item Hasselt's name stems from a tree.
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+Within the \type{\start ... \stopitemize} pair you start a new item with
+\type{\item}. The space after \type{\item} is required. In the example above
+\type{R} specifies Roman numbering and \type{packed} keeps line spacing to a
+minimum. The parameter \type{broad} takes care of the spacing between item
+separator and item. The example would produce:
+
+\getbuffer
+
+Items can be defined in a more structured way:
+
+\startbuffer
+\startitemize[R,packed,broad]
+\startitem Hasselt was founded in the 14th century. \stopitem
+\startitem Hasselt is known as a so called Hanze town. \stopitem
+\startitem Hasselt's name stems from a tree. \stopitem
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+The bracket pair contains information on item separators and local set up
+variables.
+
+\placetable
+ [here]
+ [tab:itemsetup]
+ {Item separators in itemize.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Argument \NC \bf Item separator symbol \NC\SR
+ \HL
+ \NC 1 \NC $\bullet$ \NC\FR
+ \NC 2 \NC $-$ \NC\MR
+ \NC 3 \NC $\star$ \NC\MR
+ \NC $\vdots$ \NC $\vdots$ \NC\MR
+ \NC n \NC 1 2 3 4 $\cdots$ \NC\MR
+ \NC a \NC a b c d $\cdots$ \NC\MR
+ \NC A \NC A B C D $\cdots$ \NC\MR
+ \NC r \NC i ii iii iv $\cdots$ \NC\MR
+ \NC R \NC I II III IV $\cdots$ \NC\LR
+ \HL
+ \stoptable}
+
+You can also define your own item separator by means of \type{\definesymbol}. For
+example if you try this:
+
+\startbuffer
+\definesymbol[5][$\clubsuit$]
+
+\startitemize[5,packed]
+\item Hasselt was built on a riverdune.
+\item Hasselt lies at the crossing of two rivers.
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+You will get:
+
+\getbuffer
+
+If you want to have a sort of head within an enumeration you should use
+\type{\head} instead of \type{\item}.
+
+\startbuffer
+Hasselt lies in the province of Overijssel and there are a number
+of customs that are typical of this province.
+
+\startitemize
+
+\head kraamschudden \hfill (child welcoming)
+
+ When a child is born the neighbours come to visit the new
+ parents. The women come to admire the baby and the men come to
+ judge the baby (if it is a boy) on other aspects.
+ The neighbours will bring a {\em krentenwegge} along. A
+ krentenwegge is a loaf of currant bread of about 1 \unit{Meter}
+ long. Of course the birth is celebrated with {\em jenever}.
+
+\head nabuurschap (naberschop) \hfill (neighbourship)
+
+ Smaller communities used to be very dependent on the
+ cooperation among the members for their well being. Members of
+ the {\em nabuurschap} helped each other in difficult times
+ during harvest times, funerals or any hardship that fell upon
+ the community.
+
+\head Abraham \& Sarah \hfill (identical)
+
+ When people turn 50 in Hasselt it is said that they see Abraham
+ or Sarah. The custom is to give these people a {\em speculaas}
+ Abraham or a Sarah. Speculaas is a kind of hard spiced biscuit.
+
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+The \type{\head} can be set up with \type{\setupitemize}. In case of a page
+breaking a \type{\head} will appear on a new page. (The \type {\unit{Meter}}
+command is explained in \in {chapter} [units].)
+
+The example of old customs will look like this:
+
+\getbuffer
+
+The set up parameters of itemize are described in \in {table} [tab:itemizesetup].
+
+\placetable
+ [here,force]
+ [tab:itemizesetup]
+ {Set up parameters in itemize.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Set up \NC \bf Meaning \NC\SR
+ \HL
+ \NC standard \NC standard (global) set up \NC\FR
+ \NC packed \NC no vertical spacing between items \NC\MR
+ \NC serried \NC no horizontal spacing between separator and text \NC\MR
+ \NC joinedup \NC no vertical spacing before and after itemize \NC\MR
+ \NC broad \NC horizontal spacing between separator and text \NC\MR
+ \NC inmargin \NC place separator in margin \NC\MR
+ \NC atmargin \NC place separator on margin \NC\MR
+ \NC stopper \NC place full stop after separator \NC\MR
+ \NC columns \NC put items in columns \NC\MR
+ \NC intro \NC prevent page breaking after introduction line \NC\MR
+ \NC continue \NC continue numbering or lettering \NC\LR
+ \HL
+ \stoptable}
+
+You can use the set up parameters in \type{\startitemize}, but for reasons of
+consistency you can make them valid for the complete document with
+\type{\setupitemize}.
+
+The parameter \type{columns} is used in conjunction with
+a (written) number. If you type this:
+
+\startbuffer
+\startitemize[n,columns,four]
+\item Achter 't Werk
+.
+.
+.
+\item Justitiebastion
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+\page[bigpreference]
+
+You will get:
+
+\startbuffer
+\startitemize[n,packed,columns,four,broad]
+\item Achter 't Werk
+\item Baangracht
+\item Brouwersgracht
+\item Eikenlaan
+\item Eiland
+\item Gasthuisstraat
+\item Heerengracht
+\item Hofstraat
+\item Hoogstraat
+\item Julianakade
+\item Justitiebastion
+\item Kaai
+\item Kalverstraat
+\item Kastanjelaan
+\item Keppelstraat
+\stopitemize
+\stopbuffer
+
+\bgroup
+\getbuffer
+\egroup
+
+Sometimes you want to continue the enumeration after a short intermezzo. Then you
+type for example \type{\startitemize[continue]} and numbering
+will continue and all other preferences are kept.
+
+\startbuffer
+\startitemize[continue]
+\item Markt
+\item Meestersteeg
+\item Prinsengracht
+\item Raamstraat
+\item Ridderstraat
+\item Rosmolenstraat
+\item Royenplein
+\item Van Nahuijsweg
+\item Vicariehof
+\item Vissteeg
+\item Watersteeg
+\item Wilhelminalaan
+\item Ziekenhuisstraat
+\stopitemize
+\stopbuffer
+
+\getbuffer
+
+The parameter \type{broad} enlarges the horizontal space between item separator
+and itemtext.
+
+\shortsetup{setupitemize}
+
+An itemize within an itemize is automatically typeset in a correct way. For
+example if you type:
+
+\startbuffer
+In the Netherlands the cities can determine the height of a number of
+taxes. So the cost of living can differ from town to town. There are
+differences of up to 50\% in taxes such as:
+
+\setupitemize[2][width=5em]
+\startitemize[n]
+
+\item[estate tax] real estate tax
+
+ The real estate tax is divided into two components:
+
+ \startitemize[a,packed]
+ \item the ownership tax
+ \item the tenant tax
+ \stopitemize
+
+ If the real estate has no tenant the owner pays both components.
+
+\item dog licence fee
+
+ The owner of one or more dogs pays a fee. When a dog has died
+ or been sold the owner has to inform city hall.
+
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+then the horizontal space between item separator and text at the second level of
+itemizing is set with \type{\setupitemize[2][width=5em]}.
+
+The example will look like this:
+
+\start
+\getbuffer
+\stop
+
+You can refer to an item if you give it a label (see \type{\item[estate tax]}).
+If you then type:
+
+\startbuffer
+\in{In item}[estate tax] we discussed one of the income sources of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+You'll get a reference to that item:
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex
new file mode 100644
index 000000000..243f96b15
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex
@@ -0,0 +1,241 @@
+\startcomponent ma-cb-en-layout
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page layout]
+
+\index{layout}
+\index{page design}
+
+\Command{\tex{setuplayout}}
+\Command{\tex{adaptlayout}}
+\Command{\tex{showlayout}}
+\Command{\tex{showframe}} % VZ 2006-11-15
+\Command{\tex{showsetups}}
+\Command{\tex{showmakeup}}
+\Command{\tex{startlocal}}
+
+\startsection[title=Introduction]
+
+The {\em Layouts in \CONTEXT} manual by Willy Egger contains the necessary
+background information on page layout and design. Below you will find only the
+basic information necessary for defining rather simple layouts for paper and
+screen documents.
+
+For more information (examples and usage) on the \type{\setuplayout} command
+please refer to the
+\goto {\CONTEXTWIKI} [ url(http://wiki.contextgarden.net/Layout) ].
+
+\stopsection
+
+\startsection[title=Designing the pagelayout]
+
+To be able to design a page layout you have to familiarize yourself with the
+pagemodel of \CONTEXT. \in{Figure}[fig:pageareas] shows the areas on a page
+that you can use in your design.
+
+\placefigure
+ [here]
+ [fig:pageareas]
+ {The page areas.}
+ {\externalfigure[fig-page-areas-en.pdf][width=.75\hsize]}
+
+The orange bodytext area contains the running text. The top, bottom, and edge
+area are useful for buttons in screen documents.
+
+Please keep in mind that in \CONTEXT\ you are defining|/|designing a
+right-hand page. Only after you have setup
+\type{\setuppagenumbering[alternative=doublesided]} the left page
+is available (mirrored right page).
+
+\starthiding
+ % AFO: this is the file minibook-en.tex in graphics map
+ \setuppapersize[A10][A10]
+ \setuplayout[cutspace=2mm,backspace=6mm,width=15mm]
+ \setupbodyfont[6pt]
+ \setuppagenumbering[state=stop]
+ \setupbackgrounds[text][text][background=color,backgroundcolor=orange]
+ \setupbackgrounds[header,text,footer][leftmargin][background=color,backgroundcolor=lightgreen]
+ \setupbackgrounds[header,text,footer][leftmargin,text,rightmargin][frame=on]
+ \setupfootertexts[margin][\midaligned{l}][\midaligned{r}][\midaligned{r}][\midaligned{l}]
+ \starttext
+ \midaligned{design page} \page
+ \setuppagenumbering[alternative={singlesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page} \page
+ \setuppagenumbering[alternative={singlesided,doublesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page} \page
+ \setuppagenumbering[alternative={doublesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page}
+ \stoptext
+\stophiding
+
+\placefigure
+ [here]
+ [fig:sidedness]
+ {Page alternatives.}
+ {\startcombination[3*1]
+ {\externalfigure[minibook-en.pdf][type=pdf,page=2,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=3,width=2.4cm]}{singlesided}
+ {\externalfigure[minibook-en.pdf][type=pdf,page=4,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=5,width=2.4cm]}{single-double}
+ {\externalfigure[minibook-en.pdf][type=pdf,page=6,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=7,width=2.4cm]}{doublesided}
+ \stopcombination}
+
+Note in \in{figure}[fig:sidedness] that:
+
+\startitemize[packed]
+\item the margintext (\type{\inmargin{m}}) is always in the left margin
+\item the footertext in the margin (\type{\setupfootertexts[margin][l][r][r][l]}) adapts automatically
+\item the page is completely mirrored when \type{alternative=doublesided}
+\stopitemize
+
+When designing a page ask yourself a few questions:
+
+\startitemize[packed]
+\item do I want margin texts or margin figures
+\item will I use the margin for the section numbering
+\item do I have footer and/or header texts
+\item do I want a double sided layout (right--left page mirrored)
+\item do I use ornaments (like tabs) on the page
+\item do I have navigational buttons (screen documents)
+\stopitemize
+
+\stopsection
+
+\startsection[title=Defining the papersize / screensize]
+
+Before you can set up your page layout you have to have an idea about the paper
+dimensions. The cutmarks connected by the dashed lines in \in{figure}[fig:pageareas]
+indicate the papersize. In \CONTEXT\ you set up your papersize with:
+
+\shortsetup{\tex{setuppapersize}}
+
+Most common predefined papersizes in \CONTEXT\ are A0..A10 and B1..B10 for paper
+and S3..S8 for screen documents.
+
+Mostly you will use the default setup:
+
+\startbuffer
+\setuppapersize
+ [A4][A4]
+\stopbuffer
+
+\typebuffer
+
+But you can also define your own paper size for specific products:
+
+\startbuffer
+\definelayout
+ [postcard]
+ [width=15cm,
+ height=10cm]
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Defining the page layout]
+
+The page layout is defined by:
+
+\shortsetup{setuplayout}
+
+This command is typed in the set up area of your input file.
+
+\placefigure
+ [here]
+ [fig:pageparameters]
+ {The page parameters.}
+ {\externalfigure[fig-page-parameters-en.pdf][width=.8\hsize]}
+
+The layout of this manual was set with:
+
+\startbuffer
+\setuplayout
+ [backspace=3cm,
+ margin=2cm,
+ margindistance=.5cm,
+ width=15cm,
+ topspace=2cm,
+ header=2cm,
+ footer=2cm,
+ height=25.7cm]
+\stopbuffer
+
+\typebuffer
+
+If you want to look at your page layout you can type the command
+\type{\showframe} and process one page or the whole file. The areas are shown in
+a number of frames.
+
+The command \type{\showsetups} shows the values of the parameters. A combination
+of both commands is \type{\showlayout}.
+
+The values of the layout parameters are available as commands. This enables you
+to work more accurately when defining measures of columns, figures and tables. A
+few of these parameters are explained in \in{table}[tab:fewparameters].
+
+\placetable
+ [here,force]
+ [tab:fewparameters]
+ {A few parameters as commands.}
+\starttable[|l|l|]
+\HL
+\NC \bf Commands \NC \bf Meaning \NC\SR
+\HL
+\NC \type{\makeupwidth} \NC width of the typing area \NC\FR
+\NC \type{\makeupheight} \NC height of the typing area \NC\MR
+\NC \type{\textwidth} \NC width of the text area \NC\MR
+\NC \type{\textheight} \NC height of the text area \NC\LR
+\HL
+\stoptable
+
+If you want to define the width of a column or the height of a figure you can do
+it relative to the \type{\makeupwidth} or \type{\makeupheight}. Changes in this
+width or height will alter columns and figures proportionally.
+
+\startbuffer
+\placefigure
+ [here]
+ [fig:stepgable]
+ {A stepgable.}
+ {\externalfigure[ma-cb-19][width=.6\textwidth]}
+\stopbuffer
+
+\typebuffer
+
+After processing this would become:
+
+\getbuffer
+
+The other available values are (shown with \type{\showsetups}):
+
+\startcolumns
+\switchtobodyfont[8pt]
+\showsetups
+\stopcolumns
+
+The parameter values have a global effect and are default throughout the
+document. Nevertheless you might want to make slight changes in the page design
+for a number of pages.
+
+\startbuffer
+\adaptlayout[21,38][height=+.5cm]
+\stopbuffer
+
+\typebuffer
+
+In this case page 21 and 38 have a height of .5~cm + \type{textheight}.
+
+It is advisable not to use these local changes too often. It is always better to
+alter the text than to change the page layout.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex
new file mode 100644
index 000000000..54ed6db6a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex
@@ -0,0 +1,100 @@
+\startcomponent ma-cb-en-margintexts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Margin texts]
+
+\index{margin text}
+
+\Command{\tex{margintext}}
+\Command{\tex{inmargin}}
+\Command{\tex{inleft}}
+\Command{\tex{inright}}
+\Command{\tex{margintitle}}
+
+It is very easy to put text in the margin. You just use \type{\inmargin}.
+
+\shortsetup{inmargin}
+
+You may remember one of the earlier examples:
+
+\startbuffer[marginpicture]
+\inmargin
+ {\externalfigure
+ [ma-cb-23]
+ [width=.6\marginwidth]}
+\stopbuffer
+
+\typebuffer[marginpicture]
+
+This would result in a figure in the \pagereference [marginpicture]
+margin. You can imagine that it looks quite nice in some
+documents. But be careful. The margin is rather small so the figure could become
+very marginal.
+
+A few other examples are shown in the text below.\getbuffer
+[marginpicture]
+
+\startbuffer
+The Ridderstraat (Street of knights) \inmargin{Street of\\Knights}
+is an obvious name. In the 14th and 15th centuries, nobility and
+prominent citizens lived in this street. Some of their big houses
+were later turned into poorhouses \inright{poorhouse}and old
+peoples homes.
+
+Up until \inleft[low]{\tfc 1940}1940 there was a synagog in the
+Ridderstraat. Some 40 Jews gathered there to celebrate their
+sabbath. During the war all Jews were deported to Westerbork and
+then to the extermination camps in Germany and Poland. None of
+the Jewish families returned. The synagog was knocked down in
+1958.
+\stopbuffer
+
+\typebuffer
+
+The commands \type{\inmargin}, \type{\inleft} and \type{\inright} all have the
+same function. In a two sided document \type{\inmargin} puts the margin text in
+the correct margin. The \type{\\} is used for line breaking. The example above
+would look like this:
+
+\getbuffer
+
+You can set up the margin text with:
+
+\shortsetup{setupinmargin}
+
+Other commands that you can use for forcing text into the margin
+are listed in \in{table}[tab:margincommands].
+
+\placetable
+ [here]
+ [tab:margincommands]
+ {Overview of margin commands.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\ininner} \NC text in inner margin \NC\FR
+ \NC \type{\inouter} \NC text in outer margin \NC\MR
+ \NC \type{\inright} \NC text in right margin \NC\MR
+ \NC \type{\inleft} \NC text in left margin \NC\MR
+ \NC \type{\inmargin} \NC text in the margin \NC\MR
+ \NC \type{\inothermargin} \NC text in other margin \NC\MR
+ \NC \type{\margintext} \NC text in the margin \NC\LR
+ \HL
+ \stoptable}
+
+If you want to place more extensive text blocks in the margin there is the
+command:
+
+\shortsetup{marginblock}
+
+and the accompanying command:
+
+\shortsetup{setupmarginblocks}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex
new file mode 100644
index 000000000..c1430603f
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex
@@ -0,0 +1,524 @@
+\startcomponent ma-cb-en-math
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=formulas,title=Typesetting math]
+
+\startsection[title=Introduction]
+
+\index {math}
+
+\TEX\ is {\em the} typesetting program for math. However, this is not the
+extensive chapter on typesetting math you might expect. We advise you to do some
+further reading on typesetting formulas in \TEX. See for example: \footnote{In
+this introduction on typesetting math we relied on the booklet {\em \TEX niques}
+by Arthur Samuel.}
+
+\startitemize[packed]
+\item {\em The \TeX Book} by D.E. Knuth
+\item {\em The Beginners Book of \TeX} by S. Levy and R. Seroul
+\stopitemize
+
+\startsection[title=Typesetting math]
+
+\index {math mode}
+\index {display mode}
+\index {text mode}
+
+Normally different conventions are applied for typesetting normal text and math
+text. These conventions are \quote{known} by \TEX\ and applied accordingly when
+generating a document. We can rely on \TEX\ for delivering high quality math
+output.
+
+A number of conventions for math are:
+
+\startitemize[n,packed]
+
+\item Characters are typeset in $math\ italic$ (don't confuse this with the
+ normal {\it italic characters} in a font).
+
+\item Symbols like Greek characters ($\alpha$, $\chi$) and math symbols ($\leq$,
+ $\geq$, $\in$) are used.
+
+\item Spacing will differ from normal spacing.
+
+\item Math expressions have a different alignment than that of the running text.
+
+\item The sub and superscripts are downsized automatically, like in $a^{b}_{c}$.
+
+\item Certain symbols have different appearances in the inline and display mode.
+
+\stopitemize
+
+When typesetting math you have to work in the so called math mode in which math
+expressions can be defined by means of plain \TEX||commands.
+
+Math mode has two alternatives: text mode and display mode. Math in text
+mode is activated by \type{$} and \type{$}, while display mode is activated by
+\type{$$} and \type{$$}. In \CONTEXT\ however, display mode is activated with
+the \type{\start ... \stopformula} command pair to have more grip on vertical
+spacing around the formula.
+
+\startbuffer
+The municipality of Hasselt covers an area of 42,05 \unit{Square Kilo
+Meter}. Now, if you consider a circular area of this size with the
+market place of Hasselt as the center point $M$ you can calculate its
+diameter with ${{1}\over{4}} \pi r^2$.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+The many \type{{}} (grouping) in ${{1}\over{4}} \pi r^2$ are essential for
+separating operations in the expression. If you omit the outer curly braces like
+this: \type{${1}\over{4} \pi r^2$}, you would get a non desired result:
+${1}\over{4} \pi r^2$.
+
+The letters and numbers are typeset in three different sizes: text size $a+b$,
+script size $\scriptstyle a+b$ and scriptscript size $\scriptscriptstyle a+b$.
+These can be influenced by the commands \type{\scriptstyle} and
+\type{\scriptscriptstyle}.
+
+Symbols like $\int$ and $\sum$ will have a different form in text and display
+mode. If we type \type {$\sum_{n=1}^{m}$} or \type {$\int_{-\infty}^{+\infty}$}
+we will get {$\sum_{n=1}^{m}$} and {$\int_{-\infty}^{+\infty}$}. But when you
+type:
+
+\startbuffer
+\startformula
+ \sum_{n=1}^{m} \quad {\rm and} \quad \int_{-\infty}^{+\infty}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to get displaymode you get:
+
+\getbuffer
+
+With the commands \type {\nolimits} and \type{\limits} you can influence the
+appearances of \type{\sum} and \type{\int}:
+
+\startbuffer
+\startformula
+ \sum_{n=1}^{m}\nolimits
+ \quad {\rm and} \quad
+ \int_{-\infty}^{+\infty}\limits
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+which will result in:
+
+\getbuffer
+
+For typesetting fractions there is the command \type {\over}. In \CONTEXT\ you
+can use the alternative \type {\frac}. For ${\frac{a}{1+b}}+c$ we type for
+instance \type {${\frac{a}{1+b}}+c$}.
+
+Other commands to put one thing above the other, are:
+
+\startbuffer[atop]
+${a} \atop {b}$
+\stopbuffer
+\startbuffer[choose]
+${n+1} \choose {k}$
+\stopbuffer
+\startbuffer[brack]
+${m} \brack {n}$
+\stopbuffer
+\startbuffer[brace]
+${m} \brace {n-1}$
+\stopbuffer
+
+\starttabulate[|l|l|l|l|]
+\NC \type {\atop}
+\NC \typebuffer[atop]
+\NC \mathstrut\getbuffer[atop]
+\NC
+\NC\NR
+\NC \type {\choose}
+\NC \typebuffer[choose]
+\NC
+\NC \mathstrut\getbuffer[choose]
+\NC\NR
+\NC \type {\brack}
+\NC \typebuffer[brack]
+\NC \mathstrut\getbuffer[brack]
+\NC
+\NC\NR
+\NC \type {\brace}
+\NC \typebuffer[brace]
+\NC
+\NC \mathstrut\getbuffer[brace]
+\NC\NR
+\stoptabulate
+
+\TEX\ can enlarge delimiters like (~) and $\{~\}$ automatically if the left and
+right delimiter is preceeded by the commands \type {\left} and \type {\right}
+respectively. If you type:
+
+\startbuffer
+\startformula
+ 1+\left(\frac{1}{1-x^{x-2}}\right)^3
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+you will get:
+
+\getbuffer
+
+Sub and superscripts are invoked by \quote {\type{_}} and \quote {\type{^}}. They
+have effect on the next first character so grouping with $\{$~$\}$ is necessary
+in case of multi character sub and superscripts.
+
+In certain situations the delimiters can be preceeded by \type{\bigl},
+\type{\Bigl}, \type{\biggl} and \type{\Biggl} and their right counterparts. Even
+bigger delimiters can be produced by placing \type{\left} and \type{\right} in a
+\type{\vbox} construction. When we type a senseless expression like:
+
+\startbuffer
+\startformula
+ \left(\vbox to 16pt{}x^{2^{2^{2^{2}}}}\right)
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+In display mode the following delimiters will work in the automatic enlargement
+mechanism:
+
+\starttabulate[|l|l|l|l|l|l|l|l|]
+\NC \type{\lfloor} \NC $\lfloor$
+\NC \type{\langle} \NC $\langle$
+\NC \type{\vert} \NC $\vert$
+\NC \type{\downarrow} \NC $\downarrow$
+\NC\NR
+\NC \type{\rfloor} \NC $\rfloor$
+\NC \type{\rangle} \NC $\rangle$
+\NC \type{\Vert} \NC $\Vert$
+\NC \type{\Downarrow} \NC $\Downarrow$
+\NC\NR
+\NC \type{\lceil} \NC $\lceil$
+\NC \type{/} \NC $/$
+\NC \type{\uparrow} \NC $\uparrow$
+\NC \type{\updownarrow} \NC $\updownarrow$
+\NC\NR
+\NC \type{\rceil} \NC $\rceil$
+\NC \type{\backslash} \NC $\backslash$
+\NC \type{\Uparrow} \NC $\Uparrow$
+\NC \type{\Updownarrow} \NC $\Updownarrow$
+\NC\NR
+\stoptabulate
+
+In display mode we should typeset only one fraction and otherwise switch to the
+\type{a/b} notation. To get:
+
+\startformula
+ a_0 + {\frac{a}{a_1 + \frac{1}{a_2}}}
+\stopformula
+
+we will not type:
+
+\startbuffer
+\startformula
+ a_0+{\frac{a}{a_1+\frac{1}{a_2}}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+but prefer:
+
+\startbuffer
+\startformula
+ a_0 + {\frac{a}{a_1 + 1/a_2}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to obtain:
+
+\getbuffer
+
+In addition we could also use the command \type{\displaystyle}. If we would type:
+
+\startbuffer
+\startformula
+ a_0 + {\frac{a}{a_1 + \frac{1}{\strut \displaystyle a_2}}}
+\stopformula
+\stopbuffer
+
+\getbuffer
+
+we will get:
+
+\getbuffer
+
+Below we demonstrate the commands \type{\matrix}, \type{\pmatrix}, \type{\ldots},
+\type{\cdots} and \type{\cases} without any further explanation.
+
+\startbuffer[a]
+\startformula
+\stopbuffer
+
+\startbuffer[c]
+\stopformula
+\stopbuffer
+
+\startbuffer[b]
+ A=\left(\matrix{x-\lambda & 1 & 0 \cr
+ 0 & x-\lambda & 1 \cr
+ 0 & 0 & x-\lambda \cr}\right)
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\left|\matrix{x-\mu& 1 & 0 \cr
+ 0 & x-\mu & 1 \cr
+ 0 & 0 & x-\mu \cr}\right|
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\pmatrix{a_{11} & a_{12} & \ldots & a_{1n} \cr
+ a_{21} & a_{22} & \ldots & a_{2n} \cr
+ \vdots & \vdots & \ddots & \vdots \cr
+ a_{m1} & a_{m2} & \ldots & a_{mn} \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\pmatrix{a_{11} & a_{12} & \ldots & a_{1n} \cr
+ a_{21} & a_{22} & \ldots & a_{2n} \cr
+ \vdots & \vdots & \ddots & \vdots \cr
+ a_{m1} & a_{m2} & \ldots & a_{mn} \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ |x|=\cases{ x, & if $x\geq0$; \cr
+ -x, & otherwise \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+To typeset normal text in a math expression we have to consider the following.
+First a space is not typeset in math mode so we have to enforce one with
+\type{ \ } (backslash). Second we have to indicate a font switch, because the text should
+not appear in $math\ italic$ but in the actual font. So in \CONTEXT\ we have to
+type:
+
+\startbuffer
+\startformula
+ x^3+{\tf lower\ order\ terms}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to get:
+
+\getbuffer
+
+The math functions like $\sin$ and $\tan$ that have to be typeset in the actual
+font are predefined functions in \TEX:
+
+\starttabulate[|l|l|l|l|l|l|l|l|]
+\NC \type{\arccos} \NC \type{\cos} \NC \type{\csc} \NC \type{\exp} \NC \type{\ker} \NC \type{\limsup} \NC \type{\min} \NC \type{\sinh} \NC\NR
+\NC \type{\arcsin} \NC \type{\cosh} \NC \type{\deg} \NC \type{\gcd} \NC \type{\lg} \NC \type{\ln} \NC \type{\Pr} \NC \type{\sup} \NC\NR
+\NC \type{\arctan} \NC \type{\cot} \NC \type{\det} \NC \type{\hom} \NC \type{\lim} \NC \type{\log} \NC \type{\sec} \NC \type{\tan} \NC\NR
+\NC \type{\arg} \NC \type{\coth} \NC \type{\dim} \NC \type{\inf} \NC \type{\liminf} \NC \type{\max} \NC \type{\sin} \NC \type{\tanh} \NC\NR
+\stoptabulate
+
+If we type the sinus or limit function:
+
+\startbuffer
+\startformula
+ \sin 2\theta=2\sin\theta\cos\theta
+ \quad {\tf or} \quad
+ \lim_{x\to0}{\frac{\sin x}{x}}=1
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+Alignment in math expressions may need special attention. In multi line
+expressions we sometimes need alignment at the \quote {$=$} sign. This is done by
+the command \type{\eqalign}. If we type:
+
+\startbuffer
+\startformula
+ \eqalign{
+ ax^2+bx+c &= 0 \cr
+ x &= \frac{-b \pm \sqrt{b^2-4ac}}{2a} \cr}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+Sometimes alignment at more than one location is wanted. Watch the second line in
+the next example and see how it is defined:
+
+\startbuffer
+\startformula
+ \eqalign{
+ ax+bx+\cdots+yx+zx & = x(a +b+ \cdots \cr
+ &\phantom{= x(a~}+y+z) \cr
+ & = y \cr}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+This results in:
+
+\getbuffer
+
+Next to the command \type{\phantom} there are \type{\hphantom} without height and
+depth and \type{\vphantom} without width.
+
+You can rely on \TEX\ for spacing within a math expression. In some situations,
+however you may want to influence spacing. This is done by:
+
+\starttabulate[|l|r|]
+\NC \type{\!} \NC $-\frac{1}{6}$\type{\quad} \NC\NR
+\NC \type{\,} \NC $\frac{1}{6}$\type{\quad} \NC\NR
+\NC \type{\>} \NC $\frac{2}{9}$\type{\quad} \NC\NR
+\NC \type{\;} \NC $\frac{5}{18}$\type{\quad} \NC\NR
+\stoptabulate
+
+These \quote {spaces} are related to \type {\quad} that stands for the width of
+the capital \quote{M}.
+
+The use of the command \type{\prime} speaks for itself. For example if would want
+$y_1^\prime+y_2^{\prime\prime}$ you should type
+\type{$y_1^\prime+y_2^{\prime\prime}$}.
+
+An expression like $\root 3 \of {x^2+y^2}$ is obtained by \type{$\root 3 \of
+{x^2+y^2}$}.
+
+At the end of this section we point to the command \type{\mathstrut} which we can
+use to enforce consistency, for example within the root symbol. With
+\type{$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$} we will get
+$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$ in stead of
+$\sqrt{a}+\sqrt{d}+\sqrt{y}$.
+
+See \in{appendix}[overviews] for a complete overview of math commands.
+
+\stopsection
+
+\startsection[title=Placing formulas]
+
+\index{formula}
+
+\Command{\tex{placeformula}}
+\Command{\tex{startformula}}
+\Command{\tex{setupformulas}}
+
+You can typeset numbered formulas with:
+
+\shortsetup{placeformula}
+\shortsetup{startformula}
+
+Two examples:
+
+\startbuffer
+\placeformula[formula:aformula]
+ \startformula
+ y=x^2
+ \stopformula
+
+\placeformula
+ \startformula
+ \int_0^1 x^2 dx
+ \stopformula
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+The command \type{\placeformula} handles spacing around the formulas and the
+numbering. The bracket pair is optional and is used for referencing and to switch
+numbering on and off.
+
+\startbuffer
+\placeformula[first one]
+\startformula
+ y=x^2
+\stopformula
+
+\placeformula[middle one]
+\startformula
+ y=x^3
+\stopformula
+
+\placeformula[last one]
+\startformula
+ y=x^4
+\stopformula
+\stopbuffer
+
+\getbuffer
+
+\in{Formula}[middle one] was typed like this:
+
+\startbuffer
+\placeformula[middle one]
+ \startformula
+ y=x^3
+ \stopformula
+\stopbuffer
+
+\typebuffer
+
+The lable \type{[middle one]} is used for refering to this formula. Such a
+reference is made with \type{\in{formula}[middle one]}.
+
+If no numbering is required you type:
+
+\type{\placeformula[-]}
+
+Numbering of formulas is set up with \type{\setupnumbering}. In this manual
+numbering is set up with \type{\setupnumbering[way=bychapter]}. This means that
+the chapter number preceeds the formula number and numbering is reset with each
+new chapter. For reasons of consistency the tables, figures, intermezzi etc. are
+numbered in the same way. Therefore you use \type{\setupnumbering} in the set up
+area of your input file.
+
+Formulas can be set up with:
+
+\shortsetup{setupformulae}
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex
new file mode 100644
index 000000000..d7f09e89a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex
@@ -0,0 +1,330 @@
+\startcomponent ma-cb-en-mathcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=overviews,title=Commands in math mode]
+
+\index{symbols in math mode}
+
+\startsection[title=Greek characters]
+
+\starttabulate[|l|l|l|l|l|l|l|l|l|]
+\NC \NC $\alpha$ \NC \type{\alpha}
+\NC \NC $\iota$ \NC \type{\iota}
+\NC \NC $\varrho$ \NC \type{\varrho} \NC\NR
+\NC \NC $\beta$ \NC \type{\beta}
+\NC \NC $\kappa$ \NC \type{\kappa}
+\NC $\Sigma$ \NC $\sigma$ \NC \type{\sigma} \NC\NR
+\NC $\Gamma$ \NC $\gamma$ \NC \type{\gamma}
+\NC $\Lambda$ \NC $\lambda$ \NC \type{\lambda}
+\NC \NC $\varsigma$ \NC \type{\varsigma} \NC\NR
+\NC $\Delta$ \NC $\delta$ \NC \type{\delta}
+\NC \NC $\mu$ \NC \type{\mu}
+\NC \NC $\tau$ \NC \type{\tau} \NC\NR
+\NC \NC $\epsilon$ \NC \type{\epsilon}
+\NC \NC $\nu$ \NC \type{\nu}
+\NC \NC $\upsilon$ \NC \type{\upsilon} \NC\NR
+\NC \NC $\varepsilon$ \NC \type{\varepsilon}
+\NC $\Xi$ \NC $\xi$ \NC \type{\xi}
+\NC $\Phi$ \NC $\phi$ \NC \type{\phi} \NC\NR
+\NC \NC $\zeta$ \NC \type{\zeta}
+\NC \NC $o$ \NC \type{o}
+\NC \NC $\varphi$ \NC \type{\varphi} \NC\NR
+\NC \NC $\eta$ \NC \type{\eta}
+\NC $\Pi$ \NC $\pi$ \NC \type{\pi}
+\NC \NC $\chi$ \NC \type{\chi} \NC\NR
+\NC $\Theta$ \NC $\theta$ \NC \type{\theta}
+\NC \NC $\varpi$ \NC \type{\varpi}
+\NC $\Psi$ \NC $\psi$ \NC \type{\psi} \NC\NR
+\NC \NC $\vartheta$ \NC \type{\vartheta}
+\NC \NC $\rho$ \NC \type{\rho}
+\NC $\Omega$ \NC $\omega$ \NC \type{\omega} \NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Special symbols]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\aleph$ \NC \type{\aleph}
+\NC $\prime$ \NC \type{\prime}
+\NC $\forall$ \NC \type{\forall}
+\NC\NR
+\NC $\hbar$ \NC \type{\hbar}
+\NC $\emptyset$ \NC \type{\emptyset}
+\NC $\exists$ \NC \type{\exists}
+\NC\NR
+\NC $\imath$ \NC \type{\imath}
+\NC $\nabla$ \NC \type{\nabla}
+\NC $\neg$ \NC \type{\neg}
+\NC\NR
+\NC $\jmath$ \NC \type{\jmath}
+\NC $\surd$ \NC \type{\surd}
+\NC $\flat$ \NC \type{\flat}
+\NC\NR
+\NC $\ell$ \NC \type{\ell}
+\NC $\top$ \NC \type{\top}
+\NC $\natural$ \NC \type{\natural}
+\NC\NR
+\NC $\wp$ \NC \type{\wp}
+\NC $\bot$ \NC \type{\bot}
+\NC $\sharp$ \NC \type{\sharp}
+\NC\NR
+\NC $\Re$ \NC \type{\Re}
+\NC $\Vert$ \NC \type{\Vert}
+\NC $\clubsuit$ \NC \type{\clubsuit}
+\NC\NR
+\NC $\Im$ \NC \type{\Im}
+\NC $\angle$ \NC \type{\angle}
+\NC $\diamondsuit$ \NC \type{\diamondsuit}
+\NC\NR
+\NC $\partial$ \NC \type{\partial}
+\NC $\triangle$ \NC \type{\triangle}
+\NC $\heartsuit$ \NC \type{\heartsuit}
+\NC\NR
+\NC $\infty$ \NC \type{\infty}
+\NC $\backslash$ \NC \type{\backslash}
+\NC $\spadesuit$ \NC \type{\spadesuit}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Operators in addition to $+$, $-$ and $*$]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\pm$ \NC \type{\pm}
+\NC $\cap$ \NC \type{\cap}
+\NC $\vee$ \NC \type{\vee}
+\NC\NR
+\NC $\mp$ \NC \type{\mp}
+\NC $\cup$ \NC \type{\cup}
+\NC $\wedge$ \NC \type{\wedge}
+\NC\NR
+\NC $\setminus$ \NC \type{\setminus}
+\NC $\uplus$ \NC \type{\uplus}
+\NC $\oplus$ \NC \type{\oplus}
+\NC\NR
+\NC $\cdot$ \NC \type{\cdot}
+\NC $\sqcap$ \NC \type{\sqcap}
+\NC $\ominus$ \NC \type{\ominus}
+\NC\NR
+\NC $\times$ \NC \type{\times}
+\NC $\sqcup$ \NC \type{\sqcup}
+\NC $\otimes$ \NC \type{\otimes}
+\NC\NR
+\NC $\ast$ \NC \type{\ast}
+\NC $\triangleleft$ \NC \type{\triangleleft}
+\NC $\oslash$ \NC \type{\oslash}
+\NC\NR
+\NC $\star$ \NC \type{\star}
+\NC $\triangleright$ \NC \type{\triangleright}
+\NC $\odot$ \NC \type{\odot}
+\NC\NR
+\NC $\diamond$ \NC \type{\diamond}
+\NC $\wr$ \NC \type{\wr}
+\NC $\dagger$ \NC \type{\dagger}
+\NC\NR
+\NC $\circ$ \NC \type{\circ}
+\NC $\bigcirc$ \NC \type{\bigcirc}
+\NC $\ddagger$ \NC \type{\ddagger}
+\NC\NR
+\NC $\bullet$ \NC \type{\bullet}
+\NC $\bigtriangleup$ \NC \type{\bigtriangleup}
+\NC $\amalg$ \NC \type{\amalg}
+\NC\NR
+\NC $\div$ \NC \type{\div}
+\NC $\bigtriangledown$ \NC \type{\bigtriangledown}
+\NC ~ \NC ~
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Operators]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\sum$ \NC \type{\sum}
+\NC $\prod$ \NC \type{\prod}
+\NC $\coprod$ \NC \type{\coprod}
+\NC\NR
+\NC $\int$ \NC \type{\int}
+\NC $\oint$ \NC \type{\oint}
+\NC $\bigcap$ \NC \type{\bigcap}
+\NC\NR
+\NC $\bigcup$ \NC \type{\bigcup}
+\NC $\bigsqcup$ \NC \type{\bigsqcup}
+\NC $\bigvee$ \NC \type{\bigvee}
+\NC\NR
+\NC $\bigwedge$ \NC \type{\bigwedge}
+\NC $\bigodot$ \NC \type{\bigodot}
+\NC $\bigotimes$ \NC \type{\bigotimes}
+\NC\NR
+\NC $\bigoplus$ \NC \type{\bigoplus}
+\NC $\biguplus$ \NC \type{\biguplus}
+\NC \NC
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Relation in addition to $>$, $<$ and $=$]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\leq$ \NC \type{\leq}
+\NC $\geq$ \NC \type{\geq}
+\NC $\equiv$ \NC \type{\equiv}
+\NC\NR
+\NC $\prec$ \NC \type{\prec}
+\NC $\succ$ \NC \type{\succ}
+\NC $\sim$ \NC \type{\sim}
+\NC\NR
+\NC $\preceq$ \NC \type{\preceq}
+\NC $\succeq$ \NC \type{\succeq}
+\NC $\simeq$ \NC \type{\simeq}
+\NC\NR
+\NC $\ll$ \NC \type{\ll}
+\NC $\gg$ \NC \type{\gg}
+\NC $\asymp$ \NC \type{\asymp}
+\NC\NR
+\NC $\subset$ \NC \type{\subset}
+\NC $\supset$ \NC \type{\supset}
+\NC $\approx$ \NC \type{\approx}
+\NC\NR
+\NC $\subseteq$ \NC \type{\subseteq}
+\NC $\supseteq$ \NC \type{\supseteq}
+\NC $\cong$ \NC \type{\cong}
+\NC\NR
+\NC $\sqsubseteq$ \NC \type{\sqsubseteq}
+\NC $\sqsupseteq$ \NC \type{\sqsupseteq}
+\NC $\bowtie$ \NC \type{\bowtie}
+\NC\NR
+\NC $\in$ \NC \type{\in}
+\NC $\ni$ \NC \type{\ni}
+\NC $\propto$ \NC \type{\propto}
+\NC\NR
+\NC $\vdash$ \NC \type{\vdash}
+\NC $\dashv$ \NC \type{\dashv}
+\NC $\models$ \NC \type{\models}
+\NC\NR
+\NC $\smile$ \NC \type{\smile}
+\NC $\mid$ \NC \type{\mid}
+\NC $\doteq$ \NC \type{\doteq}
+\NC\NR
+\NC $\frown$ \NC \type{\frown}
+\NC $\parallel$ \NC \type{\parallel}
+\NC $\perp$ \NC \type{\perp}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Negated relations]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\not<$ \NC \type{\not}\type{<}
+\NC $\not>$ \NC \type{\not}\type{>}
+\NC $\not=$ \NC \type{\not}\type{=}
+\NC\NR
+\NC $\not\leq$ \NC \type{\not}\type{\leq}
+\NC $\not\geq$ \NC \type{\not}\type{\geq}
+\NC $\not\equiv$ \NC \type{\not}\type{\equiv}
+\NC\NR
+\NC $\not\prec$ \NC \type{\not}\type{\prec}
+\NC $\not\succ$ \NC \type{\not}\type{\succ}
+\NC $\not\sim$ \NC \type{\not}\type{\sim}
+\NC\NR
+\NC $\not\preceq$ \NC \type{\not}\type{\preceq}
+\NC $\not\succeq$ \NC \type{\not}\type{\succeq}
+\NC $\not\simeq$ \NC \type{\not}\type{\simeq}
+\NC\NR
+\NC $\not\subset$ \NC \type{\not}\type{\subset}
+\NC $\not\supset$ \NC \type{\not}\type{\supset}
+\NC $\not\approx$ \NC \type{\not}\type{\approx}
+\NC\NR
+\NC $\not\subseteq$ \NC \type{\not}\type{\subseteq}
+\NC $\not\supseteq$ \NC \type{\not}\type{\supseteq}
+\NC $\not\cong$ \NC \type{\not}\type{\cong}
+\NC\NR
+\NC $\not\sqsubseteq$ \NC \type{\not}\type{\sqsubseteq}
+\NC $\not\sqsupseteq$ \NC \type{\not}\type{\sqsupseteq}
+\NC $\not\asymp$ \NC \type{\not}\type{\asymp}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Some arrows]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\leftarrow$ \NC \type{\leftarrow}
+\NC $\longleftarrow$ \NC \type{\longleftarrow}
+\NC $\uparrow$ \NC \type{\uparrow}
+\NC\NR
+\NC $\Leftarrow$ \NC \type{\Leftarrow}
+\NC $\Longleftarrow$ \NC \type{\Longleftarrow}
+\NC $\Uparrow$ \NC \type{\Uparrow}
+\NC\NR
+\NC $\rightarrow$ \NC \type{\rightarrow}
+\NC $\longrightarrow$ \NC \type{\Rightarrow}
+\NC $\downarrow$ \NC \type{\downarrow}
+\NC\NR
+\NC $\Rightarrow$ \NC \type{\Rightarrow}
+\NC $\Longrightarrow$ \NC \type{\Longrightarrow}
+\NC $\Downarrow$ \NC \type{\Downarrow}
+\NC\NR
+\NC $\leftrightarrow$ \NC \type{\leftrightarrow}
+\NC $\longleftrightarrow$ \NC \type{\longleftrightarrow}
+\NC $\updownarrow$ \NC \type{\updownarrow}
+\NC\NR
+\NC $\Leftrightarrow$ \NC \type{\Leftrightarrow}
+\NC $\Longleftrightarrow$ \NC \type{\Longleftrightarrow}
+\NC $\Updownarrow$ \NC \type{\Updownarrow}
+\NC\NR
+\NC $\mapsto$ \NC \type{\mapsto}
+\NC $\longmapsto$ \NC \type{\longmapsto}
+\NC $\nearrow$ \NC \type{\nearrow}
+\NC\NR
+\NC $\searrow$ \NC \type{\searrow}
+\NC $\swarrow$ \NC \type{\swarrow}
+\NC $\nwarrow$ \NC \type{\nwarrow}
+\NC\NR
+\NC $\hookleftarrow$ \NC \type{\hookleftarrow}
+\NC $\hookrightarrow$ \NC \type{\hookrightarrow}
+\NC ~ \NC ~
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Alternative commands]
+
+\starttabulate[|l|l|l|l|l|l|l|l|l|l|]
+\NC $\ne$ \NC \type{\ne}
+\NC $\{$ \NC {\tttf\leftargument}
+\NC $\land$ \NC \type{\land}
+\NC $\to$ \NC \type{\to}
+\NC $\vert$ \NC \type{\vert}
+\NC\NR
+\NC $\le$ \NC \type{\le}
+\NC $\}$ \NC {\tttf\rightargument}
+\NC $\lor$ \NC \type{\lor}
+\NC $\gets$ \NC \type{\gets}
+\NC $\Vert$ \NC \type{\Vert}
+\NC\NR
+\NC $\ge$ \NC \type{\ge}
+\NC $\owns$ \NC \type{\owns}
+\NC $\lnot$ \NC \type{\lnot}
+\NC \NC
+\NC \NC
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex
new file mode 100644
index 000000000..e50bed036
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex
@@ -0,0 +1,75 @@
+\startcomponent ma-cb-en-metapost
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Graphical extension / \METAPOST]
+
+\index[metapost]{\METAPOST}
+\index{graphical features}
+
+The graphical possibilities of \TEX||related macro packages are rather limited.
+However, by using the graphical package \METAPOST\ of John Hobby a complete range
+of graphical features has become available that may improve the look of your
+documents.
+
+In \CONTEXT\ there is a direct link to \METAPOST\ so users can apply the features
+of \METAPOST\ directly into their documents. The chapter headers and page numbers
+of this manual are extended by some graphical elements that are generated by
+\METAPOST.
+
+If you look carefully at these \METAPOST\ extensions you will notice a lot of
+contextual adaptation (width and height dependend) and randomization. So you can do
+things in your document that are not possible in other typesetting applications.
+
+A more practical example (for a mathematician at least) is drawn in \in {figure}
+[fig:metapostexample]:
+
+\startbuffer
+\startreusableMPgraphic{origin}
+ path pb; pb:=(5.5cm,0cm)..(10.5cm,0cm);
+ path qb; qb:=(8cm,-1cm)..(8cm,2.5cm);
+ pickup pencircle scaled 0.5mm;
+ drawarrow pb;
+ drawarrow qb;
+ draw thelabel.rt(btex $x$ etex,(10.6cm,0cm));
+ draw thelabel.top(btex $y$ etex,(8cm,2.6cm));
+ path l; l:=(5.5cm,-0.5cm)..(10.5cm,2cm);
+ pickup pencircle scaled 0.3mm;
+ draw l withcolor blue ;
+ pair A; A:=(6cm,-0.25cm);
+ pair B; B:=(9.3cm,1.4cm);
+ pair C; C:=(9.3cm,-0.25cm);
+ pickup pencircle scaled 0.15cm;
+ drawdot A; drawdot B; drawdot C;
+ draw thelabel.lrt(btex $\scriptstyle P_1(x_1,y_1)$ etex ,A);
+ draw thelabel.lrt(btex $\scriptstyle P_2(x_2,y_2)$ etex ,B);
+ draw thelabel.bot(btex $\scriptstyle P(x_2,y_1)$ etex ,C);
+ path s; s:=A..(9.3cm,-0.25cm);
+ draw s dashed (evenly scaled 1mm) withpen pencircle scaled 0.3mm;
+ path t; t:=B..(9.3cm,-0.25cm);
+ draw t dashed (evenly scaled 1mm) withpen pencircle scaled 0.3mm;
+\stopreusableMPgraphic
+\stopbuffer
+
+\getbuffer
+
+\placefigure
+ [here]
+ [fig:metapostexample]
+ {\METAPOST\ example.}
+ {\reuseMPgraphic{origin}}
+
+This example is taken from the mathematical text book {\em Algetrigulus} by
+Philip Brown. All graphics in his book are made by means of \METAPOST. This
+one is defined by:
+
+\typebuffer
+
+The usage and features of \METAPOST\ within \CONTEXT\ are described in the
+extensive \goto {\METAFUN\ manual} [ url (manual:metafun) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex
new file mode 100644
index 000000000..4f92e8e47
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex
@@ -0,0 +1,45 @@
+\startcomponent ma-cb-en-modules
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Using modules]
+
+%% VZ: many new modules was added (see ma-cb-cz-modules.tex)
+
+\index{module}
+
+\Command{\tex{usemodule}}
+
+For reasons of efficiency \CONTEXT\ comes with a number of modules that contain
+specific functionality. Loading a module is done in the set up area of your input
+file by means of:
+
+\shortsetup{usemodule}
+
+When you load a module \CONTEXT\ looks for a file with the following (prefix-)name:
+
+\startitemize[packed]
+\item m-modulename (core module)
+\item p-modulename (private module)
+\item s-modulename (\CONTEXT\ style file)
+\item x-modulename (XML module)
+\item t-modulename (third party module)
+\item modulename
+\stopitemize
+
+A few example core modules are:
+
+\startitemize[packed]
+\item m-fields (\type{m-fields.mkiv}): for PDF forms
+\item m-morse (\type{m-morse.mkvi}): for morse
+\item m-spreadsheet (\type{m-spreadsheet.mkiv}): for spreadsheets
+\item m-visual (\type{m-visual.mkiv}): for visual debugging
+\item m-zint (\type{m-zint.mkiv}): for generating bar codes
+\item s-pre-** (\type{s-pre-**}): for presentations
+\stopitemize
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex
new file mode 100644
index 000000000..ff7bf0b4d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex
@@ -0,0 +1,93 @@
+\startcomponent ma-cb-en-pagebackgrounds
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Backgrounds in page areas]
+
+\index{page areas}
+\index{background+page areas}
+
+\Command{\tex{setupbackgrounds}}
+
+The page background can be set, with:
+
+\shortsetup{setupbackgrounds}
+
+The first two bracket pairs are used to define the page areas. The last bracket
+pair is used for set up.
+
+\startbuffer
+\hbox
+ {\framed[width=1.5cm,frame=off] {}
+ \framed[width=2cm,frame=off] {left}
+ \framed[width=2.5cm,frame=off] {left}
+ \framed[width=3cm,frame=off] {text}
+ \framed[width=2.5cm,frame=off] {right}
+ \framed[width=2cm,frame=off] {right}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {}
+ \framed[width=2cm,frame=off] {edge}
+ \framed[width=2.5cm,frame=off] {margin}
+ \framed[width=3cm,frame=off] {}
+ \framed[width=2.5cm,frame=off] {margin}
+ \framed[width=2cm,frame=off] {edge}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {top}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=3cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {header}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=3cm,background=screen] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off,height=3cm] {text}
+ \framed[width=2cm,height=3cm] {}
+ \framed[width=2.5cm,height=3cm,background=screen]{}
+ \framed[width=3cm,height=3cm,background=screen] {}
+ \framed[width=2.5cm,height=3cm,background=screen]{}
+ \framed[width=2cm,height=3cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {footer}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=3cm,background=screen] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {bottom}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=3cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=2cm] {}}
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:pageareas]
+ {The page areas defined in \type{\setupbackgrounds}.}
+ {\tt\getbuffer}
+
+If you want to have backgrounds in the gray areas of the page layout of
+\in{figure}[fig:pageareas] you type:
+
+\startbuffer
+\setupbackgrounds
+ [header,text,footer]
+ [leftmargin,text,rightmargin]
+ [background=screen]
+\stopbuffer
+
+\typebuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex
new file mode 100644
index 000000000..61e2d6ce9
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex
@@ -0,0 +1,208 @@
+\startcomponent ma-cb-en-pages
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page breaking and page numbering]
+
+\index{page breaking}
+\index{page numbering}
+
+\Command{\tex{page}}
+\Command{\tex{setuppagenumbering}}
+\Command{\tex{setupuserpagenumber}}
+
+\startsection[title=Page break]
+
+A page can be enforced or blocked by:
+
+\shortsetup{page}
+
+The options can be stated within the brackets. The options and their meaning are
+presented in \in{table}[tab:page options].
+
+\placetable
+ []
+ [tab:page options]
+ {Page options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{yes} \NC enforce a page \NC\FR
+\NC \type{makeup} \NC enforce a page without filling \NC\MR
+\NC \type{no} \NC no page \NC\MR
+\NC \type{preference} \NC prefer a new page here \NC\MR
+\NC \type{bigpreference} \NC great preference for a new page here \NC\MR
+\NC \type{left} \NC next page is a left handside page \NC\MR
+\NC \type{right} \NC next page is a right handside page \NC\MR
+\NC \type{disable} \NC following commands have no effect \NC\MR
+\NC \type{last} \NC add pages till even number is reached \NC\MR
+\NC \type{quadruple} \NC add pages till a multiple of four is reached \NC\MR
+\NC \type{even} \NC next page is even \NC\MR
+\NC \type{odd} \NC next page in odd \NC\MR
+\NC \type{blank} \NC no page number \NC\MR
+\NC \type{empty} \NC insert an empty page \NC\MR
+\NC \type{reset} \NC following commands do have effect \NC\MR
+\NC \type{start} \NC from now on page commands have effect \NC\MR
+\NC \type{stop} \NC from now on page commands have no effect \NC\LR
+\HL
+\stoptable
+
+\stopsection
+
+\startsection[title=Page numbering]
+
+Numbering pages is done automatically by \CONTEXT. However, numbering the pages
+the way you want it may take some effort.
+
+A rather simple \type{\start ... \stoptext} document will be numbered from
+$1 .. n$ (where $n$ is the last page). If you want your document to number
+its pages alphabetical you can type:
+
+\startbuffer
+\setupuserpagenumber
+ [numberconversion=character]
+\stopbuffer
+
+\typebuffer
+
+in the setup area of your file.
+
+You can enforce a page number with:
+
+\starttyping
+\setupuserpagenumber[number=25]
+\stoptyping
+
+\shortsetup{setupuserpagenumber}
+
+The options of the \type{\setupuserpagenumber} command are given in
+\in{table}[tab:user page number options].
+
+\placetable
+ []
+ [tab:user page number options]
+ {Page numbering: numbering options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{way} \NC how to number the document \NC\FR
+\NC \type{prefix} \NC use pagenumber prefix \NC\MR
+\NC \type{prefixset} \NC use defined prefixset \NC\MR
+\NC \type{prefixseparatorset} \NC use defined separator \NC\MR
+\NC \type{state} \NC start -- stop page numbering \NC\MR
+\NC \type{number} \NC define page number \NC\MR
+\NC \type{numberconversion} \NC convert page number \NC\MR
+\NC \type{numberconversionset} \NC used defined conversion set \NC\LR
+\HL
+\stoptable
+
+The \type{prefixset}, \type{prefixseparatorset} and the \type{numberconversionset}
+options are defined with the \type{\defineprefixset}, \type{\defineseparatorset}
+and \type{\defineconversionset} respectively.
+
+This manual uses the \CONTEXT\ standard document section blocks: frontpart,
+bodymatter and appendices. These section blocks are numbered with roman
+characters, numeral digits and characters respectively.
+
+\startbuffer
+\defineconversionset
+ [frontpart:pagenumber][][romannumerals]
+
+\defineconversionset
+ [bodypart:pagenumber] [][numbers]
+
+\defineconversionset
+ [appendix:pagenumber] [][Characters]
+\stopbuffer
+
+\typebuffer
+
+At the start of each section block the number is reset to i, 1 and A respectively.
+
+The same effect would have been obntained with:
+
+\startbuffer
+\startsectionblockenvironment[frontpart]
+ \setupuserpagenumber[numberconversion=romannumerals]
+\stopsectionblockenvironment
+\stopbuffer
+
+\typebuffer
+
+Page numbering and the location of the page numbers can be set up with:
+
+\shortsetup{setuppagenumbering}
+
+The options of this command are shown in \in{table}[tab:page numbering options]:
+
+\placetable
+ []
+ [tab:page numbering options]
+ {Page numbering: layout options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{alternative} \NC page layout: single or double sided \NC\MR
+\NC \type{location} \NC location of page number on page \NC\MR
+\NC \type{width} \NC width of pagen umber \NC\MR
+\NC \type{left} \NC text left of page number \NC\MR
+\NC \type{right} \NC text right of page number \NC\MR
+\NC \type{page} \NC \unknown \NC\MR
+\NC \type{state} \NC start -- stop page numbering \NC\MR
+\NC \type{command} \NC invoke command \NC\MR
+\NC \type{style} \NC set character style \NC\MR
+\NC \type{color} \NC set color \NC\LR
+\HL
+\stoptable
+
+Note that this is also the command that indicates that your document is single or
+double sided which has an effect on the left-right page layout.
+
+\startbuffer
+\setuppagenumbering
+ [alternative=doublesided]
+\stopbuffer
+
+\typebuffer
+
+In this manual page numbering is set up with:
+
+\starttyping
+\setuppagenumbering
+ [location={footer,middle},
+ command=\NummerCommando]
+\stoptyping
+
+The \type{\NummerCommando} uses \METAPOST\ to draw a unique random image around
+each page number.
+
+You can recal a page number with \type{\userpagenumber}. If you set up your headertext
+with:
+
+\startbuffer
+ \setupheadertexts
+ [Page \userpagenumber\ of \lastuserpagenumber]
+\stopbuffer
+
+\typebuffer
+
+You would get a header with the actual page number and the total of pages (in that
+section block).
+
+The actual page number and the real page number may differ since there may be pages
+or sections that in your document that are not numbered. If you feel the need to
+display the real page number there is the command \type{\realpagenumber}.
+
+Please refer to the \goto {\CONTEXTWIKI} [
+url(http://wiki.contextgarden.net/Command/setupuserpagenumber) ] for more
+details.
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex
new file mode 100644
index 000000000..668b6ab01
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex
@@ -0,0 +1,280 @@
+\startcomponent ma-cb-en-paragraphs
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Paragraph spacing]
+
+\startsection[title=Introduction]
+
+\index{paragraph}
+
+\Command{\tex{par}}
+\Command{\tex{paragraph}}
+
+In \TEX\ and \CONTEXT\ the most important unit of text is the paragraph. You can
+start a new paragraph by:
+
+\startitemize[packed]
+\item an empty line
+\item the \TEX\ command \type{\par}
+\stopitemize
+
+In your \ASCII\ input file you should use empty lines as paragraph separators.
+This will lead to a readable, clearly structured and well organized file and will
+prevent mistakes.
+
+In situations where a command has to be closed explicitly you should use
+\type{\par}.
+
+\startbuffer
+During one of the wars Hasselt lay under siege. After some
+time the city was famine stricken, everything edible was
+eaten. Except for one cow. The cow was kept alive and
+treated very well. \par
+Once a day the citizens of Hasselt took the cow for a walk
+on the ramparts. The besiegers saw the well fed cow and
+became very discouraged. They broke up their camps and
+Hasselt was saved. \par
+In the Hoogstraat in Hasselt there is a stone tablet with a
+representation of the cow that commemorates the siege and
+the shrewdness of the citizens of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+This could also be typed without \type{\par}s and a few empty lines.
+
+\startbuffer
+During one of the wars Hasselt lay under siege. After some
+time the city was famine stricken, everything edible was
+eaten. Except for one cow. The cow was kept alive and
+treated very well.
+
+Once a day the citizens of Hasselt took the cow for a walk
+on the ramparts. The besiegers saw the well fed cow and
+became very discouraged. They broke up their camps and
+Hasselt was saved.
+
+In the Hoogstraat in Hasselt there is a stone tablet with a
+representation of the cow that commemorates the siege and
+the wisdom of the citizens of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Inter paragraph spacing]
+
+\index{inter paragraph spacing}
+
+\Command{\tex{setupwhitespace}}
+\Command{\tex{nowhitespace}}
+\Command{\tex{whitespace}}
+\Command{\tex{startlinecorrection}} % VZ 2006-11-15 setup->start
+\Command{\tex{blank}}
+\Command{\tex{setupblank}}
+\Command{\tex{startpacked}}
+\Command{\tex{startunpacked}}
+
+The vertical spacing between paragraphs can be specified by:
+
+\shortsetup{setupwhitespace}
+
+This document is produced with \type{\setupwhitespace[medium]}.
+
+When inter paragraph spacing is specified there are two commands available that
+are seldom needed:
+
+\starttyping
+\nowhitespace
+\whitespace
+\stoptyping
+
+When a paragraph consists of a horizontal line or a framed text like this:
+
+\startbuffer
+\framed{Ridderstraat 27, 8061GH Hasselt}
+\stopbuffer
+
+\getbuffer
+
+Sometimes spacing is suboptimal. For that purpose you could carry out a
+correction with:
+
+\shortsetup{startlinecorrection}
+
+So if you would type:
+
+\startbuffer
+\startlinecorrection
+\framed{Ridderstraat 27, 8061GH Hasselt}
+\stoplinecorrection
+\stopbuffer
+
+\typebuffer
+
+you will get a better output. Only use these commands if really needed!
+
+\getbuffer
+
+Another command to deal with vertical spacing is:
+
+\shortsetup{blank}
+
+The bracket pair is optional and within the bracket pair you can type the amount
+of spacing. Keywords like \type{small}, \type{medium} and \type{big} are related
+to the fontsize.
+
+\startbuffer
+In official writings Hasselt always has the affix Ov. This is an
+abbrevation for the province of {\em Overijssel}.
+\blank[2*big]
+The funny thing is that there is no other Hasselt in the Netherlands.
+So it is redundant.
+\blank
+The affix is a leftover from the times that the Netherlands and
+Belgium were one country under the reign of King Philip II of Spain.
+\blank[2*big]
+Hasselt in Belgium lies in the province of Limburg. One wonders if
+the Belgian people write Hasselt (Li) on their letters.
+\stopbuffer
+
+\typebuffer
+
+The command \type{\blank} without the bracket pair is the default space.
+
+The example would become:
+
+\getbuffer
+
+The default spacing can be set up with:
+
+\shortsetup{setupblank}
+
+If you want to surpress vertical spacing you can use:
+
+\shortsetup{startpacked}
+
+In this manual the whitespace is set at \type{medium}. In the next situation this
+set up is ignored and the lines are packed.
+
+\startbuffer
+\startpacked
+Hasselt (Ov) lies in Overijssel.
+
+Hasselt (Li) lies in Limburg.
+
+Watch out: we talk about Limburg in Belgium. There is
+also a Dutch Limburg.
+\stoppacked
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+It is not hard to imagine why there is also:
+
+\shortsetup{startunpacked}
+
+You can force vertical space with \type{\godown}. The distance is specified
+within the brackets.
+
+\shortsetup{godown}
+
+Try not to use this command. It is always better use the \type{\setup...} commands
+to setup your spacing model.
+
+\stopsection
+
+\startsection[title=Whitespace before and after text components]
+
+Most text components that are coded with \CONTEXT\ have a \type{\setup...} command
+with which you can define the whitespace before and after that component.
+
+\starttyping
+\setupitemize
+ [before=,after=]
+
+\setuphead
+ [chapter]
+ [before=,after=]
+
+\setupframedtexts
+ [before=,after=]
+\stoptyping
+
+The use of the \type{\setup...} commands prevents you from having to code
+whitespaces throughout your \TEX\ document. This would lead to unreadable sources
+and inconsistent use of whitepaces.
+
+\stopsection
+
+\startsection[title=Skipping space]
+
+\Command{\tex{hskip}}
+\Command{\tex{vskip}}
+
+You can introduce horizontal and vertical space with \type{\hskip} and
+\type{\vskip} commands.
+
+Try to avoid these commands in your text. It will probably lead to inconsistent
+spacing.
+
+\stopsection
+
+\startsection[title=Indentation]
+
+\index{indentation}
+\index{paragraph+indentation}
+
+\Command{\tex{indenting}}
+\Command{\tex{noindenting}}
+\Command{\tex{setupindenting}}
+
+You can set up the amount of the indentation with:
+
+\shortsetup{setupindenting}
+
+A reasonable indentation is achieved by:
+
+\starttyping
+\setupindenting[yes,]
+\stoptyping
+
+This will lead to indented paragraphs. By default, indentation after white space
+(as issued by \type {\blank}) is suppressed.
+
+You can locally influence the indentation state by using:
+
+\shortsetup{indenting}
+
+When for instance you say \type {never}, from that moment on indentation will be
+surpressed. Saying \type {none}, only influences the next paragraph.
+
+If you choose to use indentations, and at a certain place you explicitly {\em do
+not} want to indent, you can also say:
+
+\starttyping
+\noindenting
+\stoptyping
+
+In some \type{\setup...} commands you can set the parameter \type{indent=yes}. This means
+that the paragraph that follows the textcomponent will indent:
+
+\startbuffer
+\setupitemize[indentnext=yes]
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex
new file mode 100644
index 000000000..623ba9490
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex
@@ -0,0 +1,38 @@
+\startcomponent ma-cb-en-presentations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Presentations,reference=presentations]
+
+\index{presentation}
+
+You can use \CONTEXT\ for making your own presentations. A \CONTEXT\ presentation
+is an interactive PDF document with a screen layout. Often presentations are good
+examples of the cooperation between \CONTEXT\ and \METAPOST.
+
+\CONTEXT\ comes with a number ready-to-use presentations. A presentation is a
+module with the prefix \type{s-} and that you can load with the \type{\usemodule}
+command.
+
+If you want to use an already existing presentation the best way to proceed is:
+
+\startitemize[packed]
+\item goto \type{../your-contextdir/tex/texmf-context/tex/context/base} in your text editor
+\item open a presentation: for example \type{s-pre-05.tex}
+\item goto the end of the file and study the commands between
+ the \type{\start...\stoptext} pair
+\item copy the commands into your own presentation file
+\item invoke the presentation with \type{\usemodule[s][pre-05]} in de setup
+ area of your presentation file
+\item process the file to view the result
+\item edit the content of your presentation
+\stopitemize
+
+A stepwise setup of a presentation is given at the
+\goto{\CONTEXTWIKI}[ url (http://wiki.contextgarden.net/Presentations) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex
new file mode 100644
index 000000000..1ceabfeb1
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex
@@ -0,0 +1,44 @@
+\startcomponent ma-cb-en-processingfiles
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=The \type{context} command,reference=contextcommand]
+
+\index{\type{context} (command)}
+\index{\type{mtxrun} (command)}
+\index{processing TeX file}
+
+You can process a \TEX\ file or run \CONTEXT\ with the command \type{context}
+that you can type at your console:
+
+\starttyping
+context myfile
+\stoptyping
+
+\CONTEXT\ will make multiple runs to get the layout, references, lists and
+pagenumbering straight. You can see those runs echoed on your screen and listed
+in the \type{myfile.log} file.
+
+You can add parameters to give the command \type{context} additional
+tasks while processing the file. If you want start up \READER\ automatically
+you can type:
+
+\starttyping
+context --autopdf myfile
+\stoptyping
+
+A full overview of the parameters is given when you type:
+
+\starttyping
+context --help
+\stoptyping
+
+Please refer to the manual \goto{luatools, mtxrun, context}[ url (manual:tools) ]
+for more information on running \CONTEXT.
+
+\stopchapter
+
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex
new file mode 100644
index 000000000..bc758e521
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex
@@ -0,0 +1,148 @@
+\startcomponent ma-cb-en-references
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Refering to text elements]
+
+\index{refering}
+\index{label}
+
+\Command{\tex{in}}
+\Command{\tex{at}}
+\Command{\tex{pagereference}}
+
+To disclose your document for your readers you can use the table of contents and
+the register. However, it is not uncommon to refer to specific text elements like
+formulas, tables, images and sections to enhance readability.
+
+For refering from one location in a document to another you can use the command:
+
+\shortsetup{in}
+
+The curly braces contain text and the brackets contain a logical label. If you have
+written a chapter header like this:
+
+\starttyping
+\startchapter[title=Hotels in Hasselt,reference=hotel]
+ ...
+\stopchapter
+\stoptyping
+
+then you can refer to this chapter with:
+
+\starttyping
+\in{chapter}[hotel]
+\stoptyping
+
+After processing the chapter number is available and the reference could look
+something like: {\em chapter 23}. You can use \type{\in} for any references to
+text elements like chapters, sections, figures, tables, formulas etc.
+
+Another example:
+
+\startbuffer
+There are a number of things you can do in Hasselt:
+
+\startitemize[n,packed]
+\item swimming
+\item sailing
+\item[hiking] hiking
+\item biking
+\stopitemize
+
+An activity like \in{activity}[hiking] described on \at{page}[hiking]
+is very tiring.
+\stopbuffer
+
+\typebuffer
+
+This would look like this:
+
+\getbuffer
+
+As you can see, it is also possible to refer to pages. This is done with:
+
+\shortsetup{at}
+
+For example with:
+
+\starttyping
+\at{page}[hiking]
+\stoptyping
+
+This command can be used in combination with:
+
+\shortsetup{pagereference}
+
+and
+
+\shortsetup{textreference}
+
+If you want to refer to the chapter {\em Hotels in Hasselt} you could type:
+
+\startbuffer
+Look in \in{chapter}[hotel] on \at{page}[hotel] for a complete
+overview of accomodations in \pagereference[accomodation]Hasselt.
+\stopbuffer
+
+\typebuffer
+
+A chapter number and a page number will be generated when processing the input
+file. On another spot in the document you can refer to \type{accomodation} with
+\type{\at{page}[accomodation]}.
+
+You can also define a set of labels separated by commas.
+
+\startbuffer
+\placefigure
+ [here]
+ [fig:canals,fig:boats]
+ {A characteristic picture of Hasselt.}
+ {\externalfigure[ma-cb-08][width=10cm]}
+
+There are many canals in Hasselt (see \in{figure}[fig:canals]).
+.
+.
+.
+Boats can be moored in the canals of Hasselt (see
+\in{figure}[fig:boats]).
+\stopbuffer
+
+\typebuffer
+
+This might look like this:
+
+\getbuffer
+
+You can also refer to a title of a chapter or section or even a caption of an
+image. This is done with:
+
+\shortsetup{about}
+
+This:
+
+\startbuffer
+The caption of \in{figure}[fig:canals] is {\em \about[fig:canals]}.
+\stopbuffer
+
+\typebuffer
+
+Becomes:
+
+\getbuffer
+
+With the command:
+
+\starttyping
+\setupinteraction[state=start]
+\stoptyping
+
+all references become active links. See \in{chapter}[interactivity] for more
+information on this subject.
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex
new file mode 100644
index 000000000..315e2bfa4
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex
@@ -0,0 +1,83 @@
+\startcomponent ma-cb-en-registers
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Registers]
+
+\index{register}
+
+\Command{\tex{index}}
+\Command{\tex{placeindex}}
+\Command{\tex{completeindex}}
+\Command{\tex{defineregister}}
+\Command{\tex{placeregister}}
+\Command{\tex{completeregister}}
+\Command{\tex{setupregister}}
+
+It is possible to generate one or more registers. By default the command
+\type{\index} is available. If you want to add a word to the index you type:
+
+\starttyping
+\index{town hall}
+\stoptyping
+
+The word {\em town hall} will appear as an index entry in the sorted register.
+Sometimes the index word does not appear in normal alphabetic order. For example,
+entries such as symbols have to provide extra sorting information in order to
+produce a correct alphabetical list:
+
+\starttyping
+\index[minus]{$-$}
+\stoptyping
+
+Sometimes you have sub- or sub sub entries. These can be defined as follows:
+
+\starttyping
+\index{town hall+location}
+\index{town hall+architecture}
+\stoptyping
+
+You can generate your register with the command:
+
+\starttyping
+\placeindex
+\stoptyping
+
+or
+
+\starttyping
+\completeindex
+\stoptyping
+
+The command \type{\index} is a predefined \CONTEXT\ command, but of course you
+can also define your own registers.
+
+\shortsetup{defineregister}
+
+For example if you want to make a new register based on the streets in Hasselt
+you could type:
+
+\starttyping
+\defineregister[street]
+\stoptyping
+
+Now a new register command \type{\street} is available. Now
+\type{\street{Ridderstraat}} is a new index entry. To produce a list of entries
+you could now use:
+
+\starttyping
+\placeregister[street]
+\placestreet
+\completestreet
+\stoptyping
+
+You can alter the layout of the registers with:
+
+\shortsetup{setupregister}
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex
new file mode 100644
index 000000000..d72b536a5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex
@@ -0,0 +1,41 @@
+\startcomponent ma-cb-en-runtimefiles
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Auxilliary files,reference=runtimefiles]
+
+\index[tuc]{{\tt tuc}--file}
+\index{auxilliary files}
+
+\CONTEXT\ will produce a number of auxilliary files during processing. If your
+input file is called \type{myfile.tex} the following files may appear on your
+working directory.
+
+\index[tuc]{{\tt tuc}--file}
+\index{auxilliary files}
+
+\starttabulate[|l|l|l|]
+\HL
+\NC \darkgray \bf \CONTEXT\ MkII \NC \bf \CONTEXT\ MkIV \NC \bf Meaning \NC\NR
+\HL
+\NC \darkgray \tt myfile.tex \NC \tt myfile.tex \NC your text file \NC\NR
+\HL
+\NC \darkgray \tt myfile.log \NC \tt myfile.log \NC log information \NC\NR
+\NC \darkgray \tt myfile.tuo \NC \tt myfile.tuc \NC output information \NC\NR
+\NC \darkgray \tt myfile.tui \NC \NC \darkgray input information \NC\NR
+\NC \darkgray \tt myfile.tmp \NC \NC \darkgray temporary information \NC\NR
+\NC \darkgray \tt mpgraph.mp \NC \NC \darkgray \METAPOST\ information \NC\NR
+\HL
+\NC \darkgray \tt myfile.pdf \NC \tt myfile.pdf \NC result file \NC\NR
+\HL
+\stoptabulate
+
+The \type{myfile.tuc} file contains information about registers, lists and
+references which will be used when necessary. The \type{myfile.log}
+can be viewed in case there are problems during processing.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex
new file mode 100644
index 000000000..2f087ea8d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex
@@ -0,0 +1,54 @@
+\startcomponent ma-cb-en-setupcommands
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Setup commands]
+
+\index{set up}
+\index{layout}
+
+Global commands are placed in the setup area of your input file, before
+\type{\starttext}. In \in{appendix}[commandsetups] there is a complete overview of the
+available commands and their parameters.
+
+The set up commands all have the same structure. They look something like:
+
+\shortsetup{setupparagraphs}
+
+A set up command consists of a more or less logical name and a number of bracket
+pairs. Bracket pairs may be optional and in that case the \type{[]} are typeset
+slanted {\tt \sl []}. In the definition the bracket pairs may contain:
+
+\starttyping
+\setupacommand[.1.][.2.][..,..=..,..]
+\stoptyping
+
+The commas indicate that a list of parameters can be enclosed. In the options
+list following the definition, the \type{.1.} and \type{.2.} show the possible
+options that can be set in the first and second bracket pair respectively. The
+parameters and their possible values are placed in the third bracket pair.
+
+The default options and parameter values are underlined.
+
+Furthermore you will notice that some values are typeset in a slanted way: {\sl
+section}, {\sl name}, {\sl dimension}, {\sl number}, {\sl command} and {\sl
+text}. This indicates that you can set the value yourself.
+
+\starttabulate[|S||]
+\NC section \NC a section name like chapter, section, subsection etc. \NC\NR
+\NC name \NC an identifier (logical name) \NC\NR
+\NC dimension \NC a dimension with a unit in \type{cm}, \type{pt},
+ \type{em}, \type{ex}, \type{sp} or \type{in} \NC\NR
+\NC number \NC an integer \NC\NR
+\NC command \NC a command \NC\NR
+\NC text \NC text \NC\NR
+\stoptabulate
+
+In the \goto {Quick Reference} [ url (manual:qr-en) ]
+manual you can find a complete overview of the commands and their parameters.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex
new file mode 100644
index 000000000..c3b47ea27
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex
@@ -0,0 +1,71 @@
+\startcomponent ma-cb-en-sortedlists
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=synonyms,title=Sorted lists]
+
+\index{sorted lists}
+
+\Command{\tex{definesorting}}
+\Command{\tex{setupsorting}}
+\Command{\tex{sort}}
+\Command{\tex{placelistofsorts}}
+\Command{\tex{completelistofsorts}}
+
+If you want to create a sorted list you can use:
+
+\shortsetup{definesorting}
+
+For example:
+
+\startbuffer
+\define[1]\street{#1\Street{#1}}
+\definesorting[Street][Streets]
+\setupsorting[Street][criterium=all]
+
+When you walk in the \street{Eikenlaan} you will cross the
+\street{Vechtlaan} and \street{Gasthuisstraat}. Go left into the
+\street{Gasthuisstraat} and take another left on the
+\street{Heerengracht}. You walk along the canal to the
+\street{Ridderstraat}, there you turn right. Cross the canal and
+turn left to the \street{Julianakade}. There you can enjoy the
+view over the Zwartewater.
+
+So the streets you visited are:
+
+\placelistofStreets
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+Note that the Gasthuisstraat appears only once in the list.
+
+The predefined \type{\logo} command is used for the consistent use of text logos.
+
+When you define:
+\startbuffer
+\logo [HSTEX] {Hassel\TeX}
+\stopbuffer
+
+\getbuffer\typebuffer
+
+You can use that logo througout your text.
+
+\startbuffer
+How would you call a \TEX\ based macropackage when you work
+in Hasselt? \HSTEX?
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex
new file mode 100644
index 000000000..619ccf3a6
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex
@@ -0,0 +1,60 @@
+\startcomponent ma-cb-en-specialcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=special chars,title=Special characters]
+
+\index{special characters}
+
+You have seen that \CONTEXT\ commands are preceded by a \tex{} (backslash). This
+means that \tex{} has a special meaning to \CONTEXT. Aside from \tex{} there are
+other characters that need special attention when you want them to appear in
+verbatim mode or in text mode. \in{Table}[tab:specchars] gives an overview of
+these special characters and what you have to type to produce them.
+
+\placetable[here,force][tab:specchars]
+ {Special characters (1).}
+ {\starttable[|c|l|c|c|c|c|]
+ \HL
+ \NC \use2 \JustCenter{\bf Special character} \NC \use2 \bf Verbatim \NC \use2 \bf Text \NC\FR
+ \NC \bf Character \NC \bf Name \NC \bf Type \NC \bf Generates \NC \bf Type\NC \bf Generates \NC\LR
+ \HL
+ \NC \type{#} \NC hashtag \NC \type{\type{#}} \NC \type{#} \VL \type{\#} \NC \# \NC\FR
+ \NC \type{$} \NC dollar \NC \type{\type{$}} \NC \type{$} \VL \type{\$} \NC \$ \NC\MR
+ \NC \type{&} \NC ampersand \NC \type{\type{&}} \NC \type{&} \VL \type{\&} \NC \& \NC\MR
+ \NC \type{%} \NC percent \NC \type{\type{%}} \NC \type{%} \VL \type{\%} \NC \% \NC\MR
+ \NC \type{\} \NC backslash \NC \type{\type{\}} \NC \type{\} \VL \type{\backslash} \NC \backslash \NC\MR
+ \NC \type+{+ \NC right curly brace \NC \type-\type+{+- \NC \type+{+ \VL \type+\{+ \NC \{ \NC\MR
+ \NC \type+}+ \NC left curly brace \NC \type-\type+}+- \NC \type+}+ \VL \type+\}+ \NC \} \NC\MR
+ \NC \type{|} \NC vertical bar \NC \type{\type{|}} \NC \type{|} \VL \type{\|} \NC \| \NC\MR
+ \NC \type{_} \NC underscore \NC \type{\type{_}} \NC \type{_} \VL \type{\_} \NC \_ \NC\MR
+ \NC \type{~} \NC tilde \NC \type{\type{~}} \NC \type{~} \VL \type{\lettertilde} \NC \lettertilde \NC\MR
+ \NC \type{^} \NC caret \NC \type{\type{^}} \NC \type{^} \VL \type{\letterhat} \NC \letterhat \NC\LR
+ \HL
+ \stoptable}
+
+Other special characters have a meaning in typesetting mathematical expressions
+and some can be used in math mode only (see \in{chapter}[formulas]).
+
+\placetable
+ [here,force]
+ [tab:special chars]
+ {Special characters (2).}
+ {\starttable[|c|c|c|c|c|]
+ \HL
+ \NC \bf \LOW{Special character} \NC \use2 \bf Verbatim \NC \use2 \bf Text \NC\FR
+ \NC \NC \bf Type \NC \bf Generates \NC \bf Type \NC \bf Generates \NC\LR
+ \HL
+ \NC \type{+} \NC \type{\type{+}} \NC \type{+} \VL \type{$+$} \NC $+$ \NC\FR
+ \NC \type{-} \NC \type{\type{-}} \NC \type{-} \VL \type{$-$} \NC $-$ \NC\MR
+ \NC \type{=} \NC \type{\type{=}} \NC \type{=} \VL \type{$=$} \NC $=$ \NC\MR
+ \NC \type{<} \NC \type{\type{<}} \NC \type{<} \VL \type{$<$} \NC $<$ \NC\MR
+ \NC \type{>} \NC \type{\type{>}} \NC \type{>} \VL \type{$>$} \NC $>$ \NC\LR
+ \HL
+ \stoptable}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex
new file mode 100644
index 000000000..4001a6831
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex
@@ -0,0 +1,133 @@
+\startcomponent ma-cb-en-structure
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Defining a document]
+
+Every document is started with \type{\starttext} and closed with
+\type{\stoptext}. All textual input is placed between these two commands and
+\CONTEXT\ will only process that information.
+
+Setup information is placed in the set up area just before \type{\starttext}.
+
+\setuptyping
+ [escape=yes]
+
+\definestartstop
+ [comment][style={\rm}]
+
+\starttyping
+
+\setupbodyfont[12pt] /BTEX \comment{setuparea of document} /ETEX
+
+\starttext
+This is a one line document. /BTEX \comment{your text} /ETEX
+\stoptext
+\stoptyping
+
+The definition of a (very simple) book could look something like this:
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\title{Foreword}
+
+\chapter{Introduction}
+
+\chapter{The Rensselaer family}
+
+\chapter{The Lansing family}
+
+\chapter{The Cuyler family}
+
+\chapter{Appendix: Photos}
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+\CONTEXT\ comes with a predefined overall structure in which the document is
+divided into four main document divisions:\footnote{Here we try to avoid the
+word {\em section}.}
+
+\startitemize[n,packed]
+\item front matter
+\item body matter
+\item appendices
+\item back matter
+\stopitemize
+
+The document divisions are defined with:
+
+\starttyping
+\startfrontmatter ... \stopfrontmatter
+\startbodymatter ... \stopbodymatter
+\startappendices ... \stopappendices
+\startbackmatter ... \stopbackmatter
+\stoptyping
+
+The chapters in your book can be divided over these divisions.
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\startfrontmatter
+
+ \title{Preface}
+
+ \chapter{Introduction}
+
+\stopfrontmatter
+
+\startbodymatter
+
+ \chapter{The Rensselaer family}
+
+ \chapter{The Lansing family}
+
+ \chapter{The Cuyler family}
+
+\stopbodymatter
+
+\startappendices
+
+ \chapter{Photos}
+
+\stopappendices
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+In the front matter as well as back matter the command \type{\chapter}
+produces an un-numbered header in the table of contents. The front matter is mostly
+used for the table of contents, the list of figures and tables, the preface, the
+acknowledgements etc. It often comes with a roman page numbering.
+
+The appendices division is used for (indeed) appendices. Headers may be typeset in
+a different way; for example, \type{\chapter} may be numbered alphabetically.
+
+The style of each document division can be set up with:
+
+\shortsetup{setupsectionblock}
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex
new file mode 100644
index 000000000..cc6b5819f
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex
@@ -0,0 +1,17 @@
+\startcomponent ma-cb-en-support
+
+\project ma-cb
+
+% only text
+
+For your Questions and Answers you can subscribe to the \goto {\CONTEXT\ mailing
+list} [ url(list:context) ].
+
+Visit the \goto {Pragma ADE website} [ url
+(http://www.pragma-ade.com/overview.htm) ] for extensive information about
+\CONTEXT.
+
+Goto the \goto {ConTeXt Garden} [ url (http://wiki.contextgarden.net) ] to find
+all kinds of practical information on how to use \CONTEXT.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex
new file mode 100644
index 000000000..8d921d5b0
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex
@@ -0,0 +1,89 @@
+\startcomponent ma-cb-en-synonyms
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=synonyms,title=Synonyms]
+
+\index{synonyms}
+
+\Command{\tex{definesynonyms}}
+\Command{\tex{setupsynonyms}}
+\Command{\tex{abbreviation}}
+\Command{\tex{infull}}
+\Command{\tex{loadabbreviations}}
+\Command{\tex{placelistofabbreviations}}
+\Command{\tex{completelistofabbreviations}}
+
+In many documents people want to use specific words consistently throughout the
+document. To enforce consistency the command below is available.
+
+\shortsetup{definesynonyms}
+
+The first bracket pair contains the singular form of the synonym, and the second
+contains the plural form. The third bracket pair contains a command.
+
+For example the command \type{\abbreviation} is defined by:
+
+\starttyping
+\definesynonyms[abbreviation][abbreviations][\infull]
+\setupsynonyms[style=cap]
+\stoptyping
+
+Now the command \type{\abbreviation} is available and can be used to state your
+abbreviations:
+
+\starttyping
+\abbreviation{ANWB}{Dutch Automobile Association}
+\abbreviation{VVV}{Bureau of Tourist Information}
+\abbreviation{NS}{Dutch Railways}
+\stoptyping
+
+\abbreviation{VVV}{Bureau of Tourist Information}
+
+If you would type:
+
+\startbuffer
+The Dutch \VVV\ (\infull{VVV}) can provide you with the tourist
+information on Hasselt.
+\stopbuffer
+
+\typebuffer
+
+You would obtain something like this:
+
+\getbuffer
+
+The list of synonyms or abbreviations is best defined in the set up area of your
+input file for maintenance purposes. You can also store this kind of information
+in an external file, and load the file (e.g. \type{abbrev.tex}) with:
+
+\starttyping
+\input abbrev.tex
+\stoptyping
+
+If you want to put a list of the abbreviations used in your document you can
+type:
+
+\starttyping
+\placelistofabbreviations
+\stoptyping
+
+or
+
+\starttyping
+\completelistofabbreviations
+\stoptyping
+
+A complete and sorted list with used abbreviations and their meaning is produced.
+
+The typesetting of synonynms can be influenced with:
+
+\starttyping
+\setupsynonyms
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex
new file mode 100644
index 000000000..39ce0cb4a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex
@@ -0,0 +1,385 @@
+\startcomponent ma-cb-en-tables
+
+% AFO: the \start ... \stoplinetable mechanism is not stable enough
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=tables,title=Tables]
+
+\index{tables}
+\index{natural tables}
+\index{extreme tables}
+\index{floating blocks}
+
+\Command{\tex{placetable}}
+\Command{\tex{setuptables}}
+\Command{\tex{starttable}}
+\Command{\tex{startcombination}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{NR}}
+\Command{\tex{FR}}
+\Command{\tex{LR}}
+\Command{\tex{MR}}
+\Command{\tex{SR}}
+\Command{\tex{VL}}
+\Command{\tex{NC}}
+\Command{\tex{HL}}
+\Command{\tex{DL}}
+\Command{\tex{DC}}
+\Command{\tex{DR}}
+\Command{\tex{LOW}}
+\Command{\tex{TWO}}
+\Command{\tex{THREE}}
+\Command{\tex{bTABLE}}
+\Command{\tex{eTABLE}}
+\Command{\tex{bTR}}
+\Command{\tex{eTR}}
+\Command{\tex{bTD}}
+\Command{\tex{eTD}}
+\Command{\tex{setupTABLE}}
+\Command{\tex{startxtable}}
+\Command{\tex{stopxtable}}
+\Command{\tex{startxcell}}
+\Command{\tex{startxrow}}
+\Command{\tex{setupxtable}}
+
+There are a number of ways to define a table:
+
+\startitemize[packed]
+\item the \type{\start ... \stoptable} mechanism, based on the work of M. Wichura
+\item the \type{\bTABLE ... \eTABLE} mechanism (natural tables)
+\item the \type{\start ... \stopxtable} mechanism (extreme tables)
+\stopitemize
+
+In the next sections we describe the principles of the three table mechanisms.
+
+\startsection[title=Simple tables]
+
+For defining the table you use:
+
+\shortsetup{starttable}
+
+The definition of a table could look something like this:
+
+\startbuffer
+\placetable
+ [here]
+ [tab:ships]
+ {Ships that moored at Hasselt.}
+ {\starttable[|c|c|]
+ \HL
+ \NC \bf Year \NC \bf Number of ships \NC\SR
+ \HL
+ \NC 1645 \NC 450 \NC\FR
+ \NC 1671 \NC 480 \NC\MR
+ \NC 1676 \NC 500 \NC\MR
+ \NC 1695 \NC 930 \NC\LR
+ \HL
+ \stoptable}
+\stopbuffer
+
+\typebuffer
+
+This table is typeset as \in{table}[tab:ships].
+
+\getbuffer
+
+Although this table mechanism is still available and supported in \CONTEXT\
+it is better to use one of the other mechanisms.
+
+\stopsection
+
+\startsection[title=Natural tables]
+
+The natural table mechanism (\type{\bTABLE ... \eTABLE}) is developed for more
+complex tables and has features of the general interface of \CONTEXT.
+
+\startbuffer
+\placetable
+ [here,force]
+ [tab:votedivision]
+ {Division of votes over political parties.}
+ {\bTABLE[align=middle,offset=4pt]
+ \bTABLEhead
+ \bTR[width=6cm] \bTD [nc=5] Elections City Council \eTD \eTR
+ \eTABLEhead
+ \bTABLEbody
+ \bTR \bTD[nr=2,align={right,lohi}] Party \eTD
+ \bTD[nc=3,foregroundstyle=bold] Districts \eTD
+ \bTD[nr=2,align={middle,lohi}] Total \eTD \eTR
+ \bTR \bTD 1 \eTD \bTD 2 \eTD \bTD 3 \eTD \eTR
+ \bTR \bTD[align=right] PvdA \eTD
+ \bTD 351 \eTD \bTD 433 \eTD \bTD 459 \eTD \bTD 1243 \eTD \eTR
+ \bTR \bTD[align=right] CDA \eTD
+ \bTD 346 \eTD \bTD 350 \eTD \bTD 285 \eTD \bTD ~981 \eTD \eTR
+ \bTR \bTD[align=right] VVD \eTD
+ \bTD 140 \eTD
+ \bTD[offset=2pt,background=color,
+ backgroundcolor=red,foregroundcolor=white,
+ foregroundstyle=bold,framecolor=blue,
+ rulethickness=2pt] 113 \eTD
+ \bTD 132 \eTD \bTD ~385 \eTD \eTR
+ \bTR \bTD[align=right] SGP \eTD
+ \bTD 348 \eTD \bTD 261 \eTD \bTD 158 \eTD \bTD ~767 \eTD \eTR
+ \bTR \bTD[align=right] GPV \eTD
+ \bTD 117 \eTD \bTD 192 \eTD \bTD 291 \eTD \bTD ~600 \eTD \eTR
+ \eTABLEbody
+ \eTABLE}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+In the last column a \type{~} is used to simulate a four digit number. The
+\type{~} has the width of a digit.
+
+\start
+\getbuffer
+\stop
+
+The setup of the table is placed between the square brackets \type{[ ]}. To keep
+the data in the table more readable you can set up the table with the \type
+{\setupTABLE} command.
+
+\shortsetup{bTABLE}
+
+\startbuffer
+\setupTABLE[row][align=middle,offset=4pt]
+\setupTABLE[1][1][width=6cm]
+\setupTABLE[1][2][align={right,lohi}]
+\setupTABLE[5][2][align={right,lohi}]
+\setupTABLE[2][2][foregroundstyle=bold]
+\setupTABLE[1][4,5,6,7,8][align=right]
+\setupTABLE[3][6][offset=2pt,background=color,
+ backgroundcolor=red,foregroundcolor=white,
+ foregroundstyle=bold,framecolor=blue,
+ rulethickness=2pt]
+
+\bTABLE
+ \bTABLEhead
+ \bTR \bTD[nc=5] Elections City Council \eTD \eTR
+ \bTR \bTD[nr=2] Party \eTD \bTD[nc=3] Districts \eTD \bTD[nr=2] Total \eTD \eTR
+ \bTR \bTD 1 \eTD \bTD 2 \eTD \bTD 3 \eTD \eTR
+ \eTABLEhead
+ \bTABLEbody
+ \bTR \bTD PvdA \eTD \bTD 351 \eTD \bTD 433 \eTD \bTD 459 \eTD \bTD 1243 \eTD \eTR
+ \bTR \bTD CDA \eTD \bTD 346 \eTD \bTD 350 \eTD \bTD 285 \eTD \bTD ~981 \eTD \eTR
+ \bTR \bTD VVD \eTD \bTD 140 \eTD \bTD 113 \eTD \bTD 132 \eTD \bTD ~385 \eTD \eTR
+ \bTR \bTD SGP \eTD \bTD 348 \eTD \bTD 261 \eTD \bTD 158 \eTD \bTD ~767 \eTD \eTR
+ \bTR \bTD GPV \eTD \bTD 117 \eTD \bTD 192 \eTD \bTD 291 \eTD \bTD ~600 \eTD \eTR
+ \eTABLEbody
+\eTABLE
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+The meaning of the \CONTEXT\ commands are indicated in \in {table}
+[tab:tablecommands02].
+
+\placetable
+ []
+ [tab:tablecommands02]
+ {Commands to define natural tables.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\bTABLE ... \eTABLE} \NC begin end table \NC\FR
+ \NC \type{\bTR ... \eTR} \NC begin end row \NC\MR
+ \NC \type{\bTD ... \eTD} \NC begin end column \NC\MR
+ \NC \type{\bTABLEhead ... \eTABLEhead} \NC begin end tablehead \NC\MR
+ \NC \type{\bTABLEbody ... \eTABLEbody} \NC begin end tablebody \NC\MR
+ \NC \type{\bTABLEfoot ...\eTABLEfoot} \NC begin end tablefoot \NC\MR
+ \NC \type{\setupTABLE} \NC table setup \NC\LR
+ \HL
+ \stoptable}
+
+You can find more information on this table mechanism on the \CONTEXTWIKI\ and
+examples in the \goto {\em Natural Tables} [ url (manual:nattab) ] manual.
+
+\stopsection
+
+\startsection[title=Extreme tables]
+
+For large tables that extend over a number of pages and where you want the
+table head repeated after each pagebreak \CONTEXT\ has the {\em extreme table}
+mechanism.
+
+\shortsetup{startxtable}
+
+\startbuffer
+\setupxtable[split=yes,header=repeat]
+\setupxtable[offset=4pt]
+
+\placetable
+ []
+ [tab:wealthdecline]
+ {Decline of wealth through the ages.}
+ {\startxtable
+ \startxtablehead[align=middle,foregroundstyle=bold]
+ \startxrow
+ \startxcell[nx=6]
+ Decline of wealth in Dutch florine (Dfl)
+ \stopxcell
+ \stopxrow
+ \startxrow[foregroundstyle=bold]
+ \startxcell[width=1.2cm] Year \stopxcell
+ \startxcell 1.000--2.000 \stopxcell
+ \startxcell 2.000--3.000 \stopxcell
+ \startxcell 3.000--5.000 \stopxcell
+ \startxcell 5.000--10.000 \stopxcell
+ \startxcell over 10.000 \stopxcell
+ \stopxrow
+ \stopxtablehead
+ \startxtablenext
+ \startxrow
+ \startxcell[nx=6,align=middle,foregroundstyle=bold]
+ Decline of wealth in Dutch florine (Dfl) / Continued
+ \stopxcell
+ \stopxrow
+ \startxrow[foregroundstyle=bold]
+ \startxcell Year \stopxcell
+ \startxcell 1.000--2.000 \stopxcell
+ \startxcell 2.000--3.000 \stopxcell
+ \startxcell 3.000--5.000 \stopxcell
+ \startxcell 5.000--10.000 \stopxcell
+ \startxcell over 10.000 \stopxcell
+ \stopxrow
+ \stopxtablenext
+ \startxtablebody[align=middle]
+ \startxrow
+ \startxcell 1675 \stopxcell
+ \startxcell 22 \stopxcell
+ \startxcell ~7 \stopxcell
+ \startxcell ~5 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~5 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1724 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~3 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1750 \stopxcell
+ \startxcell 12 \stopxcell
+ \startxcell ~3 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell -- \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1808 \stopxcell
+ \startxcell ~9 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell -- \stopxcell
+ \stopxrow
+ \stopxtablebody
+ \stopxtable}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+With the \type{\setupxtable} it is indicated that the table is allowed to split
+at a pagebreak and that the head should contain the content of the \type {\start
+... \stopxtablenext}.
+
+The result of this definition is shown in \in {table} [tab:wealthdecline].
+
+\getbuffer
+
+The meaning of the commands are explained \in {table} [tab:tablecommands03].
+
+\placetable
+ []
+ [tab:tablecommands03]
+ {Commands to define extreme tables.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\startxtable ... \stopxtable} \NC begin end table \NC\FR
+ \NC \type{\startxrow ... \stopxrow} \NC begin end row \NC\MR
+ \NC \type{\startxcell ... \stopxcell} \NC begin end column \NC\MR
+ \NC \type{\startxtablehead ... \stopxtablehead} \NC begin end tablehead \NC\MR
+ \NC \type{\startxtablebody ... \stopxtablebody} \NC begin end tablebody \NC\MR
+ \NC \type{\startxtablefoot ... \stopxtablefoot} \NC begin end tablefoot \NC\MR
+ \NC \type{\setupxtable} \NC table setup \NC\LR
+ \HL
+ \stoptable}
+
+More information and examples can be found in the \goto {\em Extreme Tables} [
+url (manual:extab) ] manual.
+
+\stopsection
+
+\startsection[title=Placing tables]
+
+In all examples you see the command \type{\placetable}. This command has
+the same function as \type{placefigure}. It takes care of the vertical
+spacing and numbering. The float mechanism is invoked and the table will
+end up on the most optimal location in your document.
+
+\shortsetup{placefloat}
+
+You can also set up the layout of tables with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaptions}
+
+These commands are typed in the set up area of your input file and have a global
+effect on all floating blocks.
+
+\startbuffer
+\setupfloats[location=left]
+\setupcaptions[style=boldslanted,location={right,middle}]
+
+\placetable[here][tab:opening hours]{Library opening hours.}
+ {\bTABLE[offset=4pt]
+ \bTR \bTD \bf Day \eTD \bTD[nx=2,align=middle] \bf Opening hours \eTD \eTR
+ \bTR \bTD Monday \eTD \bTD 14.00 -- 17.30 \eTD \bTD 18.30 -- 20.30 \eTD \eTR
+ \bTR \bTD Tuesday \eTD \bTD \eTD \bTD \eTD \eTR
+ \bTR \bTD Wednesday \eTD \bTD 10.00 -- 12.00 \eTD \bTD 14.00 -- 17.30 \eTD \eTR
+ \bTR \bTD Thursday \eTD \bTD 14.00 -- 17.30 \eTD \bTD 18.30 -- 20.30 \eTD \eTR
+ \bTR \bTD Friday \eTD \bTD 14.00 -- 17.30 \eTD \bTD \eTD \eTR
+ \bTR \bTD Saturday \eTD \bTD 10.00 -- 12.30 \eTD \bTD \eTD \eTR
+ \eTABLE}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+The result is displayed in \in{table}[tab:opening hours].
+
+\start
+\getbuffer
+\stop
+
+\stopsection
+
+% AFO: the \start ... \stoplinetable mechanism is not stable enough
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex
new file mode 100644
index 000000000..0bc81014e
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex
@@ -0,0 +1,174 @@
+\startcomponent ma-cb-en-tablesofcontent
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Table of contents (lists)]
+
+\index{table of contents}
+\index{list}
+
+\Command{\tex{completecontent}}
+\Command{\tex{placecontent}}
+\Command{\tex{definelist}}
+\Command{\tex{setuplist}}
+\Command{\tex{writetolist}}
+\Command{\tex{writebetweenlist}}
+\Command{\tex{definecombinedlist}}
+\Command{\tex{setupcombinedlist}}
+
+A table of contents contains chapter numbers, chapter titles and page numbers and
+can be extended with sections, sub sections, etc. A table of contents is
+generated automatically by typing:
+
+\starttyping
+\placecontent
+\stoptyping
+
+Which table of contents is produced depends on the location of this command in
+your document. At the start of the document it will generate a list of chapters,
+sections etc. But at the top of a chapter:
+
+\startbuffer
+\chapter{Hasselt in Summer}
+
+\placecontent
+
+\section{Hasselt in July}
+
+\section{Hasselt in August}
+
+\stopbuffer
+
+\typebuffer
+
+it will only produce a list of (sub) section titles with the corresponding
+section numbers and page numbers.
+
+The predefined command \type{\placecontent} is available because it was defined
+with:
+
+\shortsetup{definecombinedlist}
+
+This command and \type{\definelist} allows you to define your own lists necessary
+for accessing your documents.
+
+The use of this command and its related commands is illustrated for the default available
+table of contents.
+
+\startbuffer
+\definelist[chapter]
+\setuplist
+ [chapter]
+ [before=\blank,
+ after=\blank,
+ style=bold]
+
+\definelist[section]
+\setuplist
+ [section]
+ [alternative=d]
+\stopbuffer
+
+\typebuffer
+
+Now there are two lists of chapters and sections and these will be combined in a
+table of contents with the command \type{\definecombinedlist}.
+
+\startbuffer
+\definecombinedlist
+ [content]
+ [chapter,section]
+ [level=subsection]
+\stopbuffer
+
+\typebuffer
+
+Now two commands are available: \type{\placecontent} and \type{\completecontent}.
+With the second command the title of the table of contents will be added to the
+table of contents.
+
+The layout of lists can be varied with the parameter \type{alternative}.
+
+\placetable
+ [here,force]
+ [tab:alternatives]
+ {Alternatives for displaying lists.}
+ {\starttable[|c|l|]
+ \HL
+ \NC \bf Alternative \NC \bf Display \NC\SR
+ \HL
+ \NC \type{a} \NC number -- title -- page number \NC\FR
+ \NC \type{b} \NC number -- title -- spaces -- page number \NC\MR
+ \NC \type{c} \NC number -- title -- dots -- page number \NC\MR
+ \NC \type{d} \NC number -- title -- page number (continuing) \NC\MR
+ \NC \type{e} \NC reserved for interactive purposes \NC\MR
+ \NC \type{f} \NC reserved for interactive purposes \NC\MR
+ \NC \type{g} \NC reserved for interactive purposes \NC\LR
+ \HL
+ \stoptable}
+
+Lists are set up with:
+
+\shortsetup{setuplist}
+\shortsetup{setupcombinedlist}
+
+If you want to change the layout of the generated table of contents you'll have
+to remember that it is a (combined) list and that we can set the partial lists
+separately.
+
+\startbuffer
+\setuplist
+ [section]
+ [textstyle=bold,
+ pagestyle=bold,
+ numberstyle=bold]
+\stopbuffer
+
+\typebuffer
+
+This will result in a bold page number, section title and section number.
+
+Lists are generated and placed with:
+
+\shortsetup{placelist}
+
+So if you want a list of sections at the beginning of a new chapter, you type:
+
+\starttyping
+\placelist[section]
+\stoptyping
+
+only the sections will be displayed.
+
+A long list or a long table of contents will use up more than one page. To be
+able to force page breaking you can type:
+
+\starttyping
+\placecontent[extras={8.2=page}]
+\stoptyping
+
+A page break will then occur after section 8.2.
+
+In some cases you want to be able to write your own text in an automatically
+generated list. This is done with:
+
+\shortsetup{writetolist}
+\shortsetup{writebetweenlist}
+
+For example if you want to make a remark in your table of contents after a
+section titled {\em Hotels in Hasselt} you can type:
+
+\startbuffer
+\section{Hotels in Hasselt}
+\writebetweenlist[section]{\blank}
+\writetolist[section][location=here]{}{Section under construction}
+\writebetweenlist[section]{\blank}
+\stopbuffer
+
+\typebuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex
new file mode 100644
index 000000000..5ed877c76
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex
@@ -0,0 +1,163 @@
+\startcomponent ma-cb-en-tabulations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=tabulation,title=Tabulation / Paragraph formatting]
+
+\index{tabulation}
+\index{tables+running text}
+\index{columns}
+\Command{\tex{starttabulate}}
+\Command{\tex{definetabulate}}
+\Command{\tex{setuptabulate}}
+\Command{\tex{NR}}
+\Command{\tex{NC}}
+
+Sometimes you want to typeset paragraphs in a specific formatted way. This is
+done with:
+
+\shortsetup{starttabulate}
+
+The tabulation mechanism is closely related to the table mechanism. You can use
+the tabulation mechanism in cases you want to typeset complete paragraphs within
+a cell. The tabulation mechanism also works fine at a page break.
+
+\startbuffer
+\starttabulate[|w(1.5cm)B|p(6.0cm)|p|]
+\NC 1252
+ \NC Hasselt obtains its city charter from bishop Hendrik
+ van Vianden.
+ \NC Hendrik van Vianden was pressed by other towns not
+ to agree with the charter. It took Hasselt a long
+ period of time to convince the Bishop. After
+ supporting the Bishop in a small war against the
+ Drents, the charter was released. \NC\NR
+\NC 1350
+ \NC Hasselt joins the Hanzepact to protect their
+ international trade.
+ \NC The Hanzepact was of great importance for merchants
+ in Hasselt. In those days trading goods were taxed
+ at every city, highway or rivercrossing. After
+ joining the Hanzepact duty free routes all over
+ Europe became available to Hasselt. However
+ important the Hanzepact was, Hasselt always stayed a
+ minor member of the pact. \NC\NR
+\stoptabulate
+\stopbuffer
+
+A tabulate definition could look like this:
+
+\typebuffer
+
+In this case the first column is \unit{1.5 centi meter} wide and is typeset bold
+(\type{B}). The second column has a width of \unit{6 centi meter} and is typeset
+like a paragraph. The remaining horizontal space is used up by the last
+paragraph.
+
+The example is typeset like this:
+
+\getbuffer
+
+The tabulation entries are placed between the \type{\start ... \stoptabulate}
+pair. Between the bracket pair your can specify the tabulate format with the
+column separators \type{|} and the format keys (see \in {table}
+[tab:tabularformattingkeys]).
+
+\placetable[][tab:tabularformattingkeys]
+ {Formatting keys for tabulate.}
+ {\starttable[|lT|l|lT|l|]
+ \HL
+ \NC \rm \bf Key \NC \rm \bf Meaning
+ \NC \rm \bf Key \NC \rm \bf Meaning
+ \NC \SR
+ \HL
+ \NC l \NC left align
+ \NC I \NC \it italic
+ \NC \FR
+ \NC c \NC center
+ \NC R \NC \sl roman
+ \NC \MR
+ \NC r \NC right align
+ \NC S \NC \sl slanted
+ \NC \MR
+ \NC i\sl n \NC spacing left
+ \NC T \NC \tt teletype
+ \NC \MR
+ \NC j\sl n \NC spacing right
+ \NC m \NC in||line math
+ \NC \MR
+ \NC k\sl n \NC spacing around
+ \NC M \NC display math
+ \NC \MR
+ \NC w({\sl d}) \NC 1 line, fixed width
+ \NC f\tex{command} \NC font specification
+ \NC \MR
+ \NC p({\sl d}) \NC paragraph, fixed width
+ \NC b\arg{..} \NC place \type{..} before the entry
+ \NC \MR
+ \NC p \NC paragraph, maximum width
+ \NC a\arg{..} \NC place \type{..} after the entry
+ \NC \MR
+ \NC B \NC \bf boldface
+ \NC h\tex{command} \NC apply \tex{command} on the entry
+ \NC \LR
+ \HL
+ \stoptable}
+
+In \in {table} [tab:tabulatestructurecommands] you find an overview
+of the tabulate structuring commands.
+
+\placetable
+ []
+ [tab:tabulatestructurecommands]
+ {Commands to define tabulate.}
+ {\starttable[|l|l|l|]
+ \HL
+ \NC \bf Command \NC \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\start ... \stoptabulate} \NC \NC begin end tabulate \NC\FR
+ \NC \type{\NC} \NC next column \NC next column \NC\MR
+ \NC \type{\NR} \NC next row \NC next row \NC\MR
+ \NC \type{\HL} \NC horizontal line \NC horizontal line \NC\MR
+ \NC \type{\TB} \NC table blank \NC empty line \NC\MR
+ \NC \type{\definetabulate} \NC \NC define own tabulate \NC\MR
+ \NC \type{\setuptabulate} \NC \NC tabulate setup \NC\LR
+ \HL
+ \stoptable}
+
+Another example of paragraph formatting could look like this.
+
+\startbuffer
+\definetabulate[ChemPar][|l|p|l|]
+
+\startChemPar
+\NC Limekilns
+ \NC Hasselt has its own limekilns. These were build in 1504
+ and produced quick lime up to 1956. Nowadays they are a
+ tourist attraction.
+ \NC \inlinechemical{CaCO_3,GIVES,CaO,+,CO_2} \NC\NR
+\stopChemPar
+\stopbuffer
+
+\typebuffer
+
+And it would come out like this:
+
+\getbuffer
+
+In \in{chapter}[chemical] your can find some more information on chemistry
+and \CONTEXT.
+
+Here we also introduced the command to define our own paragraph layout.
+
+\shortsetup{definetabulate}
+
+and we also have:
+
+\shortsetup{setuptabulate}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex
new file mode 100644
index 000000000..0f4689f3f
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex
@@ -0,0 +1,55 @@
+\startcomponent ma-cb-en-textbackgrounds
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Background in paragraphs]
+
+\index{background+text}
+
+\Command{\tex{setuptextbackground}}
+\Command{\tex{definetextbackground}}
+\Command{\tex{starttextbackground}}
+
+To emphasize a paragraph you can use backgrounds. A background is set with the
+command pair:
+
+\shortsetup{starttextbackground}
+
+An example can illustrate the use:
+
+\startbuffer
+\setuptextbackground
+ [corner=round,frame=on,
+ location=paragraph,
+ leftoffset=.5\bodyfontsize,
+ rightoffset=.5\bodyfontsize,
+ bottomoffset=5pt]
+
+\starttextbackground
+Hasselt has produced a number of well known people. Only recently
+it turned out that Kilian van Rensselaer played a prominent role
+in the foundation of the State of New York.
+\stoptextbackground
+\stopbuffer
+
+\typebuffer
+
+This would be displayed as:
+
+\getbuffer
+
+Backgrounds can span multiple pages.
+
+You can vary the display of the backgrounds with:
+
+\shortsetup{setuptextbackground}
+
+You can even define your own text backgrounds with:
+
+\shortsetup{definetextbackground}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex
new file mode 100644
index 000000000..bed8017d5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex
@@ -0,0 +1,32 @@
+\startcomponent ma-cb-en-texteditor
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=texteditor,title=The \SCITE\ text editor]
+
+The developers of \CONTEXT\ have always been able to proces their \TEX\ files
+from a text editor. In that way \CONTEXT\ became an effective authoring tool.
+
+At this moment the text editors \SCITE\ and \TEXWORKS\ are more or less part of
+the \CONTEXT\ distribution.
+
+Please refer to the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Windows_Installation:_ConTeXt_Suite_with_SciTe) ]
+and learn how to install \SCITE.
+
+\SCITE\ supports the:
+
+\startitemize[packed]
+\item processing \TEX\ of files
+\item colored display of commands (lexing)
+\item syntax checking of \TEX, \XML\ and \LUA\ files
+\item spell checking of your text
+\stopitemize
+
+The \CONTEXT\ specific support of \SCITE\ is described in the manual \goto
+{\SCITE\ in \CONTEXT} [ url (manual:scite) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex
new file mode 100644
index 000000000..ce596c0b5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex
@@ -0,0 +1,101 @@
+\startcomponent ma-cb-en-units
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=units,title=Units]
+
+\index{units}
+\index[siunit]{SI--unit}
+
+\Command{\tex{unit}}
+
+To force yourself to use dimensions and units consistently throughout your
+document you can use the \type{\unit} command. Let's give a few examples:
+
+\startbuffer
+\unit{meter per square meter}
+\unit{cubic meter per sec}
+\unit{square milli meter per inch}
+\unit{centi liter per sec}
+\unit{meter inverse sec}
+\unit{newton per square inch}
+\unit{newton times meter per square sec}
+\stopbuffer
+
+\typebuffer
+
+It looks like a lot of typing but it does guarantee a consistent use of units.
+The command \type{\unit} also prevents linebreaking between number and unit.
+The examples above come out as:
+
+\startnarrower
+\startlines
+\getbuffer
+\stoplines
+\stopnarrower
+
+You can add your own units with:
+
+\shortsetup{registerunit}
+
+and set them up with:
+
+\shortsetup{setupunit}
+
+\startbuffer
+\registerunit[unit][inhab=inhabitants] \setupunittext[inhabitants=inh]
+\registerunit[unit][north=north] \setupunittext[north= N]
+\registerunit[unit][east=east] \setupunittext[east= E]
+
+Hasselt is part of the municipality of Zwartewaterland
+(coordinates \unit {52 degrees 35 arcminute north},
+\unit {6 degrees 5 arcminute east}). Its area is about
+\unit {88 square kilometer} (land \unit {83 square kilom}
+and water \unit{5 square km}). As of 1st Augustus 2013 the
+population is 22.201 that is \unit {268 inhab per square kilo
+meter}).
+\stopbuffer
+
+In the example below you can see some new units and the non-consistent
+use of \unit{kilo meter}.
+
+\typebuffer
+
+This results in:
+
+\getbuffer
+
+The \type{\unit} command also allows you to align rows of units in a column.
+
+\startbuffer
+\bTABLE
+\bTR \bTD \bf Street \eTD \bTD \bf Length \eTD \eTR
+\bTR \bTD Ridderstraat \eTD \bTD \unit{_,160 meter} \eTD \eTR
+\bTR \bTD Prinsengracht \eTD \bTD \unit{_,240 meter} \eTD \eTR
+\bTR \bTD Kalverstraat \eTD \bTD \unit{_,_60 meter} \eTD \eTR
+\bTR \bTD H.A.W. van de Vechtlaan \eTD \bTD \unit{1,250 meter} \eTD \eTR
+\bTR \bTD Meestersteeg \eTD \bTD \unit{_,_45 meter} \eTD \eTR
+\eTABLE
+\stopbuffer
+
+When you type:
+
+\typebuffer
+
+It will generate a well aligned second column:
+
+\bgroup
+\setupTABLE[frame=off,offset=0pt]
+\setupTABLE[c][1][width=4.5cm]
+
+\getbuffer
+\egroup
+
+Please refer to the manual \goto {\em Units} [ url(manual:units) ] for more
+information and details.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex
new file mode 100644
index 000000000..2d89e937a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex
@@ -0,0 +1,68 @@
+\startcomponent ma-cb-en-usersetups
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=User specifications]
+
+\index{preamble}
+\index{input file}
+
+The setup area of your document is the area before
+the \type{\starttext} command. For example:
+
+\setuptyping
+ [escape=yes]
+
+\definestartstop
+ [comment][style={\rm}]
+
+\starttyping
+ /BTEX \comment{first line of your file} /ETEX
+\setuplayout[width=25cm] /BTEX \comment{set the width of your text} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\starttext /BTEX \comment{starts your text} /ETEX
+Hello Hasselt. /BTEX \comment{your text} /ETEX
+\stoptext /BTEX \comment{ends your text} /ETEX
+\stoptyping
+
+Note that the first line of this file is empty. However, this first line
+is a preamble and can be used for specific user specifications. For example:
+
+\starttyping
+% engine=luatex /BTEX \comment{use the \type{luatex} engine} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\setuplayout[width=25cm] /BTEX \comment{set the width of your text} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\starttext /BTEX \comment{starts your text} /ETEX
+Hello Hasselt. /BTEX \comment{your text} /ETEX
+\stoptext /BTEX \comment{ends your text} /ETEX
+\stoptyping
+
+Note that \CONTEXT\ sees the text after the \type{ % }
+sign in this first line not as a comment.
+
+The preamble can have a meaning for both \CONTEXT\ and \SCITE:
+
+\starttyping
+% engine=pdftex interface=en modes=screen language=uk
+
+\starttext
+Hello Hasselt.
+\stoptext
+\stoptyping
+
+This will be interpreted as:
+
+\starttabulate[|T||p|]
+\NC engine=pdftex \NC \CONTEXT \EQ run as \PDFTEX \NC\NR
+\NC interface=en \NC \CONTEXT \EQ expect english \CONTEXT\ commands (lexing) \NC\NR
+\NC \NC \SCITE \EQ use english lexing \NC\NR
+\NC modes=screen \NC \CONTEXT \EQ invoke mode \type{screen} that is set in the text \NC\NR
+\NC language=uk \NC \SCITE \EQ use the english spell checker \NC\NR
+\stoptabulate
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex
new file mode 100644
index 000000000..aa61bb0cb
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex
@@ -0,0 +1,1079 @@
+\startcomponent ma-cb-en-whatever
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Miscellaneous]
+
+\startsection[title=A titlepage]
+
+\index{titlepage}
+
+\Command{\tex{startstandardmakeup}}
+\Command{\tex{definemakeup}}
+\Command{\tex{setupmakeup}}
+
+In the first example of this manual on \at{page}[inputfile] we used the command:
+
+\shortsetup{startnamemakeup}
+%\shortsetup{start<<name>>makeup} % does not work
+
+This command can be used to define titlepages. Such a command is needed since
+title pages often have a different layout than that of the bodytext. With the
+command pair \type{\start ... \stopstandardmakeup} you can make up a page within
+the default page dimensions.
+
+A simple titlepage may look like this:
+
+\startbuffer
+\startstandardmakeup
+\blank
+\rightaligned{\tfd Hasselt in the 21st century}
+\blank
+\rightaligned{\tfb The future}
+\vfill
+\rightaligned{\tfa C. van Marle}
+\rightaligned{Hasselt, 2013}
+\stopstandardmakeup
+\stopbuffer
+
+\typebuffer
+
+In a doublesided document you have to go through some additional actions to
+typeset the back of the titlepage.
+
+\startbuffer
+\startstandardmakeup[doublesided=no]
+\blank
+\rightaligned{\tfd Hasselt in the 21st century}
+\blank
+\rightaligned{\tfb The future}
+\vfill
+\rightaligned{\tfa C. van Marle}
+\rightaligned{Hasselt, \currentdate[year]}
+\stopstandardmakeup
+\startstandardmakeup[page=no]
+\vfill
+\copyright \currentdate[year]
+
+This book is dedicated to the people living in Hasselt. We
+want to thank photographer J. Jonker for manipulating the
+photos in this book in such a way that readers can get a
+clear picture of Hasselt's future look.
+\stopstandardmakeup
+\stopbuffer
+
+\typebuffer
+
+Your own make ups can be made and set up with:
+
+\shortsetup{definemakeup}
+
+and
+
+\shortsetup{setupmakeup}
+
+Please refer to the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Command/setupmakeup) ]
+for more information on the \type{\start...\stopmakeup} command.
+
+\stopsection
+
+\startsection[reference=overlays,title=Overlays]
+
+\index{overlay}
+
+The overlay mechanism gives you the opportunity to add a specific layout
+to a text component. When there is a background option in a \CONTEXT\ command
+you can use overlays.
+
+\startbuffer
+\defineoverlay
+ [verticalbar]
+ [{\blackrule[height=2cm,width=.5cm,color=red]}]
+
+\defineoverlay
+ [horizontalbar]
+ [{\blackrule[height=.5cm,width=12cm,color=red]}]
+
+\framed
+ [width=12cm,
+ height=6cm,
+ background={color,foreground,verticalbar,horizontalbar},
+ offset=overlay,
+ backgroundcolor=blue,
+ frame=off]
+ {\blackrule[width=12cm,height=2cm,color=white]}
+\stopbuffer
+
+The flag of Hasselt could be defined with framed and a number of overlays:
+
+\typebuffer
+
+This will become:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The pagenumber in this manual has a background with an overlay where the
+\type{\MPclipFive} command takes care of drawing the image with \METAPOST.
+
+\startbuffer
+\defineoverlay
+ [NumberBackground]
+ [\MPclipFive{\overlaywidth}{\overlayheight}{30pt}{5pt}]
+
+\setuppagenumbering
+ [\location={footer,middle},
+ \command=\NummerCommand]
+
+\def\NummerCommand#1%
+ {\framed
+ [\background=NumberBackground,
+ \frame=off,
+ \offset=6pt]
+ {\lower.5\dp\strutbox\hbox spread 60pt{\hss#1\hss}}}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[reference=setups,title=Setups]
+
+\index{setups}
+
+\Command{\tex{setup}}
+
+While defining the layout of a document you can define setups
+with \type{\start...\stopsetups}. Setups are placed in the setup area of
+input file and mostly used to combine a number of commands.
+
+\startbuffer
+\startsetups colorize
+ \blue
+\stopsetups
+
+\startsetups decolorize
+ \black
+\stopsetups
+
+\setupitemize
+ [before=\setups{colorize},
+ after=\setups{decolorize}]
+
+Some data on the church are:
+
+\startitemize[packed,3*broad]
+\sym{997} mentioned for the first time
+\sym{1380} destroyed by fire
+\sym{1466} rebuild
+\sym{1657} restored after shelling by enemy troops
+\sym{1725} struck by lightning
+\stopitemize
+
+\stopbuffer
+
+\typebuffer
+
+Which would result in:
+
+\start % AFO: to keep color and distance local
+\getbuffer
+\stop
+
+Another way of invoking the setups is by the \type{setups} option
+that comes with some \CONTEXT\ commands:
+
+\startbuffer
+\definestartstop[remark]
+
+\setupstartstop[remark]
+ [before=\startframed,
+ after=\stopframed]
+
+\startsetups important
+ \inleftmargin
+ [scope=local,
+ hoffset=1em]{\bf\color[blue]{→}}
+\stopsetups
+
+\setupframed
+ [align=normal,
+ setups=important,
+ frame=on,
+ framecolor=blue,
+ offset=5pt]
+
+\startremark
+ The Stephanus Church was built in 997. After an enormous
+ fire in 1380 it was rebuilt and that's why it has Gothic
+ features. The rebuilding was finished in 1466.\endgraf
+\stopremark
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\blank
+
+\start
+\getbuffer
+\stop
+
+\stopsection
+
+\startsection[reference=variables,title=Variables]
+
+\index{variables}
+
+\Command{\tex{getvariable}}
+\Command{\tex{setvariables}}
+
+There is a mechanism in \CONTEXT\ that enables you to compact information in a
+list of variables that you can recall throughout the document.
+
+\shortsetup{setvariables}
+
+The example below shows how to use variables in defining a coverpage.
+
+\startbuffer
+\setvariables
+ [cover]
+ [set=\setups{coverpage},
+ student=no,
+ teacher=yes,
+ title=From Hasselt to America,
+ subtitle=An Odyssey,
+ authors=\setup{allauthors},
+ edition=2012,
+ isbn=0123456789]
+\stopbuffer
+
+\typebuffer
+
+The moment you need the title on your cover page (or somewhere else in your document) you can
+summon it by:
+
+\startbuffer
+\getvariable{cover}{title}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[reference=floatingblocks,title=Floating blocks]
+
+\index{floating blocks}
+\index{postponing a block}
+
+\Command{\tex{definefloat}}
+\Command{\tex{setupfloat}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{placeintermezzo}}
+
+A block in \CONTEXT\ is a text element, for example a table or a figure that you
+can process in a special way. You have already seen the use of
+\type{\placefigure} and \type{\placetable}. These are both examples of floating
+blocks. The floating mechanism is described in \in{chapter}[figures] and
+\in[tables].
+
+You can define these kind of blocks yourself with:
+
+\shortsetup{definefloat}
+
+The bracket pairs are used for the name in singular and
+plural form. For example:
+
+\starttyping
+\definefloat[intermezzo][intermezzi]
+\stoptyping
+
+Now the following commands are available:
+
+\starttyping
+\placeintermezzo[][]{}{}
+\startintermezzotext ... \stopintermezzotext
+\placelistofintermezzi
+\completelistofintermezzi
+\stoptyping
+
+The newly defined floating block can be set up with:
+
+\shortsetup{setupfloat}
+
+You can set up the layout of floating blocks with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaption}
+
+These commands are typed in the set up area of your input file and will have a
+global effect on all floating blocks.
+
+\setupframedtexts
+ [width=.8\makeupwidth,
+ background=color,
+ backgroundcolor=gray,
+ corner=round,
+ framecolor=blue,
+ rulethickness=2pt]
+
+\startbuffer
+\setupfloat[intermezzo][location=middle]
+\setupcaption[location=bottom,headstyle=boldslanted]
+
+\placeintermezzo{An intermezzo.}
+\startframedtext
+At the beginning of this century there was a tram line from
+Zwolle to Blokzijl via Hasselt. Other means of transport became
+more important and just before the second world war the tram line
+was stopped. Nowadays such a tram line would have been very
+profitable.
+\stopframedtext
+\stopbuffer
+
+\typebuffer
+
+\start
+\getbuffer
+\stop
+
+The framed texts inherits its layout from the example \at{page}[block:bridge].
+
+Tables or figures may take up a lot of space. The placing of these text elements
+can be postponed till the next page break. This is done with:
+\type{\start ... \stoppostponing}:
+
+\startbuffer
+\startpostponing
+\placefigure
+ {A postponed figure.}
+ {\externalfigure[ma-cb-16][width=\textwidth]}
+\stoppostponing
+\stopbuffer
+
+\typebuffer
+
+The figure will be placed at the top of the next page and will cause minimal
+disruption of the running text.
+
+\getbuffer
+
+\stopsection
+
+% \startsection[reference=textblocks,title=Text blocks] % AFO 2013: weggehaald, wordt toch nooit gebruikt
+
+% \index{text blocks}
+
+% \Command{\tex{defineblock}}
+% \Command{\tex{useblocks}}
+% \Command{\tex{hideblocks}}
+% \Command{\tex{setupblock}}
+
+% \stopsection
+
+\startsection[title=Storing text for later use]
+
+\index{storing text}
+
+\Command{\tex{startbuffer}}
+\Command{\tex{getbuffer}}
+\Command{\tex{typebuffer}}
+\Command{\tex{savebuffer}}
+\Command{\tex{setupbuffer}}
+
+You can store information temporarily for future use in your document with:
+
+\shortsetup{startbuffer}
+
+For example:
+
+\starttyping
+\startbuffer[visit]
+If you want to see what Hasselt has in store you should come and
+visit it some time. If you take this manual with you, you will
+recognise some locations.
+\stopbuffer
+
+\getbuffer[visit]
+\stoptyping
+
+With \type{\getbuffer[visit]} you recall the stored text. The logical name is
+optional. With \type{\typebuffer[visit]} you get back the typeset version of the
+content of the buffer.
+
+Buffers are set up with:
+
+\shortsetup{setupbuffer}
+
+You can also save a buffer to an external file with:
+
+\shortsetup{savebuffer}
+
+If you want to save the buffer \type{visit} in an external file called
+\type{myfile-sightseeing.tmp} you type:
+
+\starttyping
+\savebuffer[visit][sightseeing]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Lines]
+
+\index{lines}
+
+\Command{\tex{hairline}}
+\Command{\tex{starttextrule}}
+\Command{\tex{thinrule}}
+\Command{\tex{thinrules}}
+\Command{\tex{setupthinrules}}
+\Command{\tex{underbar}}
+\Command{\tex{overstrikes}}
+\Command{\tex{periods}}
+
+There are many comands to draw lines. For a single line you type:
+
+\shortsetup{hairline}
+
+or:
+
+\shortsetup{thinrule}
+
+For more lines you type:
+
+\shortsetup{thinrules}
+
+Text in combination with lines is also possible:
+
+\startbuffer
+\starttextrule{Hasselt -- Amsterdam}
+If you draw a straight line from Hasselt to Amsterdam you would have
+to cover a distance of almost 145 \unit{Kilo Meter}.
+\stoptextrule
+
+If you draw two straight lines from Hasselt to Amsterdam you would
+have to cover a distance of almost 290 \unit{Kilo Meter}.
+
+Amsterdam \thinrules[n=3] Hasselt
+\stopbuffer
+
+\getbuffer
+
+The code of this example is:
+
+\typebuffer
+
+You always have to be careful in drawing lines. Empty lines around
+\type{\thinrules} must not be forgotten and the vertical spacing is always a
+point of concern.
+
+You can set up line spacing with:
+
+\shortsetup{setupthinrules}
+
+There are a few complementary commands that might be very
+useful.
+
+\shortsetup{setupfillinrules}
+
+These commands are introduced in the examples below:
+
+\startbuffer
+\setupfillinrules[width=2cm]
+\setupfillinlines[width=3cm]
+
+\fillinrules[n=1]{\bf name}
+\fillinrules[n=3]{\bf adress}
+
+\fillinline{Can you please state the \underbar{number} of houses
+ in Hasselt.} \par
+
+Strike out \overstrikes{Hasselt in this text}\periods[18]
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+These commands are used in questionaires. Text that is
+struck out or underlined will not be hyphenated.
+
+In \in{section}[overlays] you have already seen the use of the
+\type{\blackrule} command that can be set up with:
+
+\shortsetup{setupblackrules}
+
+\startbuffer
+\blank
+\blackrule[width=\textwidth,height=1cm,color=blue]
+\stopbuffer
+
+\typebuffer
+
+This will result in a rather fat line:
+
+\getbuffer
+
+
+\stopsection
+
+\startsection[title=Super- and subscript in text]
+
+\index{subscript}
+\index{superscript}
+
+\Command{\tex{low}}
+\Command{\tex{high}}
+\Command{\tex{lohi}}
+
+\startbuffer
+Hasselt's economy has known its \high{ups} and \low{downs}.
+Since the nineties of the last century its economy is
+\lohi{so}{so}.
+\stopbuffer
+
+\getbuffer
+
+This ugly text was made with \type{\low{}}, \type{\high{}} and \type{\lohi{}{}}.
+The text was placed between the curly braces.
+
+\stopsection
+
+\startsection[title=Date]
+
+\index{date}
+
+\Command{\tex{currentdate}}
+
+You can invoke the system date in your text with:
+
+\shortsetup{currentdate}
+
+With \type{\currentdate[day]}, \type{\currentdate[month]} and \type{\currentdate[year]} you can
+invoke day, month and year separately.
+
+\stopsection
+
+\startsection[title=Rotating text, figures and tables]
+
+\index{rotating}
+
+\Command{\tex{rotate}}
+
+Sometimes you may want to rotate text or images. You can rotate
+text and other objects with:
+
+\shortsetup{rotate}
+
+The first bracket pair is optional. Within that bracket pair
+you specify the rotation: \type{rotation=90}. The curly
+braces contain the text or object you want to rotate.
+
+\startbuffer
+Hasselt got its municipal rights in 1252. From that time on it had
+the \rotate[rotation=90]{right} to use its own seal on official
+documents. This seal showed Holy Stephanus known as one of the first
+Christian martyrs, and was the \rotate[rotation=270]{patron} of
+Hasselt. After the Reformation the seal was redesigned and Stephanus
+lost his \quote{holiness} and was from that time on depicted without
+his aureole.
+\stopbuffer
+
+\typebuffer
+
+This results in a very ugly paragraph:
+
+\getbuffer
+
+You can rotate an image just as easily:
+
+% \placetable[rotate][]{}{}
+
+\startbuffer
+\placefigure
+ [][fig:rotation]
+ {The 180 \unit{Degrees} rotated fishing port (de Vispoort).}
+ {\rotate[rotation=180]{\externalfigure[ma-cb-15][width=10cm]}}
+\stopbuffer
+
+\typebuffer
+
+You can see in \in{figure}[fig:rotation] that it is not always clear what you get
+when you rotate.
+
+\getbuffer
+
+We can set up rotating with:
+
+\shortsetup{setuprotate}
+
+In the example above you could also rotate image and caption by:
+
+\startbuffer
+\placefigure
+ [180][fig:rotation]
+ {The 180 \unit{Degrees} rotated fishing port (de Vispoort).}
+ {\externalfigure[ma-cb-15][width=10cm]}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Scaling text]
+
+\index{scaling}
+
+\Command{\tex{scale}}
+\Command{\tex{setupscale}}
+
+For some obscure reasons you may want to scale text. You can scale text and other
+objects with:
+
+\shortsetup{scale}
+
+\startbuffer
+After 1810 the Dedemsvaart brought some prosperity to Hasselt. All
+ships went through the canals of Hasselt and the \scale[factor=10]{shops} on both
+sides of the canals \scale[factor=10]{prospered}.
+\stopbuffer
+
+\typebuffer
+
+Which will result in:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Space]
+
+\index{space}
+\index{tilde}
+\index{non-breakable space}
+
+\Command{\tex{space}}
+\Command{\tex{fixedspaces}}
+
+The command \type{\space} will produce a space. In \CONTEXT\ the
+\type{~} (tilde) is a non-breakable space.
+
+\startbuffer
+The Ridderstraat in Hasselt is about 160~m long and 5 to 6~m wide
+with houses on both sides of the street.
+\stopbuffer
+
+\typebuffer
+
+Tildes can also be used to align numbers in a row. The command
+\type{\fixedspaces} will give the tilde the fixed width of a number.
+
+\startbuffer
+\fixedspaces
+
+\bTABLE[frame=off]
+\bTR \bTD Ridderstraat \eTD \bTD 160 m \eTD \eTR
+\bTR \bTD Prinsengracht \eTD \bTD 240 m \eTD \eTR
+\bTR \bTD Kalverstraat \eTD \bTD ~60 m \eTD \eTR
+\bTR \bTD Meestersteeg \eTD \bTD ~45 m \eTD \eTR
+\eTABLE
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Carriage return]
+
+\index{carriage return}
+
+\Command{\tex{crlf}}
+\Command{\tex{startlines}}
+
+A new line can be enforced with:
+
+\shortsetup{crlf}
+
+As a \CONTEXT\ user you should use this command only as a last resort.
+
+When a number of lines should be followed by a {\em carriage return and line feed}
+you can use:
+
+\shortsetup{startlines}
+
+\starttyping
+\startlines
+.
+.
+.
+\stoplines
+\stoptyping
+
+\startbuffer
+On a wooden panel in the town hall of Hasselt you can read:
+
+\startlines
+Heimelijcken haet
+eigen baet
+jongen raet
+Door diese drie wilt verstaen
+is het Roomsche Rijck vergaen.
+\stoplines
+
+This little rhyme contains a warning for the magistrates of
+Hasselt: don't allow personal benefits or feelings to
+influence your wisdom in decision making.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+In a few commands new lines are generated by \type{\\}. For example if you type
+\type{\inmargin{in the\\margin}} then the text will be divided over two lines.
+
+\stopsection
+
+\startsection[title=Hyphenation]
+
+\index{hyphenation}
+\index{language}
+
+\Command{\tex{mainlanguage}}
+\Command{\tex{language}}
+\Command{\tex{nl}}
+\Command{\tex{en}}
+
+When writing multi-lingual texts you have to be aware of the fact that
+hyphenation may differ from one language to another.
+
+To activate a language you type:
+
+\shortsetup{mainlanguage}
+
+Between the brackets you fill in
+\type{af},
+\type{ca},
+\type{cs},
+\type{cs},
+\type{da},
+\type{de},
+\type{en},
+\type{fi},
+\type{fr},
+\type{it},
+\type{la},
+\type{nl},
+\type{nb},
+\type{nn},
+\type{pl},
+\type{pt},
+\type{es},
+\type{sv} and
+\type{tr} for
+afrikaans,
+catalan,
+czech,
+slovak,
+danish,
+german,
+english,
+finnish,
+french,
+italian,
+latin,
+dutch,
+bokmal,
+nnynorsk,
+polish,
+portuguese,
+spanish,
+swedish and
+turkish respectively.
+
+To change from one language to another you can use:
+
+\starttyping
+\language[nl] \language[en] \language[de] \language[fr] \language[sp] ...
+\stoptyping
+
+or the shorthand versions:
+
+\starttyping
+\nl \en \de \fr \sp ...
+\stoptyping
+
+An example:
+
+\startbuffer
+If you want to know more about Hasselt, the best book to read is
+probably \quote{\nl Uit de geschiedenis van Hasselt} by
+F.~Peereboom.
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+If a word is wrongly hyphenated you can define the hyphenation points yourself.
+This is done in the set up area of your input file:
+
+\startbuffer
+\hyphenation{his-to-ry}
+\stopbuffer
+
+\typebuffer
+
+Note that the language setting is also responsible for the way quotes are placed
+around quotes and quotations (see \in{section}[quotations]).
+
+In some languages (like Dutch) compound words are used that are connected with a
+hyphen. The separate words have to be hyphenated correctly. In order to do that
+you can use \type{||}.
+
+\startbuffer
+If your looking for an English||speaking person in Hasselt you should
+go to the Tourist Information Office. There you may expect to find
+full|| and part||time employees who are fluent in German, English,
+French and of course Dutch.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+The double \type{||} takes care of the hyphen and the correct hyphenation of the
+separate words. Also note the suspended compounds.
+
+\stopsection
+
+\startsection[title=Charts]
+
+\index{chart}
+
+\Command{\tex{FLOWchart}}
+
+To enable you to draw flow diagrams \CONTEXT\ contains the core module
+\type{chart}. A simple organogram may look like this:
+
+\startbuffer
+\setupFLOWcharts
+ [width=9\bodyfontsize,
+ height=2\bodyfontsize,
+ dx=1\bodyfontsize,
+ dy=1\bodyfontsize]
+
+\setupFLOWlines
+ [arrow=no]
+
+\startFLOWchart[organogram]
+ \startFLOWcell
+ \shape {action}
+ \name {01}
+ \location {2,1}
+ \text {Zwartewaterland}
+ \connect [bt]{02}
+ \connect [bt]{03}
+ \connect [bt]{04}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {02}
+ \location {1,2}
+ \text {Hasselt}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {03}
+ \location {2,2}
+ \text {Zwartsluis}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {04}
+ \location {3,2}
+ \text {Genemuiden}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\midaligned{\getbuffer\FLOWchart[organogram]}
+
+This diagram is defined with the commands below:
+
+\typebuffer
+
+It is of good practice to define your setups and flow diagrams in separate
+definition files (environments).
+
+\startbuffer
+\FLOWchart[organogram]
+\stopbuffer
+
+The flowchart can then be invoked by:
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Comment in input file]
+
+\index{comment}
+\index[percent]{\% in input file}
+
+All text between \type{\start...\stoptext} will be processed while running
+\CONTEXT. Sometimes however you may have text fragments you don't want to be
+processed or you want to comment on your \CONTEXT\ commands.
+
+If you preceed your text with the percentage sign \type{%}
+it will not be processed.
+
+\startbuffer
+% In very big documents you can use the command \input for
+% different files.
+%
+% For example:
+%
+% \input hass01.tex % chapter 1 on Hasselt
+% \input hass02.tex % chapter 2 on Hasselt
+% \input hass03.tex % chapter 3 on Hasselt
+\stopbuffer
+
+\typebuffer
+
+When you delete the \type{%} before \type{\input} the three files will be
+processed. The comment describing the contents of the files will not be
+processed.
+
+\stopsection
+
+\startsection[title=Notes]
+
+\index{note}
+
+\Command{\tex{startcomment}}
+
+If you want your comment in the input file visible as a 'note' in the PDF file
+you can use:
+
+\shortsetup{startcomment}
+
+\startbuffer
+\startcomment
+ The image of the Vispoort should be in color.
+\stopcomment
+\stopbuffer
+
+\typebuffer
+
+The command will produce a sticky note in the PDF.
+
+The note is only visible when interactivity is set with \type{\setupinteraction}
+and the comment with \type{\setupcomment}.
+
+\stopsection
+
+\startsection[title=Hiding text]
+
+\index{hiding text}
+
+\Command{\tex{starthiding}}
+
+Text can be hidden with:
+
+\shortsetup{starthiding}
+
+The text between \type{\start ... \stophiding} will not be processed.
+
+\stopsection
+
+\startsection[title=Input of another {\tt tex} file]
+
+\index{input other \TEX--files}
+
+\Command{\tex{input}}
+
+In a number of situations you may want to insert other \TEX\ files in your input
+file. For example, sometimes it is more efficient to specify \CONTEXT\ sources in
+more than one file in order to be able to partially process your files.
+
+Another file (with the name \type{another.tex}) can be inserted by:
+
+\starttyping
+\input another.tex
+\stoptyping
+
+The extension is optional so this will work too:
+
+\starttyping
+\input another
+\stoptyping
+
+The command \type{\input} is a \TEX\ command.
+
+For a more systematic approach in maintaining your documents \CONTEXT\ supports a
+project structure with commands like \type{\start...\stopenvironment} and
+\type{\start...\stopproduct}. Please refer to the magazine
+\goto {\em Project structure} [ url(thisway:proj-struc) ]
+for more information.
+
+\stopsection
+
+\startsection[title=XML (eXtended Markup Language)]
+
+\index{xml}
+\index{mathml}
+\index{openmath}
+
+Normally you code your document with \CONTEXT\ commands so you can tell \CONTEXT\
+what to do with the coded text elements.
+
+A more rigid way to code your content is \XML\ (eXtended Markup Language) which enables
+you to have more control over your content (scripting, xslt, validation). A simple
+\XML\ coded document could look like this:
+
+\startbuffer
+<?xml version='1.0' standalone='yes?>
+
+<document>
+ <section>
+ <title>Hasselt in winter</title>
+ <content>
+ <p>In winter scating is a very popular sport in Hasselt.
+ All over Hasselt the frozen canals offer children a great
+ play ground.</p>
+ <p>...</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+\typebuffer
+
+\CONTEXT\ is able to deal with \XML\ directly without underlying XML2TEX
+conversions. Please refer to the manual \goto {Dealing with XML} [ url
+(manual:xml) ] for more information on how to process \XML\ documents.
+
+\CONTEXT\ also supports \MATHML\ (presentational and content markup) and
+\OPENMATH\ with which math expressions can be coded in \XML\ documents.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf b/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf
new file mode 100644
index 000000000..6ad164eb0
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-en.tex b/doc/context/sources/general/manuals/start/en/ma-cb-en.tex
new file mode 100644
index 000000000..2e0b283af
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-en.tex
@@ -0,0 +1,86 @@
+% interface=english language=uk modes=screen,bound
+
+% \showframe
+
+\startproduct ma-cb-en
+
+\project ma-cb
+
+% \disabledirectives[otf.kernruns]
+% \disabledirectives[otf.discruns]
+% \disabledirectives[otf.compruns]
+
+\startdocument
+ [title={\ConTeXt\ Mark IV\crlf an excursion},
+ subtitle={English\crlf version},
+ author={Ton Otten\crlf PRAGMA ADE}]
+
+\startfrontmatter
+
+ \component ma-cb-en-introduction
+
+\stopfrontmatter
+
+\startbodymatter
+
+ \component ma-cb-en-document
+ \component ma-cb-en-gettingstarted
+ \component ma-cb-en-specialcharacters
+ \component ma-cb-en-structure
+ \component ma-cb-en-setupcommands
+ \component ma-cb-en-heads
+ \component ma-cb-en-itemizations
+ \component ma-cb-en-math
+ \component ma-cb-en-chemical
+ \component ma-cb-en-units
+ \component ma-cb-en-bibliography
+ \component ma-cb-en-figures
+ \component ma-cb-en-tables
+ \component ma-cb-en-tabulations
+ \component ma-cb-en-columns
+ \component ma-cb-en-footnotes % Hans: zie lokale voetnoot tabel
+ \component ma-cb-en-citations
+ \component ma-cb-en-descriptions
+ \component ma-cb-en-enumerations
+ \component ma-cb-en-frames % Hans 2015: "background=linear shape" werkt niet en zorgt ervoor dat de background van de shortsetup niet meer werken
+ \component ma-cb-en-framedtexts
+ \component ma-cb-en-margintexts
+ \component ma-cb-en-pages
+ \component ma-cb-en-headers
+ \component ma-cb-en-tablesofcontent
+ \component ma-cb-en-registers
+ \component ma-cb-en-synonyms
+ \component ma-cb-en-sortedlists
+ \component ma-cb-en-references
+ \component ma-cb-en-color
+ \component ma-cb-en-alignments
+ \component ma-cb-en-interactivity % Hans: de soundtrack werkt niet en crossref met hasseltbook.tex werkt niet
+ \component ma-cb-en-fonts
+ \component ma-cb-en-composedcharacters
+ \component ma-cb-en-layout
+ \component ma-cb-en-pagebackgrounds
+ \component ma-cb-en-textbackgrounds
+ \component ma-cb-en-paragraphs
+ \component ma-cb-en-commands
+ \component ma-cb-en-whatever
+ \component ma-cb-en-modules
+ \component ma-cb-en-presentations
+ \component ma-cb-en-metapost
+ \component ma-cb-en-usersetups
+
+\stopbodymatter
+
+\startappendices
+
+ \component ma-cb-en-mathcharacters
+ \component ma-cb-en-errors
+ \component ma-cb-en-texteditor
+ \component ma-cb-en-processingfiles
+ \component ma-cb-en-runtimefiles
+
+\stopappendices
+
+\stopdocument
+
+\stopproduct
+
diff --git a/doc/context/sources/general/manuals/start/en/ma-cb-language.tex b/doc/context/sources/general/manuals/start/en/ma-cb-language.tex
new file mode 100644
index 000000000..5c6d91d07
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/ma-cb-language.tex
@@ -0,0 +1,21 @@
+\startenvironment ma-cb-language
+
+\mainlanguage[en]
+
+\setuplabeltext
+ [en]
+ [ document:author=Main author,
+ document:design=Design and style,
+ document:contributions=Contributions,
+ document:translations=Translations,
+ document:illustrations=Illustrations,
+ document:commanddefinitions=Command definitions,
+ document:commandindex=Command index,
+ document:subjectindex=Subject index,
+ document:contents=Contents,
+ document:manuals=Manuals,
+ document:magazines=Magazines,
+ document:supportandreading=Support and further reading,
+ document:furtherreading=Further reading]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/en/sounds-001.tex b/doc/context/sources/general/manuals/start/en/sounds-001.tex
new file mode 100644
index 000000000..7d1428113
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/en/sounds-001.tex
@@ -0,0 +1,34 @@
+\definerenderingwindow
+ [example]
+ [width=0pt,height=0pt,frame=off]
+
+\setupinteraction[state=start]
+
+\useexternalrendering
+ [mysound]
+ [audio/mpeg] % audio/x-mp3
+ [akkerman.mp3]
+ []
+
+\definereference [StartSoundTrack] [StartRendering{mysound}]
+\definereference [StopSoundTrack] [StopRendering{mysound}]
+
+\definelayer[resources][width=\paperwidth,height=\paperheight]
+
+\setupbackgrounds[page][background=resources]
+
+\starttext
+
+ \setlayer[resources]{\placerenderingwindow[example][mysound]} % once
+
+ \startTEXpage
+ \button{start}[StartSoundTrack]
+ \button{stop}[StopSoundTrack]
+ \stopTEXpage
+
+ \startTEXpage
+ \button{start}[StartSoundTrack]
+ \button{stop}[StopSoundTrack]
+ \stopTEXpage
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/start/graphics/cow.pdf b/doc/context/sources/general/manuals/start/graphics/cow.pdf
new file mode 100644
index 000000000..2441faf74
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/cow.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md b/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md
new file mode 100644
index 000000000..b7c0ab5a6
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md
@@ -0,0 +1,830 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mayura Draw, Version 4.3
+%%Title: fig-page-areas-en.md
+%%CreationDate: Fri Jan 10 14:38:13 2014
+%%BoundingBox: 8 140 580 700
+%%DocumentFonts: ArialMT
+%%+ Arial-BoldMT
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset MayuraDraw_ops
+%%Version: 4.3
+%%Copyright: (c) 1993-2003 Mayura Software
+/PDXDict 100 dict def
+PDXDict begin
+% width height matrix proc key cache
+% definepattern -\> font
+/definepattern { %def
+ 7 dict begin
+ /FontDict 9 dict def
+ FontDict begin
+ /cache exch def
+ /key exch def
+ /proc exch cvx def
+ /mtx exch matrix invertmatrix def
+ /height exch def
+ /width exch def
+ /ctm matrix currentmatrix def
+ /ptm matrix identmatrix def
+ /str
+ (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
+ def
+ end
+ /FontBBox [ %def
+ 0 0 FontDict /width get
+ FontDict /height get
+ ] def
+ /FontMatrix FontDict /mtx get def
+ /Encoding StandardEncoding def
+ /FontType 3 def
+ /BuildChar { %def
+ pop begin
+ FontDict begin
+ width 0 cache { %ifelse
+ 0 0 width height setcachedevice
+ }{ %else
+ setcharwidth
+ } ifelse
+ 0 0 moveto width 0 lineto
+ width height lineto 0 height lineto
+ closepath clip newpath
+ gsave proc grestore
+ end end
+ } def
+ FontDict /key get currentdict definefont
+ end
+} bind def
+
+% dict patternpath -
+% dict matrix patternpath -
+/patternpath { %def
+ dup type /dicttype eq { %ifelse
+ begin FontDict /ctm get setmatrix
+ }{ %else
+ exch begin FontDict /ctm get setmatrix
+ concat
+ } ifelse
+ currentdict setfont
+ FontDict begin
+ FontMatrix concat
+ width 0 dtransform
+ round width div exch round width div exch
+ 0 height dtransform
+ round height div exch
+ round height div exch
+ 0 0 transform round exch round exch
+ ptm astore setmatrix
+
+ pathbbox
+ height div ceiling height mul 4 1 roll
+ width div ceiling width mul 4 1 roll
+ height div floor height mul 4 1 roll
+ width div floor width mul 4 1 roll
+
+ 2 index sub height div ceiling cvi exch
+ 3 index sub width div ceiling cvi exch
+ 4 2 roll moveto
+
+ FontMatrix ptm invertmatrix pop
+ { %repeat
+ gsave
+ ptm concat
+ dup str length idiv { %repeat
+ str show
+ } repeat
+ dup str length mod str exch
+ 0 exch getinterval show
+ grestore
+ 0 height rmoveto
+ } repeat
+ pop
+ end end
+} bind def
+
+% dict patternfill -
+% dict matrix patternfill -
+/patternfill { %def
+ gsave
+ eoclip patternpath
+ grestore
+ newpath
+} bind def
+
+/img { %def
+ gsave
+ /imgh exch def
+ /imgw exch def
+ concat
+ imgw imgh 8
+ [imgw 0 0 imgh neg 0 imgh]
+ /colorstr 768 string def
+ /colorimage where {
+ pop
+ { currentfile colorstr readhexstring pop }
+ false 3 colorimage
+ }{
+ /graystr 256 string def
+ {
+ currentfile colorstr readhexstring pop
+ length 3 idiv
+ dup 1 sub 0 1 3 -1 roll
+ {
+ graystr exch
+ colorstr 1 index 3 mul get 30 mul
+ colorstr 2 index 3 mul 1 add get 59 mul
+ colorstr 3 index 3 mul 2 add get 11 mul
+ add add 100 idiv
+ put
+ } for
+ graystr 0 3 -1 roll getinterval
+ } image
+ } ifelse
+ grestore
+} bind def
+
+/arrowhead {
+ gsave
+ [] 0 setdash
+ strokeC strokeM strokeY strokeK setcmykcolor
+ 2 copy moveto
+ 4 2 roll exch 4 -1 roll exch
+ sub 3 1 roll sub
+ exch atan rotate dup scale
+ arrowtype
+ dup 0 eq {
+ -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 1 eq {
+ 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 2 eq {
+ -6 -6 rmoveto 6 6 rlineto -6 6 rlineto
+ -1.4142 -1.4142 rlineto 4.5858 -4.5858 rlineto
+ -4.5858 -4.5858 rlineto closepath fill
+ } if
+ dup 3 eq {
+ -6 0 rmoveto -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 4 eq {
+ -9 0 rmoveto 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 5 eq {
+ currentpoint newpath 3 0 360 arc
+ closepath fill
+ } if
+ dup 6 eq {
+ 2.5 2.5 rmoveto 0 -5 rlineto -5 0 rlineto 0 5 rlineto
+ closepath fill
+ } if
+ pop
+ grestore
+} bind def
+
+/setcmykcolor where { %ifelse
+ pop
+}{ %else
+ /setcmykcolor {
+ /black exch def /yellow exch def
+ /magenta exch def /cyan exch def
+ cyan black add dup 1 gt { pop 1 } if 1 exch sub
+ magenta black add dup 1 gt { pop 1 } if 1 exch sub
+ yellow black add dup 1 gt { pop 1 } if 1 exch sub
+ setrgbcolor
+ } bind def
+} ifelse
+
+/RE { %def
+ findfont begin
+ currentdict dup length dict begin
+ { %forall
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /FontName exch def dup length 0 ne { %if
+ /Encoding Encoding 256 array copy def
+ 0 exch { %forall
+ dup type /nametype eq { %ifelse
+ Encoding 2 index 2 index put
+ pop 1 add
+ }{ %else
+ exch pop
+ } ifelse
+ } forall
+ } if pop
+ currentdict dup end end
+ /FontName get exch definefont pop
+} bind def
+
+/spacecount { %def
+ 0 exch
+ ( ) { %loop
+ search { %ifelse
+ pop 3 -1 roll 1 add 3 1 roll
+ }{ pop exit } ifelse
+ } loop
+} bind def
+
+/WinAnsiEncoding [
+ 39/quotesingle 96/grave 130/quotesinglbase/florin/quotedblbase
+ /ellipsis/dagger/daggerdbl/circumflex/perthousand
+ /Scaron/guilsinglleft/OE 145/quoteleft/quoteright
+ /quotedblleft/quotedblright/bullet/endash/emdash
+ /tilde/trademark/scaron/guilsinglright/oe/dotlessi
+ 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright
+ /ordfeminine 172/logicalnot 174/registered/macron/ring
+ 177/plusminus/twosuperior/threesuperior/acute/mu
+ 183/periodcentered/cedilla/onesuperior/ordmasculine
+ 188/onequarter/onehalf/threequarters 192/Agrave/Aacute
+ /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+ /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+ /germandbls/agrave/aacute/acircumflex/atilde/adieresis
+ /aring/ae/ccedilla/egrave/eacute/ecircumflex
+ /edieresis/igrave/iacute/icircumflex/idieresis
+ /eth/ntilde/ograve/oacute/ocircumflex/otilde
+ /odieresis/divide/oslash/ugrave/uacute/ucircumflex
+ /udieresis/yacute/thorn/ydieresis
+] def
+
+/SymbolEncoding [
+ 32/space/exclam/universal/numbersign/existential/percent
+ /ampersand/suchthat/parenleft/parenright/asteriskmath/plus
+ /comma/minus/period/slash/zero/one/two/three/four/five/six
+ /seven/eight/nine/colon/semicolon/less/equal/greater/question
+ /congruent/Alpha/Beta/Chi/Delta/Epsilon/Phi/Gamma/Eta/Iota
+ /theta1/Kappa/Lambda/Mu/Nu/Omicron/Pi/Theta/Rho/Sigma/Tau
+ /Upsilon/sigma1/Omega/Xi/Psi/Zeta/bracketleft/therefore
+ /bracketright/perpendicular/underscore/radicalex/alpha
+ /beta/chi/delta/epsilon/phi/gamma/eta/iota/phi1/kappa/lambda
+ /mu/nu/omicron/pi/theta/rho/sigma/tau/upsilon/omega1/omega
+ /xi/psi/zeta/braceleft/bar/braceright/similar
+ 161/Upsilon1/minute/lessequal/fraction/infinity/florin/club
+ /diamond/heart/spade/arrowboth/arrowleft/arrowup/arrowright
+ /arrowdown/degree/plusminus/second/greaterequal/multiply
+ /proportional/partialdiff/bullet/divide/notequal/equivalence
+ /approxequal/ellipsis/arrowvertex/arrowhorizex/carriagereturn
+ /aleph/Ifraktur/Rfraktur/weierstrass/circlemultiply
+ /circleplus/emptyset/intersection/union/propersuperset
+ /reflexsuperset/notsubset/propersubset/reflexsubset/element
+ /notelement/angle/gradient/registerserif/copyrightserif
+ /trademarkserif/product/radical/dotmath/logicalnot/logicaland
+ /logicalor/arrowdblboth/arrowdblleft/arrowdblup/arrowdblright
+ /arrowdbldown/lozenge/angleleft/registersans/copyrightsans
+ /trademarksans/summation/parenlefttp/parenleftex/parenleftbt
+ /bracketlefttp/bracketleftex/bracketleftbt/bracelefttp
+ /braceleftmid/braceleftbt/braceex
+ 241/angleright/integral/integraltp/integralex/integralbt
+ /parenrighttp/parenrightex/parenrightbt/bracketrighttp
+ /bracketrightex/bracketrightbt/bracerighttp/bracerightmid
+ /bracerightbt
+] def
+
+/patarray [
+/leftdiagonal /rightdiagonal /crossdiagonal /horizontal
+/vertical /crosshatch /fishscale /wave /brick
+] def
+/arrowtype 0 def
+/fillC 0 def /fillM 0 def /fillY 0 def /fillK 0 def
+/strokeC 0 def /strokeM 0 def /strokeY 0 def /strokeK 1 def
+/pattern -1 def
+/mat matrix def
+/mat2 matrix def
+/nesting 0 def
+/deferred /N def
+/c /curveto load def
+/c2 { pop pop c } bind def
+/C /curveto load def
+/C2 { pop pop C } bind def
+/e { gsave concat 0 0 moveto } bind def
+/F {
+ nesting 0 eq { %ifelse
+ pattern -1 eq { %ifelse
+ fillC fillM fillY fillK setcmykcolor eofill
+ }{ %else
+ gsave fillC fillM fillY fillK setcmykcolor eofill grestore
+ 0 0 0 1 setcmykcolor
+ patarray pattern get findfont patternfill
+ } ifelse
+ }{ %else
+ /deferred /F def
+ } ifelse
+} bind def
+/f { closepath F } bind def
+/K { /strokeK exch def /strokeY exch def
+ /strokeM exch def /strokeC exch def } bind def
+/k { /fillK exch def /fillY exch def
+ /fillM exch def /fillC exch def } bind def
+/opc { pop } bind def
+/Opc { pop } bind def
+/L /lineto load def
+/L2 { pop pop L } bind def
+/m /moveto load def
+/m2 { pop pop m } bind def
+/n /newpath load def
+/N {
+ nesting 0 eq { %ifelse
+ newpath
+ }{ %else
+ /deferred /N def
+ } ifelse
+} def
+/S {
+ nesting 0 eq { %ifelse
+ strokeC strokeM strokeY strokeK setcmykcolor stroke
+ }{ %else
+ /deferred /S def
+ } ifelse
+} bind def
+/s { closepath S } bind def
+/Tx { fillC fillM fillY fillK setcmykcolor show
+ 0 leading neg translate 0 0 moveto } bind def
+/T { grestore } bind def
+/TX { pop } bind def
+/Ts { pop } bind def
+/tal { pop } bind def
+/tld { pop } bind def
+/tbx { pop exch pop sub /jwidth exch def } def
+/tpt { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto show
+} bind def
+/tpj { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto
+ dup stringwidth pop
+ 3 -1 roll
+ exch sub
+ 1 index spacecount
+ dup 0 eq { %ifelse
+ pop pop show
+ }{ %else
+ div 0 8#040 4 -1 roll widthshow
+ } ifelse
+} bind def
+/u {} def
+/U {} def
+/*u { /nesting nesting 1 add def } def
+/*U {
+ /nesting nesting 1 sub def
+ nesting 0 eq {
+ deferred cvx exec
+ } if
+} def
+/w /setlinewidth load def
+/d /setdash load def
+/B {
+ nesting 0 eq { %ifelse
+ gsave F grestore S
+ }{ %else
+ /deferred /B def
+ } ifelse
+} bind def
+/b { closepath B } bind def
+/z { /align exch def pop /leading exch def exch findfont
+ exch scalefont setfont } bind def
+/tfn { exch findfont
+ exch scalefont setfont } bind def
+/Pat { /pattern exch def } bind def
+/cm { 6 array astore concat } bind def
+/q { mat2 currentmatrix pop } bind def
+/Q { mat2 setmatrix } bind def
+/Ah {
+ pop /arrowtype exch def
+ currentlinewidth 5 1 roll arrowhead
+} bind def
+/Arc {
+ mat currentmatrix pop
+ translate scale 0 0 1 5 -2 roll arc
+ mat setmatrix
+} bind def
+/Arc2 { pop pop Arc } bind def
+/Bx {
+ mat currentmatrix pop
+ concat /y1 exch def /x1 exch def /y2 exch def /x2 exch def
+ x1 y1 moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+ mat setmatrix
+} bind def
+/Rr {
+ mat currentmatrix pop
+ concat /yrad exch def /xrad exch def
+ 2 copy gt { exch } if /x2 exch def /x1 exch def
+ 2 copy gt { exch } if /y2 exch def /y1 exch def
+ x1 xrad add y2 moveto
+ matrix currentmatrix x1 xrad add y2 yrad sub translate xrad yrad scale
+ 0 0 1 90 -180 arc setmatrix
+ matrix currentmatrix x1 xrad add y1 yrad add translate xrad yrad scale
+ 0 0 1 180 270 arc setmatrix
+ matrix currentmatrix x2 xrad sub y1 yrad add translate xrad yrad scale
+ 0 0 1 270 0 arc setmatrix
+ matrix currentmatrix x2 xrad sub y2 yrad sub translate xrad yrad scale
+ 0 0 1 0 90 arc setmatrix
+ closepath
+ mat setmatrix
+} bind def
+/Ov {
+ mat currentmatrix pop
+ concat translate scale 1 0 moveto 0 0 1 0 360 arc closepath
+ mat setmatrix
+} bind def
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%PDX g 3 3 1 1
+%%IncludeFont: ArialMT
+%%IncludeFont: Arial-BoldMT
+PDXDict begin
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+/_PDX_savepage save def
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/rightdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/leftdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 2 setlinewidth stroke
+} bind
+/horizontal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/vertical true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/crosshatch true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 30 7.5 lineto
+ 0 22.5 moveto 30 22.5 lineto
+ 7.5 0 moveto 7.5 7.5 lineto
+ 7.5 22.5 moveto 7.5 30 lineto
+ 22.5 7.5 moveto 22.5 22.5 lineto
+ 1 setlinewidth stroke
+} bind
+/brick true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 0.5 setlinewidth stroke
+} bind
+/crossdiagonal true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 1 setlinecap
+ 0 7.5 moveto 0 15 7.5 270 360 arc
+ 7.5 15 moveto 15 15 7.5 180 270 arc
+ 0 7.5 moveto 7.5 7.5 7.5 180 360 arc
+ 0.5 setlinewidth stroke
+} bind
+/fishscale true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 1 setlinecap 0.5 setlinewidth
+ 7.5 0 10.6 135 45 arcn
+ 22.5 15 10.6 225 315 arc
+ stroke
+ 7.5 15 10.6 135 45 arcn
+ 22.5 30 10.6 225 315 arc
+ stroke
+} bind
+/wave true definepattern pop
+
+WinAnsiEncoding /_ArialMT /ArialMT RE
+WinAnsiEncoding /_Arial-BoldMT /Arial-BoldMT RE
+
+newpath 2 setlinecap 0 setlinejoin 2 setmiterlimit
+[] 0 setdash
+8 140 moveto 8 700 lineto 580 700 lineto 580 140 lineto closepath clip
+newpath
+%%EndPageSetup
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+543 249 -9 789 [1 0 0 1 27.09 -98.91] Bx
+s
+0.133333 0.133333 0.133333 0 k
+0.133333 0.133333 0.133333 0 K
+0.5 w
+150 480 90 510 [1 0 0 1 -14.91 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 60.42 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 299.9 90.09] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 375.4 90.09] Bx
+b
+[1 0 0 1 15.14 -89.21] e
+33 681 33 681 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 33 670.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 45.09] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 45.09] Bx
+b
+[1 0 0 1 -5.536 -83.21] e
+33 630 33 630 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(header) 33 619.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 -180.6] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 -180.6] Bx
+b
+[1 0 0 1 1.136 -80.91] e
+33 402 33 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 33 391.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 -224.9] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 -224.9] Bx
+b
+[1 0 0 1 -7.866 -86.21] e
+36 363 36 363 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(bottom) 36 352.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 -14.91 0.09051] Bx
+b
+150 345 90 510 [1 0 0 1 60.09 0.09051] Bx
+b
+150 345 90 510 [1 0 0 1 300.1 0.09051] Bx
+b
+-1.42109e-016 0.4 0.8 0 k
+240 345 90 510 [1 0 0 1 135 0.09051] Bx
+b
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 375.1 0.09051] Bx
+b
+[1 0 0 1 21.47 -72.71] e
+24 507 24 507 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(text) 24 496.14 tpt
+T
+[1 0 0 1 -10.93 -38.72] e
+93 705 93 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left edge) 93 694.14 tpt
+T
+[1 0 0 1 -4.409 -41.72] e
+159 708 159 708 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left margin) 159 697.14 tpt
+T
+[1 0 0 1 17.42 -38.72] e
+273 705 273 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(text) 273 694.14 tpt
+T
+[1 0 0 1 -13.78 -35.72] e
+402 702 402 702 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right margin) 402 691.14 tpt
+T
+[1 0 0 1 -11.25 -38.72] e
+480 705 480 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right edge) 480 694.14 tpt
+T
+[1 0 0 1 -13.55 -89.21] e
+75 352.596 39 366 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 39 355.14 tpt
+T
+[1 0 0 1 0.09051 -89.91] e
+402 460.596 333 474 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 333 463.14 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 -14.91 -89.91 cm
+60 285 m
+90 285 L
+Q
+S
+q
+1 0 0 1 0.09051 -89.91 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+-1 0 0 1 615.1 -89.91 cm
+60 285 m
+90 285 L
+Q
+S
+q
+-1 0 0 1 600.1 -89.91 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 -1 0 810.1 735.1 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 -1 0 810.1 720.1 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 1 0 -209.9 735.1 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 1 0 -209.9 720.1 cm
+75 285 m
+75 255 L
+Q
+S
+U
+0.5 w
+[3 3] 0 d
+525 735 75 285 [1 0 0 1 0.09051 -89.91] Bx
+s
+1 w
+[] 0 d
+q
+1 0 0 1 -45 -524.9 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+1 0 0 1 -45 -524.9 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[1 0 0 1 0.09051 -89.91] e
+271.57 246.83 246 258 tbx
+0 tal
+11 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 10 tfn
+() 246 248.95 tpt
+T
+[1 0 0 1 0.09051 -89.91] e
+261 255 261 255 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+() 261 245.95 tpt
+T
+[1 0 0 1 9.698 -77.82] e
+261 255 261 255 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(paperwidth) 261 244.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+0 1 -1 0 1244 74.39 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+0 1 -1 0 1244 74.39 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[0 1 -1 0 797.3 129.1] e
+261 255 261 255 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(paperheight) 261 244.14 tpt
+T
+[1 0 0 1 -10.41 8.644] e
+273 429 273 429 tbx
+0 tal
+19 tld
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+/_Arial-BoldMT 18 tfn
+(bodytext) 273 412.71 tpt
+T
+%%PageTrailer
+_PDX_savepage restore
+%%Trailer
+end
+showpage
+%%EOF
diff --git a/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf b/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf
new file mode 100644
index 000000000..88350bf2a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf
@@ -0,0 +1,527 @@
+%PDF-1.0
+1 0 obj
+<<
+/Creator (Mayura Draw 4.3)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 4 0 R
+/Outlines 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type /Outlines
+/Count 0
+>>
+endobj
+4 0 obj
+<<
+/Type /Pages
+/Count 1
+/Kids [ 5 0 R ]
+>>
+endobj
+5 0 obj
+<<
+/Type /Page
+/Parent 4 0 R
+/MediaBox [ 8 140 580 700 ]
+/Resources <<
+/ProcSet 6 0 R
+/XObject 9 0 R
+/Font 10 0 R
+>>
+/Contents 7 0 R
+>>
+endobj
+6 0 obj
+[ /PDF /Text ]
+endobj
+7 0 obj
+<< /Length 8 0 R >>
+stream
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+18.0905 690.091 m
+18.0905 150.091 l
+570.091 150.091 l
+570.091 690.091 l
+18.0905 690.091 l
+s
+0.866667 0.866667 0.866667 rg
+0.866667 0.866667 0.866667 RG
+0.5 w
+75.0905 600.091 m
+75.0905 570.091 l
+135.091 570.091 l
+135.091 600.091 l
+75.0905 600.091 l
+b*
+150.421 600.091 m
+150.421 570.091 l
+210.421 570.091 l
+210.421 600.091 l
+150.421 600.091 l
+b*
+389.89 600.091 m
+389.89 570.091 l
+449.89 570.091 l
+449.89 600.091 l
+389.89 600.091 l
+b*
+225.091 600.091 m
+225.091 570.091 l
+375.091 570.091 l
+375.091 600.091 l
+225.091 600.091 l
+b*
+465.39 600.091 m
+465.39 570.091 l
+525.39 570.091 l
+525.39 600.091 l
+465.39 600.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 48.14 580.9 Tm
+0 Tw
+(top) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 555.091 m
+75.0905 525.091 l
+135.091 525.091 l
+135.091 555.091 l
+75.0905 555.091 l
+b*
+150.091 555.091 m
+150.091 525.091 l
+210.091 525.091 l
+210.091 555.091 l
+150.091 555.091 l
+b*
+390.09 555.091 m
+390.09 525.091 l
+450.09 525.091 l
+450.09 555.091 l
+390.09 555.091 l
+b*
+225.091 555.091 m
+225.091 525.091 l
+375.091 525.091 l
+375.091 555.091 l
+225.091 555.091 l
+b*
+465.09 555.091 m
+465.09 525.091 l
+525.09 525.091 l
+525.09 555.091 l
+465.09 555.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 27.46 535.9 Tm
+0 Tw
+(header) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 329.391 m
+75.0905 299.391 l
+135.091 299.391 l
+135.091 329.391 l
+75.0905 329.391 l
+b*
+150.091 329.391 m
+150.091 299.391 l
+210.091 299.391 l
+210.091 329.391 l
+150.091 329.391 l
+b*
+390.09 329.391 m
+390.09 299.391 l
+450.09 299.391 l
+450.09 329.391 l
+390.09 329.391 l
+b*
+225.091 329.391 m
+225.091 299.391 l
+375.091 299.391 l
+375.091 329.391 l
+225.091 329.391 l
+b*
+465.09 329.391 m
+465.09 299.391 l
+525.09 299.391 l
+525.09 329.391 l
+465.09 329.391 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 34.14 310.2 Tm
+0 Tw
+(footer) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 285.091 m
+75.0905 255.091 l
+135.091 255.091 l
+135.091 285.091 l
+75.0905 285.091 l
+b*
+150.091 285.091 m
+150.091 255.091 l
+210.091 255.091 l
+210.091 285.091 l
+150.091 285.091 l
+b*
+390.09 285.091 m
+390.09 255.091 l
+450.09 255.091 l
+450.09 285.091 l
+390.09 285.091 l
+b*
+225.091 285.091 m
+225.091 255.091 l
+375.091 255.091 l
+375.091 285.091 l
+225.091 285.091 l
+b*
+465.09 285.091 m
+465.09 255.091 l
+525.09 255.091 l
+525.09 285.091 l
+465.09 285.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 28.13 265.9 Tm
+0 Tw
+(bottom) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 510.091 m
+75.0905 345.091 l
+135.091 345.091 l
+135.091 510.091 l
+75.0905 510.091 l
+b*
+150.091 510.091 m
+150.091 345.091 l
+210.091 345.091 l
+210.091 510.091 l
+150.091 510.091 l
+b*
+390.09 510.091 m
+390.09 345.091 l
+450.09 345.091 l
+450.09 510.091 l
+390.09 510.091 l
+b*
+1 0.6 0.2 rg
+225 510.091 m
+225 345.091 l
+375 345.091 l
+375 510.091 l
+225 510.091 l
+b*
+0.866667 0.866667 0.866667 rg
+465.09 510.091 m
+465.09 345.091 l
+525.09 345.091 l
+525.09 510.091 l
+465.09 510.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 45.47 423.4 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 82.07 655.4 Tm
+0 Tw
+(left edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.6 655.4 Tm
+0 Tw
+(left margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 290.4 655.4 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 388.2 655.4 Tm
+0 Tw
+(right margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 468.8 655.4 Tm
+0 Tw
+(right edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 25.45 265.9 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 333.1 373.2 Tm
+0 Tw
+() Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+45.0905 195.091 m
+75.0905 195.091 l
+S
+75.0905 195.091 m
+75.0905 165.091 l
+S
+555.091 195.091 m
+525.091 195.091 l
+S
+525.091 195.091 m
+525.091 165.091 l
+S
+525.091 675.091 m
+525.091 645.091 l
+S
+525.091 645.091 m
+555.091 645.091 l
+S
+75.0905 675.091 m
+75.0905 645.091 l
+S
+75.0905 645.091 m
+45.0905 645.091 l
+S
+0.5 w
+[3 3] 0 d
+75.0905 195.091 m
+75.0905 645.091 l
+525.091 645.091 l
+525.091 195.091 l
+75.0905 195.091 l
+s
+1 w
+[] 0 d
+83.0005 180.091 m
+517.094 180.091 l
+S
+0 0 0 rg
+0 w
+75.0005 180.091 m
+84.0005 180.091 l
+84.0005 177.091 l
+75.0005 180.091 l
+84.0005 183.091 l
+84.0005 180.091 l
+75.0005 180.091 l
+f*
+525.094 180.091 m
+516.094 180.091 l
+516.094 183.091 l
+525.094 180.091 l
+516.094 177.091 l
+516.094 180.091 l
+525.094 180.091 l
+f*
+0.137255 0.0431373 1 rg
+BT
+/F1 10 Tf
+1 0 0 1 246.1 159 Tm
+0 Tw
+() Tj
+ET
+0 0 0 rg
+BT
+/F1 10 Tf
+1 0 0 1 261.1 156 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 270.7 166.3 Tm
+0 Tw
+(paperwidth) Tj
+ET
+1 1 1 rg
+1 w
+539.09 202.391 m
+539.09 636.484 l
+S
+0 0 0 rg
+0 w
+539.09 194.391 m
+539.09 203.391 l
+542.09 203.391 l
+539.09 194.391 l
+536.09 203.391 l
+539.09 203.391 l
+539.09 194.391 l
+f*
+539.09 644.484 m
+539.09 635.484 l
+536.09 635.484 l
+539.09 644.484 l
+542.09 635.484 l
+539.09 635.484 l
+539.09 644.484 l
+f*
+BT
+/F1 12 Tf
+0 1 -1 0 553.2 390.1 Tm
+0 Tw
+(paperheight) Tj
+ET
+1 1 1 rg
+BT
+/F2 18 Tf
+1 0 0 1 262.6 421.4 Tm
+0 Tw
+(bodytext) Tj
+ET
+endstream
+endobj
+8 0 obj
+5066
+endobj
+10 0 obj
+<<
+/F1 11 0 R
+/F2 12 0 R
+>>
+endobj
+11 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F1
+/BaseFont /Arial
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584
+ 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278
+ 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833
+ 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334
+ 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750
+ 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834
+ 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278
+ 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500
+ 556 500]
+/FontDescriptor 13 0 R
+>>
+endobj
+12 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F2
+/BaseFont /Arial,Bold
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 333 474 556 556 889 722 238 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584
+ 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333
+ 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889
+ 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389
+ 584 750 556 750 278 556 500 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 278 278 500 500 350 556 1000 333 1000 556 333 944 750
+ 500 667 278 333 556 556 556 556 280 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 556 278 333 333 365 556 834 834
+ 834 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278
+ 278 278 611 611 611 611 611 611 611 549 611 611 611 611 611 556
+ 611 556]
+/FontDescriptor 14 0 R
+>>
+endobj
+13 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial
+/FontBBox [ -665 -325 2000 1006 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 70
+>>
+endobj
+14 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial,Bold
+/FontBBox [ -628 -376 2000 1010 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 120
+>>
+endobj
+9 0 obj
+<<
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000000010 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000187 00000 n
+0000000253 00000 n
+0000000417 00000 n
+0000000450 00000 n
+0000005573 00000 n
+0000008294 00000 n
+0000005596 00000 n
+0000005646 00000 n
+0000006767 00000 n
+0000007892 00000 n
+0000008090 00000 n
+trailer
+<<
+/Size 15
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+8319
+%%EOF
diff --git a/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md b/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md
new file mode 100644
index 000000000..35c04b445
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md
@@ -0,0 +1,1371 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mayura Draw, Version 4.3
+%%Title: fig-page-parameters-en.md
+%%CreationDate: Fri Jan 10 17:04:54 2014
+%%BoundingBox: 8 230 580 790
+%%DocumentFonts: ArialMT
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset MayuraDraw_ops
+%%Version: 4.3
+%%Copyright: (c) 1993-2003 Mayura Software
+/PDXDict 100 dict def
+PDXDict begin
+% width height matrix proc key cache
+% definepattern -\> font
+/definepattern { %def
+ 7 dict begin
+ /FontDict 9 dict def
+ FontDict begin
+ /cache exch def
+ /key exch def
+ /proc exch cvx def
+ /mtx exch matrix invertmatrix def
+ /height exch def
+ /width exch def
+ /ctm matrix currentmatrix def
+ /ptm matrix identmatrix def
+ /str
+ (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
+ def
+ end
+ /FontBBox [ %def
+ 0 0 FontDict /width get
+ FontDict /height get
+ ] def
+ /FontMatrix FontDict /mtx get def
+ /Encoding StandardEncoding def
+ /FontType 3 def
+ /BuildChar { %def
+ pop begin
+ FontDict begin
+ width 0 cache { %ifelse
+ 0 0 width height setcachedevice
+ }{ %else
+ setcharwidth
+ } ifelse
+ 0 0 moveto width 0 lineto
+ width height lineto 0 height lineto
+ closepath clip newpath
+ gsave proc grestore
+ end end
+ } def
+ FontDict /key get currentdict definefont
+ end
+} bind def
+
+% dict patternpath -
+% dict matrix patternpath -
+/patternpath { %def
+ dup type /dicttype eq { %ifelse
+ begin FontDict /ctm get setmatrix
+ }{ %else
+ exch begin FontDict /ctm get setmatrix
+ concat
+ } ifelse
+ currentdict setfont
+ FontDict begin
+ FontMatrix concat
+ width 0 dtransform
+ round width div exch round width div exch
+ 0 height dtransform
+ round height div exch
+ round height div exch
+ 0 0 transform round exch round exch
+ ptm astore setmatrix
+
+ pathbbox
+ height div ceiling height mul 4 1 roll
+ width div ceiling width mul 4 1 roll
+ height div floor height mul 4 1 roll
+ width div floor width mul 4 1 roll
+
+ 2 index sub height div ceiling cvi exch
+ 3 index sub width div ceiling cvi exch
+ 4 2 roll moveto
+
+ FontMatrix ptm invertmatrix pop
+ { %repeat
+ gsave
+ ptm concat
+ dup str length idiv { %repeat
+ str show
+ } repeat
+ dup str length mod str exch
+ 0 exch getinterval show
+ grestore
+ 0 height rmoveto
+ } repeat
+ pop
+ end end
+} bind def
+
+% dict patternfill -
+% dict matrix patternfill -
+/patternfill { %def
+ gsave
+ eoclip patternpath
+ grestore
+ newpath
+} bind def
+
+/img { %def
+ gsave
+ /imgh exch def
+ /imgw exch def
+ concat
+ imgw imgh 8
+ [imgw 0 0 imgh neg 0 imgh]
+ /colorstr 768 string def
+ /colorimage where {
+ pop
+ { currentfile colorstr readhexstring pop }
+ false 3 colorimage
+ }{
+ /graystr 256 string def
+ {
+ currentfile colorstr readhexstring pop
+ length 3 idiv
+ dup 1 sub 0 1 3 -1 roll
+ {
+ graystr exch
+ colorstr 1 index 3 mul get 30 mul
+ colorstr 2 index 3 mul 1 add get 59 mul
+ colorstr 3 index 3 mul 2 add get 11 mul
+ add add 100 idiv
+ put
+ } for
+ graystr 0 3 -1 roll getinterval
+ } image
+ } ifelse
+ grestore
+} bind def
+
+/arrowhead {
+ gsave
+ [] 0 setdash
+ strokeC strokeM strokeY strokeK setcmykcolor
+ 2 copy moveto
+ 4 2 roll exch 4 -1 roll exch
+ sub 3 1 roll sub
+ exch atan rotate dup scale
+ arrowtype
+ dup 0 eq {
+ -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 1 eq {
+ 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 2 eq {
+ -6 -6 rmoveto 6 6 rlineto -6 6 rlineto
+ -1.4142 -1.4142 rlineto 4.5858 -4.5858 rlineto
+ -4.5858 -4.5858 rlineto closepath fill
+ } if
+ dup 3 eq {
+ -6 0 rmoveto -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 4 eq {
+ -9 0 rmoveto 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 5 eq {
+ currentpoint newpath 3 0 360 arc
+ closepath fill
+ } if
+ dup 6 eq {
+ 2.5 2.5 rmoveto 0 -5 rlineto -5 0 rlineto 0 5 rlineto
+ closepath fill
+ } if
+ pop
+ grestore
+} bind def
+
+/setcmykcolor where { %ifelse
+ pop
+}{ %else
+ /setcmykcolor {
+ /black exch def /yellow exch def
+ /magenta exch def /cyan exch def
+ cyan black add dup 1 gt { pop 1 } if 1 exch sub
+ magenta black add dup 1 gt { pop 1 } if 1 exch sub
+ yellow black add dup 1 gt { pop 1 } if 1 exch sub
+ setrgbcolor
+ } bind def
+} ifelse
+
+/RE { %def
+ findfont begin
+ currentdict dup length dict begin
+ { %forall
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /FontName exch def dup length 0 ne { %if
+ /Encoding Encoding 256 array copy def
+ 0 exch { %forall
+ dup type /nametype eq { %ifelse
+ Encoding 2 index 2 index put
+ pop 1 add
+ }{ %else
+ exch pop
+ } ifelse
+ } forall
+ } if pop
+ currentdict dup end end
+ /FontName get exch definefont pop
+} bind def
+
+/spacecount { %def
+ 0 exch
+ ( ) { %loop
+ search { %ifelse
+ pop 3 -1 roll 1 add 3 1 roll
+ }{ pop exit } ifelse
+ } loop
+} bind def
+
+/WinAnsiEncoding [
+ 39/quotesingle 96/grave 130/quotesinglbase/florin/quotedblbase
+ /ellipsis/dagger/daggerdbl/circumflex/perthousand
+ /Scaron/guilsinglleft/OE 145/quoteleft/quoteright
+ /quotedblleft/quotedblright/bullet/endash/emdash
+ /tilde/trademark/scaron/guilsinglright/oe/dotlessi
+ 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright
+ /ordfeminine 172/logicalnot 174/registered/macron/ring
+ 177/plusminus/twosuperior/threesuperior/acute/mu
+ 183/periodcentered/cedilla/onesuperior/ordmasculine
+ 188/onequarter/onehalf/threequarters 192/Agrave/Aacute
+ /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+ /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+ /germandbls/agrave/aacute/acircumflex/atilde/adieresis
+ /aring/ae/ccedilla/egrave/eacute/ecircumflex
+ /edieresis/igrave/iacute/icircumflex/idieresis
+ /eth/ntilde/ograve/oacute/ocircumflex/otilde
+ /odieresis/divide/oslash/ugrave/uacute/ucircumflex
+ /udieresis/yacute/thorn/ydieresis
+] def
+
+/SymbolEncoding [
+ 32/space/exclam/universal/numbersign/existential/percent
+ /ampersand/suchthat/parenleft/parenright/asteriskmath/plus
+ /comma/minus/period/slash/zero/one/two/three/four/five/six
+ /seven/eight/nine/colon/semicolon/less/equal/greater/question
+ /congruent/Alpha/Beta/Chi/Delta/Epsilon/Phi/Gamma/Eta/Iota
+ /theta1/Kappa/Lambda/Mu/Nu/Omicron/Pi/Theta/Rho/Sigma/Tau
+ /Upsilon/sigma1/Omega/Xi/Psi/Zeta/bracketleft/therefore
+ /bracketright/perpendicular/underscore/radicalex/alpha
+ /beta/chi/delta/epsilon/phi/gamma/eta/iota/phi1/kappa/lambda
+ /mu/nu/omicron/pi/theta/rho/sigma/tau/upsilon/omega1/omega
+ /xi/psi/zeta/braceleft/bar/braceright/similar
+ 161/Upsilon1/minute/lessequal/fraction/infinity/florin/club
+ /diamond/heart/spade/arrowboth/arrowleft/arrowup/arrowright
+ /arrowdown/degree/plusminus/second/greaterequal/multiply
+ /proportional/partialdiff/bullet/divide/notequal/equivalence
+ /approxequal/ellipsis/arrowvertex/arrowhorizex/carriagereturn
+ /aleph/Ifraktur/Rfraktur/weierstrass/circlemultiply
+ /circleplus/emptyset/intersection/union/propersuperset
+ /reflexsuperset/notsubset/propersubset/reflexsubset/element
+ /notelement/angle/gradient/registerserif/copyrightserif
+ /trademarkserif/product/radical/dotmath/logicalnot/logicaland
+ /logicalor/arrowdblboth/arrowdblleft/arrowdblup/arrowdblright
+ /arrowdbldown/lozenge/angleleft/registersans/copyrightsans
+ /trademarksans/summation/parenlefttp/parenleftex/parenleftbt
+ /bracketlefttp/bracketleftex/bracketleftbt/bracelefttp
+ /braceleftmid/braceleftbt/braceex
+ 241/angleright/integral/integraltp/integralex/integralbt
+ /parenrighttp/parenrightex/parenrightbt/bracketrighttp
+ /bracketrightex/bracketrightbt/bracerighttp/bracerightmid
+ /bracerightbt
+] def
+
+/patarray [
+/leftdiagonal /rightdiagonal /crossdiagonal /horizontal
+/vertical /crosshatch /fishscale /wave /brick
+] def
+/arrowtype 0 def
+/fillC 0 def /fillM 0 def /fillY 0 def /fillK 0 def
+/strokeC 0 def /strokeM 0 def /strokeY 0 def /strokeK 1 def
+/pattern -1 def
+/mat matrix def
+/mat2 matrix def
+/nesting 0 def
+/deferred /N def
+/c /curveto load def
+/c2 { pop pop c } bind def
+/C /curveto load def
+/C2 { pop pop C } bind def
+/e { gsave concat 0 0 moveto } bind def
+/F {
+ nesting 0 eq { %ifelse
+ pattern -1 eq { %ifelse
+ fillC fillM fillY fillK setcmykcolor eofill
+ }{ %else
+ gsave fillC fillM fillY fillK setcmykcolor eofill grestore
+ 0 0 0 1 setcmykcolor
+ patarray pattern get findfont patternfill
+ } ifelse
+ }{ %else
+ /deferred /F def
+ } ifelse
+} bind def
+/f { closepath F } bind def
+/K { /strokeK exch def /strokeY exch def
+ /strokeM exch def /strokeC exch def } bind def
+/k { /fillK exch def /fillY exch def
+ /fillM exch def /fillC exch def } bind def
+/opc { pop } bind def
+/Opc { pop } bind def
+/L /lineto load def
+/L2 { pop pop L } bind def
+/m /moveto load def
+/m2 { pop pop m } bind def
+/n /newpath load def
+/N {
+ nesting 0 eq { %ifelse
+ newpath
+ }{ %else
+ /deferred /N def
+ } ifelse
+} def
+/S {
+ nesting 0 eq { %ifelse
+ strokeC strokeM strokeY strokeK setcmykcolor stroke
+ }{ %else
+ /deferred /S def
+ } ifelse
+} bind def
+/s { closepath S } bind def
+/Tx { fillC fillM fillY fillK setcmykcolor show
+ 0 leading neg translate 0 0 moveto } bind def
+/T { grestore } bind def
+/TX { pop } bind def
+/Ts { pop } bind def
+/tal { pop } bind def
+/tld { pop } bind def
+/tbx { pop exch pop sub /jwidth exch def } def
+/tpt { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto show
+} bind def
+/tpj { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto
+ dup stringwidth pop
+ 3 -1 roll
+ exch sub
+ 1 index spacecount
+ dup 0 eq { %ifelse
+ pop pop show
+ }{ %else
+ div 0 8#040 4 -1 roll widthshow
+ } ifelse
+} bind def
+/u {} def
+/U {} def
+/*u { /nesting nesting 1 add def } def
+/*U {
+ /nesting nesting 1 sub def
+ nesting 0 eq {
+ deferred cvx exec
+ } if
+} def
+/w /setlinewidth load def
+/d /setdash load def
+/B {
+ nesting 0 eq { %ifelse
+ gsave F grestore S
+ }{ %else
+ /deferred /B def
+ } ifelse
+} bind def
+/b { closepath B } bind def
+/z { /align exch def pop /leading exch def exch findfont
+ exch scalefont setfont } bind def
+/tfn { exch findfont
+ exch scalefont setfont } bind def
+/Pat { /pattern exch def } bind def
+/cm { 6 array astore concat } bind def
+/q { mat2 currentmatrix pop } bind def
+/Q { mat2 setmatrix } bind def
+/Ah {
+ pop /arrowtype exch def
+ currentlinewidth 5 1 roll arrowhead
+} bind def
+/Arc {
+ mat currentmatrix pop
+ translate scale 0 0 1 5 -2 roll arc
+ mat setmatrix
+} bind def
+/Arc2 { pop pop Arc } bind def
+/Bx {
+ mat currentmatrix pop
+ concat /y1 exch def /x1 exch def /y2 exch def /x2 exch def
+ x1 y1 moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+ mat setmatrix
+} bind def
+/Rr {
+ mat currentmatrix pop
+ concat /yrad exch def /xrad exch def
+ 2 copy gt { exch } if /x2 exch def /x1 exch def
+ 2 copy gt { exch } if /y2 exch def /y1 exch def
+ x1 xrad add y2 moveto
+ matrix currentmatrix x1 xrad add y2 yrad sub translate xrad yrad scale
+ 0 0 1 90 -180 arc setmatrix
+ matrix currentmatrix x1 xrad add y1 yrad add translate xrad yrad scale
+ 0 0 1 180 270 arc setmatrix
+ matrix currentmatrix x2 xrad sub y1 yrad add translate xrad yrad scale
+ 0 0 1 270 0 arc setmatrix
+ matrix currentmatrix x2 xrad sub y2 yrad sub translate xrad yrad scale
+ 0 0 1 0 90 arc setmatrix
+ closepath
+ mat setmatrix
+} bind def
+/Ov {
+ mat currentmatrix pop
+ concat translate scale 1 0 moveto 0 0 1 0 360 arc closepath
+ mat setmatrix
+} bind def
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%PDX g 3 3 1 1
+%%IncludeFont: ArialMT
+PDXDict begin
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+/_PDX_savepage save def
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/rightdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/leftdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 2 setlinewidth stroke
+} bind
+/horizontal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/vertical true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/crosshatch true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 30 7.5 lineto
+ 0 22.5 moveto 30 22.5 lineto
+ 7.5 0 moveto 7.5 7.5 lineto
+ 7.5 22.5 moveto 7.5 30 lineto
+ 22.5 7.5 moveto 22.5 22.5 lineto
+ 1 setlinewidth stroke
+} bind
+/brick true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 0.5 setlinewidth stroke
+} bind
+/crossdiagonal true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 1 setlinecap
+ 0 7.5 moveto 0 15 7.5 270 360 arc
+ 7.5 15 moveto 15 15 7.5 180 270 arc
+ 0 7.5 moveto 7.5 7.5 7.5 180 360 arc
+ 0.5 setlinewidth stroke
+} bind
+/fishscale true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 1 setlinecap 0.5 setlinewidth
+ 7.5 0 10.6 135 45 arcn
+ 22.5 15 10.6 225 315 arc
+ stroke
+ 7.5 15 10.6 135 45 arcn
+ 22.5 30 10.6 225 315 arc
+ stroke
+} bind
+/wave true definepattern pop
+
+WinAnsiEncoding /_ArialMT /ArialMT RE
+
+newpath 2 setlinecap 0 setlinejoin 2 setmiterlimit
+[] 0 setdash
+8 230 moveto 8 790 lineto 580 790 lineto 580 230 lineto closepath clip
+newpath
+%%EndPageSetup
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+543 249 -9 789 [1 0 0 1 27 -9] Bx
+s
+0.133333 0.133333 0.133333 0 k
+0.133333 0.133333 0.133333 0 K
+0.5 w
+150 480 90 510 [1 0 0 1 -15 180] Bx
+b
+150 480 90 510 [1 0 0 1 60.33 180] Bx
+b
+150 480 90 510 [1 0 0 1 299.8 180] Bx
+b
+240 480 90 510 [1 0 0 1 135 180] Bx
+b
+150 480 90 510 [1 0 0 1 375.3 180] Bx
+b
+[1 0 0 1 15.05 0.702] e
+33 681 33 681 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 33 670.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 135] Bx
+b
+150 480 90 510 [1 0 0 1 60 135] Bx
+b
+150 480 90 510 [1 0 0 1 300 135] Bx
+b
+240 480 90 510 [1 0 0 1 135 135] Bx
+b
+150 480 90 510 [1 0 0 1 375 135] Bx
+b
+[1 0 0 1 -5.627 6.702] e
+33 630 33 630 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(header) 33 619.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 60 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 300 -90.7] Bx
+b
+240 480 90 510 [1 0 0 1 135 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 375 -90.7] Bx
+b
+[1 0 0 1 1.045 9] e
+33 402 33 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 33 391.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 -135] Bx
+b
+150 480 90 510 [1 0 0 1 60 -135] Bx
+b
+150 480 90 510 [1 0 0 1 300 -135] Bx
+b
+240 480 90 510 [1 0 0 1 135 -135] Bx
+b
+150 480 90 510 [1 0 0 1 375 -135] Bx
+b
+[1 0 0 1 -7.957 3.702] e
+36 363 36 363 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(bottom) 36 352.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 -15 90] Bx
+b
+150 345 90 510 [1 0 0 1 60 90] Bx
+b
+150 345 90 510 [1 0 0 1 300 90] Bx
+b
+-1.42109e-016 0.4 0.8 0 k
+240 345 90 510 [1 0 0 1 135 90] Bx
+b
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 375 90] Bx
+b
+[1 0 0 1 21.38 17.2] e
+24 507 24 507 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(text) 24 496.14 tpt
+T
+[1 0 0 1 -11.02 51.19] e
+93 705 93 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left edge) 93 694.14 tpt
+T
+[1 0 0 1 -4.5 48.19] e
+159 708 159 708 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left margin) 159 697.14 tpt
+T
+[1 0 0 1 17.33 51.19] e
+273 705 273 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(text) 273 694.14 tpt
+T
+[1 0 0 1 -13.87 54.19] e
+402 702 402 702 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right margin) 402 691.14 tpt
+T
+[1 0 0 1 -11.34 51.19] e
+480 705 480 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right edge) 480 694.14 tpt
+T
+[1 0 0 1 -13.64 0.702] e
+75 352.596 39 366 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 39 355.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 91.45 14.02 cm
+150 712 150 720 m2
+150 638 150 630 L2
+Q
+S
+q
+1 0 0 1 91.45 14.02 cm
+150 630 150 720 4 1 Ah
+150 720 150 630 4 2 Ah
+Q
+q
+1 0 0 1 165 -30 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -30 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 -47.91 0 cm
+130.909 705 122.909 705 m2
+265 705 273 705 L2
+Q
+S
+q
+1 0 0 1 -47.91 0 cm
+273 705 122.909 705 4 1 Ah
+122.909 705 273 705 4 2 Ah
+Q
+q
+1 0 0 1 -45 -150 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 -45 -150 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+0.25 w
+q
+1 0 0 1 0.09051 53.27 cm
+225 660 m
+225 645 L
+Q
+S
+q
+1 0 0 1 6.094 0 cm
+228 645 m
+243 645 L
+Q
+S
+[1 0 0 1 -2.909 66] e
+126 654 126 654 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(backspace) 126 643.14 tpt
+T
+[1 0 0 1 -9 30] e
+255 690 255 690 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(topspace) 255 679.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 w
+q
+1 0 0 1 29.91 -210 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 29.91 -210 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 270 -210 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 270 -210 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 345 -150 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 345 -150 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 165 -75 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -75 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 165 -300 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -300 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 165 -345 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -345 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+q
+1 0 0 1 104.9 -150 cm
+136 705 120 705 m2
+254.094 705 270.094 705 L2
+Q
+S
+q
+1 0 0 1 104.9 -150 cm
+270.094 705 120 705 4 1 Ah
+120 705 270.094 705 4 2 Ah
+Q
+q
+1 0 0 1 105 -118.5 cm
+150 747.547 150 763.547 m2
+150 524.547 150 508.547 L2
+Q
+S
+q
+1 0 0 1 105 -118.5 cm
+150 508.547 150 763.547 4 1 Ah
+150 763.547 150 508.547 4 2 Ah
+Q
+[1 0 0 1 -3 6.702] e
+324 675 324 675 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 324 664.14 tpt
+T
+[1 0 0 1 -3 3.702] e
+324 633 324 633 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(header) 324 622.14 tpt
+T
+[1 0 0 1 0 0] e
+261 498 261 498 tbx
+0 tal
+13 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 12 tfn
+(height) 261 487.14 tpt
+T
+[1 0 0 1 -14.05 7.406] e
+291 564 291 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(width) 291 553.14 tpt
+T
+[1 0 0 1 0 9.702] e
+321 402 321 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 321 391.14 tpt
+T
+[1 0 0 1 0 9.702] e
+321 357 321 357 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(bottom) 321 346.14 tpt
+T
+[1 0 0 1 -0.348 7.5] e
+84 564 84 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(leftedge) 84 553.14 tpt
+T
+[1 0 0 1 -13.08 4.359] e
+168 507 168 507 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(leftmargin) 168 496.14 tpt
+T
+[1 0 0 1 -17.44 7.359] e
+408 504 408 504 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(rightmargin) 408 493.14 tpt
+T
+[1 0 0 1 -13.01 7.5] e
+483 564 483 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(rightedge) 483 553.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 165 -120 cm
+150 712 150 720 m2
+150 563 150 555 L2
+Q
+S
+q
+1 0 0 1 165 -120 cm
+150 555 150 720 4 1 Ah
+150 720 150 555 4 2 Ah
+Q
+[1 0 0 1 0 0] e
+402 460.596 333 474 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+() 333 463.14 tpt
+T
+[1 0 0 1 -33 15.64] e
+354 468 354 468 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(textheight) 354 457.14 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+0.5 w
+q
+1 0 0 1 255 -60 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -60 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 7.659] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(topdistance) 411 641.95 tpt
+T
+U
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -105 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -105 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -37.34] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(headerdistance) 411 641.95 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -285 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -285 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -217.3] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(footerdistance) 411 641.95 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -330 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -330 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -262.3] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(bottomdistance) 411 641.95 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 45 0 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 45 0 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 30 0 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 30 0 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 120 -15 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 120 -15 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 105 -15 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 105 -15 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 285 -15 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 285 -15 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 270 -15 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 270 -15 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 360 0 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 360 0 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 345 0 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 345 0 cm
+90 330 105 330 4 1 Ah
+Q
+U
+[1 0 0 1 -15 5.998] e
+123 321 123 321 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(leftedgedistance) 123 311.95 tpt
+T
+[1 0 0 1 -36 9.633] e
+300.14 291.83 219 303 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(leftmargindistance) 219 293.95 tpt
+T
+[1 0 0 1 120.2 8.906] e
+306.25 291.83 219 303 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(rightmargindistance) 219 293.95 tpt
+T
+[1 0 0 1 -27 8.998] e
+450 318 450 318 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(rightedgedistance) 450 308.95 tpt
+T
+[1 0 0 1 -6 58.55] e
+183 246.83 120 258 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(edgedistance) 120 248.95 tpt
+T
+[1 0 0 1 18 53.27] e
+171 249 171 249 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(margindistance) 171 239.95 tpt
+T
+[1 0 0 1 180 53.27] e
+171 249 171 249 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(margindistance) 171 239.95 tpt
+T
+[1 0 0 1 312 58.55] e
+183 246.83 120 258 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(edgedistance) 120 248.95 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 w
+q
+1 0 0 1 -15 0 cm
+60 285 m
+90 285 L
+Q
+S
+q
+1 0 0 1 0 0 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+-1 0 0 1 615 0 cm
+60 285 m
+90 285 L
+Q
+S
+q
+-1 0 0 1 600 0 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 -1 0 810 825 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 -1 0 810 810 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 1 0 -210 825 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 1 0 -210 810 cm
+75 285 m
+75 255 L
+Q
+S
+U
+0.5 w
+[3 3] 0 d
+525 735 75 285 [1 0 0 1 0 0] Bx
+s
+1 w
+[] 0 d
+q
+1 0 0 1 -45.09 -435 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+1 0 0 1 -45.09 -435 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[1 0 0 1 0 0] e
+271.57 246.83 246 258 tbx
+0 tal
+11 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 10 tfn
+() 246 248.95 tpt
+T
+[1 0 0 1 0 0] e
+261 255 261 255 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+() 261 245.95 tpt
+T
+[1 0 0 1 9.607 12.09] e
+261 255 261 255 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(paperwidth) 261 244.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+0 1 -1 0 1244 164.3 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+0 1 -1 0 1244 164.3 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[0 1 -1 0 797.2 219] e
+261 255 261 255 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(paperheight) 261 244.14 tpt
+T
+[1 0 0 1 -12 12] e
+285 540 285 540 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(textwidth) 285 529.14 tpt
+T
+[1 0 0 1 0 12] e
+90 540 90 540 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(edge) 90 529.14 tpt
+T
+[1 0 0 1 0 9] e
+162 483 162 483 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(margin) 162 472.14 tpt
+T
+[1 0 0 1 -6.336 12] e
+408 480 408 480 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(margin) 408 469.14 tpt
+T
+[1 0 0 1 -6 18] e
+489 534 489 534 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(edge) 489 523.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 252.1 0 cm
+130.909 705 122.909 705 m2
+265 705 273 705 L2
+Q
+S
+q
+1 0 0 1 252.1 0 cm
+273 705 122.909 705 4 1 Ah
+122.909 705 273 705 4 2 Ah
+Q
+0.25 w
+q
+1 0 0 1 150.1 52.55 cm
+225 660 m
+225 645 L
+Q
+S
+[1 0 0 1 297.1 66] e
+126 654 126 654 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(cutspace) 126 643.14 tpt
+T
+%%PageTrailer
+_PDX_savepage restore
+%%Trailer
+end
+showpage
+%%EOF
diff --git a/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf b/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf
new file mode 100644
index 000000000..1dd1f75b1
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf
@@ -0,0 +1,1216 @@
+%PDF-1.0
+1 0 obj
+<<
+/Creator (Mayura Draw 4.3)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 4 0 R
+/Outlines 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type /Outlines
+/Count 0
+>>
+endobj
+4 0 obj
+<<
+/Type /Pages
+/Count 1
+/Kids [ 5 0 R ]
+>>
+endobj
+5 0 obj
+<<
+/Type /Page
+/Parent 4 0 R
+/MediaBox [ 8 230 580 790 ]
+/Resources <<
+/ProcSet 6 0 R
+/XObject 9 0 R
+/Font 10 0 R
+>>
+/Contents 7 0 R
+>>
+endobj
+6 0 obj
+[ /PDF /Text ]
+endobj
+7 0 obj
+<< /Length 8 0 R >>
+stream
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+18 780 m
+18 240 l
+570 240 l
+570 780 l
+18 780 l
+s
+0.866667 0.866667 0.866667 rg
+0.866667 0.866667 0.866667 RG
+0.5 w
+75 690 m
+75 660 l
+135 660 l
+135 690 l
+75 690 l
+b*
+150.33 690 m
+150.33 660 l
+210.33 660 l
+210.33 690 l
+150.33 690 l
+b*
+389.8 690 m
+389.8 660 l
+449.8 660 l
+449.8 690 l
+389.8 690 l
+b*
+225 690 m
+225 660 l
+375 660 l
+375 690 l
+225 690 l
+b*
+465.3 690 m
+465.3 660 l
+525.3 660 l
+525.3 690 l
+465.3 690 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 48.05 670.8 Tm
+0 Tw
+(top) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 645 m
+75 615 l
+135 615 l
+135 645 l
+75 645 l
+b*
+150 645 m
+150 615 l
+210 615 l
+210 645 l
+150 645 l
+b*
+390 645 m
+390 615 l
+450 615 l
+450 645 l
+390 645 l
+b*
+225 645 m
+225 615 l
+375 615 l
+375 645 l
+225 645 l
+b*
+465 645 m
+465 615 l
+525 615 l
+525 645 l
+465 645 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 27.37 625.8 Tm
+0 Tw
+(header) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 419.3 m
+75 389.3 l
+135 389.3 l
+135 419.3 l
+75 419.3 l
+b*
+150 419.3 m
+150 389.3 l
+210 389.3 l
+210 419.3 l
+150 419.3 l
+b*
+390 419.3 m
+390 389.3 l
+450 389.3 l
+450 419.3 l
+390 419.3 l
+b*
+225 419.3 m
+225 389.3 l
+375 389.3 l
+375 419.3 l
+225 419.3 l
+b*
+465 419.3 m
+465 389.3 l
+525 389.3 l
+525 419.3 l
+465 419.3 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 34.04 400.1 Tm
+0 Tw
+(footer) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 375 m
+75 345 l
+135 345 l
+135 375 l
+75 375 l
+b*
+150 375 m
+150 345 l
+210 345 l
+210 375 l
+150 375 l
+b*
+390 375 m
+390 345 l
+450 345 l
+450 375 l
+390 375 l
+b*
+225 375 m
+225 345 l
+375 345 l
+375 375 l
+225 375 l
+b*
+465 375 m
+465 345 l
+525 345 l
+525 375 l
+465 375 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 28.04 355.8 Tm
+0 Tw
+(bottom) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 600 m
+75 435 l
+135 435 l
+135 600 l
+75 600 l
+b*
+150 600 m
+150 435 l
+210 435 l
+210 600 l
+150 600 l
+b*
+390 600 m
+390 435 l
+450 435 l
+450 600 l
+390 600 l
+b*
+1 0.6 0.2 rg
+225 600 m
+225 435 l
+375 435 l
+375 600 l
+225 600 l
+b*
+0.866667 0.866667 0.866667 rg
+465 600 m
+465 435 l
+525 435 l
+525 600 l
+465 600 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 45.38 513.3 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 81.98 745.3 Tm
+0 Tw
+(left edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.5 745.3 Tm
+0 Tw
+(left margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 290.3 745.3 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 388.1 745.3 Tm
+0 Tw
+(right margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 468.7 745.3 Tm
+0 Tw
+(right edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 25.36 355.8 Tm
+0 Tw
+() Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+241.45 726.02 m
+241.45 652.02 l
+S
+0 0 0 rg
+0 w
+241.45 734.02 m
+241.45 725.02 l
+238.45 725.02 l
+241.45 734.02 l
+244.45 725.02 l
+241.45 725.02 l
+241.45 734.02 l
+f*
+241.45 644.02 m
+241.45 653.02 l
+244.45 653.02 l
+241.45 644.02 l
+238.45 653.02 l
+241.45 653.02 l
+241.45 644.02 l
+f*
+1 1 1 rg
+1 w
+315 682 m
+315 668 l
+S
+0 0 0 rg
+0 w
+315 690 m
+315 681 l
+312 681 l
+315 690 l
+318 681 l
+315 681 l
+315 690 l
+f*
+315 660 m
+315 669 l
+318 669 l
+315 660 l
+312 669 l
+315 669 l
+315 660 l
+f*
+1 1 1 rg
+1 w
+83 705 m
+217.091 705 l
+S
+0 0 0 rg
+0 w
+75 705 m
+84 705 l
+84 702 l
+75 705 l
+84 708 l
+84 705 l
+75 705 l
+f*
+225.091 705 m
+216.091 705 l
+216.091 708 l
+225.091 705 l
+216.091 702 l
+216.091 705 l
+225.091 705 l
+f*
+1 1 1 rg
+1 w
+83 555 m
+127 555 l
+S
+0 0 0 rg
+0 w
+75 555 m
+84 555 l
+84 552 l
+75 555 l
+84 558 l
+84 555 l
+75 555 l
+f*
+135 555 m
+126 555 l
+126 558 l
+135 555 l
+126 552 l
+126 555 l
+135 555 l
+f*
+1 1 1 rg
+0.25 w
+225.091 713.273 m
+225.091 698.273 l
+S
+234.094 645 m
+249.094 645 l
+S
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 123.1 709.1 Tm
+0 Tw
+(backspace) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 246 709.1 Tm
+0 Tw
+(topspace) Tj
+ET
+1 1 1 rg
+1 w
+157.91 495 m
+201.91 495 l
+S
+0 0 0 rg
+0 w
+149.91 495 m
+158.91 495 l
+158.91 492 l
+149.91 495 l
+158.91 498 l
+158.91 495 l
+149.91 495 l
+f*
+209.91 495 m
+200.91 495 l
+200.91 498 l
+209.91 495 l
+200.91 492 l
+200.91 495 l
+209.91 495 l
+f*
+1 1 1 rg
+1 w
+398 495 m
+442 495 l
+S
+0 0 0 rg
+0 w
+390 495 m
+399 495 l
+399 492 l
+390 495 l
+399 498 l
+399 495 l
+390 495 l
+f*
+450 495 m
+441 495 l
+441 498 l
+450 495 l
+441 492 l
+441 495 l
+450 495 l
+f*
+1 1 1 rg
+1 w
+473 555 m
+517 555 l
+S
+0 0 0 rg
+0 w
+465 555 m
+474 555 l
+474 552 l
+465 555 l
+474 558 l
+474 555 l
+465 555 l
+f*
+525 555 m
+516 555 l
+516 558 l
+525 555 l
+516 552 l
+516 555 l
+525 555 l
+f*
+1 1 1 rg
+1 w
+315 637 m
+315 623 l
+S
+0 0 0 rg
+0 w
+315 645 m
+315 636 l
+312 636 l
+315 645 l
+318 636 l
+315 636 l
+315 645 l
+f*
+315 615 m
+315 624 l
+318 624 l
+315 615 l
+312 624 l
+315 624 l
+315 615 l
+f*
+1 1 1 rg
+1 w
+315 412 m
+315 398 l
+S
+0 0 0 rg
+0 w
+315 420 m
+315 411 l
+312 411 l
+315 420 l
+318 411 l
+315 411 l
+315 420 l
+f*
+315 390 m
+315 399 l
+318 399 l
+315 390 l
+312 399 l
+315 399 l
+315 390 l
+f*
+1 1 1 rg
+1 w
+315 367 m
+315 353 l
+S
+0 0 0 rg
+0 w
+315 375 m
+315 366 l
+312 366 l
+315 375 l
+318 366 l
+315 366 l
+315 375 l
+f*
+315 345 m
+315 354 l
+318 354 l
+315 345 l
+312 354 l
+315 354 l
+315 345 l
+f*
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+240.9 555 m
+358.994 555 l
+S
+0.137255 0.0431373 1 rg
+0 w
+224.9 555 m
+242.9 555 l
+242.9 549 l
+224.9 555 l
+242.9 561 l
+242.9 555 l
+224.9 555 l
+f*
+374.994 555 m
+356.994 555 l
+356.994 561 l
+374.994 555 l
+356.994 549 l
+356.994 555 l
+374.994 555 l
+f*
+1 1 1 rg
+2 w
+255 629.047 m
+255 406.047 l
+S
+0.137255 0.0431373 1 rg
+0 w
+255 645.047 m
+255 627.047 l
+249 627.047 l
+255 645.047 l
+261 627.047 l
+255 627.047 l
+255 645.047 l
+f*
+255 390.047 m
+255 408.047 l
+261 408.047 l
+255 390.047 l
+249 408.047 l
+255 408.047 l
+255 390.047 l
+f*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 321 670.8 Tm
+0 Tw
+(top) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 625.8 Tm
+0 Tw
+(header) Tj
+ET
+0.137255 0.0431373 1 rg
+BT
+/F1 12 Tf
+1 0 0 1 261 487.1 Tm
+0 Tw
+(height) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 277 560.5 Tm
+0 Tw
+(width) Tj
+ET
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 321 400.8 Tm
+0 Tw
+(footer) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 355.8 Tm
+0 Tw
+(bottom) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 83.65 560.6 Tm
+0 Tw
+(leftedge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.9 500.5 Tm
+0 Tw
+(leftmargin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 390.6 500.5 Tm
+0 Tw
+(rightmargin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 470 560.6 Tm
+0 Tw
+(rightedge) Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+315 592 m
+315 443 l
+S
+0 0 0 rg
+0 w
+315 600 m
+315 591 l
+312 591 l
+315 600 l
+318 591 l
+315 591 l
+315 600 l
+f*
+315 435 m
+315 444 l
+318 444 l
+315 435 l
+312 444 l
+315 444 l
+315 435 l
+f*
+BT
+/F1 12 Tf
+1 0 0 1 333 463.1 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 472.8 Tm
+0 Tw
+(textheight) Tj
+ET
+1 1 1 rg
+0.5 w
+405 656 m
+405 649 l
+S
+0 0 0 rg
+0 w
+405 660 m
+405 655.5 l
+403.5 655.5 l
+405 660 l
+406.5 655.5 l
+405 655.5 l
+405 660 l
+f*
+405 645 m
+405 649.5 l
+406.5 649.5 l
+405 645 l
+403.5 649.5 l
+405 649.5 l
+405 645 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 649.6 Tm
+0 Tw
+(topdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 611 m
+405 604 l
+S
+0 0 0 rg
+0 w
+405 615 m
+405 610.5 l
+403.5 610.5 l
+405 615 l
+406.5 610.5 l
+405 610.5 l
+405 615 l
+f*
+405 600 m
+405 604.5 l
+406.5 604.5 l
+405 600 l
+403.5 604.5 l
+405 604.5 l
+405 600 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 604.6 Tm
+0 Tw
+(headerdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 431 m
+405 424 l
+S
+0 0 0 rg
+0 w
+405 435 m
+405 430.5 l
+403.5 430.5 l
+405 435 l
+406.5 430.5 l
+405 430.5 l
+405 435 l
+f*
+405 420 m
+405 424.5 l
+406.5 424.5 l
+405 420 l
+403.5 424.5 l
+405 424.5 l
+405 420 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 424.7 Tm
+0 Tw
+(footerdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 386 m
+405 379 l
+S
+0 0 0 rg
+0 w
+405 390 m
+405 385.5 l
+403.5 385.5 l
+405 390 l
+406.5 385.5 l
+405 385.5 l
+405 390 l
+f*
+405 375 m
+405 379.5 l
+406.5 379.5 l
+405 375 l
+403.5 379.5 l
+405 379.5 l
+405 375 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 379.7 Tm
+0 Tw
+(bottomdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+154 330 m
+165 330 l
+S
+0 0 0 rg
+0 w
+150 330 m
+154.5 330 l
+154.5 328.5 l
+150 330 l
+154.5 331.5 l
+154.5 330 l
+150 330 l
+f*
+1 1 1 rg
+0.5 w
+131 330 m
+120 330 l
+S
+0 0 0 rg
+0 w
+135 330 m
+130.5 330 l
+130.5 331.5 l
+135 330 l
+130.5 328.5 l
+130.5 330 l
+135 330 l
+f*
+1 1 1 rg
+0.5 w
+229 315 m
+240 315 l
+S
+0 0 0 rg
+0 w
+225 315 m
+229.5 315 l
+229.5 313.5 l
+225 315 l
+229.5 316.5 l
+229.5 315 l
+225 315 l
+f*
+1 1 1 rg
+0.5 w
+206 315 m
+195 315 l
+S
+0 0 0 rg
+0 w
+210 315 m
+205.5 315 l
+205.5 316.5 l
+210 315 l
+205.5 313.5 l
+205.5 315 l
+210 315 l
+f*
+1 1 1 rg
+0.5 w
+394 315 m
+405 315 l
+S
+0 0 0 rg
+0 w
+390 315 m
+394.5 315 l
+394.5 313.5 l
+390 315 l
+394.5 316.5 l
+394.5 315 l
+390 315 l
+f*
+1 1 1 rg
+0.5 w
+371 315 m
+360 315 l
+S
+0 0 0 rg
+0 w
+375 315 m
+370.5 315 l
+370.5 316.5 l
+375 315 l
+370.5 313.5 l
+370.5 315 l
+375 315 l
+f*
+1 1 1 rg
+0.5 w
+469 330 m
+480 330 l
+S
+0 0 0 rg
+0 w
+465 330 m
+469.5 330 l
+469.5 328.5 l
+465 330 l
+469.5 331.5 l
+469.5 330 l
+465 330 l
+f*
+1 1 1 rg
+0.5 w
+446 330 m
+435 330 l
+S
+0 0 0 rg
+0 w
+450 330 m
+445.5 330 l
+445.5 331.5 l
+450 330 l
+445.5 328.5 l
+445.5 330 l
+450 330 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 108 317.9 Tm
+0 Tw
+(leftedgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 183 303.6 Tm
+0 Tw
+(leftmargindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 339.2 302.9 Tm
+0 Tw
+(rightmargindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 423 317.9 Tm
+0 Tw
+(rightedgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 114 307.5 Tm
+0 Tw
+(edgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 189 293.2 Tm
+0 Tw
+(margindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 351 293.2 Tm
+0 Tw
+(margindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 432 307.5 Tm
+0 Tw
+(edgedistance) Tj
+ET
+1 1 1 rg
+1 w
+45 285 m
+75 285 l
+S
+75 285 m
+75 255 l
+S
+555 285 m
+525 285 l
+S
+525 285 m
+525 255 l
+S
+525 765 m
+525 735 l
+S
+525 735 m
+555 735 l
+S
+75 765 m
+75 735 l
+S
+75 735 m
+45 735 l
+S
+0.5 w
+[3 3] 0 d
+75 285 m
+75 735 l
+525 735 l
+525 285 l
+75 285 l
+s
+1 w
+[] 0 d
+82.91 270 m
+517.004 270 l
+S
+0 0 0 rg
+0 w
+74.91 270 m
+83.91 270 l
+83.91 267 l
+74.91 270 l
+83.91 273 l
+83.91 270 l
+74.91 270 l
+f*
+525.004 270 m
+516.004 270 l
+516.004 273 l
+525.004 270 l
+516.004 267 l
+516.004 270 l
+525.004 270 l
+f*
+0.137255 0.0431373 1 rg
+BT
+/F1 10 Tf
+1 0 0 1 246 248.9 Tm
+0 Tw
+() Tj
+ET
+0 0 0 rg
+BT
+/F1 10 Tf
+1 0 0 1 261 245.9 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 270.6 256.2 Tm
+0 Tw
+(paperwidth) Tj
+ET
+1 1 1 rg
+1 w
+539 292.3 m
+539 726.394 l
+S
+0 0 0 rg
+0 w
+539 284.3 m
+539 293.3 l
+542 293.3 l
+539 284.3 l
+536 293.3 l
+539 293.3 l
+539 284.3 l
+f*
+539 734.394 m
+539 725.394 l
+536 725.394 l
+539 734.394 l
+542 725.394 l
+539 725.394 l
+539 734.394 l
+f*
+BT
+/F1 12 Tf
+0 1 -1 0 553.1 480 Tm
+0 Tw
+(paperheight) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 273 541.1 Tm
+0 Tw
+(textwidth) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 90 541.1 Tm
+0 Tw
+(edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 162 481.1 Tm
+0 Tw
+(margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 401.7 481.1 Tm
+0 Tw
+(margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 483 541.1 Tm
+0 Tw
+(edge) Tj
+ET
+1 1 1 rg
+1 w
+383 705 m
+517.091 705 l
+S
+0 0 0 rg
+0 w
+375 705 m
+384 705 l
+384 702 l
+375 705 l
+384 708 l
+384 705 l
+375 705 l
+f*
+525.091 705 m
+516.091 705 l
+516.091 708 l
+525.091 705 l
+516.091 702 l
+516.091 705 l
+525.091 705 l
+f*
+1 1 1 rg
+0.25 w
+375.091 712.545 m
+375.091 697.545 l
+S
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 423.1 709.1 Tm
+0 Tw
+(cutspace) Tj
+ET
+endstream
+endobj
+8 0 obj
+11561
+endobj
+10 0 obj
+<<
+/F1 11 0 R
+>>
+endobj
+11 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F1
+/BaseFont /Arial
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584
+ 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278
+ 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833
+ 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334
+ 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750
+ 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834
+ 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278
+ 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500
+ 556 500]
+/FontDescriptor 12 0 R
+>>
+endobj
+12 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial
+/FontBBox [ -665 -325 2000 1006 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 70
+>>
+endobj
+9 0 obj
+<<
+>>
+endobj
+xref
+0 13
+0000000000 65535 f
+0000000010 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000187 00000 n
+0000000253 00000 n
+0000000417 00000 n
+0000000450 00000 n
+0000012068 00000 n
+0000013449 00000 n
+0000012092 00000 n
+0000012130 00000 n
+0000013251 00000 n
+trailer
+<<
+/Size 13
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+13474
+%%EOF
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps
new file mode 100644
index 000000000..dece521c5
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps
@@ -0,0 +1,2799 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 154 313 441 529
+%%Creator: CorelDRAW!
+%%Title: GRACHT.EPS
+%%CreationDate: Wed Aug 13 17:01:56 1997
+
+%%DocumentFonts:
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------
+% Copyright 1992 Corel Corporation. All rights reserved.
+/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def
+/ld{load def}bd/xd{exch def}bd/_ null def
+/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def
+/$n _ def/$o 0 def/$fil 0 def/$bkg false def
+/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def
+/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def
+/$ptm matrix def/$ttm matrix def/$stm matrix def
+/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def
+currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd
+/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def
+/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld
+/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd
+/@ss{exch $Scra add exch load setscreen}bd
+AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def
+/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt
+{@err1 exit}{currentflat 2 add setflat}ifelse}bd
+/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse
+}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd
+/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit
+}ifelse}bind loop setflat}bd/@eoclip/eoclip ld
+/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse
+}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if
+/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse
+2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd
+/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd
+/setcmykcolor where{pop}{/setcmykcolor{4 1 roll
+3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat
+setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd
+/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd
+/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd
+/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{
+0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat
+setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd
+/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{
+exch aload pop pop 4{4 index mul 4 1 roll}repeat
+5 -1 roll pop setcmykcolor}{exch aload pop
+CurrentInkName eq{4 index}{0}ifelse 6 1 roll
+5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{
+/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop}
+repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup
+6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint
+dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor
+exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{
+currentgray 1 eq currentoverprint and not}ifelse}bd
+/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def
+/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd
+/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd
+/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def
+2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if
+dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if
+$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl
+0 $phei rl clip @np $pn cvlit load aload pop
+7 -1 roll 5 index sub 7 -1 roll 3 index sub translate
+/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse
+@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{
+dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub
+0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch
+@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add
+exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop
+0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for
+pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat
+@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd
+Bbllx Bblly $pm itransform/$tlly xd/$tllx xd
+/$wid $turx $tllx sub def/$hei $tury $tlly sub def
+@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{
+$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask
+/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{
+$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd
+exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def
+/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if
+@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{
+/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def
+/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def
+/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def
+/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def
+true}{$frt $frc $frm $fry $frk $frn $o @scc
+dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse
+$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{
+/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def
+/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if
+}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd
+2 mul sub $fst div/$wid xd 2 index sub/$hei xd
+pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill
+$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll
+$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll
+ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd
+2 div 1 index 4 index sub dup $roy mul/$roh xd
+2 div 2 copy dup mul exch dup mul add sqrt
+$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd
+4 index add $roh add exch 5 index add $row add
+exch translate pop pop pop pop currentflat dup 5 mul setflat
+$c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale
+$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill
+/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop
+setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip
+newpath Bbllx Bblly moveto Bbllx Bbury lineto
+Bburx Bbury lineto Bburx Bblly lineto $fan rotate
+pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if
+@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d
+$t $c $m $y $k $n $o @scc pop $ctm setmatrix
+72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop
+$Psn load exec}{1 setgray eofill}ifelse @rs
+@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def
+}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd
+/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd
+/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd
+/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd
+/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd
+/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd
+/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld
+/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd
+/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd
+/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld
+/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld
+/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc
+{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix
+$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{
+matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse
+$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp
+S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd
+/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd
+/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd
+/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore
+exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd
+/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe
+16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] def/@cc{currentfile $dat readhexstring pop}bd
+/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def
+1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd
+/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore
+/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd
+/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def
+}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd
+/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd
+/@ii{concat 3 index 3 index m 3 index 1 index l
+2 copy l 1 index 3 index l 3 index 3 index l
+clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def
+pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def
+}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if
+@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def
+$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate
+$urx $llx sub $ury $lly sub scale $wid $hei abs
+$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0
+$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse
+$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse
+@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def
+1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll
+@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def
+$llx $lly translate $urx $llx sub $ury $lly sub scale
+$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]
+/@cc load false $ncl colorimage @gr $ctm setmatrix}bd
+/z{exch findfont exch scalefont setfont}bd
+/ZB{9 dict dup begin 4 1 roll/FontType 3 def
+/FontMatrix xd/FontBBox xd/Encoding 256 array def
+0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def
+CharStrings/.notdef{}put/Metrics 256 dict def
+Metrics/.notdef 3 -1 roll put/BuildChar{exch
+dup/$char exch/Encoding get 3 index get def
+dup/Metrics get $char get aload pop setcachedevice
+begin Encoding exch get CharStrings exch get
+end exec}def end definefont pop}bd/ZBAddChar{findfont begin
+dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put
+CharStrings 3 1 roll put Metrics 3 1 roll put
+end}bd/Z{findfont dup maxlength 2 add dict exch
+dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall
+pop dup dup/Encoding get 256 array copy dup/$fe xd
+/Encoding exch put dup/Fontname 3 index put
+3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{
+$fe exch 2 index exch put 1 add}ifelse}forall
+pop}if dup 256 dict dup/$met xd/Metrics exch put
+dup/FontMatrix get 0 get 1000 mul 1 exch div
+3 index length 256 eq{0 1 255{dup $fe exch get
+dup/.notdef eq{pop pop}{5 index 3 -1 roll get
+2 index mul $met 3 1 roll put}ifelse}for}if
+pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
+{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse
+}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd
+/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if
+$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if
+setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup
+@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
+/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd
+/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd
+/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix
+/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def
+3 1 roll moveto $ttm concat t $stm setmatrix}def
+/@n{/$ttm exch matrix rotate def}bd/@s{}bd
+/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd
+matrix scale $ptm dup concatmatrix/$ptm xd
+1 eq{$ptm exch dup concatmatrix/$ptm xd}if
+1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd
+/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd
+/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd
+/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def
+/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def
+/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{
+/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{
+/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq
+{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{
+CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq
+{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def
+}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep
+/@whi{@gs -72000 dup moveto -72000 72000 lineto
+72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill
+@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer
+@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth
+2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto
+2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto
+moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def
+/rightbracket{(\051)}def
+
+%%EndProlog
+%%BeginSetup
+11.4737 setmiterlimit
+1.00 setflat
+/$fst 128 def
+
+%%EndSetup
+@sv
+/$ctm matrix currentmatrix def
+@sv
+%%Note: Object
+188.06 385.92 440.57 527.47 @E
+ 0 O 0 @g
+0.20 0.10 0.00 0.00 k
+%%CURV 5
+188.06 527.47 m
+440.57 527.47 L
+439.20 385.92 L
+192.17 396.86 L
+188.06 527.47 L
+@c
+F
+%%Note: Object
+216.00 452.23 288.86 468.65 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 24
+216.00 465.91 m
+216.00 465.91 228.24 463.18 231.62 465.91 c
+235.08 468.65 252.07 465.91 252.07 465.91 c
+252.07 465.91 260.21 461.81 265.68 461.81 c
+271.15 461.81 284.76 460.37 284.76 460.37 c
+288.86 453.53 l
+288.86 453.53 284.11 452.88 277.92 452.88 c
+271.80 452.88 252.72 452.23 252.72 452.23 c
+236.38 452.23 L
+226.15 458.35 L
+218.02 460.37 L
+216.00 465.91 L
+@c
+F
+%%Note: Object
+223.49 392.04 439.92 439.85 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.10 k
+%%CURV 20
+356.11 425.52 m
+354.82 439.85 L
+338.47 430.99 L
+324.86 429.62 L
+304.42 430.34 L
+295.63 427.61 L
+258.19 428.26 L
+241.13 428.26 L
+223.49 426.17 L
+228.96 420.77 L
+260.21 421.42 L
+294.98 421.42 L
+301.03 423.50 L
+319.39 423.50 L
+318.74 417.38 L
+326.88 416.74 L
+439.92 392.04 L
+439.20 411.91 L
+425.59 413.93 L
+356.11 425.52 L
+@c
+F
+%%Note: Object
+413.78 461.88 439.92 506.23 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 0.60 0.00 k
+%%CURV 6
+439.92 506.23 m
+413.78 506.23 L
+413.78 501.70 L
+431.35 461.88 L
+439.92 468.72 L
+439.92 506.23 L
+@c
+B
+%%Note: Object
+385.85 414.00 427.32 483.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 0.10 0.00 k
+%%CURV 7
+385.85 478.66 m
+389.95 482.69 L
+400.75 483.62 L
+427.32 462.82 L
+426.89 414.00 L
+389.02 420.34 L
+385.85 478.66 L
+@c
+B
+%%Note: Object
+322.99 428.69 340.63 446.26 @E
+ 0 O 0 @g
+0.50 0.00 0.50 0.50 k
+%%CURV 40
+332.28 446.26 m
+332.28 446.26 329.98 445.39 329.11 443.09 c
+328.25 440.78 326.38 438.62 326.38 438.62 c
+326.38 438.62 324.86 437.47 324.00 434.88 c
+323.21 432.36 322.99 432.14 322.99 431.06 c
+322.99 429.98 323.21 429.19 324.43 429.41 c
+325.73 429.55 326.81 430.63 326.81 430.63 c
+329.33 429.84 l
+329.33 429.84 329.90 429.62 331.42 430.85 c
+332.86 432.14 333.29 434.52 333.72 433.22 c
+334.15 431.93 333.94 432.58 334.73 431.06 c
+335.59 429.55 337.03 428.98 338.11 429.41 c
+339.19 429.84 338.47 428.69 339.55 430.20 c
+340.63 431.71 339.19 435.74 339.19 435.74 c
+336.24 445.39 L
+332.28 446.26 L
+@c
+F
+%%Note: Object
+325.51 428.04 361.44 475.92 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 42
+357.19 445.82 m
+361.44 445.82 352.58 438.84 348.55 436.61 c
+344.45 434.30 342.65 428.04 338.11 433.87 c
+333.65 439.70 338.54 445.61 334.51 446.04 c
+330.48 446.54 331.85 445.18 328.68 446.54 c
+325.51 447.84 326.45 453.31 326.45 453.31 c
+326.45 453.31 329.98 458.71 331.42 461.88 c
+332.78 465.05 331.42 465.91 331.85 468.22 c
+332.28 470.52 335.02 472.32 335.02 472.32 c
+344.02 471.82 L
+346.25 475.78 l
+346.25 475.78 350.78 475.92 353.02 474.12 c
+355.25 472.32 355.25 469.58 355.25 469.58 c
+357.98 468.22 L
+357.55 460.58 L
+355.68 456.12 l
+355.68 456.12 355.82 452.95 357.19 450.72 C
+358.56 448.42 356.76 445.82 357.19 445.82 c
+@c
+F
+%%Note: Object
+154.87 359.28 227.88 448.34 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+%%CURV 7
+155.38 448.34 m
+217.94 442.01 L
+221.98 427.97 L
+227.88 421.63 L
+211.68 402.26 L
+154.87 359.28 L
+155.38 448.34 L
+@c
+F
+%%Note: Object
+197.28 425.66 300.74 440.21 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 65
+295.27 433.87 m
+294.84 434.23 297.65 435.46 293.62 436.32 c
+289.51 437.26 288.65 435.67 283.25 435.67 c
+277.85 435.67 278.28 433.87 276.05 435.67 c
+273.82 437.47 273.38 439.27 269.28 439.27 c
+265.25 439.27 263.45 439.70 260.78 437.90 c
+258.05 436.10 256.68 436.10 254.45 436.10 c
+252.22 436.10 250.34 436.18 247.68 436.61 c
+245.02 437.04 242.78 437.47 240.05 437.90 c
+237.31 438.41 234.58 438.84 231.91 438.41 c
+229.25 437.90 224.28 437.47 220.68 437.90 c
+217.08 438.41 214.34 440.21 211.18 438.41 c
+208.08 436.61 203.11 436.61 203.11 436.61 c
+198.14 435.67 L
+199.08 428.90 l
+199.08 428.90 197.28 426.60 203.54 426.60 c
+209.88 426.60 212.98 426.60 218.88 426.60 c
+224.71 426.60 223.42 425.66 230.11 427.03 c
+236.88 428.47 240.98 428.47 245.88 428.47 c
+250.85 428.47 254.88 427.97 259.85 427.97 c
+264.82 427.97 266.62 427.97 272.02 427.97 c
+277.42 427.97 279.22 427.54 290.02 427.54 c
+300.74 427.54 300.74 428.90 300.74 428.90 c
+299.88 433.37 L
+295.27 433.87 L
+@c
+F
+%%Note: Object
+154.87 380.95 228.31 427.03 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+%%CURV 8
+159.84 411.26 m
+181.51 422.14 L
+200.38 426.60 L
+224.28 427.03 L
+228.31 422.57 L
+203.54 418.54 L
+154.87 380.95 L
+159.84 411.26 L
+@c
+F
+%%Note: Object
+154.73 314.06 260.78 423.00 @E
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%CURV 17
+259.85 421.20 m
+260.78 398.23 L
+227.88 397.30 L
+220.25 351.14 L
+190.80 314.06 L
+154.73 314.06 L
+154.87 362.88 l
+154.87 362.88 178.78 380.09 190.08 387.79 c
+201.31 395.50 224.28 417.60 226.51 420.34 c
+228.74 423.00 231.48 421.20 231.48 421.20 C
+259.85 421.20 L
+@c
+F
+%%Note: Object
+229.25 398.23 259.85 420.77 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 56.088 -41.400 0.000
+229.25 420.77 m
+259.85 420.77 L
+259.85 398.23 L
+229.25 398.23 L
+229.25 420.77 L
+@c
+B
+%%Note: Object
+271.22 374.90 272.59 384.19 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+272.59 384.19 m
+271.22 374.90 L
+S
+%%Note: Object
+191.23 313.85 421.34 420.77 @E
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%CURV 12
+420.48 314.57 m
+421.34 358.92 L
+312.84 395.35 L
+303.26 394.20 L
+298.15 399.31 L
+294.84 420.77 L
+258.84 420.26 L
+259.92 399.31 L
+268.92 353.45 L
+209.59 351.58 L
+191.23 313.85 L
+420.48 314.57 L
+@c
+F
+%%Note: Object
+189.65 314.06 322.34 353.09 @E
+ 0 O 0 @g
+1.00 0.80 0.00 0.00 k
+%%CURV 16
+209.16 353.09 m
+267.98 350.21 L
+307.94 338.90 l
+307.94 338.90 277.42 330.84 299.88 327.67 c
+322.34 324.43 312.91 324.00 306.65 320.40 c
+300.31 316.80 272.95 314.06 267.48 314.06 c
+262.08 314.06 189.65 314.06 189.65 314.06 C
+209.16 353.09 L
+@c
+F
+%%Note: Object
+300.96 431.06 303.77 470.59 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 1.00 0.00 k
+%%RECT 5.040 -73.800 0.000
+300.96 470.59 m
+303.77 470.59 L
+303.77 431.06 L
+300.96 431.06 L
+300.96 470.59 L
+@c
+B
+%%Note: Object
+262.66 467.86 334.37 474.05 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 1.00 0.00 k
+%%CURV 5
+263.16 474.05 m
+334.37 471.53 L
+330.41 467.86 L
+262.66 470.30 L
+263.16 474.05 L
+@c
+B
+%%Note: Object
+261.65 472.54 346.18 479.74 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 5
+261.65 479.74 m
+346.18 475.27 L
+343.94 472.54 L
+262.15 475.99 L
+261.65 479.74 L
+@c
+B
+%%Note: Object
+303.77 423.07 307.80 476.86 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%RECT 7.416 -75.024 0.000
+303.77 476.86 m
+307.80 476.86 L
+307.80 423.07 L
+303.77 423.07 L
+303.77 476.86 L
+@c
+B
+%%Note: Object
+258.77 422.14 266.26 478.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+266.26 478.30 m
+258.77 422.14 L
+S
+%%Note: Object
+256.75 429.62 263.59 472.82 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+263.59 472.82 m
+256.75 429.62 L
+S
+%%Note: Object
+307.73 442.30 317.38 463.61 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+307.73 463.61 m
+317.38 442.30 L
+S
+%%Note: Object
+307.51 437.33 317.09 453.17 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+307.51 453.17 m
+317.09 437.33 L
+S
+%%Note: Object
+316.58 427.90 322.99 443.74 @E
+ 0 O 0 @g
+1.00 0.80 0.00 0.00 k
+%%RECT 11.736 -29.016 0.000
+316.58 443.74 m
+322.99 443.74 L
+322.99 427.90 L
+316.58 427.90 L
+316.58 443.74 L
+@c
+F
+%%Note: Object
+307.22 428.90 316.58 436.10 @E
+ 0 O 0 @g
+1.00 0.60 0.00 0.00 k
+%%RECT 17.136 -13.176 0.000
+307.22 436.10 m
+316.58 436.10 L
+316.58 428.90 L
+307.22 428.90 L
+307.22 436.10 L
+@c
+F
+%%Note: Object
+255.89 430.42 303.05 430.92 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+255.89 430.92 m
+303.05 430.42 L
+S
+%%Note: Object
+257.98 426.46 304.56 426.67 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.02 2.02 0.00 @w
+%%CURV 2
+257.98 426.46 m
+304.56 426.67 L
+S
+%%Note: Object
+256.25 420.77 300.82 422.71 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 81.792 -3.600 0.000
+256.25 422.71 m
+300.82 422.71 L
+300.82 420.77 L
+256.25 420.77 L
+256.25 422.71 L
+@c
+B
+%%Note: Object
+244.44 430.92 246.17 471.02 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 2.736 -73.512 0.000
+244.44 471.02 m
+246.17 471.02 L
+246.17 430.92 L
+244.44 430.92 L
+244.44 471.02 L
+@c
+B
+%%Note: Object
+315.86 405.22 318.10 407.88 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%RECT 4.104 -4.968 0.000
+315.86 407.88 m
+318.10 407.88 L
+318.10 405.22 L
+315.86 405.22 L
+315.86 407.88 L
+@c
+S
+%%Note: Object
+301.32 400.97 303.05 417.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%RECT 3.168 -29.448 0.000
+301.32 417.10 m
+303.05 417.10 L
+303.05 400.97 L
+301.32 400.97 L
+301.32 417.10 L
+@c
+B
+%%Note: Object
+302.54 400.68 304.27 417.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 3.168 -30.888 0.000
+302.54 417.60 m
+304.27 417.60 L
+304.27 400.68 L
+302.54 400.68 L
+302.54 417.60 L
+@c
+B
+%%Note: Object
+295.20 400.25 301.10 420.55 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 10.872 -37.224 0.000
+295.20 420.55 m
+301.10 420.55 L
+301.10 400.25 L
+295.20 400.25 L
+295.20 420.55 L
+@c
+B
+%%Note: Object
+295.49 394.20 315.22 401.18 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+1.00 0.25 0.00 0.00 k
+%%CURV 5
+295.49 401.18 m
+307.58 401.18 L
+315.22 394.99 L
+297.22 394.20 L
+295.49 401.18 L
+@c
+B
+%%Note: Object
+300.53 400.97 319.10 423.22 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%CURV 7
+300.53 423.22 m
+319.10 423.22 L
+319.10 416.09 L
+316.80 416.09 L
+306.94 400.97 L
+301.32 400.97 L
+300.53 423.22 L
+@c
+B
+%%Note: Object
+306.43 343.66 439.92 417.31 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 1.00 0.00 k
+%%CURV 15
+439.92 391.39 m
+317.09 417.31 L
+306.43 401.69 L
+314.57 395.50 l
+314.57 395.50 319.39 392.76 329.62 387.29 c
+339.84 381.82 341.86 384.55 346.61 380.45 c
+351.36 376.34 369.65 375.05 369.65 375.05 c
+439.63 343.66 L
+439.92 391.39 L
+@c
+B
+%%Note: Object
+155.38 429.62 222.98 527.47 @E
+ 0 O 0 @g
+0.70 0.00 0.70 0.10 k
+%%CURV 33
+194.18 527.47 m
+201.67 527.47 191.02 515.59 194.40 508.82 c
+197.78 501.98 195.05 507.46 201.89 500.62 c
+208.66 493.78 213.41 491.76 213.41 486.29 c
+213.41 480.82 213.41 479.45 214.13 472.61 c
+214.78 465.77 218.81 458.93 219.53 454.82 c
+220.25 450.79 222.98 447.34 220.25 443.95 c
+217.51 440.57 216.79 440.57 206.64 440.57 c
+196.49 440.57 196.49 443.30 187.63 438.48 c
+178.78 433.73 179.50 429.62 172.66 433.73 c
+165.89 437.76 155.66 441.22 155.66 441.22 c
+155.38 527.47 L
+194.18 527.47 L
+@c
+F
+%%Note: Object
+208.87 338.18 276.41 368.64 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+1.00 0.50 0.00 0.00 k
+%%CURV 30
+276.41 364.90 m
+276.41 364.90 275.76 365.47 274.25 362.38 c
+272.66 359.21 272.66 357.34 269.86 352.94 c
+267.05 348.48 268.27 349.49 264.53 345.67 c
+260.71 341.93 263.38 345.38 258.34 341.93 c
+253.30 338.47 248.26 339.34 243.79 339.70 c
+239.40 339.98 230.62 338.18 226.87 340.34 c
+223.13 342.58 221.90 343.51 219.74 347.26 c
+217.58 351.00 217.58 351.00 215.71 354.46 c
+213.84 357.91 213.34 361.58 212.26 363.31 c
+208.87 368.64 L
+276.41 364.90 L
+@c
+B
+%%Note: Object
+354.53 420.26 388.87 480.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+356.04 469.87 m
+354.53 425.81 L
+388.87 420.26 L
+387.29 480.10 L
+356.04 469.87 L
+@c
+S
+%%Note: Object
+356.76 473.26 400.90 502.63 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.75 0.75 0.00 k
+%%CURV 5
+400.90 502.63 m
+377.06 490.32 L
+356.76 473.26 L
+384.55 483.55 L
+400.90 502.63 L
+@c
+B
+%%Note: Object
+384.98 482.83 428.76 501.98 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 0.60 0.00 k
+%%CURV 4
+400.25 501.98 m
+384.98 483.62 L
+428.76 482.83 L
+400.25 501.98 L
+@c
+B
+%%Note: Object
+384.62 434.45 436.90 507.38 @E
+ 0 O 0 @g
+0.70 0.00 0.70 0.00 k
+%%CURV 40
+409.75 435.10 m
+406.30 435.10 407.02 434.45 402.26 438.48 c
+397.51 442.58 396.79 439.20 393.41 448.06 c
+390.02 456.91 388.01 454.18 388.66 461.66 c
+389.30 469.22 384.62 468.50 390.02 476.06 c
+395.42 483.55 394.13 479.45 399.53 487.66 c
+405.00 495.79 404.28 498.53 409.03 499.90 c
+413.78 501.26 412.49 507.38 418.61 499.90 c
+424.66 492.41 425.30 487.58 430.06 486.94 c
+434.88 486.29 436.25 488.95 436.25 480.82 c
+436.25 472.61 436.90 467.86 431.50 462.38 c
+426.02 456.91 421.27 458.28 420.55 450.07 c
+419.90 441.86 420.55 437.83 417.17 437.11 C
+413.78 436.39 409.75 435.10 409.75 435.10 c
+@c
+F
+%%Note: Object
+424.66 313.63 430.78 365.47 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%RECT 11.232 -94.968 0.000
+424.66 365.47 m
+430.78 365.47 L
+430.78 313.63 L
+424.66 313.63 L
+424.66 365.47 L
+@c
+B
+%%Note: Object
+244.58 465.84 246.02 471.02 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 471.02 m
+246.02 471.02 L
+246.02 465.84 L
+244.58 465.84 L
+244.58 471.02 L
+@c
+F
+%%Note: Object
+244.58 455.47 246.02 460.66 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 460.66 m
+246.02 460.66 L
+246.02 455.47 L
+244.58 455.47 L
+244.58 460.66 L
+@c
+F
+%%Note: Object
+244.58 445.25 246.02 450.43 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 450.43 m
+246.02 450.43 L
+246.02 445.25 L
+244.58 445.25 L
+244.58 450.43 L
+@c
+F
+%%Note: Object
+244.58 435.96 246.02 441.14 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 441.14 m
+246.02 441.14 L
+246.02 435.96 L
+244.58 435.96 L
+244.58 441.14 L
+@c
+F
+%%Note: Object
+353.38 468.29 390.02 482.98 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 7
+357.34 473.98 m
+354.53 473.98 L
+353.38 468.29 L
+387.22 480.17 L
+390.02 482.98 L
+384.34 482.98 L
+357.34 473.98 L
+@c
+B
+%%Note: Object
+356.11 420.77 389.52 479.59 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.20 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.30 0.00 k
+%%CURV 5
+386.14 479.59 m
+389.52 420.77 L
+356.11 425.52 L
+356.83 468.65 L
+386.14 479.59 L
+@c
+B
+%%Note: Object
+368.42 458.35 371.81 470.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+368.42 469.30 m
+368.42 458.35 L
+371.81 459.07 L
+371.16 470.66 L
+368.42 469.30 L
+@c
+S
+%%Note: Object
+373.75 421.42 384.77 446.04 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 5
+373.90 446.04 m
+373.75 422.86 L
+384.77 421.42 L
+384.12 446.04 L
+373.90 446.04 L
+@c
+S
+%%Note: Object
+350.06 430.34 378.65 466.42 @E
+ 0 O 0 @g
+0.80 0.00 0.80 0.20 k
+%%CURV 25
+366.34 431.64 m
+371.16 435.10 373.82 430.34 375.19 439.20 c
+376.56 448.13 378.65 450.86 375.91 454.25 c
+373.18 457.70 367.06 459.07 367.06 459.07 c
+367.06 459.07 367.70 465.26 362.30 462.46 c
+356.83 459.72 350.06 466.42 350.06 458.93 c
+350.06 451.37 354.10 448.13 357.55 444.67 c
+360.94 441.29 360.22 440.57 361.58 437.18 C
+362.95 433.73 366.34 431.64 366.34 431.64 c
+@c
+F
+%%Note: Object
+405.86 405.07 411.34 435.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 9.936 -55.080 0.000
+405.86 435.10 m
+411.34 435.10 L
+411.34 405.07 L
+405.86 405.07 L
+405.86 435.10 L
+@c
+B
+%%Note: Object
+209.16 359.21 277.06 377.42 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.40 0.15 0.00 0.00 k
+%%CURV 29
+270.50 375.84 m
+270.50 375.84 277.06 370.22 277.06 367.99 c
+277.06 365.83 276.98 364.25 272.66 362.95 c
+268.27 361.73 258.62 360.79 256.10 360.79 c
+253.58 360.79 247.32 359.86 245.45 359.86 c
+243.58 359.86 231.05 359.21 228.53 359.86 c
+226.08 360.43 219.82 359.21 217.58 360.79 c
+215.42 362.38 212.33 362.95 210.74 365.47 c
+209.16 367.99 209.16 368.35 209.16 371.16 c
+209.16 373.97 213.84 377.42 213.84 377.42 C
+270.50 375.84 L
+@c
+B
+%%Note: Object
+217.37 363.60 270.29 396.50 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.20 0.10 0.00 0.00 k
+%%CURV 25
+217.37 394.42 m
+217.37 394.42 235.51 396.50 241.85 396.50 c
+248.18 396.50 265.82 395.14 265.82 395.14 c
+265.82 395.14 268.06 384.41 268.06 383.04 c
+268.06 381.74 269.64 377.64 269.64 377.64 c
+270.29 367.63 l
+270.29 367.63 252.50 365.54 247.25 365.54 c
+241.99 365.54 223.27 363.60 221.47 364.25 c
+219.67 364.90 219.67 372.82 219.67 372.82 c
+217.37 376.49 L
+217.37 394.42 L
+@c
+B
+%%Note: Object
+220.10 381.53 239.18 392.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 22
+220.68 391.25 m
+222.91 392.26 228.24 392.26 229.82 392.26 c
+231.34 392.26 238.25 392.54 238.25 392.54 c
+239.18 390.02 L
+239.18 385.63 L
+237.60 383.76 L
+237.60 383.76 234.22 383.76 231.05 383.11 c
+227.88 382.46 222.26 381.53 222.26 381.53 c
+222.26 381.53 220.10 382.46 220.10 384.05 C
+220.10 385.63 220.68 391.25 220.68 391.25 c
+@c
+B
+%%Note: Object
+245.16 383.40 263.30 392.83 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 21
+247.03 392.83 m
+259.85 392.54 l
+259.85 392.54 262.37 392.26 262.66 390.31 c
+262.94 388.44 263.30 385.92 263.30 385.92 c
+263.30 385.92 262.94 383.76 261.43 383.76 c
+259.85 383.76 247.61 383.40 247.61 383.40 c
+247.61 383.40 245.45 384.34 245.45 385.92 c
+245.45 387.50 245.16 390.31 245.16 390.31 C
+247.03 392.83 L
+@c
+B
+%%Note: Object
+247.03 367.70 264.82 374.33 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 16
+249.48 374.33 m
+252.65 374.33 262.01 374.33 262.01 374.33 c
+264.82 371.81 L
+264.82 369.29 L
+262.01 368.35 250.42 367.99 250.42 367.99 c
+250.42 367.99 247.32 367.70 247.32 369.29 c
+247.32 370.87 247.03 372.38 247.03 372.38 C
+249.48 374.33 L
+@c
+B
+%%Note: Object
+223.20 366.12 242.35 373.03 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 13
+238.54 373.03 m
+242.28 371.81 L
+242.28 368.64 l
+242.28 368.64 242.35 367.70 240.12 367.70 c
+237.96 367.70 225.72 366.12 225.72 366.12 c
+223.20 367.70 L
+223.20 370.51 L
+225.43 372.74 L
+238.54 373.03 L
+@c
+B
+%%Note: Object
+219.38 372.82 269.64 379.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.30 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 7
+219.38 372.82 m
+224.64 376.06 235.22 379.66 242.28 379.44 c
+249.26 379.22 265.97 378.29 269.64 374.47 C
+S
+%%Note: Object
+217.58 394.20 265.82 400.39 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.60 0.20 0.00 0.00 k
+%%CURV 18
+265.82 395.14 m
+259.92 399.46 l
+259.92 399.46 249.98 400.39 247.90 400.39 c
+245.88 400.39 235.94 400.39 235.94 400.39 c
+228.24 400.39 L
+222.34 397.87 L
+217.58 394.92 L
+218.95 394.20 l
+218.95 394.20 233.42 396.50 241.34 396.29 C
+249.26 396.07 265.61 395.14 265.82 395.14 C
+@c
+B
+%%Note: Object
+210.82 375.77 276.62 386.93 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 40
+267.84 385.85 m
+268.92 385.85 270.29 385.85 272.16 384.70 c
+273.96 383.54 273.53 383.54 275.11 381.96 c
+276.62 380.38 275.98 379.22 275.98 379.22 c
+275.98 379.22 274.82 378.58 273.02 378.58 c
+271.22 378.58 265.82 378.07 263.74 378.07 c
+261.72 378.07 257.40 378.07 253.80 378.07 c
+250.20 378.07 244.94 377.86 242.28 377.86 c
+239.54 377.86 233.42 377.14 230.47 376.92 c
+227.52 376.70 223.49 376.70 220.10 376.70 c
+216.72 376.70 217.80 375.77 215.35 377.14 c
+212.83 378.58 211.97 377.21 211.97 379.66 c
+211.97 382.18 210.82 382.46 213.34 384.70 c
+215.78 386.93 215.35 386.06 217.15 386.06 C
+S
+%%Note: Object
+211.82 372.17 212.11 380.09 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+211.97 380.09 m
+211.97 372.17 L
+S
+%%Note: Object
+216.79 364.25 217.08 375.77 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+216.94 375.77 m
+216.94 364.25 L
+S
+%%Note: Object
+244.30 361.94 245.45 377.86 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+244.30 377.86 m
+245.45 361.94 L
+S
+%%Note: Object
+274.61 367.63 275.26 379.01 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+275.26 379.01 m
+274.61 367.63 L
+S
+%%Note: Object
+214.92 379.01 216.00 385.85 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+214.92 385.85 m
+216.00 379.01 L
+S
+%%Note: Object
+268.56 380.38 268.85 385.56 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+268.70 385.56 m
+268.70 380.38 L
+S
+%%Note: Object
+238.61 400.10 238.90 407.38 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 2
+238.61 400.10 m
+238.90 407.38 L
+S
+%%Note: Object
+250.70 399.46 250.99 403.78 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 2
+250.85 399.46 m
+250.85 403.78 L
+S
+%%Note: Object
+248.11 404.21 253.15 409.25 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.90 0.90 0.10 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%ELLI 9.216 -9.216 270.000 270.000 0
+250.63 409.25 m
+252.00 409.25 253.15 408.17 253.15 406.73 c
+253.15 405.29 252.00 404.21 250.63 404.21 c
+249.26 404.21 248.11 405.29 248.11 406.73 c
+248.11 408.17 249.26 409.25 250.63 409.25 c
+@c
+B
+%%Note: Object
+431.14 313.70 439.99 342.43 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%RECT 14.976 -52.632 0.000
+431.14 342.43 m
+439.99 342.43 L
+439.99 313.70 L
+431.14 313.70 L
+431.14 342.43 L
+@c
+B
+%%Note: Object
+425.16 361.94 430.70 365.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+425.16 364.75 m
+430.49 365.62 L
+430.70 362.95 L
+425.16 361.94 L
+425.16 364.75 L
+@c
+B
+%%Note: Object
+430.85 342.36 439.56 345.53 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+439.56 342.36 m
+439.27 345.53 L
+430.85 345.53 L
+431.64 342.36 L
+439.56 342.36 L
+@c
+B
+%%Note: Object
+319.82 415.08 326.95 417.53 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 13.104 -4.536 0.000
+319.82 417.53 m
+326.95 417.53 L
+326.95 415.08 L
+319.82 415.08 L
+319.82 417.53 L
+@c
+B
+%%Note: Object
+316.30 390.38 318.10 405.22 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 3.168 -25.920 0.000
+316.37 405.22 m
+316.58 405.22 316.87 405.22 317.16 405.22 c
+317.52 405.22 317.81 405.22 318.10 405.22 C
+318.02 402.77 318.02 400.32 318.02 397.87 c
+318.02 395.35 318.02 392.90 318.10 390.38 C
+317.81 390.53 317.52 390.67 317.16 390.74 c
+316.94 390.82 316.58 391.03 316.37 391.03 C
+316.30 393.41 316.30 395.78 316.30 398.16 c
+316.30 400.46 316.37 402.91 316.37 405.22 C
+@c
+B
+%%Note: Object
+315.94 405.65 318.31 406.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 4.248 1.800 0.000
+315.94 405.65 m
+318.31 405.65 L
+318.31 406.66 L
+315.94 406.66 L
+315.94 405.65 L
+@c
+B
+%%Note: Object
+301.25 417.53 304.34 418.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.90 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 5.688 -2.520 0.000
+301.25 418.90 m
+304.34 418.90 L
+304.34 417.53 L
+301.25 417.53 L
+301.25 418.90 L
+@c
+B
+%%Note: Object
+259.85 382.39 313.78 406.80 @E
+ 0 O 0 @g
+1.00 0.30 0.00 0.00 k
+%%CURV 33
+259.85 403.63 m
+264.82 405.50 264.82 405.00 267.98 405.94 c
+271.08 406.80 271.58 405.50 274.25 405.50 c
+276.91 405.50 282.67 405.00 284.62 405.00 c
+289.58 405.00 L
+295.85 406.37 L
+297.22 395.50 L
+308.45 395.50 L
+313.78 392.33 l
+313.78 392.33 313.34 385.13 309.74 385.13 c
+306.22 385.13 301.61 382.39 298.08 385.13 c
+294.55 387.79 290.88 388.22 288.22 387.79 c
+285.55 387.36 280.94 386.93 277.42 386.93 c
+273.82 386.93 267.05 386.93 267.05 386.93 c
+265.25 395.93 L
+259.85 400.46 L
+259.85 403.63 L
+@c
+F
+%%Note: Object
+258.55 404.93 293.18 417.89 @E
+ 0 O 0 @g
+1.00 0.60 0.00 0.00 k
+%%CURV 33
+263.88 413.93 m
+270.22 416.45 273.82 416.23 277.85 416.66 c
+281.95 417.10 286.49 417.89 287.35 417.60 c
+292.75 415.80 L
+290.02 412.63 l
+290.02 412.63 292.25 406.30 290.02 408.10 c
+287.78 409.90 284.18 409.90 281.02 410.33 c
+277.85 410.76 272.45 408.53 275.18 408.53 c
+277.85 408.53 285.98 408.53 288.65 407.23 c
+293.18 404.93 l
+293.18 404.93 266.18 404.93 262.51 404.93 c
+258.91 404.93 258.55 409.03 260.78 409.03 c
+263.02 409.03 269.78 411.70 269.78 411.70 c
+261.65 413.06 L
+263.88 413.93 L
+@c
+F
+%%Note: Object
+194.98 412.63 208.94 441.07 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 18
+199.94 441.07 m
+199.94 441.07 199.08 435.60 199.94 431.57 c
+200.88 427.54 199.94 426.17 201.31 423.43 c
+202.68 420.77 204.48 417.17 204.48 417.17 c
+208.94 414.50 L
+206.71 412.63 L
+201.74 412.63 L
+197.21 416.30 L
+195.91 427.03 L
+195.41 436.10 L
+194.98 440.64 L
+199.94 441.07 L
+@c
+F
+%%Note: Object
+185.04 407.23 199.08 441.07 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 24
+199.08 408.17 m
+199.08 408.17 196.27 411.70 195.41 414.94 c
+194.54 418.10 192.74 424.37 192.74 427.97 c
+192.74 431.57 192.74 441.07 192.74 441.07 c
+185.54 437.04 l
+185.54 437.04 185.04 432.50 185.54 429.34 c
+185.98 426.17 186.84 421.20 187.34 418.10 c
+187.78 414.94 188.21 413.57 188.21 410.83 c
+188.21 408.17 193.68 407.23 193.68 407.23 C
+199.08 408.17 L
+@c
+F
+%%Note: Object
+167.98 398.23 181.94 436.61 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 24
+181.94 400.46 m
+181.94 400.46 181.51 409.46 181.51 412.20 c
+181.51 414.94 181.51 426.17 181.51 426.17 c
+181.08 433.37 L
+176.98 432.07 L
+169.34 436.61 l
+169.34 436.61 169.34 426.60 169.34 423.94 c
+169.34 421.20 169.78 414.50 169.34 409.97 c
+168.91 405.43 169.78 405.00 168.91 401.83 c
+167.98 398.66 175.18 399.53 175.18 399.53 c
+180.14 398.23 L
+181.94 400.46 L
+@c
+F
+%%Note: Object
+155.38 390.53 169.34 440.64 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 16
+155.38 391.39 m
+169.34 390.53 l
+169.34 390.53 168.84 393.70 167.54 396.36 c
+166.18 399.10 161.64 399.96 160.78 405.86 c
+159.84 411.77 158.54 415.80 158.54 420.77 c
+158.54 425.74 158.11 440.21 158.11 440.21 c
+155.38 440.64 L
+155.38 391.39 L
+@c
+F
+%%Note: Object
+371.45 343.94 421.42 376.92 @E
+ 0 O 0 @g
+1.00 0.25 0.00 0.00 k
+%%CURV 29
+374.62 376.92 m
+371.45 371.52 L
+377.78 364.68 l
+377.78 364.68 384.98 360.22 388.15 359.28 c
+391.32 358.34 398.52 356.54 398.52 356.54 c
+411.12 356.54 L
+415.66 357.05 L
+421.42 355.68 L
+420.55 349.34 L
+413.78 345.74 l
+413.78 345.74 408.46 343.94 402.98 345.74 c
+397.58 347.54 394.92 347.11 390.38 347.98 c
+385.85 348.91 376.42 350.71 375.98 353.45 c
+375.55 356.11 373.32 362.02 373.32 362.02 c
+371.45 367.42 L
+372.38 375.55 L
+374.62 376.92 L
+@c
+F
+%%Note: Object
+372.82 354.74 420.98 376.92 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 17
+373.75 376.92 m
+389.02 376.92 l
+389.02 376.92 392.18 376.92 397.15 375.12 c
+402.12 373.32 411.12 369.22 411.12 369.22 c
+416.09 364.25 L
+420.98 361.58 L
+420.98 355.68 L
+414.72 357.05 L
+400.32 354.74 L
+385.42 359.78 L
+376.42 365.18 L
+372.82 370.15 L
+373.75 376.92 L
+@c
+F
+%%Note: Object
+377.78 359.28 410.18 374.69 @E
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 18
+377.78 368.78 m
+381.38 373.75 L
+385.42 374.69 l
+385.42 374.69 389.88 374.69 392.62 374.26 c
+395.35 373.75 399.38 372.38 402.12 370.58 c
+404.78 368.78 410.18 365.62 410.18 365.62 c
+408.89 361.58 L
+403.42 359.28 L
+397.58 361.08 L
+391.75 366.05 L
+387.65 367.92 L
+377.78 368.78 L
+@c
+F
+%%Note: Object
+375.34 355.25 405.29 369.22 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 14
+375.34 367.42 m
+378.65 363.38 l
+378.65 363.38 383.62 360.65 386.35 359.78 c
+389.02 358.85 394.56 357.62 394.92 357.48 c
+400.75 355.25 L
+405.29 361.08 L
+397.58 364.25 L
+390.02 367.42 L
+383.18 369.22 L
+375.34 367.42 L
+@c
+F
+%%Note: Object
+372.38 351.65 421.42 376.06 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+%%CURV 32
+373.32 376.06 m
+373.32 371.02 L
+378.22 364.25 l
+378.22 364.25 385.92 360.22 389.02 358.85 c
+392.18 357.48 397.15 356.11 399.89 356.11 c
+402.55 356.11 407.09 356.11 409.75 356.11 c
+412.42 356.11 416.02 357.05 418.32 356.11 c
+420.55 355.25 421.42 353.45 421.42 353.45 c
+416.09 351.65 l
+416.09 351.65 409.75 351.65 405.65 351.65 c
+401.62 351.65 394.92 352.51 391.32 353.45 c
+387.65 354.31 380.88 356.98 377.78 360.22 c
+374.62 363.38 372.38 366.98 372.38 366.98 C
+373.32 376.06 L
+@c
+F
+%%Note: Object
+420.34 314.42 426.17 367.20 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 7
+425.45 365.90 m
+425.23 314.42 L
+420.34 314.42 L
+420.41 367.20 L
+420.41 367.20 426.17 366.19 425.45 365.90 C
+@c
+B
+%%Note: Object
+420.26 361.94 425.16 367.13 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+425.16 364.75 m
+420.26 367.13 L
+420.26 363.89 L
+425.16 361.94 L
+425.16 364.75 L
+@c
+B
+%%Note: Object
+257.62 338.47 349.99 364.68 @E
+ 0 O 0 @g
+0.40 0.15 0.00 0.00 k
+%%CURV 47
+275.98 361.08 m
+283.82 361.51 292.90 361.51 297.36 361.51 c
+301.75 361.51 311.69 364.68 317.52 362.02 c
+323.42 359.28 322.99 357.05 328.82 356.54 c
+334.66 356.11 343.66 352.51 343.66 352.51 c
+343.66 352.51 344.52 348.84 347.26 347.04 c
+349.99 345.24 339.62 342.50 339.62 342.50 c
+327.89 348.84 l
+327.89 348.84 310.32 353.88 306.72 353.88 c
+303.12 353.88 288.79 352.94 288.79 352.94 c
+288.79 352.94 284.69 347.47 294.19 347.04 c
+303.55 346.61 311.69 343.94 311.69 343.94 c
+311.69 343.94 310.32 338.47 306.72 338.47 c
+303.12 338.47 283.82 339.41 279.36 339.41 c
+274.82 339.41 257.62 341.21 262.51 343.94 c
+267.48 346.61 270.79 354.31 270.79 354.31 c
+270.79 354.31 272.59 359.71 275.98 361.08 C
+@c
+F
+%%Note: Object
+420.12 364.46 430.70 367.99 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+420.12 367.13 m
+425.30 364.46 L
+430.70 365.62 L
+427.68 367.99 L
+420.12 367.13 L
+@c
+B
+%%Note: Object
+330.19 468.07 343.73 472.75 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 5
+343.73 472.75 m
+339.05 468.07 L
+330.19 468.07 L
+335.09 472.75 L
+343.73 472.75 L
+@c
+B
+%%Note: Object
+344.38 416.16 349.06 436.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 20
+345.24 434.45 m
+345.24 431.71 345.24 428.54 345.24 426.89 c
+345.24 425.16 345.60 422.35 345.24 420.91 c
+344.81 419.54 344.38 418.46 344.38 418.46 c
+344.59 416.16 L
+347.98 417.02 L
+348.41 419.54 l
+348.41 419.54 348.41 424.94 348.41 426.02 c
+348.41 427.03 349.06 436.54 349.06 436.54 C
+345.24 434.45 L
+@c
+B
+%%Note: Object
+365.40 411.55 370.58 433.37 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 29
+370.58 411.55 m
+370.58 413.21 370.15 412.34 370.01 415.73 c
+369.79 419.11 369.14 420.12 369.14 423.22 c
+369.14 426.46 369.14 429.98 369.14 431.06 c
+369.14 432.14 369.14 433.37 369.14 433.37 c
+366.19 432.36 l
+366.19 432.36 366.19 431.71 366.19 429.98 c
+366.19 428.33 366.19 426.17 366.19 424.30 c
+366.19 422.42 366.19 422.50 366.19 419.98 c
+366.19 417.46 366.05 414.94 366.05 414.94 c
+365.40 412.34 L
+367.27 411.70 L
+370.58 411.55 L
+@c
+B
+%%Note: Object
+336.67 421.78 338.54 429.19 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 11
+338.54 421.78 m
+338.54 427.46 L
+337.46 429.19 L
+336.67 427.46 l
+336.67 427.46 336.82 426.24 336.82 425.16 c
+336.82 424.08 336.82 422.64 336.82 422.64 C
+338.54 421.78 L
+@c
+B
+%%Note: Object
+330.98 422.64 332.42 430.85 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 11
+332.28 430.85 m
+332.28 430.85 332.42 428.76 332.42 427.68 c
+332.42 426.60 332.42 424.30 332.42 424.30 c
+330.98 422.64 L
+330.98 426.46 L
+330.98 429.55 L
+332.28 430.85 L
+@c
+B
+%%Note: Object
+333.29 421.99 334.73 431.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 16
+334.51 422.21 m
+334.51 422.21 334.30 422.50 334.51 425.16 c
+334.73 427.90 334.73 430.85 334.73 430.85 c
+333.50 431.06 l
+333.50 431.06 333.50 428.90 333.50 427.90 c
+333.50 426.89 333.29 423.86 333.29 423.86 c
+333.50 421.99 L
+334.51 422.21 L
+@c
+B
+@rs
+@sv
+%%Note: Object
+336.24 446.90 349.06 464.98 @E
+ 0 O 0 @g
+0.50 0.00 0.50 0.50 k
+%%CURV 23
+346.46 463.97 m
+339.55 463.54 336.60 464.98 336.38 461.88 c
+336.24 458.71 338.54 463.97 339.34 458.28 c
+340.20 452.59 340.85 451.51 340.85 449.21 c
+340.85 446.90 342.86 446.90 343.30 449.42 c
+343.73 451.94 344.02 453.89 346.10 455.11 c
+348.19 456.41 349.06 459.94 345.46 459.50 c
+341.86 459.14 344.59 462.89 344.59 462.89 C
+346.46 463.97 L
+@c
+F
+%%Note: Object
+375.77 458.93 381.17 476.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+375.77 472.61 m
+381.17 476.06 L
+380.52 459.65 L
+376.42 458.93 L
+375.77 472.61 L
+@c
+S
+%%Note: Object
+359.28 462.10 361.80 468.43 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 3
+361.80 468.43 m
+359.28 466.92 L
+359.28 462.10 L
+S
+%%Note: Object
+358.63 430.63 363.24 438.48 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+358.63 438.48 m
+358.63 431.28 L
+363.24 430.63 L
+S
+%%Note: Object
+378.00 461.88 378.14 473.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+378.00 473.90 m
+378.14 461.88 L
+S
+%%Note: Object
+376.06 467.78 380.88 470.09 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+376.06 467.78 m
+380.88 470.09 L
+S
+%%Note: Object
+369.79 458.71 370.01 464.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+370.01 464.62 m
+369.79 458.71 L
+S
+%%Note: Object
+377.50 437.40 382.18 443.52 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+377.50 443.52 m
+381.96 443.52 L
+382.18 437.40 L
+S
+%%Note: Object
+376.70 428.11 382.39 431.28 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+376.70 431.28 m
+376.70 428.76 L
+382.39 428.11 L
+S
+%%Note: Object
+376.27 436.18 381.53 436.32 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 2
+376.27 436.32 m
+381.53 436.18 L
+S
+%%Note: Object
+390.82 426.17 395.35 439.70 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+394.42 439.27 m
+390.82 439.70 L
+390.82 426.17 L
+395.35 426.17 L
+394.42 439.27 L
+@c
+B
+%%Note: Object
+396.65 424.80 402.55 439.70 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 6
+400.75 439.70 m
+396.65 439.70 L
+397.58 425.23 L
+402.12 424.80 L
+402.55 432.07 L
+400.75 439.70 L
+@c
+B
+%%Note: Object
+412.27 424.66 417.24 436.82 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 6
+412.70 432.79 m
+412.70 424.66 L
+416.74 424.66 L
+417.24 436.82 L
+412.27 435.96 L
+412.70 432.79 L
+@c
+B
+%%Note: Object
+418.82 423.22 424.73 439.49 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+423.36 439.49 m
+418.82 439.49 L
+419.33 423.22 L
+424.73 423.22 L
+423.36 439.49 L
+@c
+B
+%%Note: Object
+427.32 411.26 439.92 469.58 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.20 0.20 0.00 k
+%%CURV 5
+427.32 414.50 m
+439.92 411.26 L
+439.92 469.58 L
+427.32 458.28 L
+427.32 414.50 L
+@c
+B
+%%Note: Object
+430.92 420.77 439.92 438.41 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 5
+431.86 438.41 m
+430.92 422.57 L
+439.92 420.77 L
+439.49 436.61 L
+431.86 438.41 L
+@c
+B
+%%Note: Object
+432.29 436.61 439.92 445.18 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.10 k
+%%CURV 5
+432.29 438.84 m
+439.49 436.61 L
+439.92 444.24 L
+432.29 445.18 L
+432.29 438.84 L
+@c
+B
+%%Note: Object
+391.32 434.16 394.42 434.45 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+391.32 434.30 m
+394.42 434.30 L
+S
+%%Note: Object
+397.15 433.87 402.12 434.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+397.15 434.30 m
+402.12 433.87 L
+S
+%%Note: Object
+413.35 432.94 416.52 433.37 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+413.35 433.37 m
+416.52 432.94 L
+S
+%%Note: Object
+419.69 433.87 423.22 434.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+419.69 434.30 m
+423.22 433.87 L
+S
+%%Note: Object
+320.04 388.58 326.74 414.94 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 12.168 -43.128 0.000
+320.04 414.86 m
+321.12 414.94 322.20 414.94 323.35 414.94 c
+324.43 414.94 325.51 414.94 326.74 414.86 C
+326.66 410.54 326.66 406.15 326.66 401.76 c
+326.66 397.37 326.66 392.98 326.74 388.58 C
+325.51 389.09 324.43 389.59 323.35 390.02 c
+322.27 390.46 321.12 390.96 320.04 391.32 C
+320.04 395.28 320.04 399.17 320.04 403.13 c
+320.04 407.02 320.04 410.98 320.04 414.86 C
+@c
+B
+%%Note: Object
+157.39 457.70 189.43 508.32 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 31
+179.21 464.54 m
+189.43 470.66 187.34 474.05 186.70 482.33 c
+186.05 490.54 183.31 496.01 184.68 502.13 c
+186.05 508.32 179.93 500.04 177.84 494.57 c
+175.82 489.17 167.62 484.34 167.62 484.34 c
+167.62 484.34 159.48 480.89 162.86 492.55 c
+166.25 504.22 159.48 502.78 159.48 498.02 c
+159.48 493.27 157.39 483.62 159.48 477.50 c
+161.50 471.38 166.32 470.66 166.97 474.05 c
+167.62 477.50 171.07 472.68 171.07 465.19 C
+171.07 457.70 179.21 464.54 179.21 464.54 c
+@c
+F
+%%Note: Object
+188.06 447.41 213.26 491.18 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 20
+192.82 456.98 m
+198.29 463.18 198.29 468.00 198.29 472.75 c
+198.29 477.50 197.57 491.18 200.30 487.73 c
+203.04 484.34 207.79 476.86 207.79 471.38 c
+207.79 465.91 200.38 461.09 205.13 456.98 c
+209.88 452.88 213.26 449.50 204.41 449.50 c
+195.55 449.50 188.06 447.41 188.06 447.41 C
+192.82 456.98 L
+@c
+F
+%%Note: Object
+405.14 442.66 423.58 483.70 @E
+ 0 O 0 @g
+0.80 0.00 0.80 0.20 k
+%%CURV 21
+408.60 450.86 m
+408.60 458.42 405.14 461.16 408.60 468.00 c
+411.98 474.84 415.44 483.70 415.44 483.70 c
+415.44 483.70 416.74 483.70 416.74 478.94 c
+416.74 474.12 422.93 469.30 422.93 469.30 c
+423.58 462.46 L
+416.09 454.97 l
+416.09 454.97 416.09 452.23 416.09 447.48 C
+416.09 442.66 408.60 450.86 408.60 450.86 c
+@c
+F
+%%Note: Object
+201.67 479.52 360.29 518.54 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 43
+234.36 510.34 m
+271.80 510.34 252.07 515.81 277.92 515.81 c
+303.77 515.81 304.42 516.53 316.66 513.79 c
+328.97 511.06 328.25 508.25 339.84 506.23 c
+351.43 504.22 360.29 502.78 358.92 498.02 c
+357.55 493.27 334.44 487.15 328.97 489.82 c
+323.50 492.55 309.17 497.38 304.42 497.38 c
+299.66 497.38 264.31 505.58 264.31 505.58 c
+264.31 505.58 256.82 501.41 269.14 498.74 c
+281.38 496.01 308.52 491.90 296.28 485.71 c
+284.04 479.52 269.78 489.17 260.93 489.17 c
+252.07 489.17 239.18 489.82 232.99 492.55 c
+226.87 495.29 215.28 503.50 208.51 506.95 c
+201.67 510.34 203.69 518.54 213.26 517.18 C
+222.77 515.81 234.36 510.34 234.36 510.34 c
+@c
+F
+%%Note: Object
+166.25 331.20 199.66 372.89 @E
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%CURV 20
+168.34 353.81 m
+175.82 358.56 186.70 366.05 188.78 369.50 c
+190.80 372.89 191.45 362.66 191.45 362.66 c
+199.66 370.15 L
+199.66 360.65 l
+199.66 360.65 196.20 355.82 193.54 351.00 c
+190.80 346.25 176.47 331.20 176.47 331.20 c
+173.81 338.04 L
+179.21 347.62 L
+177.84 354.46 L
+166.25 348.26 L
+168.34 353.81 L
+@c
+F
+%%Note: Object
+409.25 405.72 432.43 409.18 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+411.98 409.18 m
+432.43 407.81 L
+418.18 405.72 L
+409.25 405.72 L
+411.98 409.18 L
+@c
+F
+%%Note: Object
+369.14 410.54 384.77 415.37 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 10
+369.14 415.37 m
+369.14 415.37 371.16 413.28 374.54 413.28 c
+378.00 413.28 384.77 412.56 384.77 412.56 c
+381.31 411.19 L
+369.79 410.54 L
+369.14 415.37 L
+@c
+F
+%%Note: Object
+347.33 413.93 358.92 417.38 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 5
+347.98 417.38 m
+358.92 417.38 L
+357.55 413.93 L
+347.33 415.37 L
+347.98 417.38 L
+@c
+F
+%%Note: Object
+313.06 313.70 420.12 331.70 @E
+ 0 O 0 @g
+1.00 0.50 0.00 0.00 k
+%%CURV 26
+420.12 324.86 m
+414.65 328.25 405.79 331.70 400.32 331.70 c
+394.85 331.70 393.48 330.34 384.62 330.34 c
+375.70 330.34 366.91 328.97 360.07 330.34 c
+353.23 331.70 345.74 329.62 340.92 329.62 c
+336.17 329.62 337.54 324.14 332.06 323.50 c
+326.59 322.78 325.94 318.67 321.84 318.67 c
+317.74 318.67 313.06 313.85 322.49 313.85 c
+331.92 313.85 420.12 313.70 420.12 314.42 C
+420.12 324.86 L
+@c
+F
+%%Note: Object
+155.02 313.85 440.28 528.34 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%RECT 522.576 -392.976 0.000
+155.02 528.34 m
+440.28 528.34 L
+440.28 313.85 L
+155.02 313.85 L
+155.02 528.34 L
+@c
+S
+%%Note: Object
+431.42 344.66 440.28 348.84 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+440.28 344.66 m
+434.81 348.84 L
+431.42 348.84 L
+431.42 344.66 L
+440.28 344.66 L
+@c
+B
+%%Note: Object
+223.27 498.24 235.58 505.73 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+223.27 505.73 m
+228.74 503.71 229.46 498.89 229.46 498.89 c
+235.58 498.24 L
+S
+%%Note: Object
+216.14 489.60 226.44 493.27 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+216.14 491.62 m
+221.54 489.60 223.70 489.89 223.70 489.89 c
+226.44 493.27 L
+S
+%%Note: Object
+206.35 502.27 215.21 509.11 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+206.35 509.11 m
+211.82 507.02 212.47 502.27 212.47 502.27 c
+215.21 505.66 L
+S
+%%Note: Object
+327.17 341.50 329.18 343.73 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+327.17 343.73 m
+327.17 342.72 327.38 341.50 327.38 341.50 c
+329.18 342.07 L
+S
+%%Note: Object
+322.13 342.36 329.98 347.40 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+322.99 345.74 m
+324.50 347.40 325.51 346.18 326.88 345.53 c
+328.25 344.88 329.98 345.31 329.11 344.23 c
+328.32 343.22 322.56 342.36 322.56 342.65 c
+322.63 343.94 L
+322.13 344.66 L
+322.99 345.74 L
+@c
+F
+%%Note: Object
+327.24 345.31 329.33 347.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+327.24 345.31 m
+327.24 346.32 327.46 347.54 327.46 347.54 c
+329.33 346.97 L
+S
+%%Note: Object
+338.33 335.16 340.42 337.39 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+338.33 337.39 m
+338.33 336.38 338.54 335.16 338.54 335.16 c
+340.42 335.81 L
+S
+%%Note: Object
+333.29 336.02 341.14 341.06 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+334.22 339.41 m
+335.74 341.06 336.67 339.84 338.04 339.19 c
+339.41 338.54 341.14 338.98 340.34 337.97 c
+339.55 336.89 333.72 336.02 333.72 336.31 c
+333.86 337.61 L
+333.29 338.40 L
+334.22 339.41 L
+@c
+F
+%%Note: Object
+338.47 338.98 340.56 341.21 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+338.47 338.98 m
+338.47 339.98 338.69 341.21 338.69 341.21 c
+340.56 340.63 L
+S
+%%Note: Object
+349.70 345.53 351.79 347.83 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+349.70 347.83 m
+349.70 346.75 349.92 345.53 349.92 345.53 c
+351.79 346.18 L
+S
+%%Note: Object
+344.66 346.46 352.51 351.50 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+345.60 349.78 m
+347.04 351.50 348.05 350.28 349.42 349.63 c
+350.78 348.91 352.51 349.34 351.72 348.34 c
+350.86 347.33 345.10 346.46 345.10 346.68 c
+345.24 348.05 L
+344.66 348.77 L
+345.60 349.78 L
+@c
+F
+%%Note: Object
+349.85 349.34 351.94 351.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+349.85 349.34 m
+349.85 350.42 350.06 351.65 350.06 351.65 c
+351.94 351.00 L
+S
+%%Note: Object
+352.44 336.96 354.53 339.26 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+352.44 339.26 m
+352.44 338.18 352.66 336.96 352.66 336.96 c
+354.53 337.61 L
+S
+%%Note: Object
+347.40 337.90 355.25 342.94 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+348.34 341.21 m
+349.85 342.94 350.78 341.71 352.15 341.06 c
+353.52 340.34 355.25 340.78 354.46 339.77 c
+353.66 338.76 347.83 337.90 347.83 338.11 c
+347.98 339.48 L
+347.40 340.20 L
+348.34 341.21 L
+@c
+F
+%%Note: Object
+352.58 340.78 354.67 343.08 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+352.58 340.78 m
+352.58 341.86 352.80 343.08 352.80 343.08 c
+354.67 342.43 L
+S
+%%Note: Object
+311.47 331.78 313.56 334.08 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+311.47 334.08 m
+311.47 333.00 311.76 331.78 311.76 331.78 c
+313.56 332.42 L
+S
+%%Note: Object
+306.43 332.71 314.35 337.75 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+307.37 336.02 m
+308.88 337.75 309.82 336.53 311.18 335.88 c
+312.62 335.16 314.35 335.59 313.49 334.58 c
+312.70 333.58 306.86 332.71 306.86 332.93 c
+307.01 334.30 L
+306.43 335.02 L
+307.37 336.02 L
+@c
+F
+%%Note: Object
+311.62 335.59 313.70 337.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+311.62 335.59 m
+311.62 336.67 311.83 337.90 311.83 337.90 c
+313.70 337.25 L
+S
+%%Note: Object
+268.70 422.71 268.99 426.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+268.85 426.60 m
+268.85 422.71 L
+S
+%%Note: Object
+278.50 422.28 278.78 426.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+278.64 426.60 m
+278.64 422.28 L
+S
+%%Note: Object
+288.86 422.93 289.15 426.46 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+289.01 426.46 m
+289.01 422.93 L
+S
+%%Note: Object
+297.94 423.07 298.22 426.46 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+298.08 426.46 m
+298.08 423.07 L
+S
+%%Note: Object
+345.38 380.38 373.39 402.98 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 9
+345.38 402.98 m
+366.55 396.79 L
+366.55 391.32 L
+373.39 385.13 L
+372.02 380.38 L
+358.34 387.22 L
+359.06 393.34 L
+346.10 398.88 L
+345.38 402.98 L
+@c
+F
+%%Note: Object
+402.70 378.29 429.98 389.95 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 9
+429.98 386.50 m
+417.02 389.95 L
+412.27 384.48 L
+404.06 385.85 L
+402.70 380.38 L
+415.01 378.29 L
+421.13 384.48 L
+429.98 381.10 L
+429.98 386.50 L
+@c
+F
+%%Note: Object
+223.27 388.58 229.46 389.95 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+223.27 388.58 m
+229.46 389.95 L
+S
+%%Note: Object
+252.86 389.52 259.92 390.67 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+252.86 390.67 m
+259.92 389.52 L
+S
+%%Note: Object
+226.94 387.14 230.40 387.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+226.94 387.14 m
+230.40 387.65 L
+S
+%%Note: Object
+255.17 387.50 259.63 388.44 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+255.17 388.44 m
+259.63 387.50 L
+S
+%%Note: Object
+168.19 375.34 171.43 381.74 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 5.904 11.736 1.584
+169.06 375.34 m
+170.57 375.34 l
+171.07 375.34 171.43 375.70 171.43 376.20 c
+171.43 380.88 l
+171.43 381.38 171.07 381.74 170.57 381.74 c
+169.06 381.74 l
+168.55 381.74 168.19 381.38 168.19 380.88 c
+168.19 376.20 l
+168.19 375.70 168.55 375.34 169.06 375.34 c
+@c
+B
+%%Note: Object
+166.32 380.02 173.02 383.11 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+167.33 383.11 m
+172.01 383.11 l
+172.58 383.11 173.02 382.68 173.02 382.18 c
+173.02 380.95 l
+173.02 380.45 172.58 380.02 172.01 380.02 c
+167.33 380.02 l
+166.75 380.02 166.32 380.45 166.32 380.95 c
+166.32 382.18 l
+166.32 382.68 166.75 383.11 167.33 383.11 c
+@c
+B
+%%Note: Object
+215.86 362.45 217.73 366.26 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 5.904 11.736 1.584
+216.36 362.45 m
+217.22 362.45 l
+217.51 362.45 217.73 362.66 217.73 362.95 c
+217.73 365.76 l
+217.73 366.05 217.51 366.26 217.22 366.26 c
+216.36 366.26 l
+216.00 366.26 215.86 366.05 215.86 365.76 c
+215.86 362.95 l
+215.86 362.66 216.00 362.45 216.36 362.45 c
+@c
+B
+%%Note: Object
+214.70 365.18 218.66 367.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+215.35 367.06 m
+218.09 367.06 l
+218.38 367.06 218.66 366.84 218.66 366.48 c
+218.66 365.83 l
+218.66 365.47 218.38 365.18 218.09 365.18 c
+215.35 365.18 l
+214.99 365.18 214.70 365.47 214.70 365.83 c
+214.70 366.48 l
+214.70 366.84 214.99 367.06 215.35 367.06 c
+@c
+B
+%%Note: Object
+272.23 364.46 274.10 368.21 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 5.904 11.736 1.584
+272.74 364.46 m
+273.60 364.46 l
+273.89 364.46 274.10 364.61 274.10 364.97 c
+274.10 367.70 l
+274.10 367.99 273.89 368.21 273.60 368.21 c
+272.74 368.21 l
+272.38 368.21 272.23 367.99 272.23 367.70 c
+272.23 364.97 l
+272.23 364.61 272.38 364.46 272.74 364.46 c
+@c
+B
+%%Note: Object
+271.08 367.20 274.97 369.00 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+271.73 369.00 m
+274.46 369.00 l
+274.75 369.00 274.97 368.78 274.97 368.42 c
+274.97 367.78 l
+274.97 367.49 274.75 367.20 274.46 367.20 c
+271.73 367.20 l
+271.37 367.20 271.08 367.49 271.08 367.78 c
+271.08 368.42 l
+271.08 368.78 271.37 369.00 271.73 369.00 c
+@c
+B
+%%Note: Object
+205.13 403.34 207.36 407.88 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 5.904 11.736 1.584
+205.70 403.34 m
+206.78 403.34 l
+207.14 403.34 207.36 403.63 207.36 403.99 c
+207.36 407.30 l
+207.36 407.66 207.14 407.88 206.78 407.88 c
+205.70 407.88 l
+205.34 407.88 205.13 407.66 205.13 407.30 c
+205.13 403.99 l
+205.13 403.63 205.34 403.34 205.70 403.34 c
+@c
+B
+%%Note: Object
+203.83 406.66 208.51 408.89 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+204.48 408.89 m
+207.79 408.89 l
+208.22 408.89 208.51 408.60 208.51 408.24 c
+208.51 407.38 l
+208.51 406.94 208.22 406.66 207.79 406.66 c
+204.48 406.66 l
+204.12 406.66 203.83 406.94 203.83 407.38 c
+203.83 408.24 l
+203.83 408.60 204.12 408.89 204.48 408.89 c
+@c
+B
+%%Note: Object
+207.00 380.88 217.58 405.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+%%CURV 7
+207.00 405.65 m
+207.00 401.83 209.30 393.41 211.54 389.88 c
+213.77 386.35 217.58 380.88 217.58 380.88 C
+S
+%%Note: Object
+169.85 362.52 217.15 379.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.02 2.02 0.00 @w
+%%CURV 7
+217.15 365.26 m
+217.15 365.26 211.03 362.52 195.98 365.98 c
+180.94 369.36 170.86 379.01 169.85 379.30 C
+S
+%%Note: Object
+241.70 426.89 248.54 436.46 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 12.528 -17.568 0.000
+241.70 436.46 m
+248.54 436.46 L
+248.54 426.89 L
+241.70 426.89 L
+241.70 436.46 L
+@c
+F
+@rs
+@rs
+%%Trailer
+ end
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp
new file mode 100644
index 000000000..be9ad9b28
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp
@@ -0,0 +1,1282 @@
+% Converted from PostScript(TM) to MetaPost by pstoedit
+% MetaPost backend contributed by Scott Pakin <pakin@uiuc.edu>
+% pstoedit is Copyright (C) 1993 - 1999 Wolfgang Glunz <wglunz@geocities.com>
+
+% Generate structured PostScript
+prologues := 1;
+
+% Display a given string with its *baseline* at a given location
+% and with a given rotation angle
+vardef showtext(expr origin)(expr angle)(expr string) =
+ draw string infont defaultfont scaled defaultscale
+ rotated angle shifted origin;
+enddef;
+
+beginfig(1);
+drawoptions (withcolor (0.8,0.9,1));
+linecap := butt;
+linejoin := mitered;
+fill (34.0598,214.47)--(286.57,214.47)--(285.2,72.9199)
+ --(38.1699,83.8599)--(34.0598,214.47)--cycle;
+drawoptions (withcolor (0.95,0.95,0.95));
+fill (62,152.91)..controls (62,152.91) and (74.24,150.18)..(77.6199,152.91)
+ ..controls (81.0798,155.65) and (98.0698,152.91)..(98.0698,152.91)
+ ..controls (98.0698,152.91) and (106.21,148.81)..(111.68,148.81)
+ ..controls (117.15,148.81) and (130.76,147.37)..(130.76,147.37)
+ --(134.86,140.53)..controls (134.86,140.53) and (130.11,139.88)..(123.92,139.88)
+ ..controls (117.8,139.88) and (98.72,139.23)..(98.72,139.23)
+ --(82.3799,139.23)--(72.1499,145.35)--(64.0198,147.37)
+ --(62,152.91)--cycle;
+drawoptions (withcolor (0.9,0.9,0.9));
+fill (202.11,112.52)--(200.82,126.85)--(184.47,117.99)
+ --(170.86,116.62)--(150.42,117.34)--(141.63,114.61)
+ --(104.19,115.26)--(87.1299,115.26)--(69.49,113.17)
+ --(74.96,107.77)--(106.21,108.42)--(140.98,108.42)
+ --(147.03,110.5)--(165.39,110.5)--(164.74,104.38)
+ --(172.88,103.74)--(285.92,79.0398)--(285.2,98.9099)
+ --(271.59,100.93)--(202.11,112.52)--cycle;
+drawoptions (withcolor (1,0.4,0.4));
+fill (285.92,193.23)--(259.78,193.23)--(259.78,188.7)
+ --(277.35,148.88)--(285.92,155.72)--(285.92,193.23)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (285.92,193.23)--(259.78,193.23)--(259.78,188.7)
+ --(277.35,148.88)--(285.92,155.72)--(285.92,193.23);
+drawoptions (withcolor (1,0.9,0.9));
+pickup pencircle scaled 0bp;
+fill (231.85,165.66)--(235.95,169.69)--(246.75,170.62)
+ --(273.32,149.82)--(272.89,101)--(235.02,107.34)
+ --(231.85,165.66)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (231.85,165.66)--(235.95,169.69)--(246.75,170.62)
+ --(273.32,149.82)--(272.89,101)--(235.02,107.34)
+ --(231.85,165.66);
+drawoptions (withcolor (0,0.5,0));
+pickup pencircle scaled 0bp;
+fill (178.28,133.26)..controls (178.28,133.26) and (175.98,132.39)..(175.11,130.09)
+ ..controls (174.25,127.78) and (172.38,125.62)..(172.38,125.62)
+ ..controls (172.38,125.62) and (170.86,124.47)..(170,121.88)
+ ..controls (169.21,119.36) and (168.99,119.14)..(168.99,118.06)
+ ..controls (168.99,116.98) and (169.21,116.19)..(170.43,116.41)
+ ..controls (171.73,116.55) and (172.81,117.63)..(172.81,117.63)
+ --(175.33,116.84)..controls (175.33,116.84) and (175.9,116.62)..(177.42,117.85)
+ ..controls (178.86,119.14) and (179.29,121.52)..(179.72,120.22)
+ ..controls (180.15,118.93) and (179.94,119.58)..(180.73,118.06)
+ ..controls (181.59,116.55) and (183.03,115.98)..(184.11,116.41)
+ ..controls (185.19,116.84) and (184.47,115.69)..(185.55,117.2)
+ ..controls (186.63,118.71) and (185.19,122.74)..(185.19,122.74)
+ --(182.24,132.39)--(178.28,133.26)--cycle;
+drawoptions (withcolor (0,0.6,0));
+fill (203.19,132.82)..controls (207.44,132.82) and (198.58,125.84)..(194.55,123.61)
+ ..controls (190.45,121.3) and (188.65,115.04)..(184.11,120.87)
+ ..controls (179.65,126.7) and (184.54,132.61)..(180.51,133.04)
+ ..controls (176.48,133.54) and (177.85,132.18)..(174.68,133.54)
+ ..controls (171.51,134.84) and (172.45,140.31)..(172.45,140.31)
+ ..controls (172.45,140.31) and (175.98,145.71)..(177.42,148.88)
+ ..controls (178.78,152.05) and (177.42,152.91)..(177.85,155.22)
+ ..controls (178.28,157.52) and (181.02,159.32)..(181.02,159.32)
+ --(190.02,158.82)--(192.25,162.78)..controls (192.25,162.78) and (196.78,162.92)..(199.02,161.12)
+ ..controls (201.25,159.32) and (201.25,156.58)..(201.25,156.58)
+ --(203.98,155.22)--(203.55,147.58)--(201.68,143.12)
+ ..controls (201.68,143.12) and (201.82,139.95)..(203.19,137.72)
+ ..controls (204.56,135.42) and (202.76,132.82)..(203.19,132.82)
+ --cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+fill (1.37988,135.34)--(63.9399,129.01)--(67.98,114.97)
+ --(73.8799,108.63)--(57.6799,89.26)--(0.869873,46.2798)
+ --(1.37988,135.34)--cycle;
+drawoptions (withcolor (0,0.6,0));
+fill (141.27,120.87)..controls (140.84,121.23) and (143.65,122.46)..(139.62,123.32)
+ ..controls (135.51,124.26) and (134.65,122.67)..(129.25,122.67)
+ ..controls (123.85,122.67) and (124.28,120.87)..(122.05,122.67)
+ ..controls (119.82,124.47) and (119.38,126.27)..(115.28,126.27)
+ ..controls (111.25,126.27) and (109.45,126.7)..(106.78,124.9)
+ ..controls (104.05,123.1) and (102.68,123.1)..(100.45,123.1)
+ ..controls (98.22,123.1) and (96.3398,123.18)..(93.6799,123.61)
+ ..controls (91.0198,124.04) and (88.7798,124.47)..(86.0498,124.9)
+ ..controls (83.3098,125.41) and (80.5798,125.84)..(77.9099,125.41)
+ ..controls (75.25,124.9) and (70.2798,124.47)..(66.6799,124.9)
+ ..controls (63.0798,125.41) and (60.3398,127.21)..(57.1799,125.41)
+ ..controls (54.0798,123.61) and (49.1099,123.61)..(49.1099,123.61)
+ --(44.1399,122.67)--(45.0798,115.9)..controls (45.0798,115.9) and (43.2798,113.6)..(49.5398,113.6)
+ ..controls (55.8799,113.6) and (58.98,113.6)..(64.8799,113.6)
+ ..controls (70.71,113.6) and (69.4199,112.66)..(76.1099,114.03)
+ ..controls (82.8799,115.47) and (86.98,115.47)..(91.8799,115.47)
+ ..controls (96.8499,115.47) and (100.88,114.97)..(105.85,114.97)
+ ..controls (110.82,114.97) and (112.62,114.97)..(118.02,114.97)
+ ..controls (123.42,114.97) and (125.22,114.54)..(136.02,114.54)
+ ..controls (146.74,114.54) and (146.74,115.9)..(146.74,115.9)
+ --(145.88,120.37)--(141.27,120.87)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+fill (5.83984,98.26)--(27.5098,109.14)--(46.3799,113.6)
+ --(70.2798,114.03)--(74.3098,109.57)--(49.5398,105.54)
+ --(0.869873,67.95)--(5.83984,98.26)--cycle;
+drawoptions (withcolor (0.8,0.3,0));
+fill (105.85,108.2)--(106.78,85.23)--(73.8799,84.2998)
+ --(66.25,38.1399)--(36.7998,1.05981)--(0.72998,1.05981)
+ --(0.869873,49.8799)..controls (0.869873,49.8799) and (24.7798,67.0898)..(36.0798,74.7898)
+ ..controls (47.3098,82.5) and (70.2798,104.6)..(72.5098,107.34)
+ ..controls (74.74,110) and (77.48,108.2)..(77.48,108.2)
+ --(105.85,108.2)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (75.25,107.77)--(105.85,107.77)--(105.85,85.23)
+ --(75.25,85.23)--(75.25,107.77)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (75.25,107.77)--(105.85,107.77)--(105.85,85.23)
+ --(75.25,85.23)--(75.25,107.77);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 2.23bp;
+draw (118.59,71.1899)--(117.22,61.8999);
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (266.48,1.56982)--(267.34,45.9199)--(158.84,82.3499)
+ --(149.26,81.2)--(144.15,86.3098)--(140.84,107.77)
+ --(104.84,107.26)--(105.92,86.3098)--(114.92,40.45)
+ --(55.5898,38.5798)--(37.23,0.849854)--(266.48,1.56982)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+fill (55.1599,40.0898)--(113.98,37.21)--(153.94,25.8999)
+ ..controls (153.94,25.8999) and (123.42,17.8398)..(145.88,14.6699)
+ ..controls (168.34,11.4299) and (158.91,11)..(152.65,7.3999)
+ ..controls (146.31,3.7998) and (118.95,1.05981)..(113.48,1.05981)
+ ..controls (108.08,1.05981) and (35.6499,1.05981)..(35.6499,1.05981)
+ --(55.1599,40.0898)--cycle;
+drawoptions (withcolor (1,0.7,0));
+fill (146.96,157.59)--(149.77,157.59)--(149.77,118.06)
+ --(146.96,118.06)--(146.96,157.59)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (146.96,157.59)--(149.77,157.59)--(149.77,118.06)
+ --(146.96,118.06)--(146.96,157.59);
+drawoptions (withcolor (1,0.7,0));
+pickup pencircle scaled 0bp;
+fill (109.16,161.05)--(180.37,158.53)--(176.41,154.86)
+ --(108.66,157.3)--(109.16,161.05)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (109.16,161.05)--(180.37,158.53)--(176.41,154.86)
+ --(108.66,157.3)--(109.16,161.05);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (107.65,166.74)--(192.18,162.27)--(189.94,159.54)
+ --(108.15,162.99)--(107.65,166.74)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (107.65,166.74)--(192.18,162.27)--(189.94,159.54)
+ --(108.15,162.99)--(107.65,166.74);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (149.77,163.86)--(153.8,163.86)--(153.8,110.07)
+ --(149.77,110.07)--(149.77,163.86)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (149.77,163.86)--(153.8,163.86)--(153.8,110.07)
+ --(149.77,110.07)--(149.77,163.86);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 2.23bp;
+draw (112.26,165.3)--(104.77,109.14);
+draw (109.59,159.82)--(102.75,116.62);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (153.73,150.61)--(163.38,129.3);
+draw (153.51,140.17)--(163.09,124.33);
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0bp;
+fill (162.58,130.74)--(168.99,130.74)--(168.99,114.9)
+ --(162.58,114.9)--(162.58,130.74)--cycle;
+drawoptions (withcolor (0,0.4,1));
+fill (153.22,123.1)--(162.58,123.1)--(162.58,115.9)
+ --(153.22,115.9)--(153.22,123.1)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (101.89,117.92)--(149.05,117.42);
+pickup pencircle scaled 2.02bp;
+draw (103.98,113.46)--(150.56,113.67);
+pickup pencircle scaled 0bp;
+fill (102.25,109.71)--(146.82,109.71)--(146.82,107.77)
+ --(102.25,107.77)--(102.25,109.71)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (102.25,109.71)--(146.82,109.71)--(146.82,107.77)
+ --(102.25,107.77)--(102.25,109.71);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92)
+ --(90.4399,117.92)--(90.4399,158.02)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92)
+ --(90.4399,117.92)--(90.4399,158.02);
+drawoptions (withcolor (0,0,0));
+draw (161.86,94.8799)--(164.1,94.8799)--(164.1,92.22)
+ --(161.86,92.22)--(161.86,94.8799);
+drawoptions (withcolor (0.8,0.3,0));
+pickup pencircle scaled 0bp;
+fill (147.32,104.1)--(149.05,104.1)--(149.05,87.97)
+ --(147.32,87.97)--(147.32,104.1)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (147.32,104.1)--(149.05,104.1)--(149.05,87.97)
+ --(147.32,87.97)--(147.32,104.1);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (148.54,104.6)--(150.27,104.6)--(150.27,87.6799)
+ --(148.54,87.6799)--(148.54,104.6)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (148.54,104.6)--(150.27,104.6)--(150.27,87.6799)
+ --(148.54,87.6799)--(148.54,104.6);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (141.2,107.55)--(147.1,107.55)--(147.1,87.25)
+ --(141.2,87.25)--(141.2,107.55)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (141.2,107.55)--(147.1,107.55)--(147.1,87.25)
+ --(141.2,87.25)--(141.2,107.55);
+drawoptions (withcolor (0,0.75,1));
+pickup pencircle scaled 0bp;
+fill (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99)
+ --(143.22,81.2)--(141.49,88.1799)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99)
+ --(143.22,81.2)--(141.49,88.1799);
+drawoptions (withcolor (1,0.4,0));
+pickup pencircle scaled 0bp;
+fill (146.53,110.22)--(165.1,110.22)--(165.1,103.09)
+ --(162.8,103.09)--(152.94,87.97)--(147.32,87.97)
+ --(146.53,110.22)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (146.53,110.22)--(165.1,110.22)--(165.1,103.09)
+ --(162.8,103.09)--(152.94,87.97)--(147.32,87.97)
+ --(146.53,110.22);
+drawoptions (withcolor (1,0.5,0));
+pickup pencircle scaled 0bp;
+fill (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899)
+ --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898)
+ ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45)
+ ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498)
+ --(285.63,30.6599)--(285.92,78.3899)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899)
+ --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898)
+ ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45)
+ ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498)
+ --(285.63,30.6599)--(285.92,78.3899);
+drawoptions (withcolor (0.2,0.9,0.2));
+pickup pencircle scaled 0bp;
+fill (40.1799,214.47)..controls (47.6699,214.47) and (37.0198,202.59)..(40.3999,195.82)
+ ..controls (43.7798,188.98) and (41.0498,194.46)..(47.8899,187.62)
+ ..controls (54.6599,180.78) and (59.4099,178.76)..(59.4099,173.29)
+ ..controls (59.4099,167.82) and (59.4099,166.45)..(60.1299,159.61)
+ ..controls (60.7798,152.77) and (64.8098,145.93)..(65.5298,141.82)
+ ..controls (66.25,137.79) and (68.98,134.34)..(66.25,130.95)
+ ..controls (63.5098,127.57) and (62.7898,127.57)..(52.6399,127.57)
+ ..controls (42.49,127.57) and (42.49,130.3)..(33.6299,125.48)
+ ..controls (24.7798,120.73) and (25.5,116.62)..(18.6599,120.73)
+ ..controls (11.8899,124.76) and (1.65991,128.22)..(1.65991,128.22)
+ --(1.37988,214.47)--(40.1799,214.47)--cycle;
+drawoptions (withcolor (0,0.5,1));
+fill (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799)
+ ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399)
+ ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699)
+ ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299)
+ ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7)
+ ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398)
+ ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26)
+ ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46)
+ ..controls (59.8398,44.9099) and (59.3398,48.5798)..(58.2598,50.3098)
+ --(54.8699,55.6399)--(122.41,51.8999)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799)
+ ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399)
+ ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699)
+ ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299)
+ ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7)
+ ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398)
+ ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26)
+ ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46)
+ ..controls (59.8399,44.9099) and (59.3398,48.5798)..(58.2598,50.3098)
+ --(54.8699,55.6399)--(122.41,51.8999);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (202.04,156.87)--(200.53,112.81)--(234.87,107.26)
+ --(233.29,167.1)--(202.04,156.87);
+drawoptions (withcolor (1,0.25,0.25));
+pickup pencircle scaled 0bp;
+fill (246.9,189.63)--(223.06,177.32)--(202.76,160.26)
+ --(230.55,170.55)--(246.9,189.63)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (246.9,189.63)--(223.06,177.32)--(202.76,160.26)
+ --(230.55,170.55)--(246.9,189.63);
+drawoptions (withcolor (1,0.4,0.4));
+pickup pencircle scaled 0bp;
+fill (246.25,188.98)--(230.98,170.62)--(274.76,169.83)
+ --(246.25,188.98)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (246.25,188.98)--(230.98,170.62)--(274.76,169.83)
+ --(246.25,188.98);
+drawoptions (withcolor (0.3,1,0.3));
+pickup pencircle scaled 0bp;
+fill (255.75,122.1)..controls (252.3,122.1) and (253.02,121.45)..(248.26,125.48)
+ ..controls (243.51,129.58) and (242.79,126.2)..(239.41,135.06)
+ ..controls (236.02,143.91) and (234.01,141.18)..(234.66,148.66)
+ ..controls (235.3,156.22) and (230.62,155.5)..(236.02,163.06)
+ ..controls (241.42,170.55) and (240.13,166.45)..(245.53,174.66)
+ ..controls (251,182.79) and (250.28,185.53)..(255.03,186.9)
+ ..controls (259.78,188.26) and (258.49,194.38)..(264.61,186.9)
+ ..controls (270.66,179.41) and (271.3,174.58)..(276.06,173.94)
+ ..controls (280.88,173.29) and (282.25,175.95)..(282.25,167.82)
+ ..controls (282.25,159.61) and (282.9,154.86)..(277.5,149.38)
+ ..controls (272.02,143.91) and (267.27,145.28)..(266.55,137.07)
+ ..controls (265.9,128.86) and (266.55,124.83)..(263.17,124.11)
+ ..controls (259.78,123.39) and (255.75,122.1)..(255.75,122.1)
+ --cycle;
+drawoptions (withcolor (0.8,0.3,0));
+fill (270.66,52.47)--(276.78,52.47)--(276.78,0.629883)
+ --(270.66,0.629883)--(270.66,52.47)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (270.66,52.47)--(276.78,52.47)--(276.78,0.629898)
+ --(270.66,0.629898)--(270.66,52.47);
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 0bp;
+fill (90.5798,158.02)--(92.0198,158.02)--(92.0198,152.84)
+ --(90.5798,152.84)--(90.5798,158.02)--cycle;
+fill (90.5798,147.66)--(92.0198,147.66)--(92.0198,142.47)
+ --(90.5798,142.47)--(90.5798,147.66)--cycle;
+fill (90.5798,137.43)--(92.0198,137.43)--(92.0198,132.25)
+ --(90.5798,132.25)--(90.5798,137.43)--cycle;
+fill (90.5798,128.14)--(92.0198,128.14)--(92.0198,122.96)
+ --(90.5798,122.96)--(90.5798,128.14)--cycle;
+drawoptions (withcolor (1,0.9,0));
+fill (203.34,160.98)--(200.53,160.98)--(199.38,155.29)
+ --(233.22,167.17)--(236.02,169.98)--(230.34,169.98)
+ --(203.34,160.98)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (203.34,160.98)--(200.53,160.98)--(199.38,155.29)
+ --(233.22,167.17)--(236.02,169.98)--(230.34,169.98)
+ --(203.34,160.98);
+drawoptions (withcolor (1,1,0.7));
+pickup pencircle scaled 0bp;
+fill (232.14,166.59)--(235.52,107.77)--(202.11,112.52)
+ --(202.83,155.65)--(232.14,166.59)--cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+pickup pencircle scaled 0.22bp;
+draw (232.14,166.59)--(235.52,107.77)--(202.11,112.52)
+ --(202.83,155.65)--(232.14,166.59);
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (214.42,156.3)--(214.42,145.35)--(217.81,146.07)
+ --(217.16,157.66)--(214.42,156.3);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (219.9,133.04)--(219.75,109.86)--(230.77,108.42)
+ --(230.12,133.04)--(219.9,133.04);
+drawoptions (withcolor (0,0.8,0));
+pickup pencircle scaled 0bp;
+fill (212.34,118.64)..controls (217.16,122.1) and (219.82,117.34)..(221.19,126.2)
+ ..controls (222.56,135.13) and (224.65,137.86)..(221.91,141.25)
+ ..controls (219.18,144.7) and (213.06,146.07)..(213.06,146.07)
+ ..controls (213.06,146.07) and (213.7,152.26)..(208.3,149.46)
+ ..controls (202.83,146.72) and (196.06,153.42)..(196.06,145.93)
+ ..controls (196.06,138.37) and (200.1,135.13)..(203.55,131.67)
+ ..controls (206.94,128.29) and (206.22,127.57)..(207.58,124.18)
+ ..controls (208.95,120.73) and (212.34,118.64)..(212.34,118.64)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (251.86,122.1)--(257.34,122.1)--(257.34,92.0698)
+ --(251.86,92.0698)--(251.86,122.1)--cycle;
+pickup pencircle scaled 0.86bp;
+draw (251.86,122.1)--(257.34,122.1)--(257.34,92.0698)
+ --(251.86,92.0698)--(251.86,122.1);
+drawoptions (withcolor (0.6,0.85,1));
+pickup pencircle scaled 0bp;
+fill (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99)
+ ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95)
+ ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898)
+ ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599)
+ ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599)
+ ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898)
+ ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47)
+ ..controls (55.1599,54.99) and (55.1599,55.3499)..(55.1599,58.1599)
+ ..controls (55.1599,60.97) and (59.8398,64.4199)..(59.8398,64.4199)
+ --(116.5,62.8398)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99)
+ ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95)
+ ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898)
+ ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599)
+ ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599)
+ ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898)
+ ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47)
+ ..controls (55.1599,54.99) and (55.1599,55.3498)..(55.1599,58.1599)
+ ..controls (55.1599,60.97) and (59.8399,64.4199)..(59.8399,64.4199)
+ --(116.5,62.8398);
+drawoptions (withcolor (0.8,0.9,1));
+pickup pencircle scaled 0bp;
+fill (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5)
+ ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399)
+ ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398)
+ ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399)
+ --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398)
+ ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25)
+ ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198)
+ --(63.3699,63.49)--(63.3699,81.4199)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5)
+ ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399)
+ ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398)
+ ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399)
+ --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398)
+ ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25)
+ ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198)
+ --(63.3699,63.49)--(63.3699,81.4199);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26)
+ ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398)
+ --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76)
+ ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099)
+ ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298)
+ ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498)
+ ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26)
+ ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398)
+ --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76)
+ ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099)
+ ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298)
+ ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498)
+ ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098)
+ ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199)
+ ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76)
+ ..controls (105.85,70.76) and (93.6099,70.3999)..(93.6099,70.3999)
+ ..controls (93.6099,70.3999) and (91.45,71.3398)..(91.45,72.9199)
+ ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098)
+ --(93.0298,79.8298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098)
+ ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199)
+ ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76)
+ ..controls (105.85,70.76) and (93.6098,70.3999)..(93.6098,70.3999)
+ ..controls (93.6098,70.3999) and (91.45,71.3399)..(91.45,72.9199)
+ ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098)
+ --(93.0298,79.8298);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298)
+ --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99)
+ ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898)
+ ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799)
+ --(95.48,61.3298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298)
+ --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99)
+ ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898)
+ ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799)
+ --(95.48,61.3298);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399)
+ ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7)
+ ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199)
+ --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74)
+ --(84.5398,60.0298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399)
+ ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7)
+ ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199)
+ --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74)
+ --(84.5398,60.0298);
+drawoptions (withcolor (0,0.7,1));
+pickup pencircle scaled 2.23bp;
+draw (65.3799,59.8198)..controls (70.6399,63.0598) and (81.22,66.6599)..(88.2798,66.4399)
+ ..controls (95.2598,66.22) and (111.97,65.2898)..(115.64,61.47);
+drawoptions (withcolor (0.4,0.8,1));
+pickup pencircle scaled 0bp;
+fill (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899)
+ ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899)
+ --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199)
+ --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898)
+ ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899)
+ ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899)
+ --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199)
+ --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898)
+ ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 2.81bp;
+draw (113.84,72.8498)..controls (114.92,72.8498) and (116.29,72.8498)..(118.16,71.7)
+ ..controls (119.96,70.5398) and (119.53,70.5398)..(121.11,68.96)
+ ..controls (122.62,67.3799) and (121.98,66.22)..(121.98,66.22)
+ ..controls (121.98,66.22) and (120.82,65.5798)..(119.02,65.5798)
+ ..controls (117.22,65.5798) and (111.82,65.0698)..(109.74,65.0698)
+ ..controls (107.72,65.0698) and (103.4,65.0698)..(99.7998,65.0698)
+ ..controls (96.2,65.0698) and (90.9399,64.8599)..(88.2798,64.8599)
+ ..controls (85.5398,64.8599) and (79.4199,64.1399)..(76.47,63.9199)
+ ..controls (73.5198,63.7) and (69.49,63.7)..(66.0999,63.7)
+ ..controls (62.72,63.7) and (63.7998,62.7698)..(61.3499,64.1399)
+ ..controls (58.8298,65.5798) and (57.97,64.2099)..(57.97,66.6599)
+ ..controls (57.97,69.1799) and (56.8198,69.46)..(59.3398,71.7)
+ ..controls (61.7798,73.9299) and (61.3499,73.0598)..(63.1499,73.0598);
+pickup pencircle scaled 2.23bp;
+draw (57.97,67.0899)--(57.97,59.1699);
+draw (62.9399,62.7698)--(62.9399,51.25);
+draw (90.2998,64.8598)--(91.45,48.9399);
+draw (121.26,66.01)--(120.61,54.6299);
+draw (60.9199,72.8499)--(62,66.01);
+draw (114.7,72.5598)--(114.7,67.3799);
+pickup pencircle scaled 2.81bp;
+draw (84.6099,87.0999)--(84.8999,94.3799);
+draw (96.8498,86.46)--(96.8498,90.7798);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73)
+ ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21)
+ ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73)
+ ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25)
+ --cycle;
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 2.23bp;
+draw (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73)
+ ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21)
+ ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73)
+ ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25)
+ --cycle;
+drawoptions (withcolor (1,0.4,0));
+pickup pencircle scaled 0bp;
+fill (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699951)
+ --(277.14,0.699951)--(277.14,29.4299)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699936)
+ --(277.14,0.699936)--(277.14,29.4299);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (271.16,51.75)--(276.49,52.6199)--(276.7,49.95)
+ --(271.16,48.9399)--(271.16,51.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (271.16,51.75)--(276.49,52.6199)--(276.7,49.95)
+ --(271.16,48.9399)--(271.16,51.75);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298)
+ --(277.64,29.3599)--(285.56,29.3599)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298)
+ --(277.64,29.3599)--(285.56,29.3599);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (165.82,104.53)--(172.95,104.53)--(172.95,102.08)
+ --(165.82,102.08)--(165.82,104.53)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (165.82,104.53)--(172.95,104.53)--(172.95,102.08)
+ --(165.82,102.08)--(165.82,104.53);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22)
+ ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22)
+ ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699)
+ ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799)
+ ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74)
+ ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298)
+ ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599)
+ ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22)
+ ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22)
+ ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699)
+ ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799)
+ ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74)
+ ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298)
+ ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599)
+ ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599)
+ --(161.94,93.6599)--(161.94,92.6499)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599)
+ --(161.94,93.6599)--(161.94,92.6499);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (147.25,105.9)--(150.34,105.9)--(150.34,104.53)
+ --(147.25,104.53)--(147.25,105.9)--cycle;
+drawoptions (withcolor (0.1,0.1,0.1));
+pickup pencircle scaled 0.86bp;
+draw (147.25,105.9)--(150.34,105.9)--(150.34,104.53)
+ --(147.25,104.53)--(147.25,105.9);
+drawoptions (withcolor (0,0.7,1));
+pickup pencircle scaled 0bp;
+fill (105.85,90.6299)..controls (110.82,92.5) and (110.82,92)..(113.98,92.9399)
+ ..controls (117.08,93.7998) and (117.58,92.5)..(120.25,92.5)
+ ..controls (122.91,92.5) and (128.67,92)..(130.62,92)
+ --(135.58,92)--(141.85,93.3699)--(143.22,82.5)
+ --(154.45,82.5)--(159.78,79.3298)..controls (159.78,79.3298) and (159.34,72.1299)..(155.74,72.1299)
+ ..controls (152.22,72.1299) and (147.61,69.3899)..(144.08,72.1299)
+ ..controls (140.55,74.7898) and (136.88,75.22)..(134.22,74.7898)
+ ..controls (131.55,74.3599) and (126.94,73.9299)..(123.42,73.9299)
+ ..controls (119.82,73.9299) and (113.05,73.9299)..(113.05,73.9299)
+ --(111.25,82.9299)--(105.85,87.46)--(105.85,90.6299)
+ --cycle;
+drawoptions (withcolor (0,0.4,1));
+fill (109.88,100.93)..controls (116.22,103.45) and (119.82,103.23)..(123.85,103.66)
+ ..controls (127.95,104.1) and (132.49,104.89)..(133.35,104.6)
+ --(138.75,102.8)--(136.02,99.6299)..controls (136.02,99.6299) and (138.25,93.2998)..(136.02,95.0999)
+ ..controls (133.78,96.8999) and (130.18,96.8999)..(127.02,97.3298)
+ ..controls (123.85,97.76) and (118.45,95.5298)..(121.18,95.5298)
+ ..controls (123.85,95.5298) and (131.98,95.5298)..(134.65,94.23)
+ --(139.18,91.9299)..controls (139.18,91.9299) and (112.18,91.9299)..(108.51,91.9299)
+ ..controls (104.91,91.9299) and (104.55,96.0298)..(106.78,96.0298)
+ ..controls (109.02,96.0298) and (115.78,98.7)..(115.78,98.7)
+ --(107.65,100.06)--(109.88,100.93)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (45.9399,128.07)..controls (45.9399,128.07) and (45.0798,122.6)..(45.9399,118.57)
+ ..controls (46.8799,114.54) and (45.9399,113.17)..(47.3098,110.43)
+ ..controls (48.6799,107.77) and (50.48,104.17)..(50.48,104.17)
+ --(54.9399,101.5)--(52.71,99.6299)--(47.74,99.6299)
+ --(43.21,103.3)--(41.9099,114.03)--(41.4099,123.1)
+ --(40.98,127.64)--(45.9399,128.07)--cycle;
+fill (45.0798,95.1699)..controls (45.0798,95.1699) and (42.2698,98.7)..(41.4099,101.94)
+ ..controls (40.5398,105.1) and (38.74,111.37)..(38.74,114.97)
+ ..controls (38.74,118.57) and (38.74,128.07)..(38.74,128.07)
+ --(31.5398,124.04)..controls (31.5398,124.04) and (31.0398,119.5)..(31.5398,116.34)
+ ..controls (31.98,113.17) and (32.8398,108.2)..(33.3398,105.1)
+ ..controls (33.7798,101.94) and (34.21,100.57)..(34.21,97.8298)
+ ..controls (34.21,95.1699) and (39.6799,94.23)..(39.6799,94.23)
+ --(45.0798,95.1699)--cycle;
+fill (27.9399,87.46)..controls (27.9399,87.46) and (27.5098,96.46)..(27.5098,99.2)
+ ..controls (27.5098,101.94) and (27.5098,113.17)..(27.5098,113.17)
+ --(27.0798,120.37)--(22.98,119.07)--(15.3398,123.61)
+ ..controls (15.3398,123.61) and (15.3398,113.6)..(15.3398,110.94)
+ ..controls (15.3398,108.2) and (15.7798,101.5)..(15.3398,96.97)
+ ..controls (14.9099,92.4299) and (15.7798,92)..(14.9099,88.8298)
+ ..controls (13.98,85.6599) and (21.1799,86.5298)..(21.1799,86.5298)
+ --(26.1399,85.23)--(27.9399,87.46)--cycle;
+fill (1.37988,78.3899)--(15.3398,77.5298)..controls (15.3398,77.5298) and (14.8398,80.7)..(13.5398,83.3599)
+ ..controls (12.1799,86.0999) and (7.63989,86.96)..(6.77979,92.8599)
+ ..controls (5.83984,98.7698) and (4.53979,102.8)..(4.53979,107.77)
+ ..controls (4.53979,112.74) and (4.10986,127.21)..(4.10986,127.21)
+ --(1.37988,127.64)--(1.37988,78.3899)--cycle;
+drawoptions (withcolor (0,0.75,1));
+fill (220.62,63.9199)--(217.45,58.5198)--(223.78,51.6799)
+ ..controls (223.78,51.6799) and (230.98,47.22)..(234.15,46.2798)
+ ..controls (237.32,45.3398) and (244.52,43.5398)..(244.52,43.5398)
+ --(257.12,43.5398)--(261.66,44.0498)--(267.42,42.6799)
+ --(266.55,36.3398)--(259.78,32.74)..controls (259.78,32.74) and (254.46,30.9399)..(248.98,32.74)
+ ..controls (243.58,34.5398) and (240.92,34.1099)..(236.38,34.98)
+ ..controls (231.85,35.9099) and (222.42,37.71)..(221.98,40.45)
+ ..controls (221.55,43.1099) and (219.32,49.0198)..(219.32,49.0198)
+ --(217.45,54.4199)--(218.38,62.5498)--(220.62,63.9199)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (219.75,63.9199)--(235.02,63.9199)..controls (235.02,63.9199) and (238.18,63.9199)..(243.15,62.1199)
+ ..controls (248.12,60.3198) and (257.12,56.22)..(257.12,56.22)
+ --(262.09,51.25)--(266.98,48.5798)--(266.98,42.6799)
+ --(260.72,44.0498)--(246.32,41.74)--(231.42,46.7798)
+ --(222.42,52.1799)--(218.82,57.1499)--(219.75,63.9199)
+ --cycle;
+drawoptions (withcolor (1,0.9,0));
+fill (223.78,55.7798)--(227.38,60.75)--(231.42,61.6899)
+ ..controls (231.42,61.6899) and (235.88,61.6899)..(238.62,61.26)
+ ..controls (241.35,60.75) and (245.38,59.3799)..(248.12,57.5798)
+ ..controls (250.78,55.7798) and (256.18,52.6199)..(256.18,52.6199)
+ --(254.89,48.5798)--(249.42,46.2798)--(243.58,48.0798)
+ --(237.75,53.0498)--(233.65,54.9199)--(223.78,55.7798)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+fill (221.34,54.4199)--(224.65,50.3799)..controls (224.65,50.3799) and (229.62,47.6499)..(232.35,46.7798)
+ ..controls (235.02,45.8499) and (240.56,44.6199)..(240.92,44.48)
+ --(246.75,42.25)--(251.29,48.0798)--(243.58,51.25)
+ --(236.02,54.4199)--(229.18,56.22)--(221.34,54.4199)
+ --cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+fill (219.32,63.0598)--(219.32,58.0198)--(224.22,51.25)
+ ..controls (224.22,51.25) and (231.92,47.22)..(235.02,45.8499)
+ ..controls (238.18,44.48) and (243.15,43.1099)..(245.89,43.1099)
+ ..controls (248.55,43.1099) and (253.09,43.1099)..(255.75,43.1099)
+ ..controls (258.42,43.1099) and (262.02,44.0498)..(264.32,43.1099)
+ ..controls (266.55,42.25) and (267.42,40.45)..(267.42,40.45)
+ --(262.09,38.6499)..controls (262.09,38.6499) and (255.75,38.6499)..(251.65,38.6499)
+ ..controls (247.62,38.6499) and (240.92,39.51)..(237.32,40.45)
+ ..controls (233.65,41.3098) and (226.88,43.98)..(223.78,47.22)
+ ..controls (220.62,50.3799) and (218.38,53.98)..(218.38,53.98)
+ --(219.32,63.0598)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992)
+ --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992)
+ --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899)
+ --(271.16,48.9399)--(271.16,51.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899)
+ --(271.16,48.9399)--(271.16,51.75);
+drawoptions (withcolor (0.6,0.85,1));
+pickup pencircle scaled 0bp;
+fill (121.98,48.0798)..controls (129.82,48.51) and (138.9,48.51)..(143.36,48.51)
+ ..controls (147.75,48.51) and (157.69,51.6799)..(163.52,49.0198)
+ ..controls (169.42,46.2798) and (168.99,44.0498)..(174.82,43.5398)
+ ..controls (180.66,43.1099) and (189.66,39.51)..(189.66,39.51)
+ ..controls (189.66,39.51) and (190.52,35.8398)..(193.26,34.0398)
+ ..controls (195.99,32.24) and (185.62,29.5)..(185.62,29.5)
+ --(173.89,35.8398)..controls (173.89,35.8398) and (156.32,40.8799)..(152.72,40.8799)
+ ..controls (149.12,40.8799) and (134.79,39.9399)..(134.79,39.9399)
+ ..controls (134.79,39.9399) and (130.69,34.47)..(140.19,34.0398)
+ ..controls (149.55,33.6099) and (157.69,30.9399)..(157.69,30.9399)
+ ..controls (157.69,30.9399) and (156.32,25.47)..(152.72,25.47)
+ ..controls (149.12,25.47) and (129.82,26.4099)..(125.36,26.4099)
+ ..controls (120.82,26.4099) and (103.62,28.21)..(108.51,30.9399)
+ ..controls (113.48,33.6099) and (116.79,41.3098)..(116.79,41.3098)
+ ..controls (116.79,41.3098) and (118.59,46.71)..(121.98,48.0798)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+fill (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199)
+ --(273.68,54.99)--(266.12,54.1299)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199)
+ --(273.68,54.99)--(266.12,54.1299);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (189.73,159.75)--(185.05,155.07)--(176.19,155.07)
+ --(181.09,159.75)--(189.73,159.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (189.73,159.75)--(185.05,155.07)--(176.19,155.07)
+ --(181.09,159.75)--(189.73,159.75);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89)
+ ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91)
+ ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46)
+ --(190.59,103.16)--(193.98,104.02)--(194.41,106.54)
+ ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02)
+ ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54)
+ --(191.24,121.45)--cycle;
+pickup pencircle scaled 0.86bp;
+draw (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89)
+ ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91)
+ ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46)
+ --(190.59,103.16)--(193.98,104.02)--(194.41,106.54)
+ ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02)
+ ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54)
+ --(191.24,121.45);
+pickup pencircle scaled 0bp;
+fill (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3398)..(216.01,102.73)
+ ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22)
+ ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06)
+ ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37)
+ --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98)
+ ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3)
+ ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98)
+ ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94)
+ --(211.4,99.3398)--(213.27,98.7)--(216.58,98.5498)
+ --cycle;
+pickup pencircle scaled 0.86bp;
+draw (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3399)..(216.01,102.73)
+ ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22)
+ ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06)
+ ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37)
+ --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98)
+ ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3)
+ ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98)
+ ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94)
+ --(211.4,99.3399)--(213.27,98.6999)--(216.58,98.5498);
+pickup pencircle scaled 0bp;
+fill (184.54,108.78)--(184.54,114.46)--(183.46,116.19)
+ --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16)
+ ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64)
+ --(184.54,108.78)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (184.54,108.78)--(184.54,114.46)--(183.46,116.19)
+ --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16)
+ ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64)
+ --(184.54,108.78);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68)
+ ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3)
+ --(176.98,109.64)--(176.98,113.46)--(176.98,116.55)
+ --(178.28,117.85)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68)
+ ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3)
+ --(176.98,109.64)--(176.98,113.46)--(176.98,116.55)
+ --(178.28,117.85);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16)
+ ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85)
+ --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9)
+ ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86)
+ --(179.5,108.99)--(180.51,109.21)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16)
+ ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85)
+ --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9)
+ ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86)
+ --(179.5,108.99)--(180.51,109.21);
+drawoptions (withcolor (0,0.5,0));
+pickup pencircle scaled 0bp;
+fill (192.46,150.97)..controls (185.55,150.54) and (182.6,151.98)..(182.38,148.88)
+ ..controls (182.24,145.71) and (184.54,150.97)..(185.34,145.28)
+ ..controls (186.2,139.59) and (186.85,138.51)..(186.85,136.21)
+ ..controls (186.85,133.9) and (188.86,133.9)..(189.3,136.42)
+ ..controls (189.73,138.94) and (190.02,140.89)..(192.1,142.11)
+ ..controls (194.19,143.41) and (195.06,146.94)..(191.46,146.5)
+ ..controls (187.86,146.14) and (190.59,149.89)..(190.59,149.89)
+ --(192.46,150.97)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (221.77,159.61)--(227.17,163.06)--(226.52,146.65)
+ --(222.42,145.93)--(221.77,159.61);
+draw (207.8,155.43)--(205.28,153.92)--(205.28,149.1);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (204.63,125.48)--(204.63,118.28)--(209.24,117.63);
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (224,160.9)--(224.14,148.88);
+draw (222.06,154.78)--(226.88,157.09);
+draw (216.01,151.62)--(215.79,145.71);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (223.5,130.52)--(227.96,130.52)--(228.18,124.4);
+draw (222.7,118.28)--(222.7,115.76)--(228.39,115.11);
+draw (222.27,123.32)--(227.53,123.18);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (240.42,126.27)--(236.82,126.7)--(236.82,113.17)
+ --(241.35,113.17)--(240.42,126.27)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (240.42,126.27)--(236.82,126.7)--(236.82,113.17)
+ --(241.35,113.17)--(240.42,126.27);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (246.75,126.7)--(242.65,126.7)--(243.58,112.23)
+ --(248.12,111.8)--(248.55,119.07)--(246.75,126.7)
+ --cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (246.75,126.7)--(242.65,126.7)--(243.58,112.23)
+ --(248.12,111.8)--(248.55,119.07)--(246.75,126.7);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (258.7,119.79)--(258.7,111.66)--(262.74,111.66)
+ --(263.24,123.82)--(258.27,122.96)--(258.7,119.79)
+ --cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (258.7,119.79)--(258.7,111.66)--(262.74,111.66)
+ --(263.24,123.82)--(258.27,122.96)--(258.7,119.79);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (269.36,126.49)--(264.82,126.49)--(265.33,110.22)
+ --(270.73,110.22)--(269.36,126.49)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (269.36,126.49)--(264.82,126.49)--(265.33,110.22)
+ --(270.73,110.22)--(269.36,126.49);
+drawoptions (withcolor (1,0.8,0.8));
+pickup pencircle scaled 0bp;
+fill (273.32,101.5)--(285.92,98.26)--(285.92,156.58)
+ --(273.32,145.28)--(273.32,101.5)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (273.32,101.5)--(285.92,98.26)--(285.92,156.58)
+ --(273.32,145.28)--(273.32,101.5);
+drawoptions (withcolor (0.95,0.95,0.95));
+pickup pencircle scaled 0bp;
+fill (277.86,125.41)--(276.92,109.57)--(285.92,107.77)
+ --(285.49,123.61)--(277.86,125.41)--cycle;
+drawoptions (withcolor (0.6,0.6,0.6));
+pickup pencircle scaled 1.44bp;
+draw (277.86,125.41)--(276.92,109.57)--(285.92,107.77)
+ --(285.49,123.61)--(277.86,125.41);
+drawoptions (withcolor (0.9,0.9,0.9));
+pickup pencircle scaled 0bp;
+fill (278.29,125.84)--(285.49,123.61)--(285.92,131.24)
+ --(278.29,132.18)--(278.29,125.84)--cycle;
+drawoptions (withcolor (0.6,0.6,0.6));
+pickup pencircle scaled 1.44bp;
+draw (278.29,125.84)--(285.49,123.61)--(285.92,131.24)
+ --(278.29,132.18)--(278.29,125.84);
+pickup pencircle scaled 0.86bp;
+draw (237.32,121.3)--(240.42,121.3);
+drawoptions (withcolor (0.5,0.5,0.5));
+draw (243.15,121.3)--(248.12,120.87);
+draw (259.35,120.37)--(262.52,119.94);
+draw (265.69,121.3)--(269.22,120.87);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94)
+ ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86)
+ ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76)
+ ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798)
+ ..controls (171.51,76.0898) and (170.43,76.5898)..(169.35,77.0198)
+ ..controls (168.27,77.46) and (167.12,77.96)..(166.04,78.3198)
+ ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299)
+ ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94)
+ ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86)
+ ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76)
+ ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798)
+ ..controls (171.51,76.0899) and (170.43,76.5898)..(169.35,77.0198)
+ ..controls (168.27,77.4599) and (167.12,77.9599)..(166.04,78.3198)
+ ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299)
+ ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86)
+ --cycle;
+drawoptions (withcolor (0,0.6,0));
+pickup pencircle scaled 0bp;
+fill (25.21,151.54)..controls (35.4299,157.66) and (33.3398,161.05)..(32.7,169.33)
+ ..controls (32.0498,177.54) and (29.3098,183.01)..(30.6799,189.13)
+ ..controls (32.0498,195.32) and (25.9299,187.04)..(23.8398,181.57)
+ ..controls (21.8198,176.17) and (13.6199,171.34)..(13.6199,171.34)
+ ..controls (13.6199,171.34) and (5.47998,167.89)..(8.85986,179.55)
+ ..controls (12.25,191.22) and (5.47998,189.78)..(5.47998,185.02)
+ ..controls (5.47998,180.27) and (3.38989,170.62)..(5.47998,164.5)
+ ..controls (7.5,158.38) and (12.3198,157.66)..(12.97,161.05)
+ ..controls (13.6199,164.5) and (17.0698,159.68)..(17.0698,152.19)
+ ..controls (17.0698,144.7) and (25.21,151.54)..(25.21,151.54)
+ --cycle;
+fill (38.8198,143.98)..controls (44.2898,150.18) and (44.2898,155)..(44.2898,159.75)
+ ..controls (44.2898,164.5) and (43.5698,178.18)..(46.2998,174.73)
+ ..controls (49.0398,171.34) and (53.7898,163.86)..(53.7898,158.38)
+ ..controls (53.7898,152.91) and (46.3799,148.09)..(51.1299,143.98)
+ ..controls (55.8799,139.88) and (59.2598,136.5)..(50.4099,136.5)
+ ..controls (41.5498,136.5) and (34.0598,134.41)..(34.0598,134.41)
+ --(38.8198,143.98)--cycle;
+drawoptions (withcolor (0,0.8,0));
+fill (254.6,137.86)..controls (254.6,145.42) and (251.14,148.16)..(254.6,155)
+ ..controls (257.98,161.84) and (261.44,170.7)..(261.44,170.7)
+ ..controls (261.44,170.7) and (262.74,170.7)..(262.74,165.94)
+ ..controls (262.74,161.12) and (268.93,156.3)..(268.93,156.3)
+ --(269.58,149.46)--(262.09,141.97)..controls (262.09,141.97) and (262.09,139.23)..(262.09,134.48)
+ ..controls (262.09,129.66) and (254.6,137.86)..(254.6,137.86)
+ --cycle;
+drawoptions (withcolor (0.95,0.95,0.95));
+fill (80.3599,197.34)..controls (117.8,197.34) and (98.0698,202.81)..(123.92,202.81)
+ ..controls (149.77,202.81) and (150.42,203.53)..(162.66,200.79)
+ ..controls (174.97,198.06) and (174.25,195.25)..(185.84,193.23)
+ ..controls (197.43,191.22) and (206.29,189.78)..(204.92,185.02)
+ ..controls (203.55,180.27) and (180.44,174.15)..(174.97,176.82)
+ ..controls (169.5,179.55) and (155.17,184.38)..(150.42,184.38)
+ ..controls (145.66,184.38) and (110.31,192.58)..(110.31,192.58)
+ ..controls (110.31,192.58) and (102.82,188.41)..(115.14,185.74)
+ ..controls (127.38,183.01) and (154.52,178.9)..(142.28,172.71)
+ ..controls (130.04,166.52) and (115.78,176.17)..(106.93,176.17)
+ ..controls (98.0698,176.17) and (85.1799,176.82)..(78.99,179.55)
+ ..controls (72.8699,182.29) and (61.2798,190.5)..(54.5098,193.95)
+ ..controls (47.6699,197.34) and (49.6899,205.54)..(59.2598,204.18)
+ ..controls (68.7698,202.81) and (80.3599,197.34)..(80.3599,197.34)
+ --cycle;
+drawoptions (withcolor (1,0.4,0));
+fill (14.3398,40.8098)..controls (21.8198,45.5598) and (32.7,53.0498)..(34.7798,56.5)
+ ..controls (36.7998,59.8899) and (37.45,49.6599)..(37.45,49.6599)
+ --(45.6599,57.1499)--(45.6599,47.6499)..controls (45.6599,47.6499) and (42.2,42.8198)..(39.5398,38)
+ ..controls (36.7998,33.25) and (22.47,18.2)..(22.47,18.2)
+ --(19.8098,25.0398)--(25.21,34.6199)--(23.8398,41.46)
+ --(12.25,35.26)--(14.3398,40.8098)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+fill (257.98,96.1799)--(278.43,94.8098)--(264.18,92.72)
+ --(255.25,92.72)--(257.98,96.1799)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+fill (215.14,102.37)..controls (215.14,102.37) and (217.16,100.28)..(220.54,100.28)
+ ..controls (224,100.28) and (230.77,99.5598)..(230.77,99.5598)
+ --(227.31,98.1899)--(215.79,97.5398)--(215.14,102.37)
+ --cycle;
+fill (193.98,104.38)--(204.92,104.38)--(203.55,100.93)
+ --(193.33,102.37)--(193.98,104.38)--cycle;
+drawoptions (withcolor (0,0.5,1));
+fill (266.12,11.8599)..controls (260.65,15.25) and (251.79,18.7)..(246.32,18.7)
+ ..controls (240.85,18.7) and (239.48,17.3398)..(230.62,17.3398)
+ ..controls (221.7,17.3398) and (212.91,15.97)..(206.07,17.3398)
+ ..controls (199.23,18.7) and (191.74,16.6199)..(186.92,16.6199)
+ ..controls (182.17,16.6199) and (183.54,11.1399)..(178.06,10.5)
+ ..controls (172.59,9.77979) and (171.94,5.66992)..(167.84,5.66992)
+ ..controls (163.74,5.66992) and (159.06,0.849854)..(168.49,0.849854)
+ ..controls (177.92,0.849854) and (266.12,0.699951)..(266.12,1.41992)
+ --(266.12,11.8599)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (1.01978,215.34)--(286.28,215.34)--(286.28,0.849854)
+ --(1.01978,0.849854)--(1.01978,215.34);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398)
+ --(277.42,31.6599)--(286.28,31.6599)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398)
+ --(277.42,31.6599)--(286.28,31.6599);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 2.81bp;
+draw (69.2698,192.73)..controls (74.74,190.71) and (75.46,185.89)..(75.46,185.89)
+ --(81.5798,185.24);
+draw (62.1399,178.62)..controls (67.5398,176.6) and (69.7,176.89)..(69.7,176.89)
+ --(72.4399,180.27);
+draw (52.3499,196.11)..controls (57.8198,194.02) and (58.47,189.27)..(58.47,189.27)
+ --(61.21,192.66);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 2.23bp;
+draw (173.17,30.73)..controls (173.17,29.72) and (173.38,28.5)..(173.38,28.5)
+ --(175.18,29.0698);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (168.99,32.74)..controls (170.5,34.3999) and (171.51,33.1799)..(172.88,32.5298)
+ ..controls (174.25,31.8799) and (175.98,32.3098)..(175.11,31.23)
+ ..controls (174.32,30.22) and (168.56,29.3599)..(168.56,29.6499)
+ --(168.63,30.9399)--(168.13,31.6599)--(168.99,32.74)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (173.24,32.3098)..controls (173.24,33.3198) and (173.46,34.5398)..(173.46,34.5398)
+ --(175.33,33.97);
+drawoptions (withcolor (0,0,0));
+draw (184.33,24.3899)..controls (184.33,23.3799) and (184.54,22.1599)..(184.54,22.1599)
+ --(186.42,22.8098);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (180.22,26.4099)..controls (181.74,28.0598) and (182.67,26.8398)..(184.04,26.1899)
+ ..controls (185.41,25.5398) and (187.14,25.98)..(186.34,24.97)
+ ..controls (185.55,23.8899) and (179.72,23.0198)..(179.72,23.3098)
+ --(179.86,24.6099)--(179.29,25.3999)--(180.22,26.4099)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (184.47,25.98)..controls (184.47,26.98) and (184.69,28.21)..(184.69,28.21)
+ --(186.56,27.6299);
+drawoptions (withcolor (0,0,0));
+draw (195.7,34.8298)..controls (195.7,33.75) and (195.92,32.5298)..(195.92,32.5298)
+ --(197.79,33.1799);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (191.6,36.7798)..controls (193.04,38.5) and (194.05,37.2798)..(195.42,36.6299)
+ ..controls (196.78,35.9099) and (198.51,36.3398)..(197.72,35.3398)
+ ..controls (196.86,34.3298) and (191.1,33.46)..(191.1,33.6799)
+ --(191.24,35.0498)--(190.66,35.7698)--(191.6,36.7798)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (195.85,36.3398)..controls (195.85,37.4199) and (196.06,38.6499)..(196.06,38.6499)
+ --(197.94,38);
+drawoptions (withcolor (0,0,0));
+draw (198.44,26.26)..controls (198.44,25.1799) and (198.66,23.96)..(198.66,23.96)
+ --(200.53,24.6099);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (194.34,28.21)..controls (195.85,29.9399) and (196.78,28.71)..(198.15,28.0598)
+ ..controls (199.52,27.3398) and (201.25,27.7798)..(200.46,26.7698)
+ ..controls (199.66,25.76) and (193.83,24.8999)..(193.83,25.1099)
+ --(193.98,26.48)--(193.4,27.2)--(194.34,28.21)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (198.58,27.7798)..controls (198.58,28.8599) and (198.8,30.0798)..(198.8,30.0798)
+ --(200.67,29.4299);
+drawoptions (withcolor (0,0,0));
+draw (157.47,21.0798)..controls (157.47,20) and (157.76,18.7798)..(157.76,18.7798)
+ --(159.56,19.4199);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (153.37,23.0198)..controls (154.88,24.75) and (155.82,23.5298)..(157.18,22.8799)
+ ..controls (158.62,22.1599) and (160.35,22.5898)..(159.49,21.5798)
+ ..controls (158.7,20.5798) and (152.86,19.71)..(152.86,19.9299)
+ --(153.01,21.2998)--(152.43,22.0198)--(153.37,23.0198)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (157.62,22.5899)..controls (157.62,23.6699) and (157.83,24.8999)..(157.83,24.8999)
+ --(159.7,24.25);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (114.85,113.6)--(114.85,109.71);
+draw (124.64,113.6)--(124.64,109.28);
+draw (135.01,113.46)--(135.01,109.93);
+draw (144.08,113.46)--(144.08,110.07);
+pickup pencircle scaled 0bp;
+fill (191.38,89.98)--(212.55,83.7898)--(212.55,78.3198)
+ --(219.39,72.1299)--(218.02,67.3799)--(204.34,74.22)
+ --(205.06,80.3398)--(192.1,85.8799)--(191.38,89.98)
+ --cycle;
+fill (275.98,73.5)--(263.02,76.95)--(258.27,71.48)
+ --(250.06,72.8499)--(248.7,67.3799)--(261.01,65.2898)
+ --(267.13,71.48)--(275.98,68.0999)--(275.98,73.5)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (69.2698,75.5798)--(75.46,76.95);
+drawoptions (withcolor (0.3,0.3,0.3));
+draw (98.8599,77.6699)--(105.92,76.5198);
+drawoptions (withcolor (0.5,0.5,0.5));
+draw (72.9399,74.1399)--(76.3999,74.6499);
+drawoptions (withcolor (0.4,0.4,0.4));
+draw (101.17,75.4399)--(105.63,74.5);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (15.0598,62.3398)--(16.5698,62.3398)..controls (17.0698,62.3398) and (17.4299,62.7)..(17.4299,63.2)
+ --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74)
+ --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799)
+ --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3398)..(15.0598,62.3398)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (15.0598,62.3399)--(16.5698,62.3399)..controls (17.0698,62.3399) and (17.4299,62.7)..(17.4299,63.2)
+ --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74)
+ --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799)
+ --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3399)..(15.0598,62.3399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (13.3298,70.1099)--(18.0098,70.1099)..controls (18.5798,70.1099) and (19.0198,69.6799)..(19.0198,69.1799)
+ --(19.0198,67.95)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198)
+ --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.95)
+ --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1099)..(13.3298,70.1099)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 1.44bp;
+draw (13.3298,70.1098)--(18.0098,70.1098)..controls (18.5798,70.1098) and (19.0198,69.6799)..(19.0198,69.1799)
+ --(19.0198,67.9499)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198)
+ --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.9499)
+ --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1098)..(13.3298,70.1098)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95)
+ --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26)
+ --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76)
+ --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0.86bp;
+draw (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95)
+ --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26)
+ --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76)
+ --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (61.3499,54.0598)--(64.0898,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48)
+ --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0898,52.1799)
+ --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298)
+ --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 1.44bp;
+draw (61.3499,54.0598)--(64.0899,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48)
+ --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0899,52.1799)
+ --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298)
+ --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6099)..(120.1,51.97)
+ --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21)
+ --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7)
+ --(118.23,51.97)..controls (118.23,51.6099) and (118.38,51.46)..(118.74,51.46)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0.86bp;
+draw (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6098)..(120.1,51.97)
+ --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21)
+ --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7)
+ --(118.23,51.97)..controls (118.23,51.6098) and (118.38,51.46)..(118.74,51.46)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199)
+ --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2)
+ --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798)
+ --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 1.44bp;
+draw (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199)
+ --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2)
+ --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798)
+ --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (51.7,90.3398)--(52.7798,90.3398)..controls (53.1399,90.3398) and (53.3599,90.6299)..(53.3599,90.99)
+ --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799)
+ --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998)
+ --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3398)..(51.7,90.3398)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (51.7,90.3399)--(52.7798,90.3399)..controls (53.1399,90.3399) and (53.3599,90.6299)..(53.3599,90.99)
+ --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799)
+ --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998)
+ --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3399)..(51.7,90.3399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5999)..(54.5098,95.24)
+ --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599)
+ --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799)
+ --(49.8298,95.24)..controls (49.8298,95.5999) and (50.1199,95.8899)..(50.48,95.8899)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 1.44bp;
+draw (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5998)..(54.5098,95.24)
+ --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599)
+ --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799)
+ --(49.8298,95.24)..controls (49.8298,95.5998) and (50.1199,95.8899)..(50.48,95.8899)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+draw (53,92.6499)..controls (53,88.8298) and (55.2998,80.4099)..(57.5398,76.8799)
+ ..controls (59.7698,73.3498) and (63.5798,67.8799)..(63.5798,67.8799);
+pickup pencircle scaled 2.02bp;
+draw (63.1499,52.26)..controls (63.1499,52.26) and (57.0298,49.5198)..(41.98,52.98)
+ ..controls (26.9399,56.3599) and (16.8599,66.01)..(15.8498,66.2998);
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 0bp;
+fill (87.7,123.46)--(94.5398,123.46)--(94.5398,113.89)
+ --(87.7,113.89)--(87.7,123.46)--cycle;
+endfig;
+end
+
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf
new file mode 100644
index 000000000..118276b5d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png
new file mode 100644
index 000000000..be41b9e22
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png
new file mode 100644
index 000000000..2a0b2de58
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png
new file mode 100644
index 000000000..5487062fd
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png
new file mode 100644
index 000000000..e69c2877f
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png
new file mode 100644
index 000000000..e49426e89
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png
new file mode 100644
index 000000000..f27252027
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png
new file mode 100644
index 000000000..9e8d72e6c
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png
new file mode 100644
index 000000000..8c7ed6ae7
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png
new file mode 100644
index 000000000..e22eab8dc
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png
new file mode 100644
index 000000000..25a529b33
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png
new file mode 100644
index 000000000..d1af184c4
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png
new file mode 100644
index 000000000..289738886
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png
new file mode 100644
index 000000000..af876a546
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png
new file mode 100644
index 000000000..55ded4c35
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png
new file mode 100644
index 000000000..9a1bf14e8
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png
new file mode 100644
index 000000000..47b4409e0
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png
new file mode 100644
index 000000000..079b8556a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png b/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png
new file mode 100644
index 000000000..f4294dc57
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf b/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf
new file mode 100644
index 000000000..a75e7e491
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/start/graphics/minibook-en.tex b/doc/context/sources/general/manuals/start/graphics/minibook-en.tex
new file mode 100644
index 000000000..1bde2de3c
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/graphics/minibook-en.tex
@@ -0,0 +1,20 @@
+\setuppapersize[A10][A10]
+\setuplayout[cutspace=2mm,backspace=6mm,width=15mm]
+\setupbodyfont[6pt]
+\setuppagenumbering[state=stop]
+\setupbackgrounds[text][text][background=color,backgroundcolor=orange]
+\setupbackgrounds[header,text,footer][leftmargin][background=color,backgroundcolor=lightgreen]
+\setupbackgrounds[header,text,footer][leftmargin,text,rightmargin][frame=on]
+\setupfootertexts[margin][\midaligned{l}][\midaligned{r}][\midaligned{r}][\midaligned{l}]
+\starttext
+\midaligned{design page} \page
+\setuppagenumbering[alternative={singlesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page} \page
+\setuppagenumbering[alternative={singlesided,doublesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page} \page
+\setuppagenumbering[alternative={doublesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page}
+\stoptext
diff --git a/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex b/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex
new file mode 100644
index 000000000..1f5f10744
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex
@@ -0,0 +1,7 @@
+\startenvironment ma-cb-abbreviations
+
+% a weird one: (\keycap) ... volledige lijst maken ... symbol
+
+\logo [Enter] {\type{Enter}}
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/ma-cb-colofon.tex b/doc/context/sources/general/manuals/start/ma-cb-colofon.tex
new file mode 100644
index 000000000..feb77726a
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-colofon.tex
@@ -0,0 +1,95 @@
+\startcomponent ma-cb-colophon
+
+\unprotect
+
+\startmakeup[\v!standard]
+
+ % This reference is needed for the interactive version.
+
+ \pagereference[colofon]
+
+ % We align the text in the middle.
+
+ \setupalign
+ [\v!middle]
+
+ % We use the default \framed macro but add a background. For most
+ % texts an offset of 20pt is adequate.
+
+ \defineframed
+ [colofon]
+ [\c!frame=\v!off,
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!align=\v!middle,
+ \c!offset=15pt]
+
+ \bfa \setupinterlinespace
+
+ \doifsomething {\documentvariable{author}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:author}:\space
+ \documentvariable{author}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \doifsomething {\documentvariable{translator}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:translations}:\space
+ \documentvariable{translator}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \doifsomething {\documentvariable{contributer}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:contributions}:\space
+ \documentvariable{contributer}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:design}:\space
+ Hans Hagen
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:illustrations}:\space
+ Johan Jonker
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon][offset=25pt]
+ PRAGMA ADE\\
+ Ridderstraat 27\\
+ 8061GH Hasselt NL\\
+ www.pragma-ade.com
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon]
+ \currentdate
+ \stopframed
+
+ \vfill
+
+\stopmakeup
+
+\protect
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/ma-cb-copyright.tex b/doc/context/sources/general/manuals/start/ma-cb-copyright.tex
new file mode 100644
index 000000000..abb344eef
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-copyright.tex
@@ -0,0 +1,41 @@
+\startcomponent ma-cb-copyright
+
+% The copyright page. English it is and english it will be.
+
+\unprotect
+
+\page
+ [\v!right]
+
+\startmakeup[\v!standard]
+
+ \switchtobodyfont
+ [\v!small]
+
+ \setupframed
+ [\c!frame=\v!off,
+ \c!width=.8\textwidth,
+ \c!align=\v!normal,
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!offset=30pt]
+
+ \vfill
+
+ \hfill \startframed
+ This document is produced with \CONTEXT\ \MKIV\ and \LUATEX. The source is edited
+ with \SCITE\ and previewed with \SUMATRAPDF.
+ \stopframed
+
+ \blank[3*\v!big]
+
+ \hfill \startframed
+ \copyright\ 1991\endash\currentdate[\v!year]\ PRAGMA ADE, Ridderstraat 27, 8061GH
+ Hasselt, The Netherlands, www.pragma-ade.com
+ \stopframed
+
+\stopmakeup
+
+\protect
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/start/ma-cb-graphics.tex b/doc/context/sources/general/manuals/start/ma-cb-graphics.tex
new file mode 100644
index 000000000..bb85c0031
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-graphics.tex
@@ -0,0 +1,266 @@
+\startenvironment ma-cb-graphics
+
+% These graphics were made when I had little experience in MetaPost so
+% they are not that efficient or nicely codes. Sorry about that.
+
+\definecolor[ShapeDarkLine] [s=.4]
+\definecolor[ShapeDarkDots] [r=1]
+\definecolor[ShapeDarkEnd] [g=1]
+\definecolor[ShapeLightLine] [s=.95]
+\definecolor[ShapeLightDots] [r=.9,g=,5,b=.5]
+\definecolor[ShapeLightFill] [s=.95]
+\definecolor[ShapeLightFrame][r=.5,g=.50,b=.9]
+
+\startuseMPgraphic{basic-shape-dark}
+ color shapedotscolor ; shapedotscolor := \MPcolor{ShapeDarkDots} ;
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ \includeMPgraphic{basic-shape}
+\stopuseMPgraphic
+
+\startuseMPgraphic{basic-shape-light}
+ color shapedotscolor ; shapedotscolor := \MPcolor{ShapeLightDots} ;
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightLine} ;
+ \includeMPgraphic{basic-shape}
+\stopuseMPgraphic
+
+\startuseMPgraphic{basic-shape}
+ w := OverlayWidth ; width := 100 ; wfactor := w/width ;
+ h := OverlayHeight ; height := 100 ; hfactor := h/height ;
+ d := OverlayOffset ;
+ %
+ def random_delta (expr d) =
+ d - (uniformdeviate 2d)
+ enddef;
+ %
+ z1 = (0,height) ;
+ z2 = (0,0) ;
+ z3 = (width,0) ;
+ z4 = (width,height) ;
+ %
+ z5 = ( width+random_delta(.2width),height+random_delta(.2height)) ;
+ z6 = (.5width+random_delta(.1width),height+random_delta(.1height)) ;
+ %
+ pickup pencircle
+ xscaled (OverlayLineWidth/ wfactor)
+ yscaled (OverlayLineWidth/(2*hfactor))
+ rotated 30 ;
+ %
+ draw z5 .. z1 .. z2 .. z3 .. z4 .. z6 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ xscaled (OverlayLineWidth/wfactor)
+ yscaled (OverlayLineWidth/hfactor) ;
+ %
+ draw z1 withcolor shapedotscolor ;
+ draw z2 withcolor shapedotscolor ;
+ draw z3 withcolor shapedotscolor ;
+ draw z4 withcolor shapedotscolor ;
+ draw z5 withcolor shapedotscolor ;
+ draw z6 withcolor shapedotscolor ;
+ %
+ currentpicture := currentpicture xysized (w,h) ;
+\stopuseMPgraphic
+
+\startuniqueMPpagegraphic{chapter-state}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ %
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2*delta ;
+ height := (OverlayHeight - 2*delta) / 3 ;
+ %
+ z1 = (0,3height) ;
+ z2 = (0,2height) ;
+ z3 = (if not odd RealPageNumber : - fi width,1.5height) ;
+ z4 = (0,height) ;
+ z5 = (0,0) ;
+ %
+ pickup pencircle
+ xscaled delta
+ yscaled .5delta
+ rotated 30 ;
+ %
+ draw z1 -- z2{up} .. z3 .. {up} z4 -- z5 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ scaled delta ;
+ %
+ draw z1 withcolor red ;
+ draw z2 withcolor red ;
+ draw z3 withcolor red ;
+ draw z4 withcolor red ;
+ draw z5 withcolor red ;
+ %
+\stopuniqueMPpagegraphic
+
+\startreusableMPgraphic{pagenumber-state}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ %
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2delta ;
+ height := OverlayHeight - 2delta ;
+ lines := 5*OverlayOffset ;
+ %
+ z1 = (0,0) ;
+ z2 = (lines,0) ;
+ z3 = (.5width,height) ;
+ z4 = (width-lines,0) ;
+ z5 = (width,0) ;
+ %
+ pickup pencircle
+ xscaled delta
+ yscaled .5delta
+ rotated 30;
+ %
+ draw z1 -- z2 {dir 135} ... z3 ... {dir -135} z4 -- z5 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ scaled delta ;
+ %
+ draw z1 withcolor red ;
+ draw z2 withcolor red ;
+ draw z3 withcolor red ;
+ draw z4 withcolor red ;
+ draw z5 withcolor red ;
+ %
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{manualsymbol}
+ logo_type := 401 ;
+ input "mp-prag" ;
+ currentpicture := currentpicture scaled 0.25 ;
+\stopreusableMPgraphic
+
+\startuseMPgraphic{frame-shape}
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2delta ;
+ height := OverlayHeight - 2delta ;
+ %
+ vardef gamma =
+ g := OverlayOffset ; ((g/3) + (uniformdeviate (2g/3)))
+ enddef;
+ %
+ z1 = (0,0) ;
+ z2 = (width,0) ;
+ z3 = (width,height) ;
+ z4 = (0,height) ;
+ %
+ x12= .5[x1,x2] ; y12=y1 + gamma ;
+ y23= .5[y2,y3] ; x23=x2 - gamma ;
+ x34= .5[x3,x4] ; y34=y3 - gamma ;
+ y41= .5[y4,y1] ; x41=x4 + gamma ;
+ %
+ pickup pencircle
+ xscaled OverlayLineWidth
+ yscaled .5OverlayLineWidth
+ rotated 30;
+ %
+ path p;
+ p :=
+ z1..z12..z2 &
+ z2..z23..z3 &
+ z3..z34..z4 &
+ z4..z41..z1 &
+ cycle ;
+ %
+ fill p withcolor shapefillcolor ;
+ draw p withcolor shapelinecolor ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{setup-shape}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFrame} ;
+ color shapefillcolor ; shapefillcolor := \MPcolor{ShapeLightFill} ;
+ \includeMPgraphic{frame-shape}
+\stopuseMPgraphic
+
+% \startuseMPgraphic{setup-shape-x}
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFrame} ;
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFill} ;
+% \includeMPgraphic{frame-shape}
+% \stopuseMPgraphic
+
+\startuniqueMPgraphic{note-rule}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+ %
+ draw bottomboundary OverlayBox withcolor shapelinecolor withpen pencircle scaled OverlayLineWidth ;
+ draw llcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ draw lrcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ %
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{column-rule}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+ %
+ draw leftboundary OverlayBox withcolor shapelinecolor withpen pencircle scaled OverlayLineWidth ;
+ draw ulcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ draw llcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ %
+\stopuniqueMPgraphic
+
+% alternative implemenation
+%
+% \startuniqueMPgraphic{column-rule}{height,linewidth}
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+% color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+% numeric shapelinewidth ; shapelinewidth := \MPvar{linewidth} ;
+% pair shapeboundary ; shapeboundary := (0,\MPvar{height}) ;
+% %
+% draw origin -- shapeboundary withcolor shapelinecolor withpen pencircle scaled shapelinewidth ;
+% draw origin withcolor shapeendcolor withpen pencircle scaled 3shapelinewidth ;
+% draw shapeboundary withcolor shapeendcolor withpen pencircle scaled 3shapelinewidth ;
+% %
+% \stopuniqueMPgraphic
+
+% todo
+
+% \startreusableMPgraphic{clip:six}
+% %
+% delta := OverlayOffset ;
+% height := OverlayWidth - delta ;
+% %
+% color green; green := (.1,.8,.1) ;
+% %
+% z1 = (0,0) ;
+% z2 = (0,height) ;
+% %
+% pickup pencircle
+% scaled OverlayLineWidth ;
+% %
+% draw z1 -- z2 withcolor .5white ;
+% %
+% pickup pencircle
+% scaled 3OverlayLineWidth ;
+% %
+% draw z1 withcolor green ;
+% draw z2 withcolor green ;
+% %
+% \stopreusableMPgraphic
+
+% \startreusableMPgraphic{clip:seven}
+% %
+% width := OverlayWidth ;
+% height := OverlayHeight ;
+% delta := OverlayOffset ;
+% %
+% color green ; green := (.1,.8,.1) ;
+% %
+% x1 = x4 = 0 ; x2 = x3 = width ;
+% y1 = y2 = 0 ; y3 = y4 = height ;
+% %
+% pickup pencircle
+% scaled OverlayLineWidth ;
+% %
+% draw z1 -- z2 -- z3 -- z4 -- cycle withcolor .white ;
+% %
+% pickup pencircle
+% scaled 3OverlayLineWidth ;
+% %
+% draw z1 withcolor green ;
+% draw z2 withcolor green ;
+% draw z3 withcolor green ;
+% draw z4 withcolor green ;
+% %
+% \stopreusableMPgraphic
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/ma-cb-links.tex b/doc/context/sources/general/manuals/start/ma-cb-links.tex
new file mode 100644
index 000000000..d2e03944d
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-links.tex
@@ -0,0 +1,268 @@
+\startenvironment ma-cb-links
+
+% Links to external document for referencing.
+
+% --- www
+
+\useURL
+ [www:pragma]
+ [http://www.pragma-ade.com]
+ []
+ [Pragma ADE]
+
+\useURL
+ [www:garden]
+ [http://wiki.contextgarden.net]
+ []
+ [ConTeXt garden]
+
+\useURL
+ [www:showweb]
+ [http://texshow.contextgarden.net]
+ []
+ [Show-web]
+
+\useURL
+ [www:wiki-modules]
+ [http://wiki.contextgarden.net/Modules]
+ []
+ [Wiki Modules]
+
+\useURL
+ [www:supelec]
+ [https://foundry.supelec.fr]
+ []
+ [Supelec]
+
+\useURL
+ [www:dir]
+ [http://www.pragma-ade.com/dir/general]
+ []
+ [http://www.pragma-ade.com/dir/general]
+
+\useURL
+ [www:cstug]
+ [http://www.cstug.cz]
+ []
+ [\CSTUG]
+
+\useURL
+ [modul:storm]
+ [http://modules.contextgarden.net/stormfontsupport]
+ []
+ [http://modules.contextgarden.net/stormfontsupport]
+
+\useURL
+ [modul:storm-catalog]
+ [http://dl.contextgarden.net/modules/stormfontsupport/cont-storm-catalog.pdf]
+ []
+ [cont-storm-catalog.pdf]
+
+% --- usergroups
+
+\useURL
+ [list:context]
+ [http://www.ntg.nl/mailman/listinfo/ntg-context]
+ []
+ []
+
+\useURL
+ [group:tug]
+ [https://tug.org]
+ []
+ []
+
+\useURL
+ [group:ntg]
+ [www.ntg.nl]
+ []
+ []
+
+\useURL
+ [group:context]
+ [www.????]
+ []
+ []
+
+\useURL
+ [install]
+ [http://wiki.contextgarden.net/ConTeXt_Standalone]
+ []
+ []
+
+
+% --- manuals
+
+\useURL
+ [manual:general]
+ [http://www.pragma-ade.com/general/manuals/cont-eni.pdf]
+ []
+ [cont-eni.pdf]
+
+\useURL
+ [manual:metafun]
+ [http://www.pragma-ade.com/general/manuals/metafun-s.pdf]
+ []
+ [metafun-s.pdf]
+
+\useURL
+ [manual:columns]
+ [http://www.pragma-ade.com/general/manuals/columns.pdf]
+ []
+ [columns.pdf]
+
+\useURL
+ [manual:nattab]
+ [http://www.pragma-ade.com/general/manuals/enattab.pdf]
+ []
+ [enattab.pdf]
+
+\useURL
+ [manual:extab]
+ [http://www.pragma-ade.com/general/manuals/xtables-mkiv.pdf]
+ []
+ [xtables-mkiv.pdf]
+
+\useURL
+ [manual:details]
+ [http://www.pragma-ade.com/general/manuals/details.pdf]
+ []
+ [details.pdf]
+
+\useURL
+ [manual:fonts]
+ [http://www.pragma-ade.com/general/manuals/mfonts.pdf]
+ []
+ [mfonts.pdf]
+
+\useURL
+ [manual:charts]
+ [http://www.pragma-ade.com/general/manuals/mcharts.pdf]
+ []
+ [mcharts.pdf]
+
+\useURL
+ [manual:context]
+ [http://www.pragma-ade.com/general/manuals/cont-enp.pdf]
+ []
+ [cont-enp.pdf]
+
+\useURL
+ [manual:chemic]
+ [http://www.pragma-ade.com/general/manuals/mp-ch-en.pdf]
+ []
+ [mp-ch-en.pdf]
+
+\useURL
+ [manual:chemic-ex]
+ [http://www.pragma-ade.com/general/manuals/eppchtex.pdf]
+ []
+ [eppchtex.pdf]
+
+\useURL
+ [manual:labels]
+ [http://www.pragma-ade.com/general/manuals/mlabels.pdf]
+ []
+ [mlabels.pdf]
+
+\useURL
+ [manual:widgets]
+ [http://www.pragma-ade.com/general/manuals/mwidget.pdf]
+ []
+ [mwidget.pdf]
+
+\useURL
+ [manual:style]
+ [http://www.pragma-ade.com/general/manuals/style.pdf]
+ []
+ [style.pdf]
+
+\useURL
+ [manual:xml]
+ [http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf]
+ []
+ [xml-mkiv.pdf]
+
+\useURL
+ [manual:units]
+ [http://www.pragma-ade.com/general/manuals/units-mkiv.pdf]
+ []
+ [units-mkiv.pdf]
+
+\useURL
+ [manual:scite]
+ [http://www.pragma-ade.com/general/manuals/scite-context-readme.pdf]
+ []
+ [scite-context-readme.pdf]
+
+\useURL
+ [manual:qr-en]
+ [http://www.pragma-ade.com/general/qrcs/setup-en.pdf]
+ []
+ [setup-en.pdf]
+
+\useURL
+ [manual:qr-nl]
+ [http://www.pragma-ade.com/general/qrcs/setup-nl.pdf]
+ []
+ [setup-nl.pdf]
+
+\useURL
+ [manual:tools]
+ [http://www.pragma-ade.com/general/manuals/tools-mkiv.pdf]
+ []
+ [tools-mkiv.pdf]
+
+\useURL
+ [manual:figures]
+ [http://www.pragma-ade.com/general/manuals/xfigures-p.pdf]
+ []
+ [xfigures-p.pdf]
+
+\useURL
+ [manual:color]
+ [http://www.pragma-ade.nl/general/manuals/msplit.pdf]
+ []
+ [msplit.pdf]
+
+% --- magazins
+
+\useURL
+ [thisway:shapes]
+ [http://www.pragma-ade.com/general/myway/mag-0010.pdf]
+ []
+ [mag-0010.pdf]
+
+\useURL
+ [thisway:crossrefs]
+ [http://www.pragma-ade.com/general/magazines/mag-1103.pdf]
+ []
+ [mag-1103.pdf]
+
+\useURL
+ [thisway:proj-struc]
+ [http://www.pragma-ade.com/general/magazines/mag-1101.pdf]
+ []
+ [mag-1103.pdf]
+
+\useURL
+ [myway:nattab]
+ [http://www.pragma-ade.com/general/myway/NaturalTables.pdf]
+ []
+ [NaturalTables.pdf]
+
+\useURL
+ [myway:startalign]
+ [http://www.pragma-ade.com/general/myway/mathalign.pdf]
+ []
+ [mathalign.pdf]
+
+% AFO 2013: needed for example in manual
+
+\useURL
+ [loc:cityplan]
+ [http://www.stadindex.nl/plattegrond/hasselt]
+ []
+ []
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/ma-cb-screen.tex b/doc/context/sources/general/manuals/start/ma-cb-screen.tex
new file mode 100644
index 000000000..c3af1f783
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-screen.tex
@@ -0,0 +1,201 @@
+\startenvironment ma-cb-screen
+
+% This setups adds some functionality as well as redefines
+% some of the previously defined layout.
+
+\unprotect
+
+\definepapersize
+ [LocalPaperFormat]
+ [\c!width=28cm,
+ \c!height=21cm]
+
+\setuppapersize
+ [LocalPaperFormat]
+ [LocalPaperFormat]
+
+\setuplayout
+ [\c!location=\v!middle,
+ \c!topspace=.5cm,
+ \c!header=1.5cm,
+ \c!height=20cm,
+ \c!rightedge=5cm,
+ \c!rightedgedistance=1cm]
+
+\setupinteractionscreen
+ [\c!width=28cm,
+ \c!height=21cm,
+ \c!option=\v!max]
+
+% We place the pagenumber (not that useful in an interactive
+% document) somewhere else and the chapter number in the
+% footer.
+
+\setuppagenumbering
+ [\c!alternative=\v!singlesided,
+ \c!location=,
+ \c!command=\NummerCommando]
+
+\unexpanded\def\NummerCommando#1% uitlijnen op onderkant voet
+ {\hbox to \rightedgewidth
+ {\scratchcounter=\lastpage
+ \advance\scratchcounter by -\realpageno
+ \hskip0pt plus \realpageno cm
+ \framed
+ [\c!background=NummerAchtergrond,
+ \c!frame=\v!off,
+ \c!offset=4pt]%
+ {\lower.5\dp\strutbox\hbox spread 60pt{\hss\tx#1\hss}}% {\hss#1\hss}}%
+ \hskip0pt plus \scratchcounter cm}}
+
+\setupfootertexts
+ [\v!edge]
+ [][\v!pagenumber]
+
+\unexpanded\def\PlaatsHoofdstukStatus
+ {\determineheadnumber[\v!chapter]%
+ \ifnum\currentheadnumber>0
+ \hbox to \hsize
+ {\hss
+ \framed
+ [\c!background=NummerAchtergrond,
+ \c!frame=\v!off,
+ \c!offset=6pt]
+ {\lower.5\dp\strutbox\hbox spread 60pt
+ {\hss\getmarking[\v!chapter\v!number]\hss}}%
+ \hss}
+ \fi}
+
+\setupfootertexts
+ [\v!margin]
+ [][]
+
+\setupfootertexts
+ [\v!text]
+ [][\PlaatsHoofdstukStatus]
+
+\setupinteraction
+ [\c!state=\v!start,
+ \c!color=,
+ \c!menu=\v!on]
+
+% We let users click on the whole table of contents line and
+% provide some menus.
+
+\setuplist
+ [\v!chapter]
+ [\c!interaction=\v!all]
+
+\setupinteractionmenu
+ [\v!right]
+ [\c!state=\v!start,
+ \c!color=,
+ \c!offset=4pt,
+ \c!background=MenuAchtergrond,
+ \c!frame=\v!off]
+
+\startmode[**nl]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {inhoud[contents]},
+ {index[subind]},
+ {commando's[comind]},
+ {definities[comdefs]},
+ {colofon[colofon]},
+ {\vfill},
+ {stoppen[\v!CloseDocument]},
+ {\ZoekEnZoek{zoeken}},
+ {terug[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**en,**uk]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {contents[contents]},
+ {index[subind]},
+ {commands[comind]},
+ {definitions[comdefs]},
+ {colofon[colofon]},
+ {\vfill},
+ {exit[\v!CloseDocument]},
+ {\ZoekEnZoek{search}},
+ {go back[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**cz]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {obsah[contents]},
+ {rejst\rcaron\iacute k[subind]},
+ {seznam p\rcaron\iacute kaz\uring[comind]},
+ {definice p\rcaron\iacute kaz\uring[comdefs]},
+ {tir\aacute\zcaron[colofon]},
+ {\vfill},
+ {konec[\v!CloseDocument]},
+ {\ZoekEnZoek{vyhledej}},
+ {krok zp\ecaron t[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**fr]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {table des mati\egrave res[contents]},
+ {index[subind]},
+ {commandes[comind]},
+ {d\eacute finitions[comdefs]},
+ {colophon[colofon]},
+ {\vfill},
+ {quitter[\v!CloseDocument]},
+ {\ZoekEnZoek{recherche}},
+ {retour[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**vn]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {mục lục[contents]},
+ {bảng tra[subind]},
+ {lệnh[comind]},
+ {định nghĩa[comdefs]},
+ {trang cuối[colofon]},
+ {\vfill},
+ {thoát[\v!CloseDocument]},
+ {\ZoekEnZoek{tìm kiếm}},
+ {quay lại[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+% This not that \TEX nical definition deals with the two sets
+% of buttons. Someday I'll make a general macro for this.
+
+\def\TwoMenuButtons#1[#2]#3[#4]%
+ {\hbox to \hsize
+ {\dimen0=\hsize
+ \advance\hsize by -12pt
+ \menubutton[\v!right][\c!width=.5\hsize]{#1}[#2]%
+ \hss
+ \menubutton[\v!right][\c!width=.5\hsize]{#3}[#4]}}
+
+\def\HeenEnWeer
+ {\TwoMenuButtons{--}[\v!previouspage]{+}[\v!nextpage]}
+
+\def\ZoekEnZoek#1%
+ {\TwoMenuButtons{#1}[\v!SearchDocument]{+}[\v!SearchAgain]}
+
+\protect
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/ma-cb-style.tex b/doc/context/sources/general/manuals/start/ma-cb-style.tex
new file mode 100644
index 000000000..294e4a5cc
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb-style.tex
@@ -0,0 +1,678 @@
+% macros=mkvi
+
+\startenvironment ma-cb-style
+
+\usemodule[chart]
+
+\usemodule[s][abr-03]
+\usemodule[x][set-11]
+
+\unprotect
+
+% Setups are kind of special.
+
+\loadsetups[cont-\currentmainlanguage.xml]
+
+\setupsetup
+ [\c!criterium=\v!used]
+
+\setupframedtexts
+ [setuptext]
+ [\c!before={\blank[\v!big]},
+ \c!after={\blank[\v!big]},
+ \c!background=setup-shape,
+ \c!backgroundoffset=10pt,
+ \c!rulethickness=5pt,
+ \c!offset=15pt,
+ \c!frame=\v!off]
+
+\setupexternalfigures
+ [\c!directory={../graphics}]
+
+% The layout dimensions are based on the A4 paper dimensions because that way users
+% can print this manual themselves. Let's be economical with paper. We also assume a
+% decent doublesided A4 printer. We use equal margins so that a single sided run or
+% print also comes out all right.
+
+\setuplayout
+ [\c!backspace=22.5mm,
+ \c!width=\v!fit,
+ \c!cutspace=22.5mm,
+ \c!margin=20mm,
+ \c!margindistance=5mm,
+ \c!topspace=15mm,
+ \c!header=10mm,
+ \c!headerdistance=5mm,
+ \c!height=\v!fit,
+ \c!footerdistance=5mm,
+ \c!footer=15mm,
+ \c!bottomspace=15mm]
+
+\setuppagenumbering
+ [\c!alternative=\v!doublesided]
+
+% The lucida fonts look a bit more informal.
+
+\doifmodeelse {atpragma} {
+ \setupbodyfont[lucidaot,10pt]
+} {
+ \setupbodyfont[palatino,10pt]
+}
+
+% All colors will go here.
+
+% todo
+
+% Let's keep the text compact.
+
+\setupwhitespace
+ [\v!medium]
+
+\setupblank
+ [\v!medium]
+
+% We indent verbatim with the default indenting value.
+
+\setuptyping
+ [\c!margin=\v!standard,
+ \c!blank=\v!medium]
+
+% Manuals as usual need a bit more tolerance, because a lot of in||line verbatim is
+% used.
+
+\setuptolerance
+ [\v!verytolerant,\v!stretch]
+
+% This manual makes heavy use of backgrounds. During a run about many metaclips are
+% generated.
+
+\defineoverlay [chapter-state] [\uniqueMPpagegraphic{chapter-state}]
+\defineoverlay [pagenumber-state] [\uniqueMPgraphic{pagenumber-state}]
+
+\defineoverlay [basic-shape-light] [\useMPgraphic{basic-shape-light}]
+\defineoverlay [basic-shape-dark] [\useMPgraphic{basic-shape-dark}]
+
+\defineoverlay [setup-shape] [\useMPgraphic{setup-shape}]
+\defineoverlay [note-rule] [\uniqueMPgraphic{note-rule}]
+\defineoverlay [column-rule] [\uniqueMPgraphic{column-rule}]
+
+% \defineoverlay
+% [MenuAchtergrond]
+% [\MPclipTwoA{\overlaywidth}{\overlayheight}{3pt}{3pt}{red}{white}]
+
+\starttexdefinition unexpanded FootnoteRule
+ \blank[2*\v!big]
+ \framed
+ [\c!background=note-rule,
+ \c!width=.4\makeupwidth,
+ \c!height=2pt,
+ \c!offset=\v!overlay,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off]
+ {}
+ \blank[\v!small]
+\stoptexdefinition
+
+\setupfootnotes
+ [\c!rule=off,
+ \c!before=\FootnoteRule]
+
+% Chapter titles have a fancy shape around them. Because we have a lot of small
+% chapters, we don't go to a new page. Titles look the same, but there we go to
+% a new page.
+
+\setuphead
+ [\v!chapter]
+ [\c!command=\HeadCommand,
+ \c!page=,
+ \c!before={\blank[3*\v!big]},
+ \c!after={\blank[2*\v!big,\v!samepage]}]
+
+\setuphead
+ [\v!title]
+ [\c!page=\v!right]
+
+\starttexdefinition unexpanded HeadCommand #number #title
+ \alignedline {\v!outer} {\v!left} {
+ \framed [
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!frame=\v!off,
+ \c!strut=\v!no,
+ \c!offset=24pt,
+ \c!align=\v!middle
+ ] {
+ \doifmode {*\v!sectionnumber} {
+ #number
+ \kern.5em
+ \blackrule [
+ color=green,
+ width=1pt,
+ height=1.5\ht\strutbox,
+ depth=1.25\dp\strutbox
+ ]
+ \kern.5em
+ }
+ #title
+ }
+ }
+\stoptexdefinition
+
+% The current chapter number is typeset in the (outer) margin and slowly moves
+% down. We could have directly put it in the margin but using the footermargin as
+% starting point works better. This is an old command and there is no reason to
+% change the definition to more fabce MkIV version.
+
+\setupfootertexts
+ [\v!margin]
+ [][\fastsetup{chapterindicator}]
+
+\startsetups chapterindicator
+ \determineheadnumber[\v!chapter]
+ \ifcase\currentheadnumber\else
+ \vbox to \makeupheight {
+ \scratchcounter=\numexpr\lastpage-\realpageno\relax
+ \vskip2cm
+ \vskip0pt plus \realpageno cm
+ \framed [
+ \c!background=chapter-state,
+ \c!width=36pt,
+ \c!height=72pt,
+ \c!backgroundoffset=5pt,
+ %\c!align={\v!lohi,\v!middle},
+ \c!frame=\v!off
+ ] {
+ \lower.5\dp\strutbox\hbox {
+ \bfb
+ \getmarking[\v!chapter\v!number]
+ }
+ }
+ \vskip0pt plus \scratchcounter cm
+ \vskip2cm
+ }
+ \fi
+\stopsetups
+
+% The index is put on a double collumned grid. The numbers is surrounded by a
+% shape.
+
+\setupregister
+ [\v!index]
+ [\c!command=\IndexCommand,
+ \c!before={\blank[\v!line]},
+ \c!after=]
+
+\starttexdefinition unexpanded IndexCommand #text
+ \framed [
+ \c!background=basic-shape-dark,
+ \c!width=36pt,
+ \c!frame=\v!off,
+ \c!offset=4pt,
+ \c!align=\v!middle,
+ \c!rulethickness=4pt
+ ] {
+ #text
+ }
+\stoptexdefinition
+
+% When bound, we use a double sided layout and put the pagenumber in the margin,
+% enhanced by a fancy background.
+
+\setuppagenumbering
+ [\c!location={\v!footer,\v!middle},
+ \c!command=\PageNumberCommand]
+
+\starttexdefinition unexpanded PageNumberCommand #pagenumber
+ \framed [
+ \c!background=pagenumber-state,
+ \c!backgroundoffset=5pt,
+ \c!frame=\v!off,
+ \c!offset=6pt
+ ] {
+ \lower.5\dp\strutbox\hbox spread 60pt {
+ \hss
+ #pagenumber
+ \hss
+ }
+ }
+\stoptexdefinition
+
+% We put the chapter title in the head. If we wouldn't have to center, the more
+% simple setting would be:
+
+\setupheadertexts
+ [{\getmarking[\v!chapter]}]
+
+% Guess what the next one does.
+
+\setupitemgroup
+ [\v!itemize]
+ [1]
+ [\v!autointro]
+
+% The coverpage looks more complex than it is. We can reuse it.
+
+\newbox\CoverBackgroundBox % reuse saves .8 sec, could be an object!
+
+\starttexdefinition unexpanded ShowSetupOnCover #n #tag #xmlroot
+ \dontleavehmode
+ \framed [
+ \c!background=basic-shape-light,
+ \c!backgroundoffset=5pt,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off
+ ] {
+ \xmlsetup{#xmlroot}{xml:setups:assemblename}
+ \tttf
+ \texescape\currentSETUPfullname
+ }
+ \hskip1.25em plus 1em minus 1em\relax
+\stoptexdefinition
+
+% \startsetups coverbackground
+%
+% \ifvoid\CoverBackgroundBox
+%
+% \global\setbox\CoverBackgroundBox=\vbox to \paperheight \bgroup
+% \hsize\paperwidth
+% \emergencystretch3em
+% \parfillskip0pt
+% \switchtobodyfont
+% [6pt]
+% \baselineskip 0pt plus 1pt minus 1pt
+% \setupsorting
+% [texcommand]
+% [\c!command=\ShowSetupOnCover,
+% \c!criterium=\v!all]
+% \beginofshapebox
+% \leftskip3pt
+% \rightskip3pt
+% \placelistofsorts
+% [texcommand]
+% \endofshapebox
+% \doreshapebox
+% {\box\shapebox}
+% {\penalty\shapepenalty}
+% {\kern\shapekern}
+% {\vfil}
+% \kern3pt
+% \vfilneg
+% \flushshapebox
+% \vfilneg
+% \kern3pt
+% \egroup
+%
+% \fi
+%
+% \copy\CoverBackgroundBox
+%
+% \stopsetups
+
+\startsetups coverbackground
+
+ \ifvoid\CoverBackgroundBox
+
+ \global\setbox\CoverBackgroundBox
+ \startnicelyfilledbox
+ [\c!width=\paperwidth,
+ \c!height=\paperheight,
+ \c!offset=\exheight,
+ \c!strut=\v!no]
+ \switchtobodyfont
+ [6pt]
+ \placelistofsorts
+ [texcommand]
+ [\c!command=\ShowSetupOnCover,
+ \c!criterium=\v!all]
+ \stopnicelyfilledbox
+
+ \fi
+
+ \copy\CoverBackgroundBox
+
+\stopsetups
+
+\defineoverlay[coverbackground][\setups{coverbackground}]
+
+\setupdocument
+ [author={Ton Otten\crlf PRAGMA ADE},
+ translator=,
+ contributer=,
+ before=\setups{coverpage},
+ after=\setups{backpage}]
+
+\defineoverlay[gotocontents][\overlaybutton{contents}]
+
+\startsetups coverpage
+
+ \setupbackgrounds
+ [\v!rightpage]
+ [\c!background=coverbackground]
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!background=gotocontents]
+
+ \startmakeup
+ [\v!standard]
+ [\c!doublesided=\v!empty,
+ \c!headerstate=\v!none,
+ \c!footerstate=\v!none]
+
+ \hbox to \hsize \bgroup
+ \hss
+ \definedfont[SansBold*default at 40pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=15pt,
+ \c!align=\v!middle,
+ \c!offset=40pt]
+ {\documentvariable{title}}
+ \egroup
+
+ \vfill
+
+ \doifsomething {\documentvariable{subtitle}} {
+
+ \hbox to \hsize \bgroup
+ \definedfont[SansBold*default at 14pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=10pt,
+ \c!align=\v!middle,
+ \c!offset=20pt]
+ {\documentvariable{subtitle}}
+ \hss
+ \egroup
+
+ }
+
+ \hbox to \hsize \bgroup
+ \hss
+ \definedfont[SansBold*default at 20pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=12.5pt,
+ \c!align=\v!middle,
+ \c!offset=35pt]
+ {\documentvariable{author}}
+ \egroup
+
+ \stopmakeup
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!background=]
+
+ \setupbackgrounds
+ [\v!rightpage]
+ [\c!background=]
+
+ \doifmode {screen} {
+
+ \setupbackgrounds
+ [\v!page]
+ [\c!background=\v!screen,
+ \c!backgroundscreen=.95]
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!backgroundoffset=.25cm,
+ \c!depth=.125cm,
+ \c!background=\v!color,
+ \c!backgroundcolor=white]
+
+ }
+
+ \component[ma-cb-copyright]
+
+\stopsetups
+
+% The backpage uses the same background and overlays a piece of text.
+
+\startsetups backpage
+
+ \page
+ [\v!yes,\v!blank,\v!right]
+
+ \component[ma-cb-colofon]
+
+ \page
+ [\v!yes,\v!blank,\v!left]
+
+ \setupbackgrounds
+ [\v!leftpage]
+ [\c!background=coverbackground]
+
+ \startmakeup
+ [\v!standard]
+ [\c!page=,
+ \c!doublesided=\v!no,
+ \c!headerstate=\v!none,
+ \c!footerstate=\v!none]
+
+ \setuptolerance
+ [\v!verytolerant]
+
+ \vfill
+
+ \hbox to \hsize \bgroup
+
+ \framed
+ [\c!background=\v!color,
+ \c!backgroundcolor=white,
+ \c!frame=\v!off,
+ \c!offset=10pt,
+ \c!corner=\v!round,
+ \c!width=.4\makeupwidth,
+ \c!height=\textheight,
+ \c!align=\v!middle,
+ \c!strut=\v!no]
+ {
+ \vfil
+ \component[ma-cb-en-backpage]
+ \vfil
+ }
+
+ \hss
+
+ \egroup
+
+ \vfill
+
+ \stopmakeup
+
+\stopsetups
+
+% To save space we don't start chapters on a new page, except in appendices and the
+% introduction. These settings happen in dedicated setups sections (see later). We
+% also add some white space between table of content entries.
+
+\setupsectionblock [\v!frontpart] [\c!page=\v!right,\c!before=\setups{frontpart}]
+\setupsectionblock [\v!bodypart] [\c!page=\v!right,\c!before=\setups{bodypart}]
+\setupsectionblock [\v!appendix] [\c!page=\v!right,\c!before=\setups{appendix}]
+\setupsectionblock [\v!backpart] [\c!page=\v!right,\c!before=\setups{backpart}]
+
+\setuplist
+ [\v!chapter]
+ [\c!criterium=\v!all,
+ \c!before=,
+ \c!after=]
+
+\startsetups frontpart
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:contents}]
+
+ \startmixedcolumns[documentcolumns]
+ \placelist[\v!chapter]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \page[\v!right]
+
+\stopsetups
+
+\startsetups bodypart
+
+ \setuphead[\v!chapter][\c!page=]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+\stopsetups
+
+\startsetups appendix
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:commanddefinitions},\c!reference=commandsetups]
+
+ \component[ma-cb-\currentmainlanguage-commandlist]
+
+ \blank[2*\v!big]
+
+ \start
+
+ \switchtobodyfont[8pt]
+
+ \startmixedcolumns[documentcolumns]
+ \placelistofsorts[texcommand]
+ \stopmixedcolumns
+
+ \stop
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:commandindex}]
+
+ \startmixedcolumns[documentcolumns]
+ \placeregister[Command]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:subjectindex}]
+
+ \startmixedcolumns[documentcolumns]
+ \placeregister[\v!index]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:supportandreading}]
+
+ \index{support}
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:support}]
+
+ \component[ma-cb-\currentmainlanguage-support]
+
+ \stopnamedsection
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:manuals}]
+
+ % this will be done from a bib file
+
+ \startlines
+ \goto {Chemical Formulas in \CONTEXT} [ url (manual:chemic-ex) ]
+ \goto {Color Separation} [ url (manual:color) ]
+ \goto {Columns} [ url (manual:columns) ]
+ \goto {\CONTEXT, the manual} [ url (manual:context) ]
+ \goto {Dealing with \XML} [ url (manual:xml) ]
+ \goto {Extreme Tables} [ url (manual:extab) ]
+ \goto {Figures} [ url (manual:figures) ]
+ \goto {Fonts in \CONTEXT} [ url (manual:fonts) ]
+ \goto {luatools, mtxrun, context} [ url (manual:tools) ]
+ \goto {\METAFUN\ manual} [ url (manual:metafun) ]
+ \goto {Natural Tables} [ url (manual:nattab) ]
+ \goto {\PPCHTEX\ Manual} [ url (manual:chemic) ]
+ \goto {Quick Reference (dutch)} [ url (manual:qr-nl) ]
+ \goto {Quick Reference (english)} [ url (manual:qr-en) ]
+ \goto {\SCITE\ in \CONTEXT} [ url (manual:scite) ]
+ \goto {Units} [ url (manual:units) ]
+ \goto {Widgets} [ url (manual:widgets) ]
+ \stoplines
+
+ \stopnamedsection
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:magazines}]
+
+ % this will be done from a bib file
+
+ \startlines
+ \goto {\CONTEXT\ Magazine 1103} [ url (thisway:crossrefs) ]
+ \goto {Project structure} [ url (thisway:proj-struc) ]
+ \stoplines
+
+ \stopnamedsection
+
+ \stopnamedsection
+
+\stopsetups
+
+\startsetups backpart
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+\stopsetups
+
+% In normal documents one will never find awful things like below. Because we want
+% an international setup, we just call the chapters in an indirect way.
+
+% We draw a nice line between columns. The next command does the job. Of course a
+% normal line can be set more easily, but here we hook in a command.
+
+\installmixedcolumnseparator{ColumnRule}%
+ {\framed
+ [\c!background=column-rule,
+ \c!height=\mixedcolumnseparatorheight,
+ \c!depth=\mixedcolumnseparatordepth,
+ \c!width=\mixedcolumnseparatorwidth,
+ \c!offset=\v!overlay,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off]
+ {}}
+
+% alternative implemenation
+%
+% \installmixedcolumnseparator{ColumnRule}%
+% {\lower\mixedcolumnseparatordepth\hbox{\uniqueMPgraphic
+% {column-rule}%
+% {height=\the\dimexpr\mixedcolumnseparatorheight+\mixedcolumnseparatordepth,linewidth=2pt}}}
+
+\setupmixedcolumns
+ [\c!n=2,
+ \c!distance=36pt,
+ \c!separator=ColumnRule]
+
+\definemixedcolumns
+ [documentcolumns]
+ [\c!n=2,
+ \c!distance=36pt,
+ \c!separator=ColumnRule]
+
+\defineregister
+ [Command]
+
+\setupregister
+ [Command]
+ [\c!indicator=\v!off,
+ c!before={\blank[\v!line]}]
+
+\protect
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/start/ma-cb.tex b/doc/context/sources/general/manuals/start/ma-cb.tex
new file mode 100644
index 000000000..7f23597a1
--- /dev/null
+++ b/doc/context/sources/general/manuals/start/ma-cb.tex
@@ -0,0 +1,17 @@
+\startproject ma-cb
+
+ \environment ma-cb-language
+
+ \environment ma-cb-abbreviations
+ \environment ma-cb-graphics
+ \environment ma-cb-style
+ \environment ma-cb-links
+
+ \startmode[screen]
+ \environment ma-cb-screen
+ \stopmode
+
+ \product ma-cb-en
+ \product ma-cb-nl
+
+\stopproject
diff --git a/doc/context/sources/general/manuals/steps/steps-mkiv.tex b/doc/context/sources/general/manuals/steps/steps-mkiv.tex
new file mode 100644
index 000000000..947f08fbb
--- /dev/null
+++ b/doc/context/sources/general/manuals/steps/steps-mkiv.tex
@@ -0,0 +1,655 @@
+\environment manuals-xml-environment.tex
+
+\useMPlibrary [ove]
+
+\usemodule[x][mathml]
+\usemodule[m][steps]
+
+\startdocument[title=Steps,author=Hans Hagen,palet=steps]
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell {three} \text{+4}
+\cell {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\startsection[title=Description]
+
+This module is written in the process of defining a couple of styles for an
+educational math book. The macros provide you a way to visualize steps in for
+instance solving equations.
+
+The horizontal visualization is called stepchart, while the vertical alternative
+carries the name steptable. The vertical alternative has a special case that
+permits alignment on a mid symbol (in most cases a relation).
+
+The implementation uses a combination of \TEX\ and \METAPOST, and is set up in
+such a way that hyperlinks and alike will work okay.
+
+\stopsection
+
+\startsection[title=Structure]
+
+The horizontal stepcharts have at most four rows: two rows of cells with each an
+associated row of texts. The plural elements \type {cells} and \type {texts} each
+have two subelements. The \type {texts} elements are put between \type {cells}.
+
+\startbuffer
+<stepchart>
+ <cells> <top> some text </top> <bot> some text </bot> </cells>
+ <texts> <top> text </top> <bot> text </bot> </texts>
+ <cells> <top> some text </top> <bot> some text </bot> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+When a singular \type {cell} element is used in combination with the plural \type
+{texts}, we get one row of step cells with both top and bottom texts.
+
+\startbuffer
+<stepchart>
+ <cell> some text </cell>
+ <texts> <top> text </top> <bot> text </bot> </texts>
+ <cell> some text </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+The third horizontal alternative only has singular elements, and as a result the
+texts are put above the step cells.
+
+\startbuffer
+<stepchart>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+Normally, the lines go from cell to cell via a text. When you let the \type
+{cell} element follow by more than one \type {text} element (or their plural
+forms), all lines will start at the same point.
+
+\startbuffer
+<stepchart>
+ <cell> some text </cell>
+ <cell> some text </cell> <text> text 1 </text> <text> text 2 </text>
+ <cell> some text </cell>
+ <cell> some text </cell> <text> text 3 </text>
+ <cell> some text </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+The vertical alternative (of course) looks different and permits pretty long
+explanations.
+
+\startbuffer
+<steptable>
+ <cell> cell 1 </cell>
+ <text> text 1 </text>
+ <cell> cell 2 </cell>
+ <text> text 2 </text>
+ <cell> cell 3 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+When the plural element \type {cells} is used, three sub||elements are expected.
+These align around the mid element \type {c2}.
+
+\startbuffer
+<stepaligntable>
+ <cells> <c1> left </c1> <c2> center </c2> <c3> right </c3> </cells>
+ <text> text </text>
+ <cells> <c1> lft </c1> <c2> ctr </c2> <c3> rgt </c3> </cells>
+ <text> text </text>
+ <cells> <c1> l </c1> <c2> c </c2> <c3> r </c3> </cells>
+</stepaligntable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=Usage]
+
+The step chart module is loaded with:
+
+\starttyping
+\usemodule[cell] % was step
+\stoptyping
+
+\noindentation but in the case of embedded math, you should also load the \MATHML\ module:
+
+\starttyping
+\usemodule[cell,mathml]
+\stoptyping
+
+\stopsection
+
+\startsection[title=\XML\ example]
+
+Because we don't want to clutter the examples with \MATHML\ we stick to a simple
+mapping:
+
+\startbuffer
+\startxmlsetups xml:math:simple
+ \xmlsetsetup {#1} {m} {xml:math:simple:tex}
+\stopxmlsetups
+
+\startxmlsetups xml:math:simple:tex
+ \mathematics{\xmlflush{#1}}
+\stopxmlsetups
+
+\xmlregistersetup{xml:math:simple}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So, in the next examples the \type {m} element contains \TEX\ math.
+
+\startbuffer
+<stepchart>
+ <cells> <top> A </top> <bot> B </bot> </cells>
+ <cells> <top> one </top> <bot> five </bot> </cells>
+ <texts> <top> <m> +2 </m> </top> <bot> <m> -2 </m> </bot> </texts>
+ <cells> <top> two </top> <bot> four </bot> </cells>
+ <texts> <top> <m> +3 </m> </top> <bot> <m> -3 </m> </bot> </texts>
+ <cells> <top> three </top> <bot> three </bot> </cells>
+ <texts> <top> <m> +4 </m> </top> <bot> <m> -4 </m> </bot> </texts>
+ <cells> <top> four </top> <bot> two </bot> </cells>
+ <texts> <top> <m> +5 </m> </top> <bot> <m> -5 </m> </bot> </texts>
+ <cells> <top> five </top> <bot> one </bot> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<stepchart>
+ <cell> A </cell>
+ <cell> one </cell> <text> <m> +2 </m> </text>
+ <cell> two </cell> <text> <m> +3 </m> </text>
+ <cell> three </cell> <text> <m> +4 </m> </text>
+ <cell> four </cell> <text> <m> +5 </m> </text>
+ <cell> five </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<steptable>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/>
+ <apply> <times/> <cn> 2 </cn> <ci> a </ci> </apply>
+ <apply> <times/> <cn> 3 </cn> <ci> b </ci> </apply>
+ </apply>
+ </apply>
+ </math>
+ </cell>
+ <text> with
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> a </ci> <cn> 5 </cn> </apply>
+ </math>
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/> <cn> 10 </cn>
+ <apply> <times/> <cn> 3 </cn> <ci> b </ci> </apply>
+ </apply>
+ </apply>
+ </math>
+ </cell>
+ <text> and
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> b </ci> <cn> 6 </cn> </apply>
+ </math>
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/> <cn> 10 </cn> <cn> 18 </cn> </apply>
+ </apply>
+ </math>
+ </cell>
+ <text>
+ we get
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci> <cn> 28 </cn> </apply>
+ </math>
+ </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<stepaligntable>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>2a+3b</m> </c3>
+ </cells>
+ <text>
+ with <m>a=5</m>
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>10+3b</m> </c3>
+ </cells>
+ <text>
+ and <m>b=6</m>
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>10+18</m> </c3>
+ </cells>
+ <text>
+ we get
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>28</m> </c3>
+ </cells>
+</stepaligntable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=\TEX\ example]
+
+\startbuffer
+\startSTEPchart
+\cells {A} {B}
+\cells {one} {five or more} \texts{$+2$}{$-2$}
+\cells {two} {four} \texts{$+3$}{$-3$}
+\cells {three} {three} \texts{$+4$}{$-4$}
+\cells {four} {two} \texts{$+5$}{$-5$}
+\cells {five or more} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \texts{$+2$}{$-2$}
+\cell {two} \texts{$+3$}{$-3$}
+\cell {three} \texts{$+4$}{$-4$}
+\cell {four} \texts{$+5$}{$-5$}
+\cell {five or more}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cells {A} {B}
+\cells {one} {five or more} \texts{$+2$}{}
+\cells {two} {four} \texts{}{$-3$}
+\cells {three} {three} \texts{$+4$}{}
+\cells {four} {two} \texts{}{$-5$}
+\cells {five or more} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2} \text{+3} \text{+4} \text{+5}
+\cell {two}
+\cell {three}
+\cell {four}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \texts{}{+2} \texts{}{+3}
+\cell {two}
+\cell {three} \texts{+4}{} \texts{+5}{}
+\cell {four}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell {three} \text{+4}
+\cell {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPtable
+\cell {$c=2a+3b$}
+\text {with $a=5$}
+\cell {$c=10+3b$}
+\text {and $b=6$}
+\cell {$c=10+18$}
+\text {we get}
+\cell {$c=28$}
+\stopSTEPtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPaligntable
+\cells {$2c$} {$=$} {$2a+3b$}
+\text {with $a=5$}
+\cells {$2c$}{$=$} {$10+3b$}
+\text {and $b=6$}
+\cells {$2c$} {$=$} {$10+18$}
+\text {we get}
+\cells {$2c$} {$=$} {$28$}
+\text {and therefore}
+\cells {$c$} {$=$} {$28/2$}
+\text {which reduces to}
+\cells {$c$} {$=$} {$14$}
+\stopSTEPaligntable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+ \cells {A} {B}
+ \cells {one} {five} \texts{$+2$}{$-2$}
+ \cells {two} {four} \texts{$+3$}{$-3$}
+ \cells {three} {three} \texts{$+4$}{$-4$}
+ \cells {four} {two} \texts{$+5$}{$-5$}
+ \cells {five} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\startsection[title=Configuring]
+
+The charts and tables can have their own spacing set. Quite certainly the
+distances between cells will differ.
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPcharts} \tex{setupSTEPtables}} \NC \NC \NR
+\HL
+\NC after \NC hook for commands to execute after the table \NC \NR
+\NC before \NC hook for commands to execute before the table \NC \NR
+% \NC method \NC line drawing method\NC \NR
+% \NC height \NC height of the connecting line \NC \NR
+% \NC offset \NC the distance between lines and cells and texts \NC \NR
+% \NC hoffset \NC the horizontal distance between cells \NC \NR
+% \NC voffset \NC the vertical distance between cells \NC \NR
+\HL
+\stoptabulate
+
+Both charts and tables have common settings with respect to the cells, texts and
+lines.
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPcells} \tex{setupSTEPtexts}} \NC \NC \NR
+\HL
+\NC alternative \NC the kind of shape to be drawn \NC \NR
+\NC backgroundcolor \NC the background color identified by name \NC \NR
+\NC rulethickness \NC the width of frame around cells \NC \NR
+\NC framecolor \NC the frame color identified by name \NC \NR
+\NC offset \NC the space between content and frame \NC \NR
+\NC style \NC a (preferable named) style \NC \NR
+\NC color \NC the color of the content \NC \NR
+\HL
+\stoptabulate
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPlines}} \NC \NC \NR
+\HL
+\NC alternative \NC the kind of line to draw between cells \NC \NR
+\NC distance \NC the distance between lines and text \NC \NR
+\NC offset \NC the shift to the right of the start of the line \NC \NR
+\NC height \NC the height of the (curved) line \NC \NR
+\NC rulethickness \NC the width of the lines between cells \NC \NR
+\NC color \NC the line color identified by name \NC \NR
+\HL
+\stoptabulate
+
+In \TEX, some of the settings, like \type {style} and \type {color} can be set
+between elements. In \XML, the settings are passed as processing instructions.
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\start
+ \setupSTEPcells[color=darkred,style=bold]
+ \cell {three} \text{+4}
+ \cell {four} \text{+5}
+\stop
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There are a couple of alternative shapes available. The most relevant ones are:
+\removeunwantedspaces \dostepwiserecurse {5} {9} {1} { \TestShape {\recurselevel}}
+\removeunwantedspaces \dostepwiserecurse {12} {19} {1} { \TestShape {\recurselevel}}
+\removeunwantedspaces \dostepwiserecurse {22} {29} {1} { \TestShape {\recurselevel}}.
+
+Although it is not too wise to set up the layout in the middle of a document, for
+graphics one can seldom get by some local fine||tuning. Here we encounter a
+rather fundamental difference between \TEX\ and \XML. In \TEX, you can easily
+change settings on a temporary basis by using groups. In \XML\ on the other hand,
+settings are bound to a category. So, in \TEX\ you can do this:
+
+\startbuffer
+\setupSTEPcells
+ [important]
+ [color=darkgreen,
+ style=bold]
+
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell [important] {three} \text{+4}
+\cell [important] {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation An \XML\ example is:
+
+\startbuffer
+\setupSTEPcells[demo-1][alternative=5]
+\setupSTEPcells[demo-1][framecolor=darkred]
+\setupSTEPtexts[demo-1][framecolor=darkgreen]
+\setupSTEPlines[demo-1][alternative=4]
+\setupSTEPtexts[demo-2][style=bold]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation This will be applied to:
+
+\startbuffer
+<steptable class="demo-1">
+ <cell> type 5 </cell>
+ <text> type 6 </text>
+ <cell> type 7 </cell>
+ <text class="demo-2"> type 8 </text>
+ <cell> type 9 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer
+
+\noindentation so that we get:
+
+\processxmlbuffer
+
+You can also use processing instructions:
+
+\startbuffer
+<stepchart>
+ <cells> <top> some text 1 </top> <bot> some text 2 </bot> </cells>
+ <?context-stepchart-directive text color darkred ?>
+ <texts> <top> text 3 </top> <bot> text 4 </bot> </texts>
+ <cells> <top> some text 5 </top> <bot> some text 6 </bot> </cells>
+ <?context-stepchart-directive text color darkblue ?>
+ <texts> <top> text 7t </top> </texts>
+ <cells> <top> some text 8 </top> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<steptable>
+ <?context-stepchart-directive cell alternative 12 ?>
+ <cell> cell 12 </cell> <text> 12 to 13 </text>
+ <?context-stepchart-directive cell alternative 13 ?>
+ <cell> cell 13 </cell> <text> 13 to 14 </text>
+ <?context-stepchart-directive cell alternative 14 ?>
+ <cell> cell 14 </cell> <text> 14 to 15 </text>
+ <?context-stepchart-directive cell alternative 15 ?>
+ <cell> cell 15 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+Some settings apply to the whole chart. In \TEX\ this is easy since we
+can group the whole chart including settings but in \XML\ this is somewhat
+problematic. We can however fall back on basic tex commands but it's
+probably better to use as category (class), like:
+
+\startbuffer
+\setupSTEPtexts[demo-5][distance=3em]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation So, the following works as expected:
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive text distance 1em ?>
+ <stepaligntable>
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 1 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+ <?context-tex-directive stop ?>
+ <stepaligntable>
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 2 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+ <stepaligntable class="demo-5">
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 3 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive cell dx 10ex ?>
+ <stepchart>
+ <cells> <top> from here </top> <bot> there </bot> </cells>
+ <texts> <top> to </top> <bot> to </bot> </texts>
+ <cells> <top> and here </top> <bot> there </bot> </cells>
+ </stepchart>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive line height 30pt ?>
+ <?context-stepchart-directive line offset 5pt ?>
+ <steptable>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+ </steptable>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive line height 30pt ?>
+ <?context-stepchart-directive line offset 15pt ?>
+ <stepchart>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+ </stepchart>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=Documentation]
+
+There is no additional documentation on this module.
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg
new file mode 100644
index 000000000..8c45b41b9
--- /dev/null
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.jpg
Binary files differ
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf
new file mode 100644
index 000000000..d576c7d91
--- /dev/null
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png
new file mode 100644
index 000000000..fba526e9f
--- /dev/null
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex
new file mode 100644
index 000000000..c24be76bf
--- /dev/null
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex
@@ -0,0 +1,352 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[art-01,abr-02]
+
+\definecolor
+ [maincolor]
+ [r=.4]
+
+\definecolor
+ [extracolor]
+ [g=.4]
+
+\setupbodyfont
+ [11pt]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\definefontsynonym
+ [TitlePageMono]
+ [file:lmmonoproplt10-bold*default]
+
+\setuphead
+ [color=maincolor]
+
+\usesymbols
+ [cc]
+
+\setupinteraction
+ [hidden]
+
+\loadfontgoodies[lm]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=SwigLib basics,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=SwigLib basics,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startluasetups[swiglib]
+ for i=1,640 do
+ context.definedfont { string.formatters["TitlePageMono at %p"](65536*(10+math.random(5))) }
+ context("SwigLib ")
+ end
+ context.removeunwantedspaces()
+\stopluasetups
+
+\startMPpage
+
+StartPage ;
+
+ fill Page enlarged 1cm withcolor \MPcolor{extracolor} ;
+
+ draw textext("\framed[loffset=2pt,roffset=2pt,frame=off,width=\paperwidth,align={normal,paragraph,verytolerant,stretch}]{\luasetup{swiglib}}")
+ xysized (PaperWidth,PaperHeight)
+ shifted center Page
+ withcolor .8white ;
+
+ draw textext.ulft("\definedfont[TitlePageMono]basics")
+ xsized .75PaperWidth
+ shifted lrcorner Page
+ shifted (-1cm,2cm)
+ withcolor \MPcolor{maincolor} ;
+
+ % draw textext.ulft("\definedfont[TitlePageMono]in context mkiv")
+ % xsized .6PaperWidth
+ % shifted lrcorner Page
+ % shifted (-1cm,6cm)
+ % withcolor \MPcolor{maincolor} ;
+
+StopPage ;
+
+\stopMPpage
+
+\dontcomplain
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title=Introduction]
+
+The \SWIGLIB\ project is related to \LUATEX\ and aims as adding portable library
+support to this \TEX\ engine without too much fixed binding. The project does not
+provide \LUA\ code, unless really needed, because it assumes that macro packages
+have different demands. It also fits in the spirit of \TEX\ and \LUA\ to minimize
+the core components.
+
+The technical setup is by Luigi Scarso and documentation about how to build the
+libraries is part of the \SWIGLIB\ repository. Testing happens with help of the
+\CONTEXT\ (garden) infrastructure. This short document only deals with usage in
+\CONTEXT\ but also covers rather plain usage.
+
+\blank \start \em todo: reference to Luigi's manual \stop \blank
+
+\stopsection
+
+\startsection[title=Inside \CONTEXT]
+
+The recommended way to load a library in \CONTEXT\ is by using the
+\type {swiglib} function. This function lives in the global namespace.
+
+\starttyping
+local gm = swiglib("gmwand.core")
+\stoptyping
+
+After this call you have the functionality available in the \type {gm}
+namespace. This way of loading makes \CONTEXT\ aware that such a library
+has been loading and it will report the loaded libraries as part of the
+statistics.
+
+If you want, you can use the more ignorant \type {require} instead but in
+that case you need to be more explicit.
+
+\starttyping
+local gm = require("swiglib.gmwand.core")
+\stoptyping
+
+Here is an example of using such a library (by Luigi):
+
+\startbuffer
+\startluacode
+local gm = swiglib("gmwand.core")
+local findfile = resolvers.findfile
+
+if not gm then
+ -- no big deal for this manual as we use a system in flux
+ logs.report("swiglib","no swiglib libraries loaded")
+ return
+end
+
+gm.InitializeMagick(".")
+
+local magick_wand = gm.NewMagickWand()
+local drawing_wand = gm.NewDrawingWand()
+local pixel_wand = gm.NewPixelWand();
+
+gm.MagickSetSize(magick_wand,800,600)
+gm.MagickReadImage(magick_wand,"xc:gray")
+
+gm.DrawPushGraphicContext(drawing_wand)
+
+gm.DrawSetFillColor(drawing_wand,pixel_wand)
+
+gm.DrawSetFont(drawing_wand,findfile("dejavuserifbold.ttf"))
+gm.DrawSetFontSize(drawing_wand,96)
+gm.DrawAnnotation(drawing_wand,200,200,"ConTeXt 1")
+
+gm.DrawSetFont(drawing_wand,findfile("texgyreschola-bold.otf"))
+gm.DrawSetFontSize(drawing_wand,78)
+gm.DrawAnnotation(drawing_wand,250,300,"ConTeXt 2")
+
+gm.DrawSetFont(drawing_wand,findfile("lmroman10-bold.otf"))
+gm.DrawSetFontSize(drawing_wand,48)
+gm.DrawAnnotation(drawing_wand,300,400,"ConTeXt 3")
+
+gm.DrawPopGraphicContext(drawing_wand)
+
+gm.MagickDrawImage(magick_wand,drawing_wand)
+
+gm.MagickWriteImages(magick_wand,"./swiglib-mkiv-gm-1.png",1)
+gm.MagickWriteImages(magick_wand,"./swiglib-mkiv-gm-1.jpg",1)
+gm.MagickWriteImages(magick_wand,"./swiglib-mkiv-gm-1.pdf",1)
+
+gm.DestroyDrawingWand(drawing_wand)
+gm.DestroyPixelWand(pixel_wand)
+gm.DestroyMagickWand(magick_wand)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+In practice you will probably stay away from manipulating text this way, but it
+illustrates that you can use the regular \CONTEXT\ helpers to locate files.
+
+\startlinecorrection[big]
+ \startcombination[3*1]
+ {\externalfigure[swiglib-mkiv-gm-1.png][width=.3\textwidth]} {png}
+ {\externalfigure[swiglib-mkiv-gm-1.pdf][width=.3\textwidth]} {pdf}
+ {\externalfigure[swiglib-mkiv-gm-1.jpg][width=.3\textwidth]} {jpg}
+ \stopcombination
+\stoplinecorrection
+
+You'd better make sure to use unique filenames for such graphics. Of course a more
+clever mechanism would only run time consuming tasks once for each iteration of a
+document.
+
+\stopsection
+
+\startsection[title=Outside \CONTEXT]
+
+In the \CONTEXT\ distribution we ship some generic macros and code for usage in
+plain \TEX\ but there is no reason why they shouldn't work in other macro packages
+as well. A rather plain example is this:
+
+\starttyping
+\input luatex-swiglib.tex
+
+\directlua {
+ dofile("luatex-swiglib-test.lua")
+}
+
+\pdfximage {luatex-swiglib-test.jpg} \pdfrefximage\pdflastximage
+
+\end
+\stoptyping
+
+Assuming that you made the \type {luatex-plain} format, such a file can be processed using:
+
+\starttyping
+luatex --fmt=luatex=plain luatex-swiglib-test.tex
+\stoptyping
+
+The loaded \LUA\ file \type {luatex-swiglib-test.lua} liike like this:
+
+\starttyping
+local gm = swiglib("gmwand.core")
+
+gm.InitializeMagick(".")
+
+local magick_wand = gm.NewMagickWand()
+local drawing_wand = gm.NewDrawingWand()
+
+gm.MagickSetSize(magick_wand,800,600)
+gm.MagickReadImage(magick_wand,"xc:red")
+gm.DrawPushGraphicContext(drawing_wand)
+gm.DrawSetFillColor(drawing_wand,gm.NewPixelWand())
+gm.DrawPopGraphicContext(drawing_wand)
+gm.MagickDrawImage(magick_wand,drawing_wand)
+gm.MagickWriteImages(magick_wand,"./luatex-swiglib-test.jpg",1)
+
+gm.DestroyDrawingWand(drawing_wand)
+gm.DestroyMagickWand(magick_wand)
+\stoptyping
+
+Instead of loading a library with the \type {swiglib} function, you can also
+use \type {require}:
+
+\starttyping
+local gm = require("swiglib.gmwand.core")
+\stoptyping
+
+Watch the explicit \type {swiglib} reference. Both methods are equivalent.
+
+\stopsection
+
+\startsection[title={The libraries}]
+
+Most libraries are small but some can be rather large and have additional files.
+This is why we keep them separated. On my system they are collected in the
+platform binary tree:
+
+\starttyping
+e:/tex-context/tex/texmf-mswin/bin/lib/luatex/lua/swiglib/gmwand
+e:/tex-context/tex/texmf-mswin/bin/lib/luatex/lua/swiglib/mysql
+e:/tex-context/tex/texmf-mswin/bin/lib/luatex/lua/swiglib/....
+\stoptyping
+
+One can modulate on this:
+
+\starttyping
+...tex/texmf-mswin/bin/lib/luatex/lua/swiglib/mysql/core.dll
+...tex/texmf-mswin/bin/lib/luajittex/lua/swiglib/mysql/core.dll
+...tex/texmf-mswin/bin/lib/luatex/context/lua/swiglib/mysql/core.dll
+\stoptyping
+
+are all valid. When versions are used you can provide an additional argument to the
+\type {swiglib} loader:
+
+\starttyping
+tex/texmf-mswin/bin/lib/luatex/lua/swiglib/mysql/5.6/core.dll
+\stoptyping
+
+This works with:
+
+\starttyping
+local mysql = swiglib("mysql.core","5.6")
+\stoptyping
+
+as well as:
+
+\starttyping
+local mysql = swiglib("mysql.core")
+\stoptyping
+
+It is hard to predict how operating systems look up libraries and especially
+nested loads, but as long as the root of the \type {swiglib} path is known to the
+file search routine. We've kept the main conditions for success simple: the core
+library is called \type {core.dll} or \type {core.so}. Each library has an
+(automatically called) initialize function named \type {luaopen_core}. There is no
+reason why (sym)links from the \type {swiglib} path to someplace else shouldn't
+work.
+
+In \type {texmfcnf.lua} you will find an entry like:
+
+\starttyping
+CLUAINPUTS = ".;$SELFAUTOLOC/lib/{$engine/context,$engine}/lua//"
+\stoptyping
+
+Which in practice boils down to a search for \type {luatex} or \type {luajittex}
+specific libraries. When both binaries are compatible and there are no \type
+{luajittex} binaries, the regular \type {luatex} libraries will be used.
+
+The \type {swiglib} loader function mentioned in previous sections load libraries
+in a special way: it changes dir to the specific path and then loads the library
+in the usual way. After that it returns to the path where it started out. After
+this, when the library needs additional libraries (and for instance graphicmagick
+needs a lot of them) it will first look on its own path (which is remembered).
+
+The \MKIV\ lookups are somewhat more robust in the sense that they first check
+for matches on engine specific paths. This comes in handy when the search
+patterns are too generic and one can match on for instance \type {luajittex}
+while \type {luatex} is used.
+
+\stopsection
+
+\startsection[title=Colofon]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC comment \NC the swiglib infrastructure is implemented by Luigi Scarso \NC \NR
+\stoptabulate
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/templates/templates-mkiv.tex b/doc/context/sources/general/manuals/templates/templates-mkiv.tex
new file mode 100644
index 000000000..01f2c429e
--- /dev/null
+++ b/doc/context/sources/general/manuals/templates/templates-mkiv.tex
@@ -0,0 +1,283 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[art-01,abr-02]
+
+\definecolor[maincolor] [r=.4]
+\definecolor[extracolor][b=.4]
+
+\setupbodyfont
+ [10pt]
+
+\usesymbols
+ [cc]
+
+\setuptyping
+ [color=extracolor]
+
+\setuptype
+ [color=extracolor]
+
+\setuphead
+ [section]
+ [color=maincolor]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=LMX Templates,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=LMX Templates,
+ extra-1=LMX,
+ extra-2=TEMPLATES,
+ extra-3=HANS HAGEN,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage;
+
+ numeric n, m ; n := 3 * 4 ; m := 4 * 4 ;
+ numeric w, h ; w := PaperWidth/n ; h := PaperHeight/m ;
+ numeric max ; max := 20 ;
+
+ for i=1 upto n :
+ for j=1 upto m :
+ fill
+ unitsquare
+ xysized (w,h)
+ shifted ((i-1)*w,(j-1)*h)
+ withcolor (.5[red,blue] randomized(.75,.75,.75))
+ ;
+ endfor ;
+ endfor ;
+
+ path p ; p := Page enlarged -5mm ;
+
+ pair a[] ; % <
+
+ a[1] := .80[lrcorner p,urcorner p] ;
+ a[2] := .50[llcorner p,ulcorner p] ;
+ a[3] := .20[lrcorner p,urcorner p] ;
+
+ pair b[] ; % \
+
+ b[1] := ulcorner p ;
+ b[2] := center p ;
+ b[3] := lrcorner p ;
+
+ path c[] ; % from < (xml) to \ (tex)
+
+ c[1] := a[1] .. b[1] ;
+ c[2] := a[2] .. b[2] ;
+ c[3] := a[3] .. b[3] ;
+
+ linecap := butt ;
+
+ numeric fraction ;
+
+ for i=1 step 1 until max :
+ fraction := i/max ;
+ draw
+ ((point fraction along c[1]) -- (point fraction along c[2]) -- (point fraction along c[3]))
+ withpen pencircle scaled 5mm
+ withcolor .75[(max+1-i)*green/n,i*yellow/max]
+ withtransparency (1,.5)
+ ;
+ endfor ;
+
+ draw
+ textext.rt("\ssbf{\documentvariable{extra-1}}")
+ xsized (7w)
+ shifted (.8w,3h)
+ withcolor white
+ ;
+
+ draw
+ textext.rt("\ssbf{\documentvariable{extra-2}}")
+ xsized (8w)
+ shifted (w,h)
+ withcolor white
+ ;
+
+ draw
+ textext.ulft("\ssbf{\documentvariable{extra-3}}")
+ rotated 90
+ ysized (5.9h)
+ shifted (PaperWidth-1.2w,PaperHeight/2+2.95h)
+ withcolor white
+ ;
+
+ StopPage;
+
+\stopMPpage
+
+\startsubject[title={Contents}]
+
+\placelist[section][criterium=all,interaction=all]
+
+\stopsubject
+
+\startsection [title={Introduction}]
+
+{\em This manual is not finished yet. The main reason is that what is described
+here is an afternoon experiment resulting in a dozen lines of \LUA\ glue code
+that builds upon an already existing mechanism. When users like this, I will
+extend the basic \LMX\ handler to suit the \TEX\ end better. There will also be
+also support for cache based and in||document templates.)}
+
+The acronym \type {lmx} stands for document that are a mix of \LUA\ and \XML\ and
+is just the three letters \type {xml} reversed. Such documents showed up pretty
+soon in \MKIV\ while I was exploring ways to present debugging and error
+information to users using \XML. As a consequence this is one of the older
+mechanisms available, although I doubt if users start looking for it when they
+start using \CONTEXT.
+
+Anyhow, because we also use \LMX\ for populating web pages, at some point I wondered
+if using the same approach for \TEX\ files made sense. I'm still not sure about it
+but who knows where this ends up. Currently code is shared but in the future we might
+end up with a variant that adds some more flexibility.
+
+\stopsection
+
+\startsection [title={How it works}]
+
+First of all, using this mechanism involves yet another kind of \type {mk}, so
+now we have:
+
+\starttabulate[|TB||]
+\HL
+\NC mkii \NC The old version of \CONTEXT, using \PDFTEX,\XETEX, etc. \NC \NR
+\HL
+\NC mkiv \NC The new version of \CONTEXT, using \LUATEX. \NC \NR
+\NC mkvi \NC Similar to \MKIV\ but with named macro parameters. \NC \NR
+\HL
+\NC mkix \NC A \MKIV\ file mixed with \LUA\ wrapped in \XML\ processing instructions. \NC \NR
+\NC mkxi \NC Similar to \MKIX\ but with named macro parameters. \NC \NR
+\HL
+\stoptabulate
+
+The nice thing about sticking to wrapping in angle brackets is that it plays nice
+with syntax highlighting. Before we show an example of such a mix, we first point
+out that loading (and thereby conversion) happens automatically. A \type {mkix} or
+\type {mkxi} file is just a regular \CONTEXT\ file. In the test suite there
+is a demo file that can be included like this:
+
+\starttyping
+\input lmxlike-001.mkxi
+\stoptyping
+
+This file is loaded and converted on the fly. No caching takes place, but in due time
+we can use the cache built into the \LMX\ handlers if needed. The template itself
+can be fed with variables in the \type {document} namespace:
+
+\starttyping
+\starttext
+
+ \startluacode
+ document.variables.text = "set"
+ \stopluacode
+
+ \input lmxlike-001.mkxi
+
+\stoptext
+\stoptyping
+
+Instead of a special suffix, you can also force conversion with the \type {macros}
+directive:
+
+\starttyping
+% macros=mkix
+\stoptyping
+
+Part of the mentioned looks as follows:
+
+\starttyping
+\bTABLE
+ <?lua for i=1,40 do ?>
+ \bTR
+ <?lua for j=1,5 do ?>
+ \bTD
+ cell (<?lua inject(i) ?>,<?lua inject(j)?>)
+ is <?lua inject(variables.text or "unset") ?>
+ \eTD
+ <?lua end ?>
+ \eTR
+ <?lua end ?>
+\eTABLE
+\stoptyping
+
+The \type {<?lua ... ?>} command is conceptually different from (say) \type
+{\ctxlua} in the sense that the later executes some \LUA\ code at that spot,
+while in a template a \LUA\ function is constructed out of the whole that gets
+executed. In fact, we use \LUA\ to construct an input file.
+
+For the moment we only mention the predefined \type {inject} command. There are
+some more but they make more sense for \XML\ and \HTML\ and in due time this will
+be decoupled so that we can have dedicated helpers. Even the \XML\ and \HTML\
+part is somewhat in flux.
+
+The previous example can of course also be done differently. It's a matter of
+taste and usage what method gets used:
+
+\starttyping
+\startluacode
+ context.bTABLE()
+ for i=1,40 do
+ context.bTR()
+ for j=1,5 do
+ context.bTD()
+ context("cell (%s,%s) is %s",i,j,document.variables.text or "unset")
+ context.eTD()
+ end
+ context.eTR()
+ end
+ context.eTABLE()
+\stopluacode
+\stoptyping
+
+The difference between a \MKIX\ and \MKXI\ file is the same as between a \MKIV\
+and \MKVI\ file: the way macros can be defined:
+
+\starttyping
+\def\testmacro#one#two{[#one,#two]}
+
+\testmacro{1}{2}
+\testmacro{one}{two}
+\testmacro{second}{first}
+\stoptyping
+
+In practice one will seldom need macro definitions in a template file but the
+possibility is provided.
+
+\stopsection
+
+\startsubject[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/tiptrick/tiptrick.tex b/doc/context/sources/general/manuals/tiptrick/tiptrick.tex
new file mode 100644
index 000000000..54a785134
--- /dev/null
+++ b/doc/context/sources/general/manuals/tiptrick/tiptrick.tex
@@ -0,0 +1,117 @@
+% interface=en
+%
+% author: Hans Hagen - Pragma ADE - www.pragma-ade.com
+
+\setupbodyfont
+ [dejavu]
+
+\setuppapersize
+ [HD-]
+
+\setuplayout
+ [location=middle,
+ header=0pt,
+ footer=0pt,
+ backspace=2.25cm,
+ topspace=2.25cm,
+ width=middle,
+ height=middle]
+
+\setupcolors
+ [state=start]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ picture p ; path s ;
+ fill Page withcolor .5red ;
+ draw Page withpen pensquare scaled 2cm withcolor .75[.5red,white] ;
+ s := (Field[Text][Text] enlarged .5cm) squeezed (.1cm,.15cm) ;
+ fill s withcolor .75[.5red,white] ;
+ if false :
+ p := image (graphictext "\ss TIP" withfillcolor .2white ;) ;
+ else :
+ p := textext.raw("\ss TIP") ;
+ setbounds p to (boundingbox p rightenlarged -0.025bbwidth(p)) ;
+ fi ;
+ p := p xysized(PaperWidth-1cm,PaperHeight-1cm) ;
+ p := p shifted .5(bbwidth(Page)-bbwidth(p),bbheight(Page)-bbheight(p)) ;
+ draw p withcolor .2white ;
+ clip p to s ;
+ draw p withcolor .875[.5red,white] ; ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background=page,
+ state=repeat]
+
+\definecolor[red][r=.5]
+
+\setuphead
+ [chapter]
+ [style=\tfb,
+ before=,
+ after={\blank[line]}]
+
+\setupblank
+ [halfline]
+
+% xml interface
+
+\startxmlsetups xml:tips
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:tip
+ \startstandardmakeup
+ \startnamedsection[title][title=\xmlfirst{#1}{/title}]
+ \xmlall{#1}{/(remark|command)}
+ \vfill
+ \stopnamedsection
+ \stopstandardmakeup
+\stopxmlsetups
+
+\startxmlsetups xml:remark
+ \blank
+ \xmlflush{#1}
+ \blank
+\stopxmlsetups
+
+\definehighlight
+ [command]
+ [style=mono,
+ color=red,
+ command=no]
+
+\startxmlsetups xml:command
+ \blank
+ \starthighlight[command]
+ \xmlflush{#1}
+ \stophighlight
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:reference
+ \vfill
+ \hfill\strut see:\space
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup {#1} {
+ tips|tip|remark|command|reference
+ } {xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{main}{xml:initialize}
+
+\starttext
+
+ \xmlprocessfile{main}{tiptrick.xml}{}
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/tiptrick/tiptrick.xml b/doc/context/sources/general/manuals/tiptrick/tiptrick.xml
new file mode 100644
index 000000000..8b4a30011
--- /dev/null
+++ b/doc/context/sources/general/manuals/tiptrick/tiptrick.xml
@@ -0,0 +1,53 @@
+<?xml version='1.0'?>
+
+<!-- author: Hans Hagen - Pragma ADE - www.pragma-ade.com -->
+
+<!-- feel free to submit more tips -->
+
+<tips xmlns="www.pragma-ade.com/schemas/tip.rng">
+
+ <tip>
+ <title>Generating Formats</title>
+ <remark>for all languages:</remark>
+ <command>context --make --all</command>
+ <remark>only english interface:</remark>
+ <command>context --make en</command>
+ <remark>for plain tex:</remark>
+ <command>mtxrun --script plain --make</command>
+ <!-- reference>mtexexec.pdf</reference -->
+ </tip>
+
+ <tip>
+ <title>Updating</title>
+ <remark>when installed from the wiki:</remark>
+ <command>..../first-setup(.cmd)</command>
+ <remark>when downloaded from the website:</remark>
+ <command>cd ..../tex/texmf-context</command>
+ <command>wget http://www.pragma-ade.com/context/current/cont-tmf.zip</command>
+ <command>unzip cont-tmf.zip</command>
+ <command>mtxrun --generate</command>
+ <!-- reference>minstall.pdf</reference -->
+ </tip>
+
+ <tip>
+ <title>Generating Command Lists</title>
+ <remark>quick reference document of english and dutch commands:</remark>
+ <command>context --interface=nl --global --result=setup-nl x-set-12.mkiv</command>
+ <command>context --interface=en --global --result=setup-en x-set-12.mkiv</command>
+ </tip>
+
+ <tip>
+ <title>Module Documentation</title>
+ <remark>pretty printed, annotated module documentation:</remark>
+ <command>mtxrun --script modules syst-aux.mkiv</command>
+ </tip>
+
+ <tip>
+ <title>Listings</title>
+ <remark>verbatim listings of (ascii) files:</remark>
+ <command>context --extra=listing --bodyfont=8pt --scite somefile.tex</command>
+ <command>context --extra=listing --bodyfont=8pt --scite somefile.lua</command>
+ <command>context --extra=listing --bodyfont=8pt --scite somefile.xml</command>
+ </tip>
+
+</tips>
diff --git a/doc/context/sources/general/manuals/tools/tools-mkiv.tex b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
new file mode 100644
index 000000000..2ac1e15f4
--- /dev/null
+++ b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
@@ -0,0 +1,511 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[abr-02]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=2cm,
+ topspace=1cm,
+ footer=0pt,
+ bottomspace=2cm]
+
+\definecolor
+ [DocumentColor]
+ [r=.5]
+
+\setuptype
+ [color=DocumentColor]
+
+\setuptyping
+ [color=DocumentColor]
+
+\usetypescript
+ [iwona]
+
+\setupbodyfont
+ [iwona]
+
+\setuphead
+ [chapter]
+ [style=\bfc,
+ color=DocumentColor]
+
+\setuphead
+ [section]
+ [style=\bfb,
+ color=DocumentColor]
+
+\setupinteraction
+ [hidden]
+
+\setupwhitespace
+ [big]
+
+\setupheadertexts
+ []
+
+\setupheadertexts
+ []
+ [{\DocumentColor \type {luatools mtxrun context}\quad\pagenumber}]
+
+\usesymbols[cc]
+
+\def\sTEXMFSTART{\type{texmfstart}}
+\def\sLUATOOLS {\type{luatools}}
+\def\sMTXRUN {\type{mtxrun}}
+\def\sCONTEXT {\type{context}}
+\def\sKPSEWHICH {\type{kpsewhich}}
+\def\sMKTEXLSR {\type{mktexlsr}}
+\def\sXSLTPROC {\type{xsltproc}}
+
+\usemodule[narrowtt]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title={Tools: luatools, mtxrun, context},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Tools,
+ extra-1=luatools,
+ extra-2=mtxrun,
+ extra-3=context,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+ StartPage ;
+ picture p ; p := image (
+ for i=1 upto 21 :
+ for j=1 upto 30 :
+ drawarrow (fullcircle rotated uniformdeviate 360) scaled 10 shifted (i*15,j*15) ;
+ endfor ;
+ endfor ;
+ ) ;
+ p := p ysized (bbheight(Page)-4mm) ;
+ fill Page enlarged 2mm withcolor \MPcolor{DocumentColor} ;
+ draw p shifted (center Page - center p) withpen pencircle scaled 2 withcolor .5white ;
+ numeric dx ; dx := bbwidth(Page)/21 ;
+ numeric dy ; dy := bbheight(Page)/30 ;
+ p := textext("\tt\bf\white\getvariable{document}{extra-1}") xsized(14*dx) ;
+ p := p shifted (-lrcorner p) shifted lrcorner Page shifted (-1dx,8dy) ;
+ draw p ;
+ p := textext("\tt\bf\white\getvariable{document}{extra-2}") xsized(14*dx) ;
+ p := p shifted (-lrcorner p) shifted lrcorner Page shifted (-1dx,5dy) ;
+ draw p ;
+ p := textext("\tt\bf\white\getvariable{document}{extra-3}") xsized(14*dx) ;
+ p := p shifted (-lrcorner p) shifted lrcorner Page shifted (-1dx,2dy) ;
+ draw p ;
+ setbounds currentpicture to Page ;
+ StopPage
+\stopMPpage
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title={Remark}]
+
+This manual is work in progress. Feel free to submit additions or corrections.
+Before you start reading, it is good to know that in order to get starting with
+\CONTEXT, the easiest way to do that is to download the standalone distribution
+from \type {contextgarden.net}. After that you only need to make sure that \type
+{luatex} is in your path. The main command you use is then \type {context} and
+normally it does all the magic it needs itself.
+
+\stopsection
+
+\startsection[title={Introduction}]
+
+Right from the start \CONTEXT\ came with programs that managed the process of
+\TEX-ing. Although you can perfectly well run \TEX\ directly, it is a fact that
+often multiple runs are needed as well as that registers need to be sorted.
+Therefore managing a job makes sense.
+
+First we had \TEXEXEC\ and \TEXUTIL, and both were written in \MODULA, and as
+this language was not supported on all platforms the programs were rewritten in
+\PERL. Following that a few more tools were shipped with \CONTEXT.
+
+When we moved on to \RUBY\ all the \PERL\ scripts were rewritten and when
+\CONTEXT\ \MKIV\ showed up, \LUA\ replaced \RUBY. As we use \LUATEX\ this means
+that currently the tools and the main program share the same language. For \MKII\
+scripts like \TEXEXEC\ will stay around but the idea is that there will be \LUA\
+alternatives for them as well.
+
+Because we shipped many scripts, and because the de facto standard \TEX\
+directory structure expects scripts to be in certain locations we not only ship
+tools but also some more generic scripts that locate and run these tools.
+
+\stopsection
+
+\startsection[title={The location}]
+
+Normally you don't need to know so many details about where the scripts
+are located but here they are:
+
+\starttyping
+<texroot>/scripts/context/perl
+<texroot>/scripts/context/ruby
+<texroot>/scripts/context/lua
+<texroot>/scripts/context/stubs
+\stoptyping
+
+This hierarchy was actually introduced because \CONTEXT\ was shipped with a bunch
+of tools. As mentioned, we nowadays focus on \LUA\ but we keep a few of the older
+scripts around in the \PERL\ and \RUBY\ paths.Now, if you're only using \CONTEXT\
+\MKIV, and this is highly recommended, you can forget about all but the \LUA\
+scripts.
+
+\stopsection
+
+\startsection[title={The traditional finder}]
+
+When you run scripts multiple times, and in the case of \CONTEXT\ they are even
+run inside other scripts, you want to minimize the startup time. Unfortunately
+the traditional way to locate a script, using \sKPSEWHICH, is not that fast,
+especially in a setup with many large trees Also, because not all tasks can be
+done with the traditional scripts (take format generation) we provided a runner
+that could deal with this: \sTEXMFSTART. As this script was also used in more
+complex workflows, it had several tasks:
+
+\startitemize[packed]
+\item locate scripts in the distribution and run them using the right
+ interpreter
+\item do this selectively, for instance identify the need for a run using
+ checksums for potentially changed files (handy for image conversion)
+\item pass information to child processes so that lookups are avoided
+\item choose a distribution among several installed versions (set the root
+ of the \TEX\ tree)
+\item change the working directory before running the script
+\item resolve paths and names on demand and launch programs with arguments
+ where names are expanded controlled by prefixes (handy for
+ \TEX-unware programs)
+\item locate and open documentation, mostly as part the help systems in
+ editors, but also handy for seeing what configuration file is used
+\item act as a \KPSEWHICH\ server cq.\ client (only used in special cases,
+ and using its own database)
+\stopitemize
+
+Of course there were the usual more obscure and undocumented features as
+well. The idea was to use this runner as follows:
+
+\starttyping
+texmfstart texexec <further arguments>
+texmfstart --tree <rootoftree> texexec <further arguments>
+\stoptyping
+
+These are just two ways of calling this program. As \sTEXMFSTART\ can initialize
+the environment as well, it is basically the only script that has to be present
+in the binary path. This is quite comfortable as this avoids conflicts in names
+between the called scripts and other installed programs.
+
+Of course calls like above can be wrapped in a shell script or batch file without
+penalty as long as \sTEXMFSTART\ itself is not wrapped in a caller script that
+applies other inefficient lookups. If you use the \CONTEXT\ minimals you can be
+sure that the most efficient method is chosen, but we've seen quite inefficient
+call chains elsewhere.
+
+In the \CONTEXT\ minimals this script has been replaced by the one we will
+discuss in the next section: \sMTXRUN\ but a stub is still provided.
+
+\stopsection
+
+\startsection[title={The current finder}]
+
+In \MKIV\ we went a step further and completely abandoned the traditional lookup
+methods and do everything in \LUA. As we want a clear separation between
+functionality we have two main controlling scripts: \sMTXRUN\ and \sLUATOOLS. The
+last name may look somewhat confusing but the name is just one on in a series.
+\footnote {We have \type {ctxtools}, \type {exatools}, \type {mpstools}, \type
+{mtxtools}, \type {pdftools}, \type {rlxtools}, \type {runtools}, \type
+{textools}, \type {tmftools} and \type {xmltools}. Most if their funtionality is
+already reimplemented.}
+
+In \MKIV\ the \sLUATOOLS\ program is nowadays seldom used. It's just a drop in
+for \sKPSEWHICH\ plus a bit more. In that respect it's rather dumb in that it
+does not use the database, but clever at the same time because it can make one
+based on the little information available when it runs. It can also be used to
+generate format files either or not using \LUA\ stubs but in practice this is not
+needed at all.
+
+For \CONTEXT\ users, the main invocation of this tool is when the \TEX\ tree is
+updated. For instance, after adding a font to the tree or after updating
+\CONTEXT, you need to run:
+
+\starttyping
+mtxrun --generate
+\stoptyping
+
+After that all tools will know where to find stuff and how to behave well within
+the tree. This is because they share the same code, mostly because they are
+started using \sMTXRUN. For instance, you process a file with:
+
+\starttyping
+mtxrun --script context <somefile>
+\stoptyping
+
+Because this happens often, there's also a shortcut:
+
+\starttyping
+context <somefile>
+\stoptyping
+
+But this does use \sMTXRUN\ as well. The help information of \sMTXRUN\ is rather
+minimalistic and if you have no clue what an option does, you probably never
+needed it anyway. Here we discuss a few options. We already saw that we can
+explicitly ask for a script:
+
+\starttyping
+mtxrun --script context <somefile>
+\stoptyping
+
+but
+
+\starttyping
+mtxrun context <somefile>
+\stoptyping
+
+also works. However, by using \type {--script} you limit te lookup to the valid
+\CONTEXT\ \MKIV\ scripts. In the \TEX\ tree these have names prefixed by \type
+{mtx-} and a lookup look for a plural as well. So, the next two lookups are
+equivalent:
+
+\starttyping
+mtxrun --script font
+mtxrun --script fonts
+\stoptyping
+
+Both will run \type {mtx-fonts.lua}. Actually, this is one of the scripts that
+you might need when your font database is somehow outdated and not updated
+automatically:
+
+\starttyping
+mtxrun --script fonts --reload --force
+\stoptyping
+
+Normally \sMTXRUN\ is all you need in order to run a script. However, there are a
+few more options:
+
+\ctxlua{os.execute("mtxrun > tools-mkiv-help.tmp")}
+
+\typefile[ntyping]{tools-mkiv-help.tmp}
+
+Don't worry,you only need those obscure features when you integrate \CONTEXT\ in
+for instance a web service or when you run large projects where runs and paths
+take special care.
+
+\stopsection
+
+\startsection[title={Updating}]
+
+There are two ways to update \CONTEXT\ \MKIV. When you manage your
+trees yourself or when you use for instance \TEXLIVE, you act as
+follows:
+
+\startitemize[packed]
+\item download the file cont-tmf.zip from \type {www.pragma-ade.com} or elsewhere
+\item unzip this file in a subtree, for instance \type {tex/texmf-local}
+\item run \type {mtxrun --generate}
+\item run \type {mtxrun --script font --reload}
+\item run \type {mtxrun --script context --make}
+\stopitemize
+
+Or shorter:
+
+\startitemize[packed]
+\item run \type {mtxrun --generate}
+\item run \type {mtxrun font --reload}
+\item run \type {context --make}
+\stopitemize
+
+Normally these commands are not even needed, but they are a nice test if your
+tree is still okay. To some extend \sCONTEXT\ is clever enough to decide if the
+databases need to be regenerated and|/|or a format needs to be remade and|/|or if
+a new font database is needed.
+
+Now, if you also want to run \MKII, you need to add:
+
+\startitemize[packed]
+\item run \type {mktexlsr}
+\item run \type {texexec --make}
+\stopitemize
+
+The question is, how to act when \sLUATOOLS\ and \sMTXRUN\ have been updated
+themselves? In that case, after unzipping the archive, you need to do the
+following:
+
+\startitemize[packed]
+\item run \type {luatools --selfupdate}
+\item run \type {mtxrun --selfupdate}
+\stopitemize
+
+For quite a while we shipped so called \CONTEXT\ minimals. These zip files
+contained only the resources and programs that made sense for running \CONTEXT.
+Nowadays the minimals are installed and synchronized via internet. \footnote
+{This project was triggered by Mojca Miklavec who is also charge of this bit of
+the \CONTEXT\ infrastructure. More information can be found at \type
+{contextgarden.net}.} You can just run the installer again and no additional
+commands are needed. In the console you will see several calls to \sMTXRUN\ and
+\sLUATOOLS\ fly by.
+
+\stopsection
+
+\startsection[title={The tools}]
+
+We only mention the tools here. The most important ones are \sCONTEXT\ and \type
+{fonts}. You can ask for a list of installed scripts with:
+
+\starttyping
+mtxrun --script
+\stoptyping
+
+On my machine this gives:
+
+\ctxlua{os.execute("mtxrun --script > tools-mkiv-help.tmp")}
+
+\typefile[ntyping]{tools-mkiv-help.tmp}
+
+The most important scripts are \type {mtx-fonts} and \type {mtx-context}. By
+default fonts are looked up by filename (the \type {file:} prefix before font
+names in \CONTEXT\ is default). But you can also lookup fonts by name (\type
+{name:}) or by specification (\type {spec:}). If you want to use these two
+methods, you need to generate a font database as mentioned in the previous
+section. You can also use the font tool to get information about the fonts
+installed on your system.
+
+\stopsection
+
+\startsection[title={Running \CONTEXT}]
+
+The \sCONTEXT\ tool is what you will use most as it manages your
+run.
+
+\ctxlua{os.execute("context > tools-mkiv-help.tmp")}
+
+\typefile[ntyping]{tools-mkiv-help.tmp}
+
+There are few exert options too:
+
+\ctxlua{os.execute("context --expert > tools-mkiv-help.tmp")}
+
+\typefile[ntyping]{tools-mkiv-help.tmp}
+
+You might as well forget about these unless you are one of the
+\CONTEXT\ developers.
+
+\stopsection
+
+\startsection[title={Prefixes}]
+
+A handy feature of \sMTXRUN\ (and as most features an inheritance of
+\sTEXMFSTART) is that it will resolve prefixed arguments. This can be of help
+when you run programs that are unaware of the \TEX\ tree but nevertheless need to
+locate files in it.
+
+\ctxlua{os.execute("mtxrun --prefixes > tools-mkiv-help.tmp")}
+
+\typefile[ntyping]{tools-mkiv-help.tmp}
+
+An example is:
+
+\starttyping
+mtxrun --execute xsltproc file:whatever.xsl file:whatever.xml
+\stoptyping
+
+The call to \sXSLTPROC\ will get two arguments, being the complete path to the
+files (given that it can be resolved). This permits you to organize the files in
+a similar was as \TEX\ files.
+
+\stopsection
+
+\startsection[title={Stubs}]
+
+As the tools are written in the \LUA\ language we need a \LUA\ interpreter and or
+course we use \LUATEX\ itself. On \UNIX\ we can copy \sLUATOOLS\ and \sMTXRUN\ to
+files in the binary path with the same name but without suffix. Starting them in
+another way is a waste of time, especially when \sKPSEWHICH\ is used to find
+then, something which is useless in \MKIV\ anyway. Just use these scripts
+directly as they are self contained.
+
+For \sCONTEXT\ and other scripts that we want convenient access to, stubs are
+needed, like:
+
+\starttyping
+#!/bin/sh
+mtxrun --script context "$@"
+\stoptyping
+
+This is also quite efficient as the \sCONTEXT\ script \type {mtx-context} is
+loaded in \sMTXRUN\ and uses the same database.
+
+On \WINDOWS\ you can copy the scripts as|-|is and associate the suffix with
+\LUATEX\ (or more precisely: \type {texlua}) but then all \LUA\ script will be
+run that way which is not what you might want.
+
+In \TEXLIVE\ stubs for starting scripts were introduced by Fabrice Popineau. Such
+a stub would start for instance \sTEXMFSTART, that is: it located the script
+(\PERL\ or \RUBY) in the \TEX\ tree and launched it with the right interpreter.
+Later we shipped pseudo binaries of \sTEXMFSTART: a \RUBY\ interpreter plus
+scripts wrapped into a self contained binary.
+
+For \MKIV\ we don't need such methods and started with simple batch files,
+similar to the \UNIX\ startup scripts. However, these have the disadvantage that
+they cannot be used in other batch files without using the \type {start} command.
+In \TEXLIVE\ this is taken care of by a small binary written bij T.M.\ Trzeciak
+so on \TEXLIVE\ 2009 we saw a call chain from \type {exe} to \type {cmd} to \type
+{lua} which is somewhat messy.
+
+This is why we now use an adapted and stripped down version of that program that
+is tuned for \sMTXRUN, \sLUATOOLS\ and \sCONTEXT. So, we moved from the original
+\type {cmd} based approach to an \type {exe} one.
+
+\starttyping
+mtxrun.dll
+mtxrun.exe
+\stoptyping
+
+You can copy \type {mtxrun.exe} to for instance \type {context.exe} and it will
+still use \sMTXRUN\ for locating the right script. It also takes care of mapping
+\sTEXMFSTART\ to \sMTXRUN. So we've removed the intermediate \type {cmd} step,
+can not run the script as any program, and most of all, we're as efficient as can
+be.
+
+Of course this program is only meaningful for the \CONTEXT\ approach to tools.
+
+It may all sound more complex than it is but once it works users will not notice
+those details. Als, in practice not that much has changed in running the tools
+between \MKII\ and \MKIV\ as we've seen no reason to change the methods.
+
+\stopsection
+
+\startsubject[title={Colofon}]
+
+\starttabulate[|B|p|]
+ \NC author \NC \documentvariable{author},
+ \documentvariable{affiliation},
+ \documentvariable{location} \NC \NR
+ \NC version \NC \currentdate \NC \NR
+ \NC website \NC \documentvariable{website} \endash\
+ \documentvariable{support} \NC \NR
+ \NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/units/units-mkiv.tex b/doc/context/sources/general/manuals/units/units-mkiv.tex
new file mode 100644
index 000000000..0d91c67df
--- /dev/null
+++ b/doc/context/sources/general/manuals/units/units-mkiv.tex
@@ -0,0 +1,538 @@
+% language=uk
+
+\usemodule[art-01,abr-02,physics-units]
+
+\definecolor[red] [darkred]
+\definecolor[green] [darkgreen]
+\definecolor[blue] [darkblue]
+\definecolor[yellow] [darkyellow]
+\definecolor[magenta][darkmagenta]
+\definecolor[cyan] [darkcyan]
+
+\definecolor[maincolor] [darkcyan]
+\definecolor[extracolor][darkmagenta]
+
+\setupbodyfont
+ [10pt]
+
+\setuptyping
+ [color=extracolor]
+
+\setuptype
+ [color=extracolor] % darkyellow
+
+% \setupnumbering
+% [alternative=doublesided]
+
+\setupinteraction
+ [hidden]
+
+\setuphead
+ [section]
+ [color=maincolor]
+
+\usesymbols[cc]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=Units,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Units,
+ extra=ConTeXt MkIV,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\unexpanded\def\UnitsHack#1#2%
+ {\setbox\scratchbox\hbox{\bf\strut#1#2/}% kerning and such
+ \hbox to \wd\scratchbox{\bf\strut#1\hss/\hss#2}}
+
+\startMPpage
+
+ StartPage ;
+ fill Page enlarged 2mm withcolor \MPcolor{darkcyan} ;
+ pickup pencircle scaled 2mm ;
+ picture p, q, r ;
+ p := textext("\ssbf\WORD{\documentvariable{title}}") xsized (bbheight Page - 2cm) rotated 90 ;
+ q := textext("\ssbf\WORD{\documentvariable{author}}") ysized 1cm ;
+ r := textext("\ssbf\WORD{\documentvariable{extra}}") xsized bbwidth q ;
+ draw anchored.rt (p, center rightboundary Page shifted (-1cm, 0mm)) withcolor white ;
+ draw anchored.lft(q, ulcorner Page shifted ( 1cm, -84mm)) withcolor white ; % \MPcolor{darkred} ;
+ draw anchored.lft(r, ulcorner Page shifted ( 1cm,-108mm)) withcolor white ; % \MPcolor{darkred} ;
+ StopPage ;
+
+\stopMPpage
+
+% \page[empty] \setuppagenumber[start=1]
+
+\startsubject[title={Contents}]
+
+\placelist[section][criterium=all,interaction=all]
+
+\stopsubject
+
+\startsection[title={Introduction}]
+
+In \CONTEXT\ \MKII\ there is a module that implements consistent
+typesetting of units (quantities and dimensions). In \MKIV\ this
+functionality is now part of the physics core modules. This is
+also one of the mechanisms that got a new user interface: instead
+of using commands we now parse text. Thanks to those users who
+provided input we're more complete now that in \MKII. You can browse
+the mailing list archive to get some sense of history.
+
+\stopsection
+
+\startsection[title={The main command}]
+
+The core command is \type {\unit}. The argument to this command gets
+parsed and converted into a properly typeset dimension. Normally there
+will be a quantity in front.
+
+\starttabulate
+\NC \type{10 meter} \NC \unit{10 meter} \NC \NR
+\NC \type{10 meter per second} \NC \unit{10 meter per second} \NC \NR
+\NC \type{10 square meter per second} \NC \unit{10 square meter per second} \NC \NR
+\stoptabulate
+
+The parser knows about special cases, like synonyms:
+
+\starttabulate
+\NC \type{10 degree celsius} \NC \unit{10 degree celsius} \NC \NR
+\NC \type{10 degrees celsius} \NC \unit{10 degrees celsius} \NC \NR
+\NC \type{10 celsius} \NC \unit{10 celsius} \NC \NR
+\stoptabulate
+
+The units can be rather complex, for example:
+
+\startbuffer
+\unit{30 kilo pascal square meter / second kelvin}
+\stopbuffer
+
+\typebuffer
+
+This comes out as: \ignorespaces\getbuffer\removeunwantedspaces. Depending
+on the unit at had, recognition is quite flexible. The following variants
+all work out ok.
+
+\starttabulate
+\NC \type{10 kilogram} \NC \unit{10 kilogram} \NC \NR
+\NC \type{10 kilo gram} \NC \unit{10 kilo gram} \NC \NR
+\NC \type{10 k gram} \NC \unit{10 k gram} \NC \NR
+\NC \type{10 kilo g} \NC \unit{10 kilo g} \NC \NR
+\NC \type{10 k g} \NC \unit{10 k g} \NC \NR
+\NC \type{10 kg} \NC \unit{10 kg} \NC \NR
+\NC \type{10 kilog} \NC \unit{10 kilog} \NC \NR
+\NC \type{10 kgram} \NC \unit{10 kgram} \NC \NR
+\stoptabulate
+
+Of course being consistent makes sense, so normally you will use
+a consistent mix of short or long keywords.
+
+You can provide a qualifier that gets lowered and appended to
+the preceding unit.
+
+\startbuffer
+\unit{112 decibel (A)}
+\stopbuffer
+
+\typebuffer
+
+This gives: \ignorespaces\getbuffer\removeunwantedspaces. Combinations
+are also possible:
+
+\starttabulate
+\NC \type{5 watt per meter celsius} \NC \unit{5 watt per meter celsius} \NC \NR
+\NC \type{5 watt per meter degrees celsius} \NC \unit{5 watt per meter degrees celsius} \NC \NR
+\NC \type{5 watt per meter kelvin} \NC \unit{5 watt per meter kelvin} \NC \NR
+\NC \type{5 watt per meter per kelvin} \NC \unit{5 watt per meter per kelvin} \NC \NR
+\NC \type{10 arcminute} \NC \unit{10 arcminute} \NC \NR
+\NC \type{10 arcminute 20 arcsecond} \NC \unit{10 arcminute 20 arcsecond} \NC \NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title={Extra units}]
+
+To some extent units can be tuned. You can for instance
+influence the spacing between a number and a unit:
+
+\startbuffer
+ \unit{35 kilogram per cubic meter}
+\setupunit[space=normal] \unit{35 kilogram per cubic meter}
+\setupunit[space=big] \unit{35 kilogram per cubic meter}
+\setupunit[space=medium] \unit{35 kilogram per cubic meter}
+\setupunit[space=small] \unit{35 kilogram per cubic meter}
+\setupunit[space=none] \unit{35 kilogram per cubic meter}
+\stopbuffer
+
+\typebuffer
+
+Of course no spacing looks rather bad:
+
+\startlines
+\getbuffer
+\stoplines
+
+Another parameter is \type {separator}. In order to demonstrate
+this we define an extra unit command:
+
+\startbuffer
+\defineunit[sunit][separator=small]
+\defineunit[nunit][separator=none]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We now have two more commands:
+
+\startbuffer
+\unit {35 kilogram cubic meter}
+\sunit{35 kilogram cubic meter}
+\nunit{35 kilogram cubic meter}
+\stopbuffer
+
+\typebuffer
+
+These three commands give different results:
+
+\startlines
+\getbuffer
+\stoplines
+
+Valid separators are \type {normal}, \type {big}, \type {medium},
+\type {small}, \type {none}. You can let units stand out by
+applying color or a specific style.
+
+\startbuffer
+\setupunit[style=\bi,color=maincolor]
+\unit{10 square meter per second}
+\stopbuffer
+
+\typebuffer
+
+Keep in mind that all defined units inherit from their parent
+definition unless they are set up themselves.
+
+\start \blank \getbuffer \blank \stop
+
+To some extent you can control rendering in text and math mode. As
+an example we define an extra instance.
+
+\startbuffer
+\defineunit[textunit][alternative=text]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+test \unit {10 cubic meter per second} test
+test \textunit{10 cubic meter per second} test
+test $\unit {10 cubic meter per second}$ test
+test $\textunit{10 cubic meter per second}$ test
+test 10 \unit {cubic meter per second} test
+test 10 \textunit{cubic meter per second} test
+test $10 \unit {cubic meter per second}$ test
+test $10 \textunit{cubic meter per second}$ test
+\stopbuffer
+
+\typebuffer
+
+\startlines
+\getbuffer
+\stoplines
+
+\stopsection
+
+\startsection[title={Labels}]
+
+The units, prefixes and operators are typeset using the label
+mechanism which means that they can be made to adapt to a language
+and|/|or adapted. Instead of language specific labels you can also
+introduce mappings that don't relate to a language at all. As an
+example we define some bogus mapping.
+
+\startbuffer
+\setupunittext
+ [whatever]
+ [meter=retem,
+ second=dnoces]
+
+\setupprefixtext
+ [whatever]
+ [kilo=olik]
+
+\setupoperatortext
+ [whatever]
+ [solidus={ rep }]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Such a mapping can be partial and the current language will
+be the default fallback and itselfs falls back on the English
+language mapping.
+
+\startbuffer
+\unit{10 km/s}
+\unit{10 Kilo Meter/s}
+\unit{10 kilo Meter/s}
+\unit{10 Kilo m/s}
+\unit{10 k Meter/s}
+\stopbuffer
+
+\typebuffer
+
+When we typeset this we get the normal rendering:
+
+\startlines
+\getbuffer
+\stoplines
+
+However, when we change the language parameter, we get
+a different result:
+
+\startlines
+\setupunit[language=whatever]\getbuffer
+\stoplines
+
+The alternative rendering is set up as follows:
+
+\starttyping
+\setupunit[language=whatever]
+\stoptyping
+
+You can also decide to use a special instance of units:
+
+\starttyping
+\defineunit[wunit][language=whatever]
+\stoptyping
+
+This will define the \type {\wunit} command and leave the original
+\type {\unit} command untouched.
+
+\stopsection
+
+\startsection[title={Digits}]
+
+In addition to units we have digits. These can be used independently
+but the same functionality is also integrated in the unit commands.
+The main purpose of this command is formatting in tables, of which
+we give an example below.
+
+\starttabulate[|l|r|]
+\NC \type{12,345.67 kilogram} \NC \unit{12,345.67 kilogram} \NR
+\NC \type{__,__1.23 kilogram} \NC \unit{__,__1.23 kilogram} \NR
+\NC \type{__,___.12 kilogram} \NC \unit{__,___.12 kilogram} \NR
+\NC \type{__,__1.== kilogram} \NC \unit{__,__1.== kilogram} \NR
+\NC \type{__,___:23 kilogram} \NC \unit{__,___:23 kilogram} \NR
+\stoptabulate
+
+The \type {_} character serves as placeholders. There are some
+assumptions to how numbers are constructed. In principe the input
+assumes a comma to separate thousands and a period to separate the
+fraction.
+
+\getbuffer
+
+You can swap periods and commas in the output. In fact there are a
+few methods available. For instance we can separate the thousands
+with a small space instead of a symbol.
+
+\startbuffer
+\starttabulate[|c|r|r|]
+\HL
+\NC 0 \NC \setupunit[method=0]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=0]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 1 \NC \setupunit[method=1]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=1]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 2 \NC \setupunit[method=2]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=2]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 3 \NC \setupunit[method=3]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=3]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 4 \NC \setupunit[method=4]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=4]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 5 \NC \setupunit[method=5]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=5]\unit{@@,@@0.10 kilogram} \NC \NR
+\NC 6 \NC \setupunit[method=6]\unit{00,000.10 kilogram}
+ \NC \setupunit[method=6]\unit{@@,@@0.10 kilogram} \NC \NR
+\HL
+\stoptabulate
+\stopbuffer
+
+\typebuffer % [bodyfont=9pt]
+
+\getbuffer
+
+The digit modes can be summarized as::
+
+\startitemize[n,packed]
+\item periods/comma
+\item commas/period
+\item thinmuskips/comma
+\item thinmuskips/period
+\item thickmuskips/comma
+\item thickmuskips/period
+\stopitemize
+
+You can reverse the order of commas and period in the input by
+setting the parameter \type {order} to \type {reverse}.
+
+The digit parser handles a bunch of special characters as
+well as different formats. We strongly suggest you to use
+the grouped call.
+
+\starttabulate[|l|l|l|]
+\NC \type{.} \NC , . \NC comma or period \NC \NR
+\NC \type{,} \NC , . \NC comma or period \NC \NR
+\NC \type{:} \NC \NC invisible period \NC \NR
+\NC \type{;} \NC \NC invisible comma \NC \NR
+\NC \type{_} \NC \NC invisible space \NC \NR
+\NC \type{/} \NC \NC invisible sign \NC \NR
+\NC \type{-} \NC $-$ \NC minus sign \NC \NR
+\NC \type{+} \NC $+$ \NC plus sign \NC \NR
+\NC \type{//} \NC \NC invisible high sign \NC \NR
+\NC \type{--} \NC $\negative$ \NC high minus sign \NC \NR
+\NC \type{++} \NC $\positive$ \NC high plus sign \NC \NR
+\NC \type{=} \NC $\zeroamount$ \NC zero padding \NC \NR
+\stoptabulate
+
+Let's give some examples:
+
+\starttabulate[|l|r|]
+\NC \type{1} \NC \ruledhbox{\strut\digits{1}} \NC \NR
+\NC \type{12} \NC \ruledhbox{\strut\digits{12}} \NC \NR
+\NC \type{12.34} \NC \ruledhbox{\strut\digits{12.34}} \NC \NR
+\NC \type{123,456} \NC \ruledhbox{\strut\digits{123,456}} \NC \NR
+\NC \type{123,456.78} \NC \ruledhbox{\strut\digits{123,456.78}} \NC \NR
+\NC \type{12,34} \NC \ruledhbox{\strut\digits{12,34}} \NC \NR
+\NC \type{.1234} \NC \ruledhbox{\strut\digits{.1234}} \NC \NR
+\NC \type{1234} \NC \ruledhbox{\strut\digits{1234}} \NC \NR
+\NC \type{123,456.78^9} \NC \ruledhbox{\strut\digits{123,456.78^9}} \NC \NR
+\NC \type{123,456.78e9} \NC \ruledhbox{\strut\digits{123,456.78e9}} \NC \NR
+\NC \type{/123,456.78e-9} \NC \ruledhbox{\strut\digits{/123,456.78e-9}} \NC \NR
+\NC \type{-123,456.78e-9} \NC \ruledhbox{\strut\digits{-123,456.78e-9}} \NC \NR
+\NC \type{+123,456.78e-9} \NC \ruledhbox{\strut\digits{+123,456.78e-9}} \NC \NR
+\NC \type{//123,456.78e-9} \NC \ruledhbox{\strut\digits{//123,456.78e-9}} \NC \NR
+\NC \type{--123,456.78e-9} \NC \ruledhbox{\strut\digits{--123,456.78e-9}} \NC \NR
+\NC \type{++123,456.78e-9} \NC \ruledhbox{\strut\digits{++123,456.78e-9}} \NC \NR
+\NC \type{___,___,123,456,789.00} \NC \ruledhbox{\strut\digits{___,___,123,456,789.00}} \NC \NR
+\NC \type{___,___,_12,345,678.==} \NC \ruledhbox{\strut\digits{___,___,_12,345,678.==}} \NC \NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title={Adding units}]
+
+It is possible to add extra snippets. This is a two step process:
+first some snippet is defined, next a proper label is set up. In the
+next example we define a couple of \TEX\ dimensions:
+
+\startbuffer
+\registerunit
+ [unit]
+ [point=point,
+ basepoint=basepoint,
+ scaledpoint=scaledpoint,
+ didot=didot,
+ cicero=cicero]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Possible categories are: \type {prefix}, \type {unit}, \type {operator},
+\type {suffix}, \type {symbol},\type {packaged}. Next we define labels:
+
+\startbuffer
+\setupunittext
+ [point=pt,
+ basepoint=bp,
+ scaledpoint=sp,
+ didot=dd,
+ cicero=cc]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now we can use use these:
+
+\startbuffer
+\unit{10 point / second}
+\stopbuffer
+
+\typebuffer
+
+Of course you can wonder what this means.
+
+\blank \getbuffer \blank
+
+When no label is defined the long name is used:
+
+\startbuffer
+\registerunit
+ [unit]
+ [page=page]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This is used as:
+
+\startbuffer
+\unit{10 point / page}
+\stopbuffer
+
+\typebuffer
+
+Which gives:
+
+\blank \getbuffer \blank
+
+\stopsection
+
+\startsection[title={Built in keywords}]
+
+A given sequence of keywords is translated in an list of internal
+keywords. For instance \type {m}, \type {Meter} and \type {meter}
+all become \type {meter} and that one is used when resolving a
+label. In the next tables the right column mentions the internal
+keyword. The right column shows the Cased variant, but a lowercase
+one is built|-|in as well.
+
+The following prefixes are built|-|in:
+
+\showunits[prefixes]
+
+The following units are supported, including some combinations:
+
+\showunits[units]
+
+The amount of operators is small:
+
+\showunits[operators]
+
+There is also a small set of (names) suffixes:
+
+\showunits[suffixes]
+
+Some symbols get a special treatment:
+
+\showunits[symbols]
+
+These are also special:
+
+\showunits[packaged]
+
+\startsection[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/workflows/workflows-contents.tex b/doc/context/sources/general/manuals/workflows/workflows-contents.tex
new file mode 100644
index 000000000..a32f4737d
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-contents.tex
@@ -0,0 +1,13 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-contents
+
+\starttitle[title=Contents]
+
+ \placelist[chapter]
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-graphics.tex b/doc/context/sources/general/manuals/workflows/workflows-graphics.tex
new file mode 100644
index 000000000..55a8ad701
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-graphics.tex
@@ -0,0 +1,157 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-graphics
+
+\startchapter[title=Graphics]
+
+\startsection[title=Bad names]
+
+After many years of using \CONTEXT\ in workflows where large amounts of source files
+as well as graphics were involved we can safely say that it's hard for publishers to
+control the way these are named. This is probably due to the fact that in a
+click|-|and|-|point based desktop publishing workflow names don't matter as one stays on
+one machine, and names are only entered once (after that these names become abstractions and
+get cut and pasted). Proper consistent resource managament is simply not part of the flow.
+
+This means that you get names like:
+
+\starttyping
+foo_Bar_01_03-a.EPS
+foo__Bar-01a_03.eps
+foo__Bar-01a_03.eps
+foo BarA 01-03.eps
+\stoptyping
+
+Especially when a non proportional screen font is used multiple spaces can look
+like one. In fancy screen fonts upper and lowercase usage might get obscured. It
+really makes one wonder if copy|-|editing or adding labels to graphics isn't
+suffering from the same problem.
+
+Anyhow, as in an automated rendering workflow the rendering is often the last step you
+can imagine that when names get messed up it's that last step that gets blamed. It's not
+that hard to sanitize names of files on disk as well as in the files that refer to them,
+and we normally do that we have complete control. This is no option when all the resources
+are synchronzied from elsewhere. In that case the only way out is signaling potential
+issues. Say that in the source file there is a reference:
+
+\starttyping
+foo_Bar_01_03-a.EPS
+\stoptyping
+
+and that the graphic on disk has the same name, but for some reason after an update
+has become:
+
+\starttyping
+foo-Bar_01_03-a.EPS
+\stoptyping
+
+The old image is probably still there so the update is not reflected in the final
+product. This is not that uncommon when you deal with tens of thousands of files,
+many editors and graphic designers, and no strict filename policy.
+
+For this we provide the following tracing option:
+
+\starttyping
+\enabletrackers[graphics.lognames]
+\stoptyping
+
+This will put information in the log file about included graphics, like:
+
+\starttyping
+system > graphics > start names
+
+used graphic > asked : cow.pdf
+used graphic > comment : not found
+used graphic > asked : t:/sources/cow.pdf
+used graphic > format : pdf
+used graphic > found : t:/sources/cow.pdf
+used graphic > used : t:/sources/cow.pdf
+
+system > graphics > stop names
+\stoptyping
+
+You can also add information to the file itself:
+
+\starttyping
+\usemodule[s-figures-names]
+\stoptyping
+
+Of course that has to be done at the end of the document. Bad names are reported
+and suitable action can be taken.
+
+\stopsection
+
+\startsection[title=Downsampling]
+
+You can plug in you rown converter, here is an example:
+
+\starttyping
+\startluacode
+
+figures.converters.jpg = figures.converters.jpg or { }
+
+figures.converters.jpg["lowresjpg.pdf"] =
+ function(oldname,newname,resolution)
+ figures.programs.run (
+ [[gm]],
+ [[convert -geometry %nx%x%ny% -compress JPEG "%old%" "%new%"]],
+ {
+ old = old,
+ new = new,
+ nx = resolution or 300,
+ ny = resolution or 300,
+ }
+ )
+ end
+\stopluacode
+\stoptyping
+
+You can limit the search to a few types and set the resolution with:
+
+\starttyping
+\setupexternalfigures
+ [order={pdf,jpg},
+ resolution=100,
+ method=auto]
+\stoptyping
+
+And use it like:
+
+\starttyping
+\externalfigure[verybig.jpg][height=10cm]
+\stoptyping
+
+The second string passed to the \type {run} helper contains the arguments to the
+first one. The variables between percent signs get replaced by the variables in
+the tables passed as third argument.
+
+\stopsection
+
+\startsection[title=Trackers]
+
+If you want a lot of info you can say:
+
+\starttyping
+\enabletrackers[figures.*]
+\stoptyping
+
+But you can be more specific. With \type {graphics.locating} you will get some
+insight in where files are looked for. The \type {graphics.inclusion} tracker
+gives some more info about actual inclusion. The \type {graphics.bases} is kind
+of special and only makes sense when you use the graphic database options. The
+\type {graphics.conversion} and related tracker \type {graphics.programs} show if
+and how conversion of images takes place.
+
+The \type {graphics.lognames} will make sure that some extra information about
+used graphics is saved in the log file, while \type {graphics.usage} will produce
+a file \typ {<jobname>-figures-usage.lua} that contains information about found
+(or not found) images and the way they are used.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/workflows/workflows-injectors.tex b/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
new file mode 100644
index 000000000..daae11c82
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
@@ -0,0 +1,102 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-injectors
+
+\startchapter[title={Injectors}]
+
+When you have no control over the source but need to manually tweak some aspects
+of the typesetting, like an occasional page break of column switch, you can use
+the injector mechanism. This mechanism is part of list and register building but
+can also be used elsewhere.
+
+\startbuffer[one]
+\startmixedcolumns[balance=yes]
+ \dotestinjector{test}line 1 \par
+ \dotestinjector{test}line 2 \par
+ \dotestinjector{test}line 3 \par
+ \dotestinjector{test}line 4 \par
+ \dotestinjector{test}line 5
+\stopmixedcolumns
+\stopbuffer
+
+\startbuffer[two]
+\startmixedcolumns[balance=yes]
+ \dotestinjector{test}line 1 \par
+ \dotestinjector{test}line 2 \par
+ \dotestinjector{test}line 3 \par
+ \dotestinjector{test}line 4 \par
+ \dotestinjector{test}line 5
+\stopmixedcolumns
+\stopbuffer
+
+We have two buffers:
+
+\typebuffer[one]
+
+and
+
+\typebuffer[two]
+
+When typeset these come out as:
+
+\blank \startpacked \bf \getbuffer[one] \stoppacked \blank
+
+and
+
+\blank \startpacked \bf \getbuffer[two] \stoppacked \blank
+
+We can enable (and show) the injectors with:
+
+\startbuffer
+\doactivateinjector{test} \showinjector
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now we get:
+
+\blank \startpacked \bf \getbuffer[one] \stoppacked \blank
+
+and
+
+\blank \startpacked \bf \getbuffer[two] \stoppacked \blank
+
+The small numbers are injector points. These will of course change when we add
+more in|-|between. Let's add actions to some of the injection points:
+
+\startbuffer
+\setinjector[test][13][{\column}]
+\setinjector[test][17][{\column}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+As expected we now get column breaks:
+
+\blank \startpacked \bf \getbuffer[one] \stoppacked \blank
+
+and
+
+\blank \startpacked \bf \getbuffer[two] \stoppacked \blank
+
+\stopchapter
+
+\stopcomponent
+
+% to be described:
+
+% \setinjector[register][3][\column]
+% \setinjector[list] [2][{\blank[3*big]}]
+
+% \starttext
+% \placelist[section][criterium=text]
+% \blank[3*big]
+% \placeregister[index][criterium=text]
+% \page
+% \startsection[title=Alpha] first \index{first} \stopsection
+% \startsection[title=Beta] second \index{second} \stopsection
+% \startsection[title=Gamma] third \index{third} \stopsection
+% \startsection[title=Delta] fourth \index{fourth} \stopsection
+% \stoptext
diff --git a/doc/context/sources/general/manuals/workflows/workflows-introduction.tex b/doc/context/sources/general/manuals/workflows/workflows-introduction.tex
new file mode 100644
index 000000000..a88640b27
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-introduction.tex
@@ -0,0 +1,25 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-introduction
+
+\startchapter[title=Introduction]
+
+This manual contains some information about features that can help you to manage
+workflows or \CONTEXT\ related processes. Because we use \CONTEXT\ ourselves all
+that we need ends up in the distribution. When you discover something workflow
+related that is not yet covered here, you can tell me. I simply forget about all
+there is, especially if it's made for projects. Don't expect this manual to be
+complete or extensive, it's just a goodie.
+
+\startlines
+\documentvariable{author},
+\documentvariable{affiliation}
+\documentvariable{location}
+\currentdate[month,year]
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex b/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex
new file mode 100644
index 000000000..3820e04fa
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex
@@ -0,0 +1,32 @@
+\setupbackend[export=yes]
+
+\environment workflows-style
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=Workflow support in context,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=workflow,
+ extra=support in context,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\component workflows-titlepage
+
+\startfrontmatter
+ \component workflows-contents
+ \component workflows-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component workflows-resources
+ \component workflows-graphics
+ \component workflows-suspects
+ \component workflows-injectors
+ \component workflows-xml
+ \component workflows-setups
+\stopbodymatter
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/workflows/workflows-resources.tex b/doc/context/sources/general/manuals/workflows/workflows-resources.tex
new file mode 100644
index 000000000..cbed64864
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-resources.tex
@@ -0,0 +1,156 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-resources
+
+\startchapter[title=Accessing resources]
+
+One of the benefits of \TEX\ is that you can use it in automated workflows
+where large quantities of data is involved. A document can consist of
+several files and normally also includes images. Of course there are styles
+involved too. At \PRAGMA\ normally put styles and fonts in:
+
+\starttyping
+/data/site/context/tex/texmf-project/tex/context/user/<project>/...
+/data/site/context/tex/texmf-fonts/data/<foundry>/<collection>/...
+\stoptyping
+
+alongside
+
+\starttyping
+/data/framework/...
+\stoptyping
+
+where the job management services are put, while we put resources in:
+
+\starttyping
+/data/resources/...
+\stoptyping
+
+The processing happens in:
+
+\starttyping
+/data/work/<uuid user space>/
+\stoptyping
+
+Putting styles (and resources like logos and common images) and fonts (if the
+project has specific ones not present in the distribution) in the \TEX\ tree
+makes sense because that is where such files are normally searched. Of course you
+need to keep the distributions file database upto|-|date after adding files there.
+
+Processing has to happen isolated from other runs so there we use unique
+locations. The services responsible for running also deal with regular cleanup
+of these temporary files.
+
+Resources are somewhat special. They can be stable, i.e.\ change seldom, but more
+often they are updated or extended periodically (or even daily). We're not
+talking of a few files here but of thousands. In one project we have 20 thousand
+resources, that can be combined into arbitrary books, and in another one, each
+chapter alone is about 400 \XML\ and image files. That means we can have 5000
+files per book and as we have at least 20 books, we end up with 100K files. In
+the first case accessing the resources is easy because there is a well defined
+structure (under our control) so we know exactly where each file sits in the
+resource tree. In the 100K case there is a deeper structure which is in itself
+predictable but because many authors are involved the references to these files
+are somewhat instable (and undefined). It is surprising to notice that publishers
+don't care about filenames (read: cannot control all the parties involved) which
+means that we have inconsist use of mixed case in filenames, and spaces,
+underscores and dashes creeping in. Because typesetting for paper is always at
+the end of the pipeline (which nowadays is mostly driven by (limitations) of web
+products) we need to have a robust and flexible lookup mechanism. It's a side
+effect of the click and point culture: if objects are associated (filename in
+source file with file on the system) anything you key in will work, and
+consistency completely depends on the user. And bad things then happen when files
+are copied, renamed, etc. In that stadium we can better be tolerant than try to
+get it fixed. \footnote {From what we normally receive we often conclude that
+copy|-|editing and image production companies don't impose any discipline or
+probably simply lack the tools and methods to control this. Some of our workflows
+had checkers and fixers, so that when we got 5000 new resources while only a few
+needed to be replaced we could filter the right ones. It was not uncommon to find
+duplicates for thousands of pictures: similar or older variants.}
+
+\starttyping
+foo.jpg
+bar/foo.jpg
+images/bar/foo.jpg
+images/foo.jpg
+\stoptyping
+
+The xml files have names like:
+
+\starttyping
+b-c.xml
+a/b-c.jpg
+a/b/b-c.jpg
+a/b/c/b-c.jpg
+\stoptyping
+
+So it's sort of a mess, especially if you add arbitrary casing to this. Of course
+one can argue that a wrong (relative) location is asking for problems, it's less
+an issue here because each image has a unique name. We could flatten the resource
+tree but having tens of thousands of files on one directory is asking for
+problems when you want to manage them.
+
+The typesetting (and related services) run on virtual machines. The three
+directories:
+
+\starttyping
+/data/site
+/data/resources
+/data/work
+\stoptyping
+
+are all mounted as nfs shares on a network storage. For the styles (and binaries)
+this is no big deal as normally these files are cached, but the resources are
+another story. Scanning the complete (mounted) resource tree each run is no
+option so there we use a special mechanism in \CONTEXT\ for locating files.
+
+Already early in the development of \MKIV\ one of the locating mechanisms was
+the following:
+
+\starttyping
+tree:////data/resources/foo/**/drawing.jpg
+tree:////data/resources/foo/**/Drawing.jpg
+\stoptyping
+
+Here the tree is scanned once per run, which is normally quite okay when there
+are not that many files and when the files reside on the machine itself. For a
+more high performance approach using network shares we have a different
+mechanism. This time it looks like this:
+
+\starttyping
+dirlist:/data/resources/**/drawing.jpg
+dirlist:/data/resources/**/Drawing.jpg
+dirlist:/data/resources/**/just/some/place/drawing.jpg
+dirlist:/data/resources/**/images/drawing.jpg
+dirlist:/data/resources/**/images/drawing.jpg?option=fileonly
+dirfile:/data/resources/**/images/drawing.jpg
+\stoptyping
+
+The first two lookups are wildcard. If there is a file with that name, it will be
+found. If there are more, the first hit is used. The second and third examples
+are more selective. Here the part after the \type {**} has to match too. So here
+we can deal with multiple files named \type {drawing.jpg}. The last two
+equivalent examples are more tolerant. If no explicit match is found, a lookup
+happens without being selective. The case of a name is ignored but when found, a
+name with the right case is used.
+
+You can hook a path into the resolver for source files, for example:
+
+\starttyping
+\usepath [dirfile://./resources/**]
+\setupexternalfigures[directory=dirfile://./resources/**]
+\stoptyping
+
+You need to make sure that file(name)s in that location don't override ones in
+the regular \TEX\ tree. These extra paths are only used for source file lookups
+so for instance font lookups are not affected.
+
+When you add, remove or move files the tree, you need to remove the \type
+{dirlist.*} files in the root because these are used for locating files. A new
+file will be generated automatically. Don't forget this!
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-setups.tex b/doc/context/sources/general/manuals/workflows/workflows-setups.tex
new file mode 100644
index 000000000..e9d120f7b
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-setups.tex
@@ -0,0 +1,72 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-setups
+
+\startchapter[title={Setups}]
+
+Setups are a powerful way to organize styles. They are basically macros but live
+in their own namespace. One advantage is that spaces in a setup are ignored so
+you can code without bothering about spurious spaces. Here is a trick that you
+can use when one style contains directives for multiple products:
+
+\startbuffer
+\startsetups tex:whatever
+ \fastsetup{tex:whatever:\documentvariable{stylevariant}}
+\stopsetups
+
+\startsetups tex:whatever:foo
+ FOO
+\stopsetups
+
+\startsetups tex:whatever:bar
+ BAR
+\stopsetups
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we define a main setup \type {tex:whatever} that gets expanded in one of two
+variants, controlled by a document variable.
+
+\startbuffer
+\setups{tex:whatever}
+
+\setupdocument
+ [stylevariant=foo]
+
+\setups{tex:whatever}
+
+\setupdocument
+ [stylevariant=bar]
+
+\setups{tex:whatever}
+\stopbuffer
+
+\typebuffer
+
+These lines result in:
+
+\getbuffer
+
+In a similar fashion you can define \XML\ setups that are used to render
+elements:
+
+\starttyping
+\startxmlsetups xml:whatever
+ \xmlsetup{#1}{xml:whatever:\documentvariable{stylevariant}}
+\stopxmlsetups
+
+\startxmlsetups xml:whatever:foo
+ FOO: \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:whatever:bar
+ BAR: \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-style.tex b/doc/context/sources/general/manuals/workflows/workflows-style.tex
new file mode 100644
index 000000000..f29129fcd
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-style.tex
@@ -0,0 +1,49 @@
+\startenvironment workflows-style
+
+\usemodule
+ [abr-03]
+
+\setupbodyfont
+ [bookman,11pt]
+
+\definecolor
+ [maincolor]
+ [s=.35]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ footer=0pt]
+
+\setupwhitespace
+ [big]
+
+\setuphead
+ [chapter]
+ [style=\bfc,
+ color=maincolor,
+ header=high]
+
+\setuphead
+ [section]
+ [style=\bfb,
+ color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\setuptype
+ [color=maincolor]
+
+\setupdocument
+ [metadata:author=<author>,
+ metadata:title=<title>,
+ author=<author>,
+ affiliation=<affiliation>,
+ location=<location>,
+ title=<title>,
+ extra=<extra>,
+ support=<support>,
+ website=<website>]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/workflows/workflows-suspects.tex b/doc/context/sources/general/manuals/workflows/workflows-suspects.tex
new file mode 100644
index 000000000..621fd6f59
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-suspects.tex
@@ -0,0 +1,54 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-suspects
+
+\startchapter[title={Suspects}]
+
+When many authors and editors are involved there is the danger of inconsistent
+spacing being applied. We're not only talking of the (often invisible in editing
+programs) nobreak spaces, but also spacing inside or outside quotations and
+before and after punctuation or around math.
+
+In \CONTEXT\ we have a built||in suspects checker that you can enable with the
+following command:
+
+\starttyping
+\enabletrackers[typesetters.suspects]
+\stoptyping
+
+The next table shows some identified suspects.
+
+\starttexdefinition ShowSample #1
+ \NC \type{#1}
+ \NC \enabletrackers[typesetters.suspects]#1\disabletrackers[typesetters.spacing]
+ \NC \NR
+\stoptexdefinition
+
+\starttabulate[|||][before=,after=]
+ \ShowSample{foo$x$}
+ \ShowSample{$x$bar}
+ \ShowSample{foo$x$bar}
+ \ShowSample{$f+o+o$:}
+ \ShowSample{;$f+o+o$}
+ \ShowSample{; bar}
+ \ShowSample{foo:bar}
+ \ShowSample{\quote{ foo }}
+ \ShowSample{\quote{bar }}
+ \ShowSample{\quote{ bar}}
+ \ShowSample{(foo )}
+ \ShowSample{\{foo \}}
+ \ShowSample{foo{\bf gnu}bar}
+ \ShowSample{foo{\it gnu}bar}
+ \ShowSample{foo$x^2$bar}
+ \ShowSample{foo\nobreakspace bar}
+\stoptabulate
+
+Of course this analysis is not perfect but we use it in final checking of complex
+documents that are generated automatically from \XML. \footnote {Think of math
+school books where each book is assembled from over a thousands files.}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-titlepage.tex b/doc/context/sources/general/manuals/workflows/workflows-titlepage.tex
new file mode 100644
index 000000000..f184152b3
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-titlepage.tex
@@ -0,0 +1,37 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-titlepage
+
+\definefontfeature[LatinModernMonoVariable][default][liga=no]
+\definefont[LatinModernMonoVariable][LMTypewriterVarWd-Regular*LatinModernMonoVariable sa 1]
+
+\startMPpage
+
+ fill fullsquare xysized(PaperWidth,PaperHeight) withcolor .4white ;
+
+ draw image (
+ fill arrowhead fullcircle scaled .5 rotated 0 scaled 10 withcolor white ;
+ fill arrowhead fullcircle scaled .5 rotated 120 scaled 10 withcolor white ;
+ fill arrowhead fullcircle scaled .5 rotated 240 scaled 10 withcolor white ;
+ fill arrowhead fullcircle scaled .5 rotated 60 scaled 10 withcolor white ;
+ fill arrowhead fullcircle scaled .5 rotated 180 scaled 10 withcolor white ;
+ fill arrowhead fullcircle scaled .5 rotated 300 scaled 10 withcolor white ;
+ ) xsized (.9PaperWidth) shifted (0,.2PaperWidth) ;
+
+ draw image (
+ fill arrowhead fullcircle scaled .5 rotated 0 scaled 10 withcolor .4red withtransparency (1,.5) ;
+ fill arrowhead fullcircle scaled .5 rotated 120 scaled 10 withcolor .4green withtransparency (1,.5) ;
+ fill arrowhead fullcircle scaled .5 rotated 240 scaled 10 withcolor .4blue withtransparency (1,.5) ;
+ fill arrowhead fullcircle scaled .5 rotated 60 scaled 10 withcolor .4cyan withtransparency (1,.5) ;
+ fill arrowhead fullcircle scaled .5 rotated 180 scaled 10 withcolor .4magenta withtransparency (1,.5) ;
+ fill arrowhead fullcircle scaled .5 rotated 300 scaled 10 withcolor .4yellow withtransparency (1,.5) ;
+ ) xsized (.9PaperWidth) shifted (0,.2PaperWidth) ;
+
+ draw textext ("\LatinModernMonoVariable \documentvariable{title}") xsized (.9PaperWidth) shifted (0,-.425PaperWidth) withcolor white ;
+ draw textext ("\LatinModernMonoVariable \documentvariable{extra}") xsized (.9PaperWidth) shifted (0,-.575PaperWidth) withcolor white ;
+
+\stopMPpage
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/workflows/workflows-xml.tex b/doc/context/sources/general/manuals/workflows/workflows-xml.tex
new file mode 100644
index 000000000..0f29f5f55
--- /dev/null
+++ b/doc/context/sources/general/manuals/workflows/workflows-xml.tex
@@ -0,0 +1,96 @@
+% language=uk
+
+\environment workflows-style
+
+\startcomponent workflows-xml
+
+\startluacode
+ for i=1,10 do
+ local filename = string.formatters["temp-%02i.xml"](i)
+ local filedata = string.formatters["<?xml version='1.0'?><p>snippet %i</p>"](i)
+ io.savedata(filename,filedata)
+ end
+\stopluacode
+
+\startchapter[title={XML}]
+
+When you have an \XML\ project with many files involved, finding the right spot
+of something that went wrong can be a pain. In one of our project the production of
+some 50 books involves 60.000 \XML\ files and 20.000 images. Say that we have the
+following file:
+
+\startbuffer[demo]
+<?xml version='1.0'?>
+<document>
+ <include name="temp-01.xml"/> <include name="temp-02.xml"/>
+ <include name="temp-03.xml"/> <include name="temp-04.xml"/>
+ <include name="temp-05.xml"/> <include name="temp-06.xml"/>
+ <include name="temp-07.xml"/> <include name="temp-08.xml"/>
+ <include name="temp-09.xml"/> <include name="temp-10.xml"/>
+</document>
+\stopbuffer
+
+\typebuffer[demo]
+
+Before we process this file we will merge the content of the files defined
+as includes into it. When this happens the filename is automatically
+registered so it can be accessed later.
+
+\startbuffer
+\startxmlsetups xml:initialize
+ \xmlincludeoptions{#1}{include}{filename|name}{recurse,basename}
+ \xmlsetsetup{#1}{p|document}{xml:*}
+\stopxmlsetups
+
+\startxmlsetups xml:document
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:p
+ \inleftmargin{\infofont\xmlinclusion{#1}}
+ \xmlflush{#1}
+ \par
+\stopxmlsetups
+
+\xmlregistersetup{xml:initialize}
+
+\xmlprocessbuffer{main}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+In this case we put the name of the file in the margin. Depending on when and how
+elements are flushed other solutions, like overlays, can be used.
+
+\startpacked
+\getbuffer
+\stoppacked
+
+At any moment you can see what the current node contains. The whole (merged)
+document is also available:
+
+\startbuffer
+\xmlshow{main}
+\stopbuffer
+
+\typebuffer
+
+A small font is used to typeset the (sub)tree:
+
+\blank \getbuffer \blank
+
+You can also save the tree:
+
+\startbuffer
+\xmlsave{main}{temp.xml}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This file looks like:
+
+\typefile{temp.xml}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml b/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml
new file mode 100644
index 000000000..c2feac218
--- /dev/null
+++ b/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml
@@ -0,0 +1,15 @@
+<name>Land Of Dreams</name>
+<tracks>
+ <track length="248">Dixie Flyer</track>
+ <track length="212">New Orleans Wins The War</track>
+ <track length="218">Four Eyes</track>
+ <track length="181">Falling In Love</track>
+ <track length="187">Something Special</track>
+ <track length="168">Bad News From Home</track>
+ <track length="207">Roll With The Punches</track>
+ <track length="209">Masterman And Baby J</track>
+ <track length="134">Follow The Flag</track>
+ <track length="246">I Want You To Hurt Like I Do</track>
+ <track length="248">It&apos;s Money That Matters</track>
+ <track length="156">Red Bandana</track>
+</tracks>
diff --git a/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml b/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml
new file mode 100644
index 000000000..997123ad6
--- /dev/null
+++ b/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml
@@ -0,0 +1,15 @@
+<name>Bad Love</name>
+<tracks>
+ <track length="340">My Country</track>
+ <track length="295">Shame</track>
+ <track length="205">I&apos;m Dead (But I Don&apos;t Know It)</track>
+ <track length="213">Every Time It Rains</track>
+ <track length="206">The Great Nations of Europe</track>
+ <track length="220">The One You Love</track>
+ <track length="164">The World Isn&apos;t Fair</track>
+ <track length="264">Big Hat, No Cattle</track>
+ <track length="243">Better Off Dead</track>
+ <track length="236">I Miss You</track>
+ <track length="126">Going Home</track>
+ <track length="180">I Want Everyone To Like Me</track>
+</tracks>
diff --git a/doc/context/sources/general/manuals/xml/xml-mkiv.tex b/doc/context/sources/general/manuals/xml/xml-mkiv.tex
new file mode 100644
index 000000000..3933c0063
--- /dev/null
+++ b/doc/context/sources/general/manuals/xml/xml-mkiv.tex
@@ -0,0 +1,3812 @@
+% language=uk
+
+% to be checked:
+%
+% \Ux in index
+%
+% undocumented:
+%
+% \processXMLbuffer
+% \processxmlbuffer
+% \processxmlfile
+%
+% kind of special ... tricky explanation needed:
+%
+% \xmldirect
+
+\input lxml-ctx.mkiv
+
+\settrue \xmllshowtitle
+\setfalse\xmllshowwarning
+
+\usemodule[set-11]
+
+\loadsetups[i-en-xml.xml]
+
+% \definehspace[squad][1em plus .25em minus .25em]
+
+\usemodule[abr-02]
+
+\setuplayout
+ [location=middle,
+ marking=on,
+ backspace=20mm,
+ cutspace=20mm,
+ topspace=15mm,
+ header=15mm,
+ footer=15mm,
+ height=middle,
+ width=middle]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupfootertexts
+ [][pagenumber]
+
+\setupheadertexts
+ [][chapter]
+
+\setupheader
+ [color=colortwo,
+ style=bold]
+
+\setupfooter
+ [color=colortwo,
+ style=bold]
+
+\setuphead
+ [chapter]
+ [page={yes,header,right},
+ header=empty,
+ style=\bfc]
+
+\setupsectionblock
+ [page={yes,header,right}]
+
+\starttexdefinition unexpanded section:chapter:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<\enspace}#1\enspace>
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded section:section:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<<\enspace}#1\enspace>>
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded section:subsection:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<<<\enspace}#1\enspace>>>
+ }
+\stoptexdefinition
+
+\setuphead[chapter] [numbercolor=black,numbercommand=\texdefinition{section:chapter:number}]
+\setuphead[section] [numbercolor=black,numbercommand=\texdefinition{section:section:number}]
+\setuphead[subsection][numbercolor=black,numbercommand=\texdefinition{section:subsection:number}]
+
+\setuphead
+ [section]
+ [style=\bfa]
+
+\setuplist
+ [chapter]
+ [style=bold]
+
+\setupinteractionscreen
+ [option=doublesided]
+
+\setupalign
+ [tolerant,stretch]
+
+\setupwhitespace
+ [big]
+
+\setuptolerance
+ [tolerant]
+
+\doifelsemode {atpragma} {
+ \setupbodyfont[lucidaot,10pt]
+} {
+ \setupbodyfont[dejavu,10pt]
+}
+
+\definecolor[colorone] [b=.5]
+\definecolor[colortwo] [s=.3]
+\definecolor[colorthree][y=.5]
+
+\setuptype
+ [color=colorone]
+
+\setuptyping
+ [color=colorone]
+
+\setuphead
+ [lshowtitle]
+ [style=\tt,
+ color=colorone]
+
+\setuphead
+ [chapter,section]
+ [numbercolor=colortwo,
+ color=colorone]
+
+\definedescription
+ [xmlcmd]
+ [alternative=hanging,
+ width=line,
+ distance=1em,
+ margin=2em,
+ headstyle=monobold,
+ headcolor=colorone]
+
+\setupframedtext
+ [setuptext]
+ [framecolor=colorone,
+ rulethickness=1pt,
+ corner=round]
+
+\usemodule[punk]
+
+\usetypescript[punk]
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\starttext
+
+\setuplayout[page]
+
+\startstandardmakeup
+ \startfontclass[none] % nil the current fontclass since it may append its features
+ \EnableRandomPunk
+ \setlayerframed
+ [page]
+ [width=\paperwidth,height=\paperheight,
+ background=color,backgroundcolor=colorone,backgroundoffset=1ex,frame=off]
+ {}
+ \definedfont[demo@punk at 18pt]
+ \setbox\scratchbox\vbox {
+ \hsize\dimexpr\paperwidth+2ex\relax
+ \setupinterlinespace
+ \baselineskip 1\baselineskip plus 1pt minus 1pt
+ \raggedcenter
+ \color[colortwo]{\dorecurse{1000}{XML }}
+ }
+ \setlayer
+ [page]
+ [preset=middle]
+ {\vsplit\scratchbox to \dimexpr\paperheight+2ex\relax}
+ \definedfont[demo@punk at 90pt]
+ \setstrut
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=10mm]
+ [foregroundcolor=colorthree,align=flushright,offset=overlay,frame=off]
+ {Dealing\\with XML in\\Con\TeX t MkIV}
+ \definedfont[demo@punk at 18pt]
+ \setstrut
+ \setlayerframed
+ [page]
+ [preset=righttop,offset=10mm,x=3mm,rotation=90]
+ [foregroundcolor=colorthree,align=flushright,offset=overlay,frame=off]
+ {Hans Hagen, Pragma ADE, \currentdate}
+ \tightlayer[page]
+ \stopfontclass
+\stopstandardmakeup
+
+\setuplayout
+
+\startfrontmatter
+
+\starttitle[title=Contents]
+
+\placelist
+ [chapter,section]
+
+\stoptitle
+
+\startchapter[title={Introduction}]
+
+This manual presents the \MKIV\ way of dealing with \XML. Although the
+traditional \MKII\ streaming parser has a charming simplicity in its control, for
+complex documents the tree based \MKIV\ method is more convenient. It is for this
+reason that the old method has been removed from \MKIV. If you are familiar with
+\XML\ processing in \MKII, then you will have noticed that the \MKII\ commands
+have \type {XML} in their name. The \MKIV\ commands have a lowercase \type {xml}
+in their names. That way there is no danger for confusion or a mixup.
+
+You may wonder why we do these manipulations in \TEX\ and not use \XSLT\ (or
+other transformation methods) instead. The advantage of an integrated approach is
+that it simplifies usage. Think of not only processing the document, but also
+using \XML\ for managing resources in the same run. An \XSLT\ approach is just as
+verbose (after all, you still need to produce \TEX\ code) and probably less
+readable. In the case of \MKIV\ the integrated approach is also faster and gives
+us the option to manipulate content at runtime using \LUA. It has the additional
+advantage that to some extend we can handle a mix of \TEX\ and \XML\ because we
+know when we're doing one or the other.
+
+This manual is dedicated to Taco Hoekwater, one of the first \CONTEXT\ users, and
+also the first to use it for processing \XML. Who could have thought at that time
+that we would have a more convenient way of dealing with those angle brackets.
+The second version for this manual is dedicated to Thomas Schmitz, a power user
+who occasionally became victim of the evolving mechanisms.
+
+\blank
+
+\startlines
+Hans Hagen
+\PRAGMA
+Hasselt NL
+2008\endash2016
+\stoplines
+
+\stopchapter
+
+\stopfrontmatter
+
+\startbodymatter
+
+\startchapter[title={Setting up a converter}]
+
+\startsection[title={from structure to setup}]
+
+We use a very simple document structure for demonstrating how a converter is
+defined. In practice a mapping will be more complex, especially when we have a
+style with complex chapter openings using data coming from all kind of places,
+different styling of sections with the same name, selectively (out of order)
+flushed content, special formatting, etc.
+
+\typefile{manual-demo-1.xml}
+
+Say that this document is stored in the file \type {demo.xml}, then the following
+code can be used as starting point:
+
+\starttyping
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{*}{-}
+ \xmlsetsetup{#1}{document|section|p}{xml:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{demo}{xml:demo:base}
+
+\startxmlsetups xml:demo:document
+ \starttitle[title={Contents}]
+ \placelist[chapter]
+ \stoptitle
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:section
+ \startchapter[title=\xmlfirst{#1}{/title}]
+ \xmlfirst{#1}{/content}
+ \stopchapter
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \xmlflush{#1}\endgraf
+\stopxmlsetups
+
+\xmlprocessfile{demo}{demo.xml}{}
+\stoptyping
+
+Watch out! These are not just setups, but specific \XML\ setups which get an
+argument passed (the \type {#1}). If for some reason your \XML\ processing fails,
+it might be that you mistakenly have used a normal setup definition. The argument
+\type {#1} represents the current node (element) and is a unique identifier. For
+instance a \type {<p>..</p>} can have an identifier {demo::5}. So, we can get
+something:
+
+\starttyping
+\xmlflush{demo::5}\endgraf
+\stoptyping
+
+but as well:
+
+\starttyping
+\xmlflush{demo::6}\endgraf
+\stoptyping
+
+Keep in mind that the references tor the actual nodes (elements) are
+abstractions, you never see those \type {<id>::<number>}'s, because we will use
+either the abstract \type {#1} (any node) or an explicit reference like \type
+{demo}. The previous setup when issued will be like:
+
+\starttyping
+\startchapter[title=\xmlfirst{demo::3}{/title}]
+ \xmlfirst{demo::4}{/content}
+\stopchapter
+\stoptyping
+
+Here the \type {title} is used to typeset the chapter title but also for an entry
+in the table of contents. At the moment the title is typeset the \XML\ node gets
+looked up and expanded in real text. However, for the list it gets stored for
+later use. One can argue that this is not needed for \XML, because one can just
+filter all the titles and use page references, but then one also looses the
+control one normally has over such titles. For instance it can be that some
+titles are rendered differently and for that we need to keep track of usage.
+Doing that with transformations or filtering is often more complex than leaving
+that to \TEX. As soon as the list gets typeset, the reference (\type {demo::#3})
+is used for the lookup. This is because by default the title is stored as given.
+So, as long as we make sure the \XML\ source is loaded before the table of
+contents is typeset we're ok. Later we will look into this in more detail, for
+now it's enough to know that in most cases the abstract \type {#1} reference will
+work out ok.
+
+Contrary to the style definitions this interface looks rather low level (with no
+optional arguments) and the main reason for this is that we want processing to be
+fast. So, the basic framework is:
+
+\starttyping
+\startxmlsetups xml:demo:base
+ % associate setups with elements
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{demo}{xml:demo:base}
+
+% define setups for matches
+
+\xmlprocessfile{demo}{demo.xml}{}
+\stoptyping
+
+In this example we mostly just flush the content of an element and in the case of
+a section we flush explicit child elements. The \type {#1} in the example code
+represents the current element. The line:
+
+\starttyping
+\xmlsetsetup{demo}{*}{-}
+\stoptyping
+
+sets the default for each element to \quote {just ignore it}. A \type {+} would
+make the default to always flush the content. This means that at this point we
+only handle:
+
+\starttyping
+<section>
+ <title>Some title</title>
+ <content>
+ <p>a paragraph of text</p>
+ </content>
+</section>
+\stoptyping
+
+In the next section we will deal with the slightly more complex itemize and
+figure placement. At first sight all these setups may look overkill but keep in
+mind that normally the number of elements is rather limited. The complexity is
+often in the style and having access to each snippet of content is actually
+quite handy for that.
+
+\stopsection
+
+\startsection[title={alternative solutions}]
+
+Dealing with an itemize is rather simple (as long as we forget about
+attributes that control the behaviour):
+
+\starttyping
+<itemize>
+ <item>first</item>
+ <item>second</item>
+</itemize>
+\stoptyping
+
+First we need to add \type {itemize} to the setup assignment (unless we've used
+the wildcard \type {*}):
+
+\starttyping
+\xmlsetsetup{demo}{document|section|p|itemize}{xml:demo:*}
+\stoptyping
+
+The setup can look like:
+
+\starttyping
+\startxmlsetups xml:demo:itemize
+ \startitemize
+ \xmlfilter{#1}{/item/command(xml:demo:itemize:item)}
+ \stopitemize
+\stopxmlsetups
+
+\startxmlsetups xml:demo:itemize:item
+ \startitem
+ \xmlflush{#1}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+An alternative is to map item directly:
+
+\starttyping
+\xmlsetsetup{demo}{document|section|p|itemize|item}{xml:demo:*}
+\stoptyping
+
+and use:
+
+\starttyping
+\startxmlsetups xml:demo:itemize
+ \startitemize
+ \xmlflush{#1}
+ \stopitemize
+\stopxmlsetups
+
+\startxmlsetups xml:demo:item
+ \startitem
+ \xmlflush{#1}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+Sometimes, a more local solution using filters and \type {/command(...)} makes more
+sense, especially when the \type {item} tag is used for other purposes as well.
+
+Explicit flushing with \type {command} is definitely the way to go when you have
+complex products. In one of our projects we compose math school books from many
+thousands of small \XML\ files, and from one source set several products are
+typeset. Within a book sections get done differently, content gets used, ignored
+or interpreted differently depending on the kind of content, so there is a
+constant checking of attributes that drive the rendering. In that a generic setup
+for a title element makes less sense than explicit ones for each case. (We're
+talking of huge amounts of files here, including multiple images on each rendered
+page.)
+
+When using \type {command} you can pass two arguments, the first is the setup for
+the match, the second one for the miss, as in:
+
+\starttyping
+\xmlfilter{#1}{/element/command(xml:true,xml:false)}
+\stoptyping
+
+Back to the example, this leaves us with dealing with the resources, like
+figures:
+
+\starttyping
+<resource type='figure'>
+ <caption>A picture of a cow.</caption>
+ <content><external file="cow.pdf"/></content>
+</resource>
+\stoptyping
+
+Here we can use a more restricted match:
+
+\starttyping
+\xmlsetsetup{demo}{resource[@type='figure']}{xml:demo:figure}
+\xmlsetsetup{demo}{external}{xml:demo:*}
+\stoptyping
+
+and the definitions:
+
+\starttyping
+\startxmlsetups xml:demo:figure
+ \placefigure
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:external
+ \externalfigure[\xmlatt{#1}{file}]
+\stopxmlsetups
+\stoptyping
+
+At this point it is good to notice that \type {\xmlatt{#1}{file}} is passed as it
+is: a macro call. This means that when a macro like \type {\externalfigure} uses
+the first argument frequently without first storing its value, the lookup is done
+several times. A solution for this is:
+
+\starttyping
+\startxmlsetups xml:demo:external
+ \expanded{\externalfigure[\xmlatt{#1}{file}]}
+\stopxmlsetups
+\stoptyping
+
+Because the lookup is rather fast, normally there is no need to bother about this
+too much because internally \CONTEXT\ already makes sure such expansion happens
+only once.
+
+An alternative definition for placement is the following:
+
+\starttyping
+\xmlsetsetup{demo}{resource}{xml:demo:resource}
+\stoptyping
+
+with:
+
+\starttyping
+\startxmlsetups xml:demo:resource
+ \placefloat
+ [\xmlatt{#1}{type}]
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+\stoptyping
+
+This way you can specify \type {table} as type too. Because you can define your
+own float types, more complex variants are also possible. In that case it makes
+sense to provide some default behaviour too:
+
+\starttyping
+\definefloat[figure-here][figure][default=here]
+\definefloat[figure-left][figure][default=left]
+\definefloat[table-here] [table] [default=here]
+\definefloat[table-left] [table] [default=left]
+
+\startxmlsetups xml:demo:resource
+ \placefloat
+ [\xmlattdef{#1}{type}{figure}-\xmlattdef{#1}{location}{here}]
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+\stoptyping
+
+In this example we support two types and two locations. We default to a figure
+placed (when possible) at the current location.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Filtering content}]
+
+\startsection[title={\TEX\ versus \LUA}]
+
+It will not come as a surprise that we can access \XML\ files from \TEX\ as well
+as from \LUA. In fact there are two methods to deal with \XML\ in \LUA. First
+there are the low level \XML\ functions in the \type {xml} namespace. On top of
+those functions there is a set of functions in the \type {lxml} namespace that
+deals with \XML\ in a more \TEX ie way. Most of these have similar commands at
+the \TEX\ end.
+
+\startbuffer
+\startxmlsetups first:demo:one
+ \xmlfilter {#1} {artist/name[text()='Randy Newman']/..
+ /albums/album[position()=3]/command(first:demo:two)}
+\stopxmlsetups
+
+\startxmlsetups first:demo:two
+ \blank \start \tt
+ \xmldisplayverbatim{#1}
+ \stop \blank
+\stopxmlsetups
+
+\xmlprocessfile{demo}{music-collection.xml}{first:demo:one}
+\stopbuffer
+
+\typebuffer
+
+This gives the following snippet of verbatim \XML\ code. The indentation is
+conform the indentation in the whole \XML\ file. \footnote {The (probably
+outdated) \XML\ file contains the collection stores on my slimserver instance.
+You can use the \type {mtxrun --script flac} to generate such files.}
+
+\doifmodeelse {atpragma} {
+ \getbuffer
+} {
+ \typefile{xml-mkiv-01.xml}
+}
+
+An alternative written in \LUA\ looks as follows:
+
+\startbuffer
+\blank \start \tt \startluacode
+ local m = lxml.load("mine","music-collection.xml") -- m == lxml.id("mine")
+ local p = "artist/name[text()='Randy Newman']/../albums/album[position()=4]"
+ local l = lxml.filter(m,p) -- returns a list (with one entry)
+ lxml.displayverbatim(l[1])
+\stopluacode \stop \blank
+\stopbuffer
+
+\typebuffer
+
+This produces:
+
+\doifmodeelse {atpragma} {
+ \getbuffer
+} {
+ \typefile{xml-mkiv-02.xml}
+}
+
+You can use both methods mixed but in practice we will use the \TEX\ commands in
+regular styles and the mixture in modules, for instance in those dealing with
+\MATHML\ and cals tables. For complex matters you can write your own finalizers
+(the last action to be taken in a match) in \LUA\ and use them at the \TEX\ end.
+
+\stopsection
+
+\startsection[title={a few details}]
+
+In \CONTEXT\ setups are a rather common variant on macros (\TEX\ commands) but
+with their own namespace. An example of a setup is:
+
+\starttyping
+\startsetup doc:print
+ \setuppapersize[A4][A4]
+\stopsetup
+
+\startsetup doc:screen
+ \setuppapersize[S6][S4]
+\stopsetup
+\stoptyping
+
+Given the previous definitions, later on we can say something like:
+
+\starttyping
+\doifmodeelse {paper} {
+ \setup[doc:print]
+} {
+ \setup[doc:screen]
+}
+\stoptyping
+
+Another example is:
+
+\starttyping
+\startsetup[doc:header]
+ \marking[chapter]
+ \space
+ --
+ \space
+ \pagenumber
+\stopsetup
+\stoptyping
+
+in combination with:
+
+\starttyping
+\setupheadertexts[\setup{doc:header}]
+\stoptyping
+
+Here the advantage is that instead of ending up with an unreadable header
+definitions, we use a nicely formatted setup. An important property of setups and
+the reason why they were introduced long ago is that spaces and newlines are
+ignored in the definition. This means that we don't have to worry about so called
+spurious spaces but it also means that when we do want a space, we have to use
+the \type {\space} command.
+
+The only difference between setups and \XML\ setups is that the following ones
+get an argument (\type {#1}) that reflects the current node in the \XML\ tree.
+
+\stopsection
+
+\startsection[title={CDATA}]
+
+What to do with \type {CDATA}? There are a few methods at tle \LUA\ end for
+dealing with it but here we just mention how you can influence the rendering.
+There are four macros that play a role here:
+
+\starttyping
+\unexpanded\def\xmlcdataobeyedline {\obeyedline}
+\unexpanded\def\xmlcdataobeyedspace{\strut\obeyedspace}
+\unexpanded\def\xmlcdatabefore {\begingroup\tt}
+\unexpanded\def\xmlcdataafter {\endgroup}
+\stoptyping
+
+Technically you can overload them but beware of side effects. Normally you won't
+see much \type {CDATA} and whenever we do, it involves special data that needs
+very special treatment anyway.
+
+\stopsection
+
+\startsection[title={Entities}]
+
+As usual with any way of encoding documents you need escapes in order to encode
+the characters that are used in tagging the content, embedding comments, escaping
+special characters in strings (in programming languages), etc. In \XML\ this
+means that in order characters like \type {<} you need an escape like \type
+{&lt;} and in order then to encode an \type {&} you need \type {&amp;}.
+
+In a typesetting workflow using a programming language like \TEX, another problem
+shows up. There we have different special characters, like \type {$ $} for triggering
+math, but also the backslash, braces etc. Even one such special character is already
+enough to have yet another escaping mechanism at work.
+
+Ideally a user should not worry about these issues but it helps figuring out issues
+when you know what happens under the hood. Also it is good to know that in the
+code there are several ways to deal with these issues. Take the following document:
+
+\starttyping
+<text>
+ Here we have a bit of a &lt;&mess&gt;:
+
+ # &#35;
+ % &#37;
+ \ &#92;
+ { &#123;
+ | &#124;
+ } &#125;
+ ~ &#126;
+</text>
+\stoptyping
+
+When the file is read the \type {&lt;} entity will be replaced by \type {<} and
+the \type {&gt;} by \type {>}. The numeric entities will be replaced by the
+characters they refer to. The \type {&mess} is kind of special. We do preload
+a huge list of more or less standardized entities but \type {mess} is not in
+there. However, it is possible to have it defined in the document preamble, like:
+
+\starttyping
+<!DOCTYPE dummy SYSTEM "dummy.dtd" [
+ <!ENTITY mess "what a mess" >
+]>
+\stoptyping
+
+or even this:
+
+\starttyping
+<!DOCTYPE dummy SYSTEM "dummy.dtd" [
+ <!ENTITY mess "<p>what a mess</p>" >
+]>
+\stoptyping
+
+You can also define it in your document style using one of:
+
+\startxmlcmd {\cmdbasicsetup{xmlsetentity}}
+ replaces entity with name \cmdinternal {cd:name} by \cmdinternal {cd:text}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltexentity}}
+ replaces entity with name \cmdinternal {cd:name} by \cmdinternal {cd:text}
+ typeset under a \TEX\ regime
+\stopxmlcmd
+
+Such a definition will always have a higher priority than the one defined
+in the document. Anyway, when the document is read in all entities are
+resolved and those that need a special treatment because they map to some
+text are stored in such a way that we can roundtrip them. As a consequence,
+as soon as the content gets pushed into \TEX, we need not only to intercept
+special characters but also have to make sure that the following works:
+
+\starttyping
+\xmltexentity {tex} {\TEX}
+\stoptyping
+
+Here the backslash starts a control sequence while in regular content a
+backslash is just that: a backslash.
+
+Special characters are really special when we have to move text around
+in a \TEX\ ecosystem.
+
+\starttyping
+<text>
+ <title>About #3</title>
+</text>
+\stoptyping
+
+If we map and define title as follows:
+
+\starttyping
+\startxmlsetup xml:title
+ \title{\xmlflush{#1}}
+\stopxmlsetup
+\stoptyping
+
+normally something \type {\xmlflush {id::123}} will be written to the
+auxiliary file and in most cases that is quite okay, but if we have this:
+
+\starttyping
+\setuphead[title][expansion=yes]
+\stoptyping
+
+then we don't want the \type {#} to end up as hash because later on \TEX\
+can get very confused about it because it sees some argument then in a
+probably unexpected way. This is solved by escaping the hash like this:
+
+\starttyping
+About \Ux{23}3
+\stoptyping
+
+The \type {\Ux} command will convert its hexadecimal argument into a
+character. Of course one then needs to typeset such a text under a \TEX\
+character regime but that is normally the case anyway.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Commands}]
+
+\startsection[title={nodes and lpaths}]
+
+The amount of commands available for manipulating the \XML\ file is rather large.
+Many of the commands cooperate with the already discussed setups, a fancy name
+for a collection of macro calls either or not mixed with text.
+
+Most of the commands are just shortcuts to \LUA\ calls, which means that the real
+work is done by \LUA. In fact, what happens is that we have a continuous transfer
+of control from \TEX\ to \LUA, where \LUA\ prints back either data (like element
+content or attribute values) or just invokes a setup whereby it passes a
+reference to the node resolved conform the path expression. The invoked setup
+itself might return control to \LUA\ again, etc.
+
+This sounds complicated but examples will show what we mean here. First we
+present the whole repertoire of commands. Because users can read the source code,
+they might uncover more commands, but only the ones discussed here are official.
+The commands are grouped in categories.
+
+In the following sections \cmdinternal {cd:node} means a reference to a node:
+this can be the identifier of the root (the loaded xml tree) or a reference to a
+node in that tree (often the result of some lookup. A \cmdinternal {cd:lpath} is
+a fancy name for a path expression (as with \XSLT) but resolved by \LUA.
+
+\stopsection
+
+\startsection[title={commands}]
+
+There are a lot of commands available but you probably can ignore most of them.
+We try to be complete which means that there is for instance \type {\xmlfirst} as
+well as \type {\xmllast} but you probably never need the last one. There are also
+commands that were used when testing this interface and we see no reason to
+remove them. Some obscure ones are used in modules and after a while even I often
+forget that they exist. To give you an idea of what commands are important we
+show their use in generating the \CONTEXT\ command definitions (\type
+{x-set-11.mkiv}) per Januari 2016:
+
+\startcolumns[n=2,balance=yes]
+\starttabulate[|l|r|]
+\NC \type {\xmlall} \NC 1 \NC \NR
+\NC \type {\xmlatt} \NC 23 \NC \NR
+\NC \type {\xmlattribute} \NC 1 \NC \NR
+\NC \type {\xmlcount} \NC 1 \NC \NR
+\NC \type {\xmldoif} \NC 2 \NC \NR
+\NC \type {\xmldoifelse} \NC 1 \NC \NR
+\NC \type {\xmlfilterlist} \NC 4 \NC \NR
+\NC \type {\xmlflush} \NC 5 \NC \NR
+\NC \type {\xmlinclude} \NC 1 \NC \NR
+\NC \type {\xmlloadonly} \NC 1 \NC \NR
+\NC \type {\xmlregisterdocumentsetup} \NC 1 \NC \NR
+\NC \type {\xmlsetsetup} \NC 1 \NC \NR
+\NC \type {\xmlsetup} \NC 4 \NC \NR
+\stoptabulate
+\stopcolumns
+
+As you can see filtering, flushing and accessing attributes score high. Below we show
+the statistics of a quite complex rendering (5 variants of schoolbooks: basic book,
+answers, teachers guide, worksheets, full blown version with extensive tracing).
+
+\startcolumns[n=2,balance=yes]
+\starttabulate[|l|r|]
+\NC \type {\xmladdindex} \NC 3 \NC \NR
+\NC \type {\xmlall} \NC 5 \NC \NR
+\NC \type {\xmlappendsetup} \NC 1 \NC \NR
+\NC \type {\xmlapplyselectors} \NC 1 \NC \NR
+\NC \type {\xmlatt} \NC 40 \NC \NR
+\NC \type {\xmlattdef} \NC 9 \NC \NR
+\NC \type {\xmlattribute} \NC 10 \NC \NR
+\NC \type {\xmlbadinclusions} \NC 3 \NC \NR
+\NC \type {\xmlconcat} \NC 3 \NC \NR
+\NC \type {\xmlcount} \NC 1 \NC \NR
+\NC \type {\xmldelete} \NC 11 \NC \NR
+\NC \type {\xmldoif} \NC 39 \NC \NR
+\NC \type {\xmldoifelse} \NC 28 \NC \NR
+\NC \type {\xmldoifelsetext} \NC 13 \NC \NR
+\NC \type {\xmldoifnot} \NC 2 \NC \NR
+\NC \type {\xmldoifnotselfempty} \NC 1 \NC \NR
+\NC \type {\xmlfilter} \NC 100 \NC \NR
+\NC \type {\xmlfirst} \NC 51 \NC \NR
+\NC \type {\xmlflush} \NC 69 \NC \NR
+\NC \type {\xmlflushcontext} \NC 2 \NC \NR
+\NC \type {\xmlinclude} \NC 1 \NC \NR
+\NC \type {\xmlincludeoptions} \NC 5 \NC \NR
+\NC \type {\xmlinclusion} \NC 16 \NC \NR
+\NC \type {\xmlinjector} \NC 1 \NC \NR
+\NC \type {\xmlloaddirectives} \NC 1 \NC \NR
+\NC \type {\xmlmapvalue} \NC 4 \NC \NR
+\NC \type {\xmlmatch} \NC 1 \NC \NR
+\NC \type {\xmlprependsetup} \NC 5 \NC \NR
+\NC \type {\xmlregisterdocumentsetup} \NC 2 \NC \NR
+\NC \type {\xmlregistersetup} \NC 1 \NC \NR
+\NC \type {\xmlremapnamespace} \NC 1 \NC \NR
+\NC \type {\xmlsetfunction} \NC 2 \NC \NR
+\NC \type {\xmlsetinjectors} \NC 2 \NC \NR
+\NC \type {\xmlsetsetup} \NC 11 \NC \NR
+\NC \type {\xmlsetup} \NC 76 \NC \NR
+\NC \type {\xmlstrip} \NC 1 \NC \NR
+\NC \type {\xmlstripanywhere} \NC 1 \NC \NR
+\NC \type {\xmltag} \NC 1 \NC \NR
+\NC \type {\xmltext} \NC 53 \NC \NR
+\NC \type {\xmlvalue} \NC 2 \NC \NR
+\stoptabulate
+\stopcolumns
+
+Here many more are used but this is an exceptional case. The top is again
+dominated by filtering, flushing and attribute consulting. The list can actually
+be smaller. For instance, the \type {\xmlcount} can just as well be \type
+{\xmlfilter} with a \type {count} finalizer. There are also some special ones,
+like the injectors, that are needed for finetuning the final result.
+
+\stopsection
+
+\startsection[title={loading}]
+
+\startxmlcmd {\cmdbasicsetup{xmlloadfile}}
+ loads the file \cmdinternal {cd:file} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup} (alias: \type {\xmlload})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloadbuffer}}
+ loads the buffer \cmdinternal {cd:buffer} and registers it under
+ \cmdinternal {cd:name} and applies either given or standard
+ \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloaddata}}
+ loads \cmdinternal {cd:text} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloadonly}}
+ loads \cmdinternal {cd:text} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup} but doesn't flush the content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinclude}}
+ includes the file specified by attribute \cmdinternal {cd:name} of the
+ element located by \cmdinternal {cd:lpath} at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessfile}}
+ registers file \cmdinternal {cd:file} as \cmdinternal {cd:name} and
+ process the tree starting with \cmdinternal {cd:xmlsetup} (alias:
+ \type {\xmlprocess})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessbuffer}}
+ registers buffer \cmdinternal {cd:name} as \cmdinternal {cd:name} and process
+ the tree starting with \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessdata}}
+ registers \cmdinternal {cd:text} as \cmdinternal {cd:name} and process
+ the tree starting with \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+The initial setup defaults to \type {xml:process} that is defined
+as follows:
+
+\starttyping
+\startsetups xml:process
+ \xmlregistereddocumentsetups\xmldocument
+ \xmlmain\xmldocument
+\stopsetups
+\stoptyping
+
+First we apply the setups associated with the document (including common setups)
+and then we flush the whole document. The macro \type {\xmldocument} expands to
+the current document id. There is also \type {\xmlself} which expands to the
+current node number (\type {#1} in setups).
+
+\startxmlcmd {\cmdbasicsetup{xmlmain}}
+ returns the whole document
+\stopxmlcmd
+
+Normally such a flush will trigger a chain reaction of setups associated with the
+child elements.
+
+\stopsection
+
+\startsection[title={saving}]
+
+\startxmlcmd {\cmdbasicsetup{xmlsave}}
+ saves the given node \cmdinternal {cd:node} in the file \cmdinternal {cd:file}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltofile}}
+ saves the match of \cmdinternal {cd:lpath} in the file \cmdinternal {cd:file}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltobuffer}}
+ saves the match of \cmdinternal {cd:lpath} in the buffer \cmdinternal {cd:buffer}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltobufferverbose}}
+ saves the match of \cmdinternal {cd:lpath} verbatim in the buffer \cmdinternal
+ {cd:buffer}
+\stopxmlcmd
+
+% \startxmlcmd {\cmdbasicsetup{xmltoparameters}}
+% converts the match of \cmdinternal {cd:lpath} to key|/|values (for tracing)
+% \stopxmlcmd
+
+The next command is only needed when you have messed with the tree using
+\LUA\ code.
+
+\startxmlcmd {\cmdbasicsetup{xmladdindex}}
+ (re)indexes a tree
+\stopxmlcmd
+
+The following macros are only used in special situations and are not really meant
+for users.
+
+\startxmlcmd {\cmdbasicsetup{xmlraw}}
+ flush the content if \cmdinternal {cd:node} with original entities
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmlraw}}
+ flush the wrapped content with original entities
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={flushing data}]
+
+When we flush an element, the associated \XML\ setups are expanded. The most
+straightforward way to flush an element is the following. Keep in mind that the
+returned values itself can trigger setups and therefore flushes.
+
+\startxmlcmd {\cmdbasicsetup{xmlflush}}
+ returns all nodes under \cmdinternal {cd:node}
+\stopxmlcmd
+
+You can restrict flushing by using commands that accept a specification.
+
+\startxmlcmd {\cmdbasicsetup{xmltext}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpure}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node} without \type {\Ux} escaped special \TEX\ characters
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushtext}}
+ returns the text of the \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushpure}}
+ returns the text of the \cmdinternal {cd:node} without \type {\Ux} escaped
+ special \TEX\ characters
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlnonspace}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node} without embedded spaces
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlall}}
+ returns all nodes under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllastmatch}}
+ returns all nodes found in the last match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlfirst}}
+ returns the first node under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllast}}
+ returns the last node under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlfilter}}
+ at a match of \cmdinternal {cd:lpath} a given filter \type {filter} is applied
+ and the result is returned
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlsnippet}}
+ returns the \cmdinternal {cd:number}\high{th} element under \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlposition}}
+ returns the \cmdinternal {cd:number}\high{th} match of \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node}; a negative number starts at the
+ end (alias: \type {\xmlindex})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlelement}}
+ returns the \cmdinternal {cd:number}\high{th} child of node \cmdinternal {cd:node};
+ a negative number starts at the end
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpos}}
+ returns the index (position) in the parent node of \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlconcat}}
+ returns the sequence of nodes that match \cmdinternal {cd:lpath} at
+ \cmdinternal {cd:node} whereby \cmdinternal {cd:text} is put between each
+ match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlconcatrange}}
+ returns the \cmdinternal {cd:first}\high {th} upto \cmdinternal
+ {cd:last}\high {th} of nodes that match \cmdinternal {cd:lpath} at
+ \cmdinternal {cd:node} whereby \cmdinternal {cd:text} is put between each
+ match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcommand}}
+ apply the given \cmdinternal {cd:xmlsetup} to each match of \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstrip}}
+ remove leading and trailing spaces from nodes under \cmdinternal {cd:node}
+ that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstripped}}
+ remove leading and trailing spaces from nodes under \cmdinternal {cd:node}
+ that match \cmdinternal {cd:lpath} and return the content afterwards
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstripnolines}}
+ remove leading and trailing spaces as well as collapse embedded spaces
+ from nodes under \cmdinternal {cd:node} that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstrippednolines}}
+ remove leading and trailing spaces as well as collapse embedded spaces from
+ nodes under \cmdinternal {cd:node} that match \cmdinternal {cd:lpath} and
+ return the content afterwards
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlverbatim}}
+ flushes the content verbatim code (without any wrapping, i.e. no fonts
+ are selected and such)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinlineverbatim}}
+ return the content of the node as inline verbatim code; no further
+ interpretation (expansion) takes place and spaces are honoured; it uses the
+ following wrapper
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmlinlineverbatim}}
+ wraps inline verbatim mode using the environment specified (a prefix \type
+ {xml:} is added to the environment name)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldisplayverbatim}}
+ return the content of the node as display verbatim code; no further
+ interpretation (expansion) takes place and leading and trailing spaces and
+ newlines are treated special; it uses the following wrapper
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmldisplayverbatim}}
+ wraps the content in display verbatim using the environment specified (a prefix
+ \type {xml:} is added to the environment name)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprettyprint}}
+ pretty print (with colors) the node \cmdinternal {cd:node}; use the \CONTEXT\
+ \SCITE\ lexers when available (\type {\usemodule [scite]})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushspacewise}}
+ flush node \cmdinternal {cd:node} obeying spaces and newlines
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushlinewise}}
+ flush node \cmdinternal {cd:node} obeying newlines
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={information}]
+
+The following commands return strings. Normally these are used in tests.
+
+\startxmlcmd {\cmdbasicsetup{xmlname}}
+ returns the complete name (including namespace prefix) of the
+ given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlnamespace}}
+ returns the namespace of the given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltag}}
+ returns the tag of the element, without namespace prefix
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcount}}
+ returns the number of matches of \cmdinternal {cd:lpath} at node \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattdef}}
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:string} if no such attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlrefatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists; a leading \type {#} is removed (nicer for tex)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchainatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists; backtracks till a match is found
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchainattdef}}
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:string} if no such attribute exists; backtracks till a match is found
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattribute}}
+ finds a first match for \cmdinternal {cd:lpath} at \cmdinternal {cd:node} and
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattributedef}}
+ finds a first match for \cmdinternal {cd:lpath} at \cmdinternal {cd:node} and
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:text} if no such attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllastatt}}
+ returns the last attribute found (this avoids a lookup)
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={manipulation}]
+
+You can use \LUA\ code to manipulate the tree and it makes no sense to duplicate
+this in \TEX. In the future we might provide an interface to some of this
+functionality. Keep in mind that manipuating the tree might have side effects as
+we maintain several indices into the tree that also needs to be updated then.
+
+\stopsection
+
+\startsection[title={integration}]
+
+If you write a module that deals with \XML, for instance processing cals tables,
+then you need ways to control specific behaviour. For instance, you might want to
+add a background to the table. Such directives are collected in \XML\ files and
+can be loaded on demand.
+
+\startxmlcmd {\cmdbasicsetup{xmlloaddirectives}}
+ loads \CONTEXT\ directives from \cmdinternal {cd:file} that will get
+ interpreted when processing documents
+\stopxmlcmd
+
+A directives definition file looks as follows:
+
+\starttyping
+<?xml version="1.0" standalone="yes"?>
+
+<directives>
+ <directive attribute='id' value="100"
+ setup="cdx:100"/>
+ <directive attribute='id' value="101"
+ setup="cdx:101"/>
+ <directive attribute='cdx' value="colors" element="cals:table"
+ setup="cdx:cals:table:colors"/>
+ <directive attribute='cdx' value="vertical" element="cals:table"
+ setup="cdx:cals:table:vertical"/>
+ <directive attribute='cdx' value="noframe" element="cals:table"
+ setup="cdx:cals:table:noframe"/>
+ <directive attribute='cdx' value="*" element="cals:table"
+ setup="cdx:cals:table:*"/>
+</directives>
+\stoptyping
+
+Examples of usage can be found in \type {x-cals.mkiv}. The directive is triggered
+by an attribute. Instead of a setup you can specify a setup to be applied before
+and after the node gets flushed.
+
+\startxmlcmd {\cmdbasicsetup{xmldirectives}}
+ apply the setups directive associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldirectivesbefore}}
+ apply the before directives associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldirectivesafter}}
+ apply the after directives associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinstalldirective}}
+ defines a directive that hooks into a handler
+\stopxmlcmd
+
+Normally a directive will be put in the \XML\ file, for instance as:
+
+\starttyping
+<?context-mathml-directive minus reduction yes ?>
+\stoptyping
+
+Here the \type {mathml} is the general class of directives and \type {minus} a
+subclass, in our case a specific element.
+
+\stopsection
+
+\startsection[title={setups}]
+
+The basic building blocks of \XML\ processing are setups. These are just
+collections of macros that are expanded. These setups get one argument passed
+(\type {#1}):
+
+\starttyping
+\startxmlsetups somedoc:somesetup
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+This argument is normally a number that internally refers to a specific node in
+the \XML\ tree. The user should see it as an abstract reference and not depend on
+its numeric property. Just think of it as \quote {the current node}. You can (and
+probably will) call such setups using:
+
+\startxmlcmd {\cmdbasicsetup{xmlsetup}}
+ expands setup \cmdinternal {cd:setup} and pass \cmdinternal {cd:node} as
+ argument
+\stopxmlcmd
+
+However, in most cases the setups are associated to specific elements,
+something that users of \XSLT\ might recognize as templates.
+
+\startxmlcmd {\cmdbasicsetup{xmlsetfunction}}
+ associates function \cmdinternal {cd:luafunction} to the elements in
+ namespace \cmdinternal {cd:name} that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlsetsetup}}
+ associates setups \cmdinternal {cd:setup} (\TEX\ code) with the matching
+ nodes of \cmdinternal {cd:lpath} or root \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprependsetup}}
+ pushes \cmdinternal {cd:setup} to the front of global list of setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlappendsetup}}
+ adds \cmdinternal {cd:setup} to the global list of setups to be applied
+ (alias: \type{\xmlregistersetup})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbeforesetup}}
+ pushes \cmdinternal {cd:setup} into the global list of setups; the
+ last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlaftersetup}}
+ adds \cmdinternal {cd:setup} to the global list of setups; the last setup
+ is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremovesetup}}
+ removes \cmdinternal {cd:setup} from the global list of setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprependdocumentsetup}}
+ pushes \cmdinternal {cd:setup} to the front of list of setups to be applied
+ to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlappenddocumentsetup}}
+ adds \cmdinternal {cd:setup} to the list of setups to be applied to
+ \cmdinternal {cd:name} (you can also use the alias: \type
+ {\xmlregisterdocumentsetup})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbeforedocumentsetup}}
+ pushes \cmdinternal {cd:setup} into the setups to be applied to \cmdinternal
+ {cd:name}; the last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlafterdocumentsetup}}
+ adds \cmdinternal {cd:setup} to the setups to be applied to \cmdinternal
+ {cd:name}; the last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremovedocumentsetup}}
+ removes \cmdinternal {cd:setup} from the global list of setups to be applied
+ to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetsetups}}
+ removes all global setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetdocumentsetups}}
+ removes all setups from the \cmdinternal {cd:name} specific list of setups to
+ be applied
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushdocumentsetups}{setup}}
+ applies \cmdinternal {cd:setup} (can be a list) to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlregisteredsetups}}
+ applies all global setups to the current document
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlregistereddocumentsetups}}
+ applies all document specific \cmdinternal {cd:setup} to document
+ \cmdinternal {cd:name}
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={testing}]
+
+The following test macros all take a \cmdinternal {cd:node} as first argument
+and an \cmdinternal {cd:lpath} as second:
+
+\startxmlcmd {\cmdbasicsetup{xmldoif}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} matches at
+ node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnot}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} does not match
+ at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelse}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} matches at
+ node \cmdinternal {cd:node} and to \cmdinternal {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoiftext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has some content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnottext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has no content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelsetext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has content and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelseempty}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} is empty and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelseselfempty}}
+ expands to \cmdinternal {cd:true} when the node is empty and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifselfempty}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:node} is empty
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnotselfempty}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:node} is not empty
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={initialization}]
+
+The general setup command (not to be confused with setups) that deals with the
+\MKIV\ tree handler is \type {\setupxml}. There are currently only a few options.
+
+\cmdfullsetup{setupxml}
+
+When you set \type {default} to \cmdinternal {cd:text} elements with no setup
+assigned will end up as text. When set to \type {hidden} such elements will be
+hidden. You can apply the default yourself using:
+
+\startxmlcmd {\cmdbasicsetup{xmldefaulttotext}}
+ presets the tree with root \cmdinternal {cd:node} to the handlers set up with
+ \type {\setupxml} option \cmdinternal{default}
+\stopxmlcmd
+
+You can set \type {compress} to \type {yes} in which case comment is stripped
+from the tree when the file is read.
+
+\startxmlcmd {\cmdbasicsetup{xmlregisterns}}
+ associates an internal namespace (like \type {mml}) with one given in the
+ document as \URL\ (like mathml)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremapname}}
+ changes the namespace and tag of the matching elements
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremapnamespace}}
+ replaces all references to the given namespace to a new one (applied
+ recursively)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchecknamespace}}
+ sets the namespace of the matching elements unless a namespace is already set
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={helpers}]
+
+Often an attribute will determine the rendering and this may result in many
+tests. Especially when we have multiple attributes that control the output such
+tests can become rather extensive and redundant because one gets $n\times m$ or
+more such tests.
+
+Therefore we have a convenient way to map attributes onto for instance strings or
+commands.
+
+\startxmlcmd {\cmdbasicsetup{xmlmapvalue}}
+ associate a \cmdinternal {cd:text} with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name} (alias: \type{\xmlmapval})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlvalue}}
+ expand the value associated with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name} and if not resolved, expand to the \cmdinternal
+ {cd:text} (alias: \type{\xmlval})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelsevalue}}
+ associate a \cmdinternal {cd:text} with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name}
+\stopxmlcmd
+
+This is used as follows. We define a couple of mappings in the same category:
+
+\starttyping
+\xmlmapvalue{emph}{bold} {\bf}
+\xmlmapvalue{emph}{italic}{\it}
+\stoptyping
+
+Assuming that we have associated the following setup with the \type {emph}
+element, we can say (with \type {#1} being the current element):
+
+\starttyping
+\startxmlsetups demo:emph
+ \begingroup
+ \xmlvalue{emph}{\xmlatt{#1}{type}}{}
+ \endgroup
+\stopxmlsetups
+\stoptyping
+
+In this case we have no default. The \type {type} attribute triggers the actions,
+as in:
+
+\starttyping
+normal <emph type='bold'>bold</emph> normal
+\stoptyping
+
+This mechanism is not really bound to elements and attributes so you can use this
+mechanism for other purposes as well.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Expressions and filters}]
+
+\startsection[title={path expressions}]
+
+In the previous chapters we used \cmdinternal {cd:lpath} expressions, which are a variant
+on \type {xpath} expressions as in \XSLT\ but in this case more geared towards
+usage in \TEX. This mechanisms will be extended when demands are there.
+
+A path is a sequence of matches. A simple path expression is:
+
+\starttyping
+a/b/c/d
+\stoptyping
+
+Here each \type {/} goes one level deeper. We can go backwards in a lookup with
+\type {..}:
+
+\starttyping
+a/b/../d
+\stoptyping
+
+We can also combine lookups, as in:
+
+\starttyping
+a/(b|c)/d
+\stoptyping
+
+A negated lookup is preceded by a \type {!}:
+
+\starttyping
+a/(b|c)/!d
+\stoptyping
+
+A wildcard is specified with a \type {*}:
+
+\starttyping
+a/(b|c)/!d/e/*/f
+\stoptyping
+
+In addition to these tag based lookups we can use attributes:
+
+\starttyping
+a/(b|c)/!d/e/*/f[@type=whatever]
+\stoptyping
+
+An \type {@} as first character means that we are dealing with an attribute.
+Within the square brackets there can be boolean expressions:
+
+\starttyping
+a/(b|c)/!d/e/*/f[@type=whatever and @id>100]
+\stoptyping
+
+You can use functions as in:
+
+\starttyping
+a/(b|c)/!d/e/*/f[something(text()) == "oeps"]
+\stoptyping
+
+There are a couple of predefined functions:
+
+\starttabulate[|l|l|p|]
+\NC \type{rootposition} \type{order} \NC number \NC the index of the matched root element (kind of special) \NC \NR
+\NC \type{position} \NC number \NC the current index of the matched element in the match list \NC \NR
+\NC \type{match} \NC number \NC the current index of the matched element sub list with the same parent \NC \NR
+\NC \type{first} \NC number \NC \NC \NR
+\NC \type{last} \NC number \NC \NC \NR
+\NC \type{index} \NC number \NC the current index of the matched element in its parent list \NC \NR
+\NC \type{firstindex} \NC number \NC \NC \NR
+\NC \type{lastindex} \NC number \NC \NC \NR
+\NC \type{element} \NC number \NC the element's index \NC \NR
+\NC \type{firstelement} \NC number \NC \NC \NR
+\NC \type{lastelement} \NC number \NC \NC \NR
+\NC \type{text} \NC string \NC the textual representation of the matched element \NC \NR
+\NC \type{content} \NC table \NC the node of the matched element \NC \NR
+\NC \type{name} \NC string \NC the full name of the matched element: namespace and tag \NC \NR
+\NC \type{namespace} \type{ns} \NC string \NC the namespace of the matched element \NC \NR
+\NC \type{tag} \NC string \NC the tag of the matched element \NC \NR
+\NC \type{attribute} \NC string \NC the value of the attribute with the given name of the matched element \NC \NR
+\stoptabulate
+
+There are fundamental differences between \type {position}, \type {match} and
+\type {index}. Each step results in a new list of matches. The \type {position}
+is the index in this new (possibly intermediate) list. The \type {match} is also
+an index in this list but related to the specific match of element names. The
+\type {index} refers to the location in the parent element.
+
+Say that we have:
+
+\starttyping
+<collection>
+ <resources>
+ <manual>
+ <screen>.1.</screen>
+ <paper>.1.</paper>
+ </manual>
+ <manual>
+ <paper>.2.</paper>
+ <screen>.2.</screen>
+ </manual>
+ <resources>
+ <resources>
+ <manual>
+ <screen>.3.</screen>
+ <paper>.3.</paper>
+ </manual>
+ <resources>
+<collection>
+\stoptyping
+
+The following then applies:
+
+\starttabulate[|l|l|]
+\NC \type {collection/resources/manual[position()==1]/paper} \NC \type{.1.} \NC \NR
+\NC \type {collection/resources/manual[match()==1]/paper} \NC \type{.1.} \type{.3.} \NC \NR
+\NC \type {collection/resources/manual/paper[index()==1]} \NC \type{.2.} \NC \NR
+\stoptabulate
+
+In most cases the \type {position} test is more restrictive than the \type
+{match} test.
+
+You can pass your own functions too. Such functions are defined in the the \type
+{xml.expressions} namespace. We have defined a few shortcuts:
+
+\starttabulate[|l|l|]
+\NC \type {find(str,pattern)} \NC \type{string.find} \NC \NR
+\NC \type {contains(str)} \NC \type{string.find} \NC \NR
+\NC \type {oneof(str,...)} \NC is \type{str} in list \NC \NR
+\NC \type {upper(str)} \NC \type{characters.upper} \NC \NR
+\NC \type {lower(str)} \NC \type{characters.lower} \NC \NR
+\NC \type {number(str)} \NC \type{tonumber} \NC \NR
+\NC \type {boolean(str)} \NC \type{toboolean} \NC \NR
+\NC \type {idstring(str)} \NC removes leading hash \NC \NR
+\NC \type {name(index)} \NC full tag name \NC \NR
+\NC \type {tag(index)} \NC tag name \NC \NR
+\NC \type {namespace(index)} \NC namespace of tag \NC \NR
+\NC \type {text(index)} \NC content \NC \NR
+\NC \type {error(str)} \NC quit and show error \NC \NR
+\NC \type {quit()} \NC quit \NC \NR
+\NC \type {print()} \NC print message \NC \NR
+\NC \type {count(pattern)} \NC number of matches \NC \NR
+\NC \type {child(pattern)} \NC take child that matches \NC \NR
+\stoptabulate
+
+
+You can also use normal \LUA\ functions as long as you make sure that you pass
+the right arguments. There are a few predefined variables available inside such
+functions.
+
+\starttabulate[|Tl|l|p|]
+\NC \type{list} \NC table \NC the list of matches \NC \NR
+\NC \type{l} \NC number \NC the current index in the list of matches \NC \NR
+\NC \type{ll} \NC element \NC the current element that matched \NC \NR
+\NC \type{order} \NC number \NC the position of the root of the path \NC \NR
+\stoptabulate
+
+The given expression between \type {[]} is converted to a \LUA\ expression so you
+can use the usual operators:
+
+\starttyping
+== ~= <= >= < > not and or ()
+\stoptyping
+
+In addition, \type {=} equals \type {==} and \type {!=} is the same as \type
+{~=}. If you mess up the expression, you quite likely get a \LUA\ error message.
+
+\stopsection
+
+\startsection[title={functions as filters}]
+
+At the \LUA\ end a whole \cmdinternal {cd:lpath} expression results in a (set of) node(s)
+with its environment, but that is hardly usable in \TEX. Think of code like:
+
+\starttyping
+for e in xml.collected(xml.load('text.xml'),"title") do
+ -- e = the element that matched
+end
+\stoptyping
+
+The older variant is still supported but you can best use the previous variant.
+
+\starttyping
+for r, d, k in xml.elements(xml.load('text.xml'),"title") do
+ -- r = root of the title element
+ -- d = data table
+ -- k = index in data table
+end
+\stoptyping
+
+Here \type {d[k]} points to the \type {title} element and in this case all titles
+in the tree pass by. In practice this kind of code is encapsulated in function
+calls, like those returning elements one by one, or returning the first or last
+match. The result is then fed back into \TEX, possibly after being altered by an
+associated setup. We've seen the wrappers to such functions already in a previous
+chapter.
+
+In addition to the previously discussed expressions, one can add so called
+filters to the expression, for instance:
+
+\starttyping
+a/(b|c)/!d/e/text()
+\stoptyping
+
+In a filter, the last part of the \cmdinternal {cd:lpath} expression is a
+function call. The previous example returns the text of each element \type {e}
+that results from matching the expression. When running \TEX\ the following
+functions are available. Some are also available when using pure \LUA. In \TEX\
+you can often use one of the macros like \type {\xmlfirst} instead of a \type
+{\xmlfilter} with finalizer \type {first()}. The filter can be somewhat faster
+but that is hardly noticeable.
+
+\starttabulate[|l|l|p|]
+\NC \type {context()} \NC string \NC the serialized text with \TEX\ catcode regime \NC \NR
+%NC \type {ctxtext()} \NC string \NC \NC \NR
+\NC \type {function()} \NC string \NC depends on the function \NC \NR
+%
+\NC \type {name()} \NC string \NC the (remapped) namespace \NC \NR
+\NC \type {tag()} \NC string \NC the name of the element \NC \NR
+\NC \type {tags()} \NC list \NC the names of the element \NC \NR
+%
+\NC \type {text()} \NC string \NC the serialized text \NC \NR
+\NC \type {upper()} \NC string \NC the serialized text uppercased \NC \NR
+\NC \type {lower()} \NC string \NC the serialized text lowercased \NC \NR
+\NC \type {stripped()} \NC string \NC the serialized text stripped \NC \NR
+\NC \type {lettered()} \NC string \NC the serialized text only letters (cf. \UNICODE) \NC \NR
+%
+\NC \type {count()} \NC number \NC the number of matches \NC \NR
+\NC \type {index()} \NC number \NC the matched index in the current path \NC \NR
+\NC \type {match()} \NC number \NC the matched index in the preceding path \NC \NR
+%
+%NC \type {lowerall()} \NC string \NC \NC \NR
+%NC \type {upperall()} \NC string \NC \NC \NR
+%
+\NC \type {attribute(name)} \NC content \NC returns the attribute with the given name \NC \NR
+\NC \type {chainattribute(name)} \NC content \NC sidem, but backtracks till one is found \NC \NR
+\NC \type {command(name)} \NC content \NC expands the setup with the given name for each found element \NC \NR
+\NC \type {position(n)} \NC content \NC processes the \type {n}\high{th} instance of the found element \NC \NR
+\NC \type {all()} \NC content \NC processes all instances of the found element \NC \NR
+%NC \type {default} \NC content \NC all \NC \NR
+\NC \type {reverse()} \NC content \NC idem in reverse order \NC \NR
+\NC \type {first()} \NC content \NC processes the first instance of the found element \NC \NR
+\NC \type {last()} \NC content \NC processes the last instance of the found element \NC \NR
+\NC \type {concat(...)} \NC content \NC concatinates the match \NC \NC \NR
+\NC \type {concatrange(from,to,...)} \NC content \NC concatinates a range of matches \NC \NC \NR
+\stoptabulate
+
+The extra arguments of the concatinators are: \type {separator} (string), \type
+{lastseparator} (string) and \type {textonly} (a boolean).
+
+These filters are in fact \LUA\ functions which means that if needed more of them
+can be added. Indeed this happens in some of the \XML\ related \MKIV\ modules,
+for instance in the \MATHML\ processor.
+
+\stopsection
+
+\startsection[title={example}]
+
+The number of commands is rather large and if you want to avoid them this is
+often possible. Take for instance:
+
+\starttyping
+\xmlall{#1}{/a/b[position()>3]}
+\stoptyping
+
+Alternatively you can use:
+
+\starttyping
+\xmlfilter{#1}{/a/b[position()>3]/all()}
+\stoptyping
+
+and actually this is also faster as internally it avoids a function call. Of
+course in practice this is hardly measurable.
+
+In previous examples we've already seen quite some expressions, and it might be
+good to point out that the syntax is modelled after \XSLT\ but is not quite the
+same. The reason is that we started with a rather minimal system and have already
+styles in use that depend on compatibility.
+
+\starttyping
+namespace:// axis node(set) [expr 1]..[expr n] / ... / filter
+\stoptyping
+
+When we are inside a \CONTEXT\ run, the namespace is \type {tex}. Hoewever, if
+you want not to print back to \TEX\ you need to be more explicit. Say that we
+typeset examns and have a (not that logical) structure like:
+
+\starttyping
+<question>
+ <text>...</text>
+ <answer>
+ <item>one</item>
+ <item>two</item>
+ <item>three</item>
+ </answer>
+ <alternative>
+ <condition>true</condition>
+ <score>1</score>
+ </alternative>
+ <alternative>
+ <condition>false</condition>
+ <score>0</score>
+ </alternative>
+ <alternative>
+ <condition>true</condition>
+ <score>2</score>
+ </alternative>
+</question>
+\stoptyping
+
+Say that we typeset the questions with:
+
+\starttyping
+\startxmlsetups question
+ \blank
+ score: \xmlfunction{#1}{totalscore}
+ \blank
+ \xmlfirst{#1}{text}
+ \startitemize
+ \xmlfilter{#1}{/answer/item/command(answer:item)}
+ \stopitemize
+ \endgraf
+ \blank
+\stopxmlsetups
+\stoptyping
+
+Each item in the answer results in a call to:
+
+\starttyping
+\startxmlsetups answer:item
+ \startitem
+ \xmlflush{#1}
+ \endgraf
+ \xmlfilter{#1}{../../alternative[position()=rootposition()]/
+ condition/command(answer:condition)}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+\starttyping
+\startxmlsetups answer:condition
+ \endgraf
+ condition: \xmlflush{#1}
+ \endgraf
+\stopxmlsetups
+\stoptyping
+
+Now, there are two rather special filters here. The first one involves
+calculating the total score. As we look forward we use a function to deal with
+this.
+
+\starttyping
+\startluacode
+function xml.functions.totalscore(root)
+ local score = 0
+ for e in xml.collected(root,"/alternative") do
+ score = score + xml.filter(e,"xml:///score/number()") or 0
+ end
+ tex.write(score)
+end
+\stopluacode
+\stoptyping
+
+Watch how we use the namespace to keep the results at the \LUA\ end.
+
+The second special trick shown here is to limit a match using the current
+position of the root (\type {#}) match.
+
+As you can see, a path expression can be more than just filtering a few nodes. At
+the end of this manual you will find a bunch of examples.
+
+\stopsection
+
+\startsection[title={tables}]
+
+If you want to know how the internal \XML\ tables look you can print such a
+table:
+
+\starttyping
+print(table.serialize(e))
+\stoptyping
+
+This produces for instance:
+
+% s = xml.convert("<document><demo label='whatever'>some text</demo></document>")
+% print(table.serialize(xml.filter(s,"demo")[1]))
+
+\starttyping
+t={
+ ["at"]={
+ ["label"]="whatever",
+ },
+ ["dt"]={ "some text" },
+ ["ns"]="",
+ ["rn"]="",
+ ["tg"]="demo",
+}
+\stoptyping
+
+The \type {rn} entry is the renamed namespace (when renaming is applied). If you
+see tags like \type {@pi@} this means that we don't have an element, but (in this
+case) a processing instruction.
+
+\starttabulate[|l|p|]
+\NC \type {@rt@} \NC the root element \NC \NR
+\NC \type {@dd@} \NC document definition \NC \NR
+\NC \type {@cm@} \NC comment, like \type {<!-- whatever -->} \NC \NR
+\NC \type {@cd@} \NC so called \type {CDATA} \NC \NR
+\NC \type {@pi@} \NC processing instruction, like \type {<?whatever we want ?>} \NC \NR
+\stoptabulate
+
+There are many ways to deal with the content, but in the perspective of \TEX\
+only a few matter.
+
+\starttabulate[|l|p|]
+\NC \type {xml.sprint(e)} \NC print the content to \TEX\ and apply setups if needed \NC \NR
+\NC \type {xml.tprint(e)} \NC print the content to \TEX\ (serialize elements verbose) \NC \NR
+\NC \type {xml.cprint(e)} \NC print the content to \TEX\ (used for special content) \NC \NR
+\stoptabulate
+
+Keep in mind that anything low level that you uncover is not part of the official
+interface unless mentioned in this manual.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Tips and tricks}]
+
+\startsection[title={tracing}]
+
+It can be hard to debug code as much happens kind of behind the screens.
+Therefore we have a couple of tracing options. Of course you can typeset some
+status information, using for instance:
+
+\startxmlcmd {\cmdbasicsetup{xmlshow}}
+ typeset the tree given by \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinfo}}
+ typeset the name if the element given by \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpath}}
+ returns the complete path (including namespace prefix and index) of the
+ given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startbuffer[demo]
+<?xml version "1.0"?>
+<document>
+ <section>
+ <content>
+ <p>first</p>
+ <p><b>second</b></p>
+ </content>
+ </section>
+ <section>
+ <content>
+ <p><b>third</b></p>
+ <p>fourth</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+Say that we have the following \XML:
+
+\typebuffer[demo]
+
+and the next definitions:
+
+\startbuffer
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{p|b}{xml:demo:*}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \xmlflush{#1}
+ \par
+\stopxmlsetups
+
+\startxmlsetups xml:demo:b
+ \par
+ \xmlpath{#1} : \xmlflush{#1}
+ \par
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-10}{xml:demo:base}
+
+\xmlprocessbuffer{example-10}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+This will give us:
+
+\blank \startpacked \getbuffer \stoppacked \blank
+
+If you use \type {\xmlshow} you will get a complete subtree which can
+be handy for tracing but can also lead to large documents.
+
+We also have a bunch of trackers that can be enabled, like:
+
+\starttyping
+\enabletrackers[xml.show,xml.parse]
+\stoptyping
+
+The full list (currently) is:
+
+\starttabulate[|lT|p|]
+\NC xml.entities \NC show what entities are seen and replaced \NC \NR
+\NC xml.path \NC show the result of parsing an lpath expression \NC \NR
+\NC xml.parse \NC show stepwise resolving of expressions \NC \NR
+\NC xml.profile \NC report all parsed lpath expressions (in the log) \NC \NR
+\NC xml.remap \NC show what namespaces are remapped \NC \NR
+\NC lxml.access \NC report errors with respect to resolving (symbolic) nodes \NC \NR
+\NC lxml.comments \NC show the comments that are encountered (if at all) \NC \NR
+\NC lxml.loading \NC show what files are loaded and converted \NC \NR
+\NC lxml.setups \NC show what setups are being associated to elements \NC \NR
+\stoptabulate
+
+In one of our workflows we produce books from \XML\ where the (educational)
+content is organized in many small files. Each book has about 5~chapters and each
+chapter is made of sections that contain text, exercises, resources, etc.\ and so
+the document is assembled from thousands of files (don't worry, runtime inclusion
+is pretty fast). In order to see where in the sources content resides we can
+trace the filename.
+
+\startxmlcmd {\cmdbasicsetup{xmlinclusion}}
+ returns the file where the node comes from
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinclusions}}
+ returns the list of files where the node comes from
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbadinclusions}}
+ returns a list of files that were not included due to some problem
+\stopxmlcmd
+
+Of course you have to make sure that these names end up somewhere visible, for
+instance in the margin.
+
+\stopsection
+
+\startsection[title={expansion}]
+
+For novice users the concept of expansion might sound frightening and to some
+extend it is. However, it is important enough to spend some words on it here.
+
+It is good to realize that most setups are sort of immediate. When one setup is
+issued, it can call another one and so on. Normally you won't notice that but
+there are cases where that can be a problem. In \TEX\ you can define a macro,
+take for instance:
+
+\starttyping
+\startxmlsetups xml:foo
+ \def\foobar{\xmlfirst{#1}{/bar}}
+\stopxmlsetups
+\stoptyping
+
+you store the reference top node \type {bar} in \type {\foobar} maybe for later use. In
+this case the content is not yet fetched, it will be done when \type {\foobar} is
+called.
+
+\starttyping
+\startxmlsetups xml:foo
+ \edef\foobar{\xmlfirst{#1}{/bar}}
+\stopxmlsetups
+\stoptyping
+
+Here the content of \type {bar} becomes the body of the macro. But what if
+\type {bar} itself contains elements that also contain elements. When there
+is a setup for \type {bar} it will be triggered and so on.
+
+When that setup looks like:
+
+\starttyping
+\startxmlsetups xml:bar
+ \def\barfoo{\xmlflush{#1}}
+\stopxmlsetups
+\stoptyping
+
+Here we get something like:
+
+\starttyping
+\foobar => {\def\barfoo{...}}
+\stoptyping
+
+When \type {\barfoo} is not defined we get an error and when it is known and expands
+to something weird we might also get an error.
+
+Especially when you don't know what content can show up, this can result in errors
+when an expansion fails, for example because some macro being used is not defined.
+To prevent this we can define a macro:
+
+\starttyping
+\starttexdefinition unexpanded xml:bar:macro #1
+ \def\barfoo{\xmlflush{#1}}
+\stoptexdefinition
+
+\startxmlsetups xml:bar
+ \texdefinition{xml:bar:macro}{#1}
+\stopxmlsetups
+\stoptyping
+
+The setup \type {xml:bar} will still expand but the replacement text now is just the
+call to the macro, think of:
+
+\starttyping
+\foobar => {\texdefinition{xml:bar:macro}{#1}}
+\stoptyping
+
+But this is often not needed, most \CONTEXT\ commands can handle the expansions
+quite well but it's good to know that there is a way out. So, now to some
+examples. Imagine that we have an \XML\ file that looks as follows:
+
+\starttyping
+<?xml version='1.0' ?>
+<demo>
+ <chapter>
+ <title>Some <em>short</em> title</title>
+ <content>
+ zeta
+ <index>
+ <key>zeta</key>
+ <content>zeta again</content>
+ </index>
+ alpha
+ <index>
+ <key>alpha</key>
+ <content>alpha <em>again</em></content>
+ </index>
+ gamma
+ <index>
+ <key>gamma</key>
+ <content>gamma</content>
+ </index>
+ beta
+ <index>
+ <key>beta</key>
+ <content>beta</content>
+ </index>
+ delta
+ <index>
+ <key>delta</key>
+ <content>delta</content>
+ </index>
+ done!
+ </content>
+ </chapter>
+</demo>
+\stoptyping
+
+There are a few structure related elements here: a chapter (with its list entry)
+and some index entries. Both are multipass related and therefore travel around.
+This means that when we let data end up in the auxiliary file, we need to make
+sure that we end up with either expanded data (i.e.\ no references to the \XML\
+tree) or with robust forward and backward references to elements in the tree.
+
+Here we discuss three approaches (and more may show up later): pushing \XML\ into
+the auxiliary file and using references to elements either or not with an
+associated setup. We control the variants with a switch.
+
+\starttyping
+\newcount\TestMode
+
+\TestMode=0 % expansion=xml
+\TestMode=1 % expansion=yes, index, setup
+\TestMode=2 % expansion=yes
+\stoptyping
+
+We apply a couple of setups:
+
+\starttyping
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{\xmldocument}{demo|index|content|chapter|title|em}{xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+\stoptyping
+
+The main document is processed with:
+
+\starttyping
+\startxmlsetups xml:demo
+ \xmlflush{#1}
+ \subject{contents}
+ \placelist[chapter][criterium=all]
+ \subject{index}
+ \placeregister[index][criterium=all]
+ \page % else buffer is forgotten when placing header
+\stopxmlsetups
+\stoptyping
+
+First we show three alternative ways to deal with the chapter. The first case
+expands the \XML\ reference so that we have an \XML\ stream in the auxiliary
+file. This stream is processed as a small independent subfile when needed. The
+second case registers a reference to the current element (\type {#1}). This means
+that we have access to all data of this element, like attributes, title and
+content. What happens depends on the given setup. The third variant does the same
+but here the setup is part of the reference.
+
+\starttyping
+\startxmlsetups xml:chapter
+ \ifcase \TestMode
+ % xml code travels around
+ \setuphead[chapter][expansion=xml]
+ \startchapter[title=eh: \xmltext{#1}{title}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \or
+ % index is used for access via setup
+ \setuphead[chapter][expansion=yes,xmlsetup=xml:title:flush]
+ \startchapter[title=\xmlgetindex{#1}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \or
+ % tex call to xml using index is used
+ \setuphead[chapter][expansion=yes]
+ \startchapter[title=hm: \xmlreference{#1}{xml:title:flush}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:title:flush
+ \xmltext{#1}{title}
+\stopxmlsetups
+\stoptyping
+
+We need to deal with emphasis and the content of the chapter.
+
+\starttyping
+\startxmlsetups xml:em
+ \begingroup\em\xmlflush{#1}\endgroup
+\stopxmlsetups
+
+\startxmlsetups xml:content
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+A similar approach is followed with the index entries. Watch how we use the
+numbered entries variant (in this case we could also have used just \type
+{entries} and \type {keys}).
+
+\starttyping
+\startxmlsetups xml:index
+ \ifcase \TestMode
+ \setupregister[index][expansion=xml,xmlsetup=]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlfirst{#1}{content},
+ keys:1=\xmltext{#1}{key}]
+ \or
+ \setupregister[index][expansion=yes,xmlsetup=xml:index:flush]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlgetindex{#1},
+ keys:1=\xmltext{#1}{key}]
+ \or
+ \setupregister[index][expansion=yes,xmlsetup=]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlreference{#1}{xml:index:flush},
+ keys:1=\xmltext{#1}{key}]
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:index:flush
+ \xmlfirst{#1}{content}
+\stopxmlsetups
+\stoptyping
+
+Instead of this flush, you can use the predefined setup \type {xml:flush}
+unless it is overloaded by you.
+
+The file is processed by:
+
+\starttyping
+\starttext
+ \xmlprocessfile{main}{test.xml}{}
+\stoptext
+\stoptyping
+
+We don't show the result here. If you're curious what the output is, you can test
+it yourself. In that case it also makes sense to peek into the \type {test.tuc}
+file to see how the information travels around. The \type {metadata} fields carry
+information about how to process the data.
+
+The first case, the \XML\ expansion one, is somewhat special in the sense that
+internally we use small pseudo files. You can control the rendering by tweaking
+the following setups:
+
+\starttyping
+\startxmlsetups xml:ctx:sectionentry
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:ctx:registerentry
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+{\em When these methods work out okay the other structural elements will be
+dealt with in a similar way.}
+
+\stopsection
+
+\startsection[title={special cases}]
+
+Normally the content will be flushed under a special (so called) catcode regime.
+This means that characters that have a special meaning in \TEX\ will have no such
+meaning in an \XML\ file. If you want content to be treated as \TEX\ code, you can
+use one of the following:
+
+\startxmlcmd {\cmdbasicsetup{xmlflushcontext}}
+ flush the given \cmdinternal {cd:node} using the \TEX\ character
+ interpretation scheme
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcontext}}
+ flush the match of \cmdinternal {cd:lpath} for the given \cmdinternal
+ {cd:node} using the \TEX\ character interpretation scheme
+\stopxmlcmd
+
+We use this in cases like:
+
+\starttyping
+....
+ \xmlsetsetup {#1} {
+ tm|texformula|
+ } {xml:*}
+....
+
+\startxmlsetups xml:tm
+ \mathematics{\xmlflushcontext{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:texformula
+ \placeformula\startformula\xmlflushcontext{#1}\stopformula
+\stopxmlsetups
+\stoptyping
+
+\stopsection
+
+\startsection[title={collecting}]
+
+Say that your document has
+
+\starttyping
+<table>
+ <tr>
+ <td>foo</td>
+ <td>bar<td>
+ </tr>
+</table>
+\stoptyping
+
+And that you need to convert that to \TEX\ speak like:
+
+\starttyping
+\bTABLE
+ \bTR
+ \bTD foo \eTD
+ \bTD bar \eTD
+ \eTR
+\eTABLE
+\stoptyping
+
+A simple mapping is:
+
+\starttyping
+\startxmlsetups xml:table
+ \bTABLE \xmlflush{#1} \eTABLE
+\stopxmlsetups
+\startxmlsetups xml:tr
+ \bTR \xmlflush{#1} \eTR
+\stopxmlsetups
+\startxmlsetups xml:td
+ \bTD \xmlflush{#1} \eTD
+\stopxmlsetups
+\stoptyping
+
+The \type {\bTD} command is a so called delimited command which means that it
+picks up its argument by looking for an \type {\eTD}. For the simple case here
+this works quite well because the flush is inside the pair. This is not the case
+in the following variant:
+
+\starttyping
+\startxmlsetups xml:td:start
+ \bTD
+\stopxmlsetups
+\startxmlsetups xml:td:stop
+ \eTD
+\stopxmlsetups
+\startxmlsetups xml:td
+ \xmlsetup{#1}{xml:td:start}
+ \xmlflush{#1}
+ \xmlsetup{#1}{xml:td:stop}
+\stopxmlsetups
+\stoptyping
+
+When for some reason \TEX\ gets confused you can revert to a mechanism that
+collects content.
+
+\starttyping
+\startxmlsetups xml:td:start
+ \startcollect
+ \bTD
+ \stopcollect
+\stopxmlsetups
+\startxmlsetups xml:td:stop
+ \startcollect
+ \eTD
+ \stopcollect
+\stopxmlsetups
+\startxmlsetups xml:td
+ \startcollecting
+ \xmlsetup{#1}{xml:td:start}
+ \xmlflush{#1}
+ \xmlsetup{#1}{xml:td:stop}
+ \stopcollecting
+\stopxmlsetups
+\stoptyping
+
+You can even implement solutions that effectively do this:
+
+\starttyping
+\startcollecting
+ \startcollect \bTABLE \stopcollect
+ \startcollect \bTR \stopcollect
+ \startcollect \bTD \stopcollect
+ \startcollect foo\stopcollect
+ \startcollect \eTD \stopcollect
+ \startcollect \bTD \stopcollect
+ \startcollect bar\stopcollect
+ \startcollect \eTD \stopcollect
+ \startcollect \eTR \stopcollect
+ \startcollect \eTABLE \stopcollect
+\stopcollecting
+\stoptyping
+
+Of course you only need to go that complex when the situation demands it. Here is
+another weird one:
+
+\starttyping
+\startcollecting
+ \startcollect \setupsomething[\stopcollect
+ \startcollect foo=\stopcollect
+ \startcollect FOO,\stopcollect
+ \startcollect bar=\stopcollect
+ \startcollect BAR,\stopcollect
+ \startcollect ]\stopcollect
+\stopcollecting
+\stoptyping
+
+\stopsection
+
+\startsection[title={selectors and injectors}]
+
+This section describes a bit special feature, one that we needed for a project
+where we could not touch the original content but could add specific sections for
+our own purpose. Hopefully the example demonstrates its useability.
+
+\enabletrackers[lxml.selectors]
+
+\startbuffer[foo]
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive message info 1: this is a demo file ?>
+<?context-message-directive info 2: this is a demo file ?>
+
+<one>
+ <two>
+ <?context-select begin t1 t2 t3 ?>
+ <three>
+ t1 t2 t3
+ <?context-directive injector crlf t1 ?>
+ t1 t2 t3
+ </three>
+ <?context-select end ?>
+ <?context-select begin t4 ?>
+ <four>
+ t4
+ </four>
+ <?context-select end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.0
+ t8.0
+ </four>
+ <?context-select end ?>
+ <?context-include begin t4 ?>
+ <!--
+ <three>
+ t4.t3
+ <?context-directive injector crlf t1 ?>
+ t4.t3
+ </three>
+ -->
+ <three>
+ t3
+ <?context-directive injector crlf t1 ?>
+ t3
+ </three>
+ <?context-include end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.1
+ t8.1
+ </four>
+ <?context-select end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.2
+ t8.2
+ </four>
+ <?context-select end ?>
+ <?context-select begin t4 ?>
+ <four>
+ t4
+ t4
+ </four>
+ <?context-select end ?>
+ <?context-directive injector page t7 t8 ?>
+ foo
+ <?context-directive injector blank t1 ?>
+ bar
+ <?context-directive injector page t7 t8 ?>
+ bar
+ </two>
+</one>
+\stopbuffer
+
+\typebuffer[foo]
+
+First we show how to plug in a directive. Processing instructions like the
+following are normally ignored by an \XML\ processor, unless they make sense
+to it.
+
+\starttyping
+<?context-directive message info 1: this is a demo file ?>
+<?context-message-directive info 2: this is a demo file ?>
+\stoptyping
+
+We can define a message handler as follows:
+
+\startbuffer
+\def\MyMessage#1#2#3{\writestatus{#1}{#2 #3}}
+
+\xmlinstalldirective{message}{MyMessage}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+When this file is processed you will see this on the console:
+
+\starttyping
+info > 1: this is a demo file
+info > 2: this is a demo file
+\stoptyping
+
+The file has some sections that can be used or ignored. The recipe for
+obeying \type {t1} and \type {t4} is the following:
+
+\startbuffer
+\xmlsetinjectors[t1]
+\xmlsetinjectors[t4]
+
+\startxmlsetups xml:initialize
+ \xmlapplyselectors{#1}
+ \xmlsetsetup {#1} {
+ one|two|three|four
+ } {xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:initialize}
+
+\startxmlsetups xml:one
+ [ONE \xmlflush{#1} ONE]
+\stopxmlsetups
+
+\startxmlsetups xml:two
+ [TWO \xmlflush{#1} TWO]
+\stopxmlsetups
+
+\startxmlsetups xml:three
+ [THREE \xmlflush{#1} THREE]
+\stopxmlsetups
+
+\startxmlsetups xml:four
+ [FOUR \xmlflush{#1} FOUR]
+\stopxmlsetups
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This typesets:
+
+\startnarrower
+\xmlprocessbuffer{main}{foo}{}
+\stopnarrower
+
+The include coding is kind of special: it permits adding content (in a comment)
+and ignoring the rest so that we indeed can add something without interfering
+with the original. Of course in a normal workflow such messy solutions are
+not needed, but alas, often workflows are not that clean, especially when one
+has no real control over the source.
+
+\startxmlcmd {\cmdbasicsetup{xmlsetinjectors}}
+ enables a list of injectors that will be used
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetinjectors}}
+ resets the list of injectors
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinjector}}
+ expands an injection (command); normally this one is only used
+ (in some setup) or for testing
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlapplyselectors}}
+ analyze the tree \cmdinternal {cd:node} for marked sections that
+ will be injected
+\stopxmlcmd
+
+We have some injections predefined:
+
+\starttyping
+\startsetups xml:directive:injector:page
+ \page
+\stopsetups
+
+\startsetups xml:directive:injector:column
+ \column
+\stopsetups
+
+\startsetups xml:directive:injector:blank
+ \blank
+\stopsetups
+\stoptyping
+
+In the example we see:
+
+\starttyping
+<?context-directive injector page t7 t8 ?>
+\stoptyping
+
+When we set \type {\xmlsetinjector[t7]} a pagebreak will injected in that spot.
+Tags like \type {t7}, \type {t8} etc.\ can represent versions.
+
+\stopsection
+
+\startsection[title=preprocessing]
+
+% local match = lpeg.match
+% local replacer = lpeg.replacer("BAD TITLE:","<bold>BAD TITLE:</bold>")
+%
+% function lxml.preprocessor(data,settings)
+% return match(replacer,data)
+% end
+
+\startbuffer[pre-code]
+\startluacode
+ function lxml.preprocessor(data,settings)
+ return string.find(data,"BAD TITLE:")
+ and string.gsub(data,"BAD TITLE:","<bold>BAD TITLE:</bold>")
+ or data
+ end
+\stopluacode
+\stopbuffer
+
+\startbuffer[pre-xml]
+\startxmlsetups pre:demo:initialize
+ \xmlsetsetup{#1}{*}{pre:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{pre:demo}{pre:demo:initialize}
+
+\startxmlsetups pre:demo:root
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups pre:demo:bold
+ \begingroup\bf\xmlflush{#1}\endgroup
+\stopxmlsetups
+
+\starttext
+ \xmlprocessbuffer{pre:demo}{demo}{}
+\stoptext
+\stopbuffer
+
+Say that you have the following \XML\ setup:
+
+\typebuffer[pre-xml]
+
+and that (such things happen) the input looks like this:
+
+\startbuffer[demo]
+<root>
+BAD TITLE: crap crap crap ...
+
+BAD TITLE: crap crap crap ...
+</root>
+\stopbuffer
+
+\typebuffer[demo]
+
+You can then clean up these \type {BAD TITLE}'s as follows:
+
+\typebuffer[pre-code]
+
+and get as result:
+
+\start \getbuffer[pre-code,pre-xml] \stop
+
+The preprocessor function gets as second argument the current settings, an d
+the field \type {currentresource} can be used to limit the actions to
+specific resources, in our case it's \type {buffer: demo}. Afterwards you can
+reset the proprocessor with:
+
+\startluacode
+lxml.preprocessor = nil
+\stopluacode
+
+Future versions might give some more control over preprocessors. For now consider
+it to be a quick hack.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Lookups using lpaths}]
+
+\startsection[title={introduction}]
+
+There is not that much system in the following examples. They resulted from tests
+with different documents. The current implementation evolved out of the
+experimental code. For instance, I decided to add the multiple expressions in row
+handling after a few email exchanges with Jean|-|Michel Huffen.
+
+One of the main differences between the way \XSLT\ resolves a path and our way is
+the anchor. Take:
+
+\starttyping
+/something
+something
+\stoptyping
+
+The first one anchors in the current (!) element so it will only consider direct
+children. The second one does a deep lookup and looks at the descendants as well.
+Furthermore we have a few extra shortcuts like \type {**} in \type {a/**/b} which
+represents all descendants.
+
+The expressions (between square brackets) has to be valid \LUA\ and some
+preprocessing is done to resolve the built in functions. So, you might use code
+like:
+
+\starttyping
+my_lpeg_expression:match(text()) == "whatever"
+\stoptyping
+
+given that \type {my_lpeg_expression} is known. In the examples below we use the
+visualizer to show the steps. Some are shown more than once as part of a set.
+
+\stopsection
+
+\startsection[title={special cases}]
+
+\xmllshow{}
+\xmllshow{*}
+\xmllshow{.}
+\xmllshow{/}
+
+\stopsection
+
+\startsection[title={wildcards}]
+
+\xmllshow{*}
+\xmllshow{*:*}
+\xmllshow{/*}
+\xmllshow{/*:*}
+\xmllshow{*/*}
+\xmllshow{*:*/*:*}
+
+\xmllshow{a/*}
+\xmllshow{a/*:*}
+\xmllshow{/a/*}
+\xmllshow{/a/*:*}
+
+\xmllshow{/*}
+\xmllshow{/**}
+\xmllshow{/***}
+
+\stopsection
+
+\startsection[title={multiple steps}]
+
+\xmllshow{answer}
+\xmllshow{answer/test/*}
+\xmllshow{answer/test/child::}
+\xmllshow{answer/*}
+\xmllshow{answer/*[tag()='p' and position()=1 and text()!='']}
+
+\stopsection
+
+\startsection[title={pitfals}]
+
+\xmllshow{[oneof(lower(@encoding),'tex','context','ctx')]}
+\xmllshow{.[oneof(lower(@encoding),'tex','context','ctx')]}
+
+\stopsection
+
+\startsection[title={more special cases}]
+
+\xmllshow{**}
+\xmllshow{*}
+\xmllshow{..}
+\xmllshow{.}
+\xmllshow{//}
+\xmllshow{/}
+
+\xmllshow{**/}
+\xmllshow{**/*}
+\xmllshow{**/.}
+\xmllshow{**//}
+
+\xmllshow{*/}
+\xmllshow{*/*}
+\xmllshow{*/.}
+\xmllshow{*//}
+
+\xmllshow{/**/}
+\xmllshow{/**/*}
+\xmllshow{/**/.}
+\xmllshow{/**//}
+
+\xmllshow{/*/}
+\xmllshow{/*/*}
+\xmllshow{/*/.}
+\xmllshow{/*//}
+
+\xmllshow{./}
+\xmllshow{./*}
+\xmllshow{./.}
+\xmllshow{.//}
+
+\xmllshow{../}
+\xmllshow{../*}
+\xmllshow{../.}
+\xmllshow{..//}
+
+\stopsection
+
+\startsection[title={more wildcards}]
+
+\xmllshow{one//two}
+\xmllshow{one/*/two}
+\xmllshow{one/**/two}
+\xmllshow{one/***/two}
+\xmllshow{one/x//two}
+\xmllshow{one//x/two}
+\xmllshow{//x/two}
+
+\stopsection
+
+\startsection[title={special axis}]
+
+\xmllshow{descendant::whocares/ancestor::whoknows}
+\xmllshow{descendant::whocares/ancestor::whoknows/parent::}
+\xmllshow{descendant::whocares/ancestor::}
+\xmllshow{child::something/child::whatever/child::whocares}
+\xmllshow{child::something/child::whatever/child::whocares|whoknows}
+\xmllshow{child::something/child::whatever/child::(whocares|whoknows)}
+\xmllshow{child::something/child::whatever/child::!(whocares|whoknows)}
+\xmllshow{child::something/child::whatever/child::(whocares)}
+\xmllshow{child::something/child::whatever/child::(whocares)[position()>2]}
+\xmllshow{child::something/child::whatever[position()>2][position()=1]}
+\xmllshow{child::something/child::whatever[whocares][whocaresnot]}
+\xmllshow{child::something/child::whatever[whocares][not(whocaresnot)]}
+\xmllshow{child::something/child::whatever/self::whatever}
+
+There is also \type {last-match::} that starts with the last found set of nodes.
+This can save some runtime when you do lots of tests combined with a same check
+afterwards.
+
+\stopsection
+
+\startsection[title={some more examples}]
+
+\xmllshow{/something/whatever}
+\xmllshow{something/whatever}
+\xmllshow{/**/whocares}
+\xmllshow{whoknows/whocares}
+\xmllshow{whoknows}
+\xmllshow{whocares[contains(text(),'f') or contains(text(),'g')]}
+\xmllshow{whocares/first()}
+\xmllshow{whocares/last()}
+\xmllshow{whatever/all()}
+\xmllshow{whocares/position(2)}
+\xmllshow{whocares/position(-2)}
+\xmllshow{whocares[1]}
+\xmllshow{whocares[-1]}
+\xmllshow{whocares[2]}
+\xmllshow{whocares[-2]}
+\xmllshow{whatever[3]/attribute(id)}
+\xmllshow{whatever[2]/attribute('id')}
+\xmllshow{whatever[3]/text()}
+\xmllshow{/whocares/first()}
+\xmllshow{/whocares/last()}
+
+\xmllshow{xml://whatever/all()}
+\xmllshow{whatever/all()}
+\xmllshow{//whocares}
+\xmllshow{..[2]}
+\xmllshow{../*[2]}
+
+\xmllshow{/(whocares|whocaresnot)}
+\xmllshow{/!(whocares|whocaresnot)}
+\xmllshow{/!whocares}
+
+\xmllshow{/interface/command/command(xml:setups:register)}
+\xmllshow{/interface/command[@name='xxx']/command(xml:setups:typeset)}
+\xmllshow{/arguments/*}
+\xmllshow{/sequence/first()}
+\xmllshow{/arguments/text()}
+\xmllshow{/sequence/variable/first()}
+\xmllshow{/interface/define[@name='xxx']/first()}
+\xmllshow{/parameter/command(xml:setups:parameter:measure)}
+
+\xmllshow{/(*:library|figurelibrary)/*:figure/*:label}
+\xmllshow{/(*:library|figurelibrary)/figure/*:label}
+\xmllshow{/(*:library|figurelibrary)/figure/label}
+\xmllshow{/(*:library|figurelibrary)/figure:*/label}
+
+\xmlshow {whatever//br[tag(1)='br']}
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title=Examples]
+
+\startsection[title=attribute chains]
+
+In \CSS, when an attribute is not present, the parent element is checked, and when
+not found again, the lookup follows the chain till a match is found or the root is
+reached. The following example demonstrates how such a chain lookup works.
+
+\startbuffer[test]
+<something mine="1" test="one" more="alpha">
+ <whatever mine="2" test="two">
+ <whocares mine="3">
+ <!-- this is a test -->
+ </whocares>
+ </whatever>
+</something>
+\stopbuffer
+
+\typebuffer[test]
+
+We apply the following setups to this tree:
+
+\startbuffer[setups]
+\startxmlsetups xml:common
+ [
+ \xmlchainatt{#1}{mine},
+ \xmlchainatt{#1}{test},
+ \xmlchainatt{#1}{more},
+ \xmlchainatt{#1}{none}
+ ]\par
+\stopxmlsetups
+
+\startxmlsetups xml:something
+ something: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:whatever
+ whatever: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:whocares
+ whocares: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{#1}{something|whatever|whocares}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-1}{xml:mysetups}
+
+\xmlprocessbuffer{example-1}{test}{}
+\stopbuffer
+
+\typebuffer[setups]
+
+This gives:
+
+\start
+ \getbuffer[setups]
+\stop
+
+\stopsection
+
+\startsection[title=conditional setups]
+
+Say that we have this code:
+
+\starttyping
+\xmldoifelse {#1} {/what[@a='1']} {
+ \xmlfilter {#1} {/what/command('xml:yes')}
+} {
+ \xmlfilter {#1} {/what/command('xml:nop')}
+}
+\stoptyping
+
+Here we first determine if there is a child \type {what} with attribute \type {a}
+set to \type {1}. Depending on the outcome again we check the child nodes for
+being named \type {what}. A faster solution which also takes less code is this:
+
+\starttyping
+\xmlfilter {#1} {/what[@a='1']/command('xml:yes','xml:nop')}
+\stoptyping
+
+\stopsection
+
+\startsection[title=manipulating]
+
+Assume that we have the following \XML\ data:
+
+\startbuffer[test]
+<A>
+ <B>right</B>
+ <B>wrong</B>
+</A>
+\stopbuffer
+
+\typebuffer[test]
+
+But, instead of \type {right} we want to see \type {okay}. We can do that with a
+finalizer:
+
+\startbuffer
+\startluacode
+local rehash = {
+ ["right"] = "okay",
+}
+
+function xml.finalizers.tex.Okayed(collected,what)
+ for i=1,#collected do
+ if what == "all" then
+ local str = xml.text(collected[i])
+ context(rehash[str] or str)
+ else
+ context(str)
+ end
+ end
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxmlsetups xml:A
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:B
+ (It's \xmlfilter{#1}{./Okayed("all")})
+\stopxmlsetups
+
+\startxmlsetups xml:testsetups
+ \xmlsetsetup{#1}{A|B}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-2}{xml:testsetups}
+\xmlprocessbuffer{example-2}{test}{}
+\stopbuffer
+
+\typebuffer
+
+The result is: \start \inlinebuffer \stop
+
+\stopsection
+
+\startsection[title=cross referencing]
+
+A rather common way to add cross references to \XML\ files is to borrow the
+asymmetrical id's from \HTML. This means that one cannot simply use a value
+of (say) \type {href} to locate an \type {id}. The next example came up on
+the \CONTEXT\ mailing list.
+
+\startbuffer[test]
+<doc>
+ <p>Text
+ <a href="#fn1" class="footnoteref" id="fnref1"><sup>1</sup></a> and
+ <a href="#fn2" class="footnoteref" id="fnref2"><sup>2</sup></a>
+ </p>
+ <div class="footnotes">
+ <hr />
+ <ol>
+ <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li>
+ <li id="fn2"><p>A second footnote.<a href="#fnref2">↩</a></p></li>
+ </ol>
+ </div>
+</doc>
+\stopbuffer
+
+\typebuffer[test]
+
+We give two variants for dealing with such references. The first solution does
+lookups and depending on the size of the file can be somewhat inefficient.
+
+\startbuffer
+\startxmlsetups xml:doc
+ \blank
+ \xmlflush{#1}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:p
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:footnote
+ (variant 1)\footnote
+ {\xmlfirst
+ {example-3-1}
+ {div[@class='footnotes']/ol/li[@id='\xmlrefatt{#1}{href}']}}
+\stopxmlsetups
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup{#1}{p|doc}{xml:*}
+ \xmlsetsetup{#1}{a[@class='footnoteref']}{xml:footnote}
+ \xmlsetsetup{#1}{div[@class='footnotes']}{xml:nothing}
+\stopxmlsetups
+
+\xmlresetdocumentsetups{*}
+\xmlregisterdocumentsetup{example-3-1}{xml:initialize}
+
+\xmlprocessbuffer{example-3-1}{test}{}
+\stopbuffer
+
+\typebuffer
+
+This will typeset two footnotes.
+
+\getbuffer
+
+The second variant collects the references so that the time spend on lookups is
+less.
+
+\startbuffer
+\startxmlsetups xml:doc
+ \blank
+ \xmlflush{#1}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:p
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startluacode
+ userdata.notes = {}
+\stopluacode
+
+\startxmlsetups xml:collectnotes
+ \ctxlua{userdata.notes['\xmlrefatt{#1}{id}'] = '#1'}
+\stopxmlsetups
+
+\startxmlsetups xml:footnote
+ (variant 2)\footnote
+ {\xmlflush
+ {\cldcontext{userdata.notes['\xmlrefatt{#1}{href}']}}}
+\stopxmlsetups
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup{#1}{p|doc}{xml:*}
+ \xmlsetsetup{#1}{a[@class='footnoteref']}{xml:footnote}
+ \xmlfilter{#1}{div[@class='footnotes']/ol/li/command(xml:collectnotes)}
+ \xmlsetsetup{#1}{div[@class='footnotes']}{}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-3-2}{xml:initialize}
+
+\xmlprocessbuffer{example-3-2}{test}{}
+\stopbuffer
+
+\typebuffer
+
+This will again typeset two footnotes:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=mapping values]
+
+One way to process options \type {frame} in the example below is to map the
+values to values known by \CONTEXT.
+
+\startbuffer[test]
+<a>
+ <nattable frame="on">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+ <nattable frame="off">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+ <nattable frame="no">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+</a>
+\stopbuffer
+
+\typebuffer[test]
+
+\startbuffer
+\startxmlsetups xml:a
+ \xmlflush{#1}
+\stopxmlsetups
+
+\xmlmapvalue {nattable:frame} {on} {on}
+\xmlmapvalue {nattable:frame} {yes} {on}
+\xmlmapvalue {nattable:frame} {off} {off}
+\xmlmapvalue {nattable:frame} {no} {off}
+
+\startxmlsetups xml:nattable
+ \startplacetable[title=#1]
+ \setupTABLE[frame=\xmlval{nattable:frame}{\xmlatt{#1}{frame}}{on}]%
+ \bTABLE
+ \xmlflush{#1}
+ \eTABLE
+ \stopplacetable
+\stopxmlsetups
+
+\startxmlsetups xml:tr
+ \bTR
+ \xmlflush{#1}
+ \eTR
+\stopxmlsetups
+
+\startxmlsetups xml:td
+ \bTD
+ \xmlflush{#1}
+ \eTD
+\stopxmlsetups
+
+\startxmlsetups xml:testsetups
+ \xmlsetsetup{example-4}{a|nattable|tr|td|}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-4}{xml:testsetups}
+
+\xmlprocessbuffer{example-4}{test}{}
+\stopbuffer
+
+The \type {\xmlmapvalue} mechanism is rather efficient and involves a minimum
+of testing.
+
+\typebuffer
+
+We get:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=using \LUA]
+
+In this example we demonstrate how you can delegate rendering to \LUA. We
+will construct a so called extreme table. The input is:
+
+\startbuffer[demo]
+<?xml version="1.0" encoding="utf-8"?>
+
+<a>
+ <b> <c>1</c> <d>Text</d> </b>
+ <b> <c>2</c> <d>More text</d> </b>
+ <b> <c>2</c> <d>Even more text</d> </b>
+ <b> <c>2</c> <d>And more</d> </b>
+ <b> <c>3</c> <d>And even more</d> </b>
+ <b> <c>2</c> <d>The last text</d> </b>
+</a>
+\stopbuffer
+
+\typebuffer[demo]
+
+The processor code is:
+
+\startbuffer[process]
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{a|b|c|d}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+We color a sequence of the same titles (numbers here) differently. The first
+solution remembers the last title:
+
+\startbuffer
+\startxmlsetups xml:a
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_ba}
+\stopxmlsetups
+
+\startluacode
+local lasttitle = nil
+
+function xml.functions.test_ba(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ context.startxcell {
+ background = "color",
+ backgroundcolor = lasttitle == title and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ lasttitle = title
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The \type {embeddedxtable} environment is needed because the table is picked up
+as argument.
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+The second implemetation remembers what titles are already processed so here we
+can color the last one too.
+
+\startbuffer
+\startxmlsetups xml:a
+ \ctxlua{xml.functions.reset_bb()}
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_bb}
+\stopxmlsetups
+
+\startluacode
+local titles
+
+function xml.functions.reset_bb(t)
+ titles = { }
+end
+
+function xml.functions.test_bb(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ context.startxcell {
+ background = "color",
+ backgroundcolor = titles[title] and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ titles[title] = true
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+A solution without any state variable is given below.
+
+\startbuffer
+\startxmlsetups xml:a
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_bc}
+\stopxmlsetups
+
+\startluacode
+function xml.functions.test_bc(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ local okay = xml.text(t,"./preceding-sibling::/[-1]") == title
+ context.startxcell {
+ background = "color",
+ backgroundcolor = okay and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+Here is a solution that delegates even more to \LUA. The previous variants were
+actually not that safe with repect to special characters and didn't handle
+nested elements either but the next one does.
+
+\startbuffer[demo]
+<?xml version="1.0" encoding="utf-8"?>
+
+<a>
+ <b> <c>#1</c> <d>Text</d> </b>
+ <b> <c>#2</c> <d>More text</d> </b>
+ <b> <c>#2</c> <d>Even more text</d> </b>
+ <b> <c>#2</c> <d>And more</d> </b>
+ <b> <c>#3</c> <d>And even more</d> </b>
+ <b> <c>#2</c> <d>Something <i>nested</i> </d> </b>
+</a>
+\stopbuffer
+
+\typebuffer[demo]
+
+We also need to map the \type {i} element.
+
+\startbuffer
+\startxmlsetups xml:a
+ \starttexcode
+ \xmlfunction{#1}{test_a}
+ \stoptexcode
+\stopxmlsetups
+
+\startxmlsetups xml:c
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:d
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:i
+ {\em\xmlflush{#1}}
+\stopxmlsetups
+
+\startluacode
+function xml.functions.test_a(t)
+ context.startxtable()
+ local previous = false
+ for b in xml.collected(lxml.getid(t),"/b") do
+ context.startxrow()
+ local current = xml.text(b,"/c")
+ context.startxcell {
+ background = "color",
+ backgroundcolor = (previous == current) and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ lxml.first(b,"/c")
+ context.stopxcell()
+ context.startxcell()
+ lxml.first(b,"/d")
+ context.stopxcell()
+ previous = current
+ context.stopxrow()
+ end
+ context.stopxtable()
+end
+\stopluacode
+
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{a|b|c|d|i}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+The question is, do we really need \LUA ? Often we don't, apart maybe from an
+occasional special finalizer. A pure \TEX\ solution is given next:
+
+\startbuffer
+\startxmlsetups xml:a
+ \glet\MyPreviousTitle\empty
+ \glet\MyCurrentTitle \empty
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \startxrow
+ \xmlflush{#1}
+ \stopxrow
+\stopxmlsetups
+
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \doifelse {\MyPreviousTitle} {\MyCurrentTitle} {
+ \startxcell
+ [background=color,
+ backgroundcolor=colorone,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ } {
+ \glet\MyPreviousTitle\MyCurrentTitle
+ \startxcell
+ [background=color,
+ backgroundcolor=colortwo,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ }
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:d
+ \startxcell
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:i
+ {\em\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{*}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+You can even save a few lines of code:
+
+\starttyping
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \startxcell
+ [background=color,
+ backgroundcolor=color\ifx\MyPreviousTitle\MyCurrentTitle one\else two\fi,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+ \glet\MyPreviousTitle\MyCurrentTitle
+\stopxmlsetups
+\stoptyping
+
+Or if you prefer:
+
+\starttyping
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \doifelse {\MyPreviousTitle} {\MyCurrentTitle} {
+ \xmlsetup{#1}{xml:c:one}
+ } {
+ \xmlsetup{#1}{xml:c:two}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:c:one
+ \startxcell
+ [background=color,
+ backgroundcolor=colorone,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:c:two
+ \startxcell
+ [background=color,
+ backgroundcolor=colortwo,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+ \global\let\MyPreviousTitle\MyCurrentTitle
+\stopxmlsetups
+\stoptyping
+
+These examples demonstrate that it doesn't hurt to know a little bit of \TEX\
+programming: defining macros and basic comparisons can come in handy. There are
+examples in the test suite, you can peek in the source code, you can consult
+the wiki or you can just ask on the list.
+
+\stopsection
+
+\startsection[title=last match]
+
+For the next example we use the following \XML\ input:
+
+\startbuffer[demo]
+<?xml version "1.0"?>
+<document>
+ <section id="1">
+ <content>
+ <p>first</p>
+ <p>second</p>
+ </content>
+ </section>
+ <section id="2">
+ <content>
+ <p>third</p>
+ <p>fourth</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+\typebuffer[demo]
+
+If you check if some element is present and then act accordingly, you can
+end up with doing the same lookup twice. Although it might sound inefficient,
+in practice it's often not measureable.
+
+\startbuffer
+\startxmlsetups xml:demo:document
+ \type{\xmlall{#1}{/section[@id='2']/content/p}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlall{#1}{/section[@id='2']/content/p}
+ }
+ \type{\xmllastmatch}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmllastmatch
+ }
+ \type{\xmlall{#1}{last-match::}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlall{#1}{last-match::}
+ }
+ \type{\xmlfilter{#1}{last-match::/command(xml:demo:p)}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlfilter{#1}{last-match::/command(xml:demo:p)}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \quad\xmlflush{#1}\endgraf
+\stopxmlsetups
+
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{document|p}{xml:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-6}{xml:demo:base}
+
+\xmlprocessbuffer{example-6}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+In the second check we just flush the last match, so effective we do an \type
+{\xmlall} here. The third and fourth alternatives demonstrate how we can use
+\type {last-match} as axis. The gain is 10\% or more on the lookup but of course
+typesetting often takes relatively more time than the lookup.
+
+\startpacked
+\getbuffer
+\stoppacked
+
+\stopsection
+
+\stopchapter
+
+\stopbodymatter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex
new file mode 100644
index 000000000..a41282622
--- /dev/null
+++ b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex
@@ -0,0 +1,1235 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+
+\usemodule[art-01,abr-02]
+
+\definecolor[red] [darkred]
+\definecolor[green] [darkgreen]
+\definecolor[blue] [darkblue]
+\definecolor[yellow] [darkyellow]
+\definecolor[magenta][darkmagenta]
+\definecolor[cyan] [darkcyan]
+
+\setupexternalfigures
+ [location={local,default}]
+
+\setupbodyfont
+ [10pt]
+
+\setuptyping
+ [color=darkyellow]
+
+\setuptype
+ [color=darkcyan]
+
+% \setupnumbering
+% [alternative=doublesided]
+
+\setuphead
+ [section]
+ [color=darkmagenta]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=Extreme Tables,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Extreme Tables,
+ extra=ConTeXt MkIV,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage ;
+ fill Page enlarged 2mm withcolor magenta/4 ;
+ pickup pencircle scaled 2mm ;
+ numeric n ; n := bbheight Page ;
+ forever :
+ n := n / 1.5 ;
+ draw bottomboundary Page shifted (0, n) withcolor 2yellow/3 withtransparency (1,0.5) ;
+ draw topboundary Page shifted (0,-n) withcolor 2yellow/3 withtransparency (1,0.5) ;
+ exitif n < 2cm ;
+ endfor ;
+ numeric n ; n := bbheight Page ;
+ forever :
+ n := n / 1.5 ;
+ draw leftboundary Page shifted ( n,0) withcolor 2cyan/3 withtransparency (1,0.5) ;
+ draw rightboundary Page shifted (-n,0) withcolor 2cyan/3 withtransparency (1,0.5) ;
+ exitif n < 2cm ;
+ endfor ;
+ picture p, q, r ;
+ p := textext("\ssbf\WORD{\documentvariable{title}}") xsized (bbheight Page - 2cm) rotated 90 ;
+ q := textext("\ssbf\WORD{\documentvariable{author}}") ysized 1cm ;
+ r := textext("\ssbf\WORD{\documentvariable{extra}}") xsized bbwidth q ;
+ draw anchored.rt (p, center rightboundary Page shifted (-1cm,0cm)) withcolor white ;
+ draw anchored.bot(q, center bottomboundary Page shifted ( 1cm,4.4cm)) withcolor white ;
+ draw anchored.bot(r, center bottomboundary Page shifted ( 1cm,2.8cm)) withcolor white ;
+ StopPage ;
+
+\stopMPpage
+
+% \page[empty] \setuppagenumber[start=1]
+
+\startsubject[title={Contents}]
+
+\placelist[section][criterium=all,interaction=all]
+
+\stopsubject
+
+\startsection[title={Introduction}]
+
+This is a short introduction to yet another table mechanism built in \CONTEXT. It
+is a variant of the so called natural tables but it has a different
+configuration. Also, the implementation is completely different. The reason for
+writing it is that in one of our projects we had to write styles for documents
+that had tables spanning 30 or more pages and apart from memory constraints this
+is quite a challenge for the other mechanisms, if only because splitting them
+into successive floats is not possible due to limitations of \TEX. The extreme
+table mechanism can handle pretty large tables and split them too. As each cell
+is basically a \type {\framed} and as we need to do two passes over the table,
+this mechanism is not the fastest but it is some two times faster than the
+natural tables mechanism, and in most cases can be used instead.
+
+\stopsection
+
+\startsection[title={The structure}]
+
+The structure of the tables is summarized here. There can be the usual head, body
+and foot specifications and we also support the optional header in following
+pages.
+
+\starttyping
+\definextable [tag] | [tag][parent]
+\setupxtable [settings] | [tag][settings]
+
+\startxtable[tag|settings]
+ \startxtablehead|next|body|foot[tag|settings]
+ \startxrowgroup[tag|settings]
+ \startxrow[settings]
+ \startxcellgroup[tag|settings]
+ \startxcell[settings] ... \stopxcell
+ \stopxcellgroup
+ \stopxrow
+ \startxrowgroup
+ \stopxtablehead|next|body|foot
+\stopxtable
+\stoptyping
+
+Contrary to what you might expect, the definition command defines a new set of
+command. You don't need to use this in order to set up a new settings
+environment. Settings and definitions can inherit so you can build a chain of
+parent|-|child settings. The grouping is nothing more than a switch to a new set
+of settings.
+
+\stopsection
+
+\startsection[title={Direct control}]
+
+A simple table with just frames is defined as follows:
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell one \stopxcell
+ \startxcell two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+You can pass parameters for tuning the table:
+
+\startbuffer
+\startxtable[offset=1cm]
+ \startxrow
+ \startxcell one \stopxcell
+ \startxcell two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+You can (for as much as they make sense) use the same settings as the \type
+{\framed} command, as long as you keep in mind that messing with the frame
+related offsets can have side effects.
+
+\stopsection
+
+\startsection[title={Sets of settings}]
+
+Instead of directly passing settings you can use a predefined set. Of course you
+can also combine these methods.
+
+\startbuffer
+\definextable
+ [myxtable]
+
+\definextable
+ [myxtable:important]
+ [myxtable]
+
+\setupxtable
+ [myxtable]
+ [width=4cm,
+ foregroundcolor=red]
+
+\setupxtable
+ [myxtable:important]
+ [background=color,
+ backgroundcolor=red,
+ foregroundcolor=white]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can use these settings in table. Although it is not really needed to define a
+set beforehand (i.e.\ you can just use the setup command) it is cleaner and more
+efficient too.
+
+\startbuffer
+\startxtable[myxtable]
+ \startxrow[foregroundcolor=green]
+ \startxcell one \stopxcell
+ \startxcell two \stopxcell
+ \startxcellgroup[foregroundcolor=blue]
+ \startxcell tree \stopxcell
+ \startxcell four \stopxcell
+ \stopxcellgroup
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcellgroup[myxtable:important]
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxcellgroup
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+The overhead of (chained) settings is quite acceptable and it helps to keep the
+source of the table uncluttered from specific settings.
+
+\stopsection
+
+\startsection[title={Defining}]
+
+If needed you can define your own encapsulating commands. The following example
+demonstrates this:
+
+\startbuffer
+\definextable[mytable]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+We now can use the \type{mytable} wrapper:
+
+\startbuffer
+\startmytable[height=4cm,width=8cm,align={middle,lohi}]
+ \startxrow
+ \startxcell test \stopxcell
+ \stopxrow
+\stopmytable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+One drawback of using buffers is that they don't play well in macro definitions.
+In that case you need to use the following wrapper:
+
+\startbuffer
+\starttexdefinition MyTable #1#2#3#4
+ \startembeddedxtable
+ \startxrow
+ \startxcell #1 \stopxcell
+ \startxcell #2 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell #3 \stopxcell
+ \startxcell #4 \stopxcell
+ \stopxrow
+ \stopembeddedxtable
+\stoptexdefinition
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This macro is used as any other macro with arguments:
+
+\startbuffer
+\MyTable{one}{two}{three}{four}
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Stretching}]
+
+If you don't give the width of a cell, the widest natural size will be taken.
+Otherwise the given width applies to the whole column.
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm] two \stopxcell
+ \startxcell[width=3cm] tree \stopxcell
+ \startxcell[width=4cm] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+You can let the cells stretch so that the whole width of the text area is taken.
+
+\startbuffer[one]
+\startxtable[option=stretch]
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm] two \stopxcell
+ \startxcell[width=3cm] tree \stopxcell
+ \startxcell[width=4cm] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer[one]
+
+The available left over space is equally distributed among the cells.
+
+\startlinecorrection[blank] \getbuffer[one] \stoplinecorrection
+
+\startbuffer[two]
+\startxtable[option={stretch,width}]
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm] two \stopxcell
+ \startxcell[width=3cm] tree \stopxcell
+ \startxcell[width=4cm] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+An alternative is to distribute the space proportionally:
+
+\typebuffer[two]
+
+\startlinecorrection[blank] \getbuffer[two] \stoplinecorrection
+
+Just to stress the difference we show both alongside now:
+
+\startlinecorrection[blank]
+ \getbuffer[one]
+ \blank
+ \getbuffer[two]
+\stoplinecorrection
+
+You can specify the width of a cell with each cell but need to keep into mind
+that that value is then used for the whole column:
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[width=1em] one \stopxcell
+ \startxcell[width=2em] two \stopxcell
+ \startxcell[width=3em] tree \stopxcell
+ \startxcell[width=4em] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+You can enforce that larger columns win via the \type {option} parameter:
+
+\startbuffer
+\startxtable[option=max]
+ \startxrow
+ \startxcell[width=1em] one \stopxcell
+ \startxcell[width=2em] two \stopxcell
+ \startxcell[width=3em] tree \stopxcell
+ \startxcell[width=4em] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Spacing}]
+
+It is possible to separate the cells by horizontal and/or vertical space. As an
+example we create a setup.
+
+\startbuffer
+\setupxtable
+ [myztable]
+ [option=stretch,
+ foregroundcolor=blue,
+ columndistance=10pt,
+ leftmargindistance=20pt,
+ rightmargindistance=30pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can use the \type {textwidth} parameter to set a specific maximum width. We
+now apply the previous settings to an extreme table:
+
+\startbuffer
+\startxtable[myztable]
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm,distance=5pt] two \stopxcell
+ \startxcell[width=3cm] tree \stopxcell
+ \startxcell[width=4cm] four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[width=1cm] alpha \stopxcell
+ \startxcell[width=2cm] beta \stopxcell
+ \startxcell[width=3cm] gamma \stopxcell
+ \startxcell[width=4cm] delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+As you can see here, we can still locally overload the settings but keep in mind
+that these apply to the whole column then, not to the specific cell.
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+Vertical spacing is (currently) setup differently, i.e.\ as an argument to the
+\type {\blank} command.
+
+\startbuffer
+\startxtable[spaceinbetween=medium]
+ \startxrow
+ \startxcell one \stopxcell
+ \startxcell two \stopxcell
+ \startxcell tree \stopxcell
+ \startxcell four \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \startxcell gamma \stopxcell
+ \startxcell delta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+Specifying spacing this way improves consistency with the rest of the document
+spacing.
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Spanning}]
+
+Of course we can span cells horizontally as well as vertically. Future versions
+might provide more advanced options but the basics work okay.
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell one \stopxcell
+ \startxcell[nx=2] two + three \stopxcell
+ \startxcell four \stopxcell
+ \startxcell five \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[nx=3] alpha + beta + gamma \stopxcell
+ \startxcell[nx=2] delta + epsilon \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+This spans a few cells horizontally:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+The next example gives a span in two directions:
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell alpha 1 \stopxcell
+ \startxcell beta 1 \stopxcell
+ \startxcell gamma 1 \stopxcell
+ \startxcell delta 1 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha 2 \stopxcell
+ \startxcell[nx=2,ny=2] whatever \stopxcell
+ \startxcell delta 2 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha 3 \stopxcell
+ \startxcell delta 3 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha 4 \stopxcell
+ \startxcell beta 4 \stopxcell
+ \startxcell gamma 4 \stopxcell
+ \startxcell delta 4 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+Of course, spanning is always a compromise but the best fit found by this
+mechanism takes natural width, given width and available space into account.
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Partitioning}]
+
+You can partition a table as follows:
+
+\startbuffer
+\startxtable
+ \startxtablehead
+ \startxrow
+ \startxcell head one \stopxcell
+ \startxcell head two \stopxcell
+ \startxcell head tree \stopxcell
+ \startxcell head four \stopxcell
+ \stopxrow
+ \stopxtablehead
+ \startxtablenext
+ \startxrow
+ \startxcell next one \stopxcell
+ \startxcell next two \stopxcell
+ \startxcell next tree \stopxcell
+ \startxcell next four \stopxcell
+ \stopxrow
+ \stopxtablenext
+ \startxtablebody
+ \startxrow
+ \startxcell body one \stopxcell
+ \startxcell body two \stopxcell
+ \startxcell body tree \stopxcell
+ \startxcell body four \stopxcell
+ \stopxrow
+ \stopxtablebody
+ \startxtablefoot
+ \startxrow
+ \startxcell foot one \stopxcell
+ \startxcell foot two \stopxcell
+ \startxcell foot tree \stopxcell
+ \startxcell foot four \stopxcell
+ \stopxrow
+ \stopxtablefoot
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+There can be multiple such partitions and they are collected in head, next, body
+and foot groups. Normally the header ends up at the beginning and the footer at
+the end. When a table is split, the first page gets the header and the following
+pages the next one.
+
+You can let headers and footers be repeated by setting the \type {header}
+and|/|or \type {footer} parameters to \type {repeat}.
+
+\starttyping
+\setupxtable
+ [split=yes,
+ header=repeat,
+ footer=repeat]
+\stoptyping
+
+The table can be flushed in the running text but also in successive
+floats. Given that the table is in a buffer:
+
+\starttyping
+\placetable[here,split]{A big table.}{\getbuffer}
+\stoptyping
+
+When you specify \type {split} as \type {yes} the caption is taken into account
+when calculating the available space.
+
+There are actually three different split methods. The \type {yes} option works in
+text mode as well as in floats, but in text mode no headers and footers get
+repeated. If you want that feature in a text flush you have to set \type {split}
+to \type {repeat} as well.
+
+You can keep rows together by passing a \type {samepage} directive. This
+parameter can get the values \type {before}, \type {after} and \type {both}.
+
+\starttyping
+\startxtable[split=yes]
+ \startxrow \startxcell \tttf .01. \stopxcell \stopxrow
+ \startxrow \startxcell \tttf .... \stopxcell \stopxrow
+ \startxrow \startxcell \tttf \red .21. \stopxcell \stopxrow
+ \startxrow[samepage=both] \startxcell \tttf \red .22. \stopxcell \stopxrow
+ \startxrow[samepage=both] \startxcell \tttf \red .23. \stopxcell \stopxrow
+ \startxrow \startxcell \tttf .... \stopxcell \stopxrow
+ \startxrow \startxcell \tttf .99. \stopxcell \stopxrow
+\stopxtable
+\stoptyping
+
+\stopsection
+
+\startsection[title={Options}]
+
+On the average a table will come out okay but you need to keep in mind that when
+(complex) spans are used the results can be less that optimal. However, as
+normally one pays attention to creating tables, the amount of control provided
+often makes it possible to get what you want.
+
+In the following situations, the first cell width is determined by the span. It
+is possible to make a more clever analyzer but we need to keep in mind that in
+the same column there can be entries that span a different amount of columns. Not
+only would that be inefficient but it would also be rather unpredictable unless
+you know exactly what happens deep down. The following two examples demonstrate
+default behaviour.
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[nx=3]
+ 1/2/3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[nx=3]
+ 1 / 2 / 3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In practice you will set the width of the columns, as in:
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[nx=3]
+ 1/2/3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[width=\dimexpr\textwidth/3] 1 \stopxcell
+ \startxcell[width=\dimexpr\textwidth/3] 2 \stopxcell
+ \startxcell[width=\dimexpr\textwidth/3] 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+But, if you want you can control the enforced width by setting an option:
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[nx=3,option=tight]
+ 1/2/3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[nx=3,option=tight]
+ 1 / 2 / 3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There is also a global setting:
+
+\startbuffer
+\startxtable[option=tight]
+ \startxrow
+ \startxcell[nx=3]
+ 1/2/3
+ \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\startsection[title={Nesting}]
+
+Extreme tables can be nested but you need to keep an eye on inheritance here as
+the inner table uses the settings from the encapsulating cell. The widths and
+heights of the inner table default to \type {fit}. We could cook up a more
+complex nesting model but this one is easy to follow.
+
+\startbuffer
+\startxtable
+ \startxrow
+ \startxcell[offset=0pt]
+ \startxtable[background=color,backgroundcolor=green,
+ foregroundcolor=white,offset=1ex]
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm] two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[width=3cm] alpha \stopxcell
+ \startxcell[width=4cm] beta \stopxcell
+ \stopxrow
+ \stopxtable
+ \stopxcell
+ \startxcell two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell
+ \startxtable[background=color,backgroundcolor=red,
+ foregroundcolor=white]
+ \startxrow
+ \startxcell one \stopxcell
+ \startxcell two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \stopxrow
+ \stopxtable
+ \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer
+
+Here we just manipulate the offset a bit.
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Buffers}]
+
+When you don't want to clutter your document source too much buffers can be if
+help:
+
+\startbuffer
+\startbuffer[test]
+\startxtable
+ \startxrow
+ \startxcell[width=1cm] one \stopxcell
+ \startxcell[width=2cm] two \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell alpha \stopxcell
+ \startxcell beta \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+\stopbuffer
+
+\typebuffer \getbuffer
+
+One way of getting this table typeset is to say:
+
+\starttyping
+\getbuffer[test]
+\stoptyping
+
+Normally this is quite okay. However, internally extreme tables become also
+buffers. If you don't like the overhead of this double buffering you can use the
+following command:
+
+\starttyping
+\processxtablebuffer[test]
+\stoptyping
+
+This can save you some memory and runtime, but don't expect miracles. Also, this
+way of processing does not support nested tables (unless \type {{}} is used).
+
+\stopsection
+
+\startsection[title={XML}]
+
+The following example demonstrates that we can use this mechanism in \XML\ too.
+The example was provided by Thomas Schmitz. First we show how a table looks like
+in \XML:
+
+\startbuffer[test]
+<table>
+ <tablerow>
+ <tablecell>
+ One
+ </tablecell>
+ <tablecell>
+ Two
+ </tablecell>
+ </tablerow>
+ <tablerow>
+ <tablecell>
+ <b>Three</b>
+ </tablecell>
+ <tablecell>
+ Four
+ </tablecell>
+ </tablerow>
+</table>
+\stopbuffer
+
+\typebuffer[test]
+
+We need to map these elements to setups:
+
+\startbuffer
+\startxmlsetups xml:testsetups
+ \xmlsetsetup{main}{b|table|tablerow|tablecell}{xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:testsetups}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The setups themselves are rather simple as we don't capture any attributes.
+
+\startbuffer
+\startxmlsetups xml:b
+ \bold{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:table
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:tablerow
+ \startxrow
+ \xmlflush{#1}
+ \stopxrow
+\stopxmlsetups
+
+\startxmlsetups xml:tablecell
+ \startxcell
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We now process the example. Of course it will also work for files.
+
+\startbuffer
+ \xmlprocessbuffer{main}{test}{}
+\stopbuffer
+
+\typebuffer
+
+The result is:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\stopsection
+
+\startsection[title={Natural tables}]
+
+For the impatient a small additional module is provided that remaps the natural
+table commands onto extreme tables:
+
+\startbuffer
+\usemodule[ntb-to-xtb]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+After that:
+
+\startbuffer
+\bTABLE
+ \bTR
+ \bTD[background=color,backgroundcolor=red] one \eTD
+ \bTD[width=2cm] two \eTD
+ \eTR
+ \bTR
+ \bTD[width=5cm] alpha \eTD
+ \bTD[background=color,backgroundcolor=yellow] beta \eTD
+ \eTR
+\eTABLE
+\stopbuffer
+\stopbuffer
+
+\typebuffer
+
+Will come out as:
+
+\startlinecorrection[blank]
+\getbuffer
+\stoplinecorrection
+
+You can restore and remap the commands with the following helpers:
+
+\starttyping
+\restoreTABLEfromxtable
+\mapTABLEtoxtable
+\stoptyping
+
+Of course not all functionality of the natural tables maps onto similar
+functionality of extreme tables, but on the average the result will look rather
+similar.
+
+\stopsection
+
+\startsection[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title={Examples}]
+
+On the following pages we show some examples of (experimental) features. For this
+we will use the usual quotes from Ward, Tufte and Davis etc.\ that you can find
+in the distribution.
+
+\page
+
+\startbuffer
+\startxtable[bodyfont=6pt]
+ \startxrow
+ \startxcell \input ward \stopxcell
+ \startxcell \input tufte \stopxcell
+ \startxcell \input davis \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxtable[bodyfont=6pt,option=width]
+ \startxrow
+ \startxcell \input ward \stopxcell
+ \startxcell \input tufte \stopxcell
+ \startxcell \input davis \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\page
+
+\startbuffer
+\startxtable[bodyfont=6pt]
+ \startxrow
+ \startxcell \externalfigure[cow.pdf][width=3cm] \stopxcell
+ \startxcell \input tufte \stopxcell
+ \startxcell \input davis \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxtable[bodyfont=6pt,option=width]
+ \startxrow
+ \startxcell \externalfigure[cow.pdf][width=3cm] \stopxcell
+ \startxcell \input tufte \stopxcell
+ \startxcell \input davis \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\page
+
+\startbuffer
+\startxtable[option=stretch]
+ \startxrow
+ \startxcell bla \stopxcell
+ \startxcell bla bla \stopxcell
+ \startxcell bla bla bla \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxtable[option={stretch,width}]
+ \startxrow
+ \startxcell bla \stopxcell
+ \startxcell bla bla \stopxcell
+ \startxcell bla bla bla \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\page
+
+\startbuffer
+\setupxtable[suffix][align=middle,foregroundcolor=red]
+\setupxtable[blabla][foregroundstyle=slanted]
+\setupxtable[crap] [foregroundcolor=blue]
+\setupxtable[bold] [crap][foregroundstyle=bold]
+
+\startxtable % [frame=off]
+ \startxtablehead
+ \startxrow[bold]
+ \startxcell[suffix] head a \stopxcell
+ \startxcell[blabla] head b \stopxcell
+ \startxcell head c \stopxcell
+ \stopxrow
+ \stopxtablehead
+ \startxtablebody
+ \startxrow
+ \startxcell[suffix][ny=2] cell a 1 \stopxcell
+ \startxcell cell b 1 \stopxcell
+ \startxcell cell c 1 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell cell b 2 \stopxcell
+ \startxcell cell c 2 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[suffix] cell a 3 \stopxcell
+ \startxcell cell b 3 \stopxcell
+ \startxcell cell c 3 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[suffix] cell a 4 \stopxcell
+ \startxcell cell b 4 \stopxcell
+ \startxcell cell c 4 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell[suffix] cell a 5 \stopxcell
+ \startxcell cell b 5 \stopxcell
+ \startxcell cell c 5 \stopxcell
+ \stopxrow
+ \stopxtablebody
+\stopxtable
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\page
+
+\startbuffer
+\startxtable[option=stretch]
+ \startxrow
+ \startxcell[option=fixed] first cell \stopxcell
+ \startxcell 101 \stopxcell
+ \startxcell 102 \stopxcell
+ \startxcell 103 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 2\high{nd} cell \stopxcell
+ \startxcell a \stopxcell
+ \startxcell b \stopxcell
+ \startxcell c \stopxcell
+ \stopxrow
+\stopxtable
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\page
+
+\startbuffer[demo]
+\startxtable
+\startxrow
+ \startxcell[demo][nx=4] 1 / 2 / 3 / 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell[demo][nx=3] 1 / 2 / 3 \stopxcell
+ \startxcell 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell 1 \stopxcell
+ \startxcell[demo][nx=3] 2 / 3 / 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell[demo][nx=2] 1 / 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \startxcell 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell 1 \stopxcell
+ \startxcell[demo][nx=2] 2 / 3 \stopxcell
+ \startxcell 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell[demo][nx=2] 3 / 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell[demo][nx=2] 1 / 2 \stopxcell
+ \startxcell[demo][nx=2] 3 / 4 \stopxcell
+\stopxrow
+\startxrow
+ \startxcell 1 \stopxcell
+ \startxcell 2 \stopxcell
+ \startxcell 3 \stopxcell
+ \startxcell 4 \stopxcell
+\stopxrow
+\stopxtable
+\stopbuffer
+
+\startbuffer[tight]
+\setupxtable[demo][option=tight]
+\stopbuffer
+
+\startbuffer[normal]
+\setupxtable[demo][option=]
+\stopbuffer
+
+\typebuffer[demo]
+
+\page
+
+\typebuffer[tight] \start \getbuffer[tight,demo] \stop
+\typebuffer[normal] \start \getbuffer[normal,demo] \stop
+
+% \ruledhbox{\getbuffer[normal,demo]}
+
+\stopdocument