summaryrefslogtreecommitdiff
path: root/doc/context/presentations/context
diff options
context:
space:
mode:
Diffstat (limited to 'doc/context/presentations/context')
-rw-r--r--doc/context/presentations/context/2017/context-2017-css-selectors.pdfbin0 -> 130327 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-css-selectors.tex238
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-chaintest.pdfbin0 -> 15666 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-chaintest.tex49
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-kerntest.pdfbin0 -> 15259 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-kerntest.tex25
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-pairtest.pdfbin0 -> 15703 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-pairtest.tex26
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-singletest.pdfbin0 -> 15672 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-singletest.tex25
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-spacetest.pdfbin0 -> 15716 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-spacetest.tex43
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-substitutiontest.pdfbin0 -> 17567 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features-substitutiontest.tex141
-rw-r--r--doc/context/presentations/context/2017/context-2017-features.pdfbin0 -> 58197 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-features.tex153
-rw-r--r--doc/context/presentations/context/2017/context-2017-performance.pdfbin0 -> 51156 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-performance.tex65
-rw-r--r--doc/context/presentations/context/2017/context-2017-synctex.pdfbin0 -> 58760 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-synctex.tex102
-rw-r--r--doc/context/presentations/context/2017/context-2017-tables.pdfbin0 -> 46060 bytes
-rw-r--r--doc/context/presentations/context/2017/context-2017-tables.tex175
-rw-r--r--doc/context/presentations/context/2019/context-2019-lmtx.pdfbin0 -> 41345 bytes
-rw-r--r--doc/context/presentations/context/2019/context-2019-lmtx.tex201
24 files changed, 1243 insertions, 0 deletions
diff --git a/doc/context/presentations/context/2017/context-2017-css-selectors.pdf b/doc/context/presentations/context/2017/context-2017-css-selectors.pdf
new file mode 100644
index 000000000..d4575f0e7
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-css-selectors.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-css-selectors.tex b/doc/context/presentations/context/2017/context-2017-css-selectors.tex
new file mode 100644
index 000000000..845206655
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-css-selectors.tex
@@ -0,0 +1,238 @@
+\usemodule[present-lines]
+
+\definecolor[maincolor][b=.4]
+
+\setuppapersize[A4][A4]
+
+\startdocument[title=CSS selectors,subtitle={\CONTEXT\ 2017 Maibach}]
+
+\startbuffer[selector-001]
+<?xml version="1.0" ?>
+
+<a>
+ <b class="one">b.one</b>
+ <b class="two">b.two</b>
+ <b class="one two">b.one.two</b>
+ <b class="three">b.three</b>
+ <b id="first">b#first</b>
+ <c>c</c>
+ <d>d e</d>
+ <e>d e</e>
+ <e>d e e</e>
+ <d>d f</d>
+ <f foo="bar">@foo = bar</f>
+ <f bar="foo">@bar = foo</f>
+ <f bar="foo1">@bar = foo1</f>
+ <f bar="foo2">@bar = foo2</f>
+ <f bar="foo3">@bar = foo3</f>
+ <f bar="foo+4">@bar = foo+4</f>
+ <g>g</g>
+ <g><gg><d>g gg d</d></gg></g>
+ <g><gg><f>g gg f</f></gg></g>
+ <g><gg><f class="one">g gg f.one</f></gg></g>
+ <g>g</g>
+ <g><gg><f class="two">g gg f.two</f></gg></g>
+ <g><gg><f class="three">g gg f.three</f></gg></g>
+ <g><f class="one">g f.one</f></g>
+ <g><f class="three">g f.three</f></g>
+ <h whatever="four five six">@whatever = four five six</h>
+</a>
+\stopbuffer
+
+\startbuffer[selector-002]
+<?xml version="1.0" ?>
+
+<document>
+ <title class="one" >title 1</title>
+ <title class="two" >title 2</title>
+ <title class="one" >title 3</title>
+ <title class="three">title 4</title>
+</document>
+\stopbuffer
+
+\startbuffer[selector-003]
+<?xml version="1.0" ?>
+
+<document>
+ <title class="one">title 1</title>
+ <subtitle class="sub">title 1.1</subtitle>
+ <title class="two">title 2</title>
+ <subtitle class="sub">title 2.1</subtitle>
+ <title class="one">title 3</title>
+ <subtitle class="sub">title 3.1</subtitle>
+ <title class="two">title 4</title>
+ <subtitle class="sub">title 4.1</subtitle>
+</document>
+\stopbuffer
+
+\xmlloadbuffer{selector-001}{selector-001}
+\xmlloadbuffer{selector-002}{selector-002}
+\xmlloadbuffer{selector-003}{selector-003}
+
+\startxmlsetups xml:selector:demo
+ \ignorespaces\xmlverbatim{#1}\par
+\stopxmlsetups
+
+\unexpanded\def\showCSSdemo#1#2%
+ {\blank
+ \textrule{\tttf#2}
+ \startlines
+ \dontcomplain
+ \tttf \obeyspaces
+ \xmlcommand{#1}{#2}{xml:selector:demo}
+ \stoplines
+ \blank}
+
+\startchapter[title=Needed or not?]
+
+\startitemize
+\startitem
+ used in \HTML\ styling
+\stopitem
+\startitem
+ a bit different from the path based method
+\stopitem
+\startitem
+ shortcuts for filtering by attribute
+\stopitem
+\startitem
+ class filtering is special because it checks for list
+\stopitem
+\startitem
+ one can select more at the same time
+\stopitem
+\startitem
+ performance is okay compared to path lookup
+\stopitem
+\startitem
+ selectors go between curly braces:
+ \starttyping
+ \xmlall {#1} {{foo bar .whatever, bar foo .whatever}}
+ \stoptyping
+\stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Supported methods]
+
+The following methods are supported:
+
+\starttabulate[|T||]
+\NC \type {element} \NC all tags element \NC \NR
+\NC \type {element-1 > element-2} \NC all tags element-2 with parent tag element-1 \NC \NR
+\NC \type {element-1 + element-2} \NC all tags element-2 preceded by tag element-1 \NC \NR
+\NC \type {element-1 ~ element-2} \NC all tags element-2 preceded by tag element-1 \NC \NR
+\NC \type {element-1 element-2} \NC all tags element-2 inside tag element-1 \NC \NR
+\NC \type {[attribute]} \NC has attribute \NC \NR
+\NC \type {[attribute=value]} \NC attribute equals value\NC \NR
+\NC \type {[attribute~=value]} \NC attribute contains value (space is separator) \NC \NR
+\NC \type {[attribute^="value"]} \NC attribute starts with value \NC \NR
+\NC \type {[attribute$="value"]} \NC attribute ends with value \NC \NR
+\NC \type {[attribute*="value"]} \NC attribute contains value \NC \NR
+\NC \type {.class} \NC has class \NC \NR
+\NC \expanded{\type {\letterhash id}} \NC has id \NC \NR
+\NC \type {:nth-child(n)} \NC the child at index n \NC \NR
+\NC \type {:nth-last-child(n)} \NC the child at index n from the end \NC \NR
+\NC \type {:first-child} \NC the first child \NC \NR
+\NC \type {:last-child} \NC the last child \NC \NR
+\NC \type {:nth-of-type(n)} \NC the match at index n \NC \NR
+\NC \type {:nth-last-of-type(n)} \NC the match at index n from the end \NC \NR
+\NC \type {:first-of-type} \NC the first match \NC \NR
+\NC \type {:last-of-type} \NC the last match \NC \NR
+\NC \type {:only-of-type} \NC the only match or nothing \NC \NR
+\NC \type {:only-child} \NC the only child or nothing \NC \NR
+\NC \type {:empty} \NC only when empty \NC \NR
+\NC \type {:root} \NC the whole tree \NC \NR
+\stoptabulate
+
+\stopchapter
+
+\startchapter[title=Filtering classes]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{.one}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{.one, .two}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{.one, .two, \letterhash first}} \page
+
+\stopchapter
+
+\startchapter[title=Filtering attributes]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{[foo], [bar=foo]}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{[bar\lettertilde=foo]}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{[bar\letterhat="foo"]}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{[whatever\lettertilde="five"]}} \page
+
+\stopchapter
+
+\startchapter[title=Combining methods]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g f .one, g f .three}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g > f .one, g > f .three}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{d + e}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{d ~ e}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{d ~ e, g f .one, g f .three}} \page
+
+\stopchapter
+
+% \startchapter[title=Negation]
+
+% \typebuffer[selector-001] \showCSSdemo{selector-001}{{:not([whatever\lettertilde="five"])}} \page
+% \typebuffer[selector-001] \showCSSdemo{selector-001}{{:not(d)}} \page
+
+\stopchapter
+
+\startchapter[title=Child selectors]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-child(3)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-last-child(3)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g:nth-of-type(3)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g:nth-last-of-type(3)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:first-child}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:last-child}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{e:first-of-type}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{gg d:only-of-type}} \page
+
+\stopchapter
+
+\startchapter[title=Simple formulas]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-child(even)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-child(odd)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-child(3n+1)}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{a:nth-child(2n+3)}} \page
+
+\stopchapter
+
+\startchapter[title=Special cases]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g:empty}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g:root}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{*}} \page
+
+\stopchapter
+
+\startchapter[title=Combinations]
+
+\typebuffer[selector-001] \showCSSdemo{selector-001}{{g gg f .one}} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{g/gg/f[@class='one']} \page
+\typebuffer[selector-001] \showCSSdemo{selector-001}{g/{gg f .one}} \page
+
+\stopchapter
+
+\startchapter[title=Comparison (1)]
+
+\typebuffer[selector-002] \showCSSdemo{selector-002}{{document title .one, document title .three}} \page
+\typebuffer[selector-002] \showCSSdemo{selector-002}{/document/title[(@class='one') or (@class='three')]} \page
+
+\stopchapter
+
+\startchapter[title=Comparison (2)]
+
+\typebuffer[selector-003] \showCSSdemo{selector-003}{{document title .one + subtitle, document title .two + subtitle}}
+
+{\em A combined filter triggers a sorting pass!}
+
+\stopchapter
+
+\stopdocument
diff --git a/doc/context/presentations/context/2017/context-2017-features-chaintest.pdf b/doc/context/presentations/context/2017/context-2017-features-chaintest.pdf
new file mode 100644
index 000000000..1da70b355
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-chaintest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-chaintest.tex b/doc/context/presentations/context/2017/context-2017-features-chaintest.tex
new file mode 100644
index 000000000..58d1040f2
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-chaintest.tex
@@ -0,0 +1,49 @@
+\setupbodyfont[dejavu]
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "chaintest",
+ type = "chainposition",
+ lookups = {
+ {
+ type = "pair",
+ data = {
+ A = { B = { { -30, 0, -50, 0 } } },
+ B = { C = { { -30, 0, -50, 0 } } },
+ },
+ },
+ {
+ type = "pair",
+ data = {
+ D = { E = { { -30, 0, -50, 0 } } },
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ current = { { "A"}, { "B"}, { "C" }, { "D" }, { "E" }, { "F" } },
+ lookups = { false, false, false, 2 },
+ },
+ {
+ current = { { "A" }, { "B" }, { "C" } },
+ lookups = { 1, 1 },
+ },
+ },
+ }
+ }
+\stopluacode
+
+\starttext
+
+\definecolor[tgray][s=.5,t=.5,a=1] \showfontkerns \showglyphs
+
+\definefontfeature[chaintest] [mode=node,chaintest=yes]
+
+\definedfont[file:dejavu-serif.ttf*chaintest @ 48pt]
+
+\startTEXpage[offset=10pt,foregroundcolor=tgray]
+ ABCDEF
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features-kerntest.pdf b/doc/context/presentations/context/2017/context-2017-features-kerntest.pdf
new file mode 100644
index 000000000..5a8d0d38d
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-kerntest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-kerntest.tex b/doc/context/presentations/context/2017/context-2017-features-kerntest.tex
new file mode 100644
index 000000000..795af8b5f
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-kerntest.tex
@@ -0,0 +1,25 @@
+\setupbodyfont[dejavu]
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "kerntest",
+ type = "kern",
+ data = {
+ A = { B = -500 },
+ }
+ }
+\stopluacode
+
+\starttext
+
+\definecolor[tgray][s=.5,t=.5,a=1] \showfontkerns \showglyphs
+
+\definefontfeature[kerntest] [mode=node,kerntest=yes]
+
+\definedfont[file:dejavu-serif.ttf*kerntest @ 48pt]
+
+\startTEXpage[offset=10pt,foregroundcolor=tgray]
+ ABCDEF
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features-pairtest.pdf b/doc/context/presentations/context/2017/context-2017-features-pairtest.pdf
new file mode 100644
index 000000000..ba959e4f7
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-pairtest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-pairtest.tex b/doc/context/presentations/context/2017/context-2017-features-pairtest.tex
new file mode 100644
index 000000000..e84851e7d
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-pairtest.tex
@@ -0,0 +1,26 @@
+\setupbodyfont[dejavu]
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "pairtest",
+ type = "pair",
+ data = {
+ A = { B = { { -30, 50, -50, 0 } } },
+ B = { C = { { -30, 0, -50, 0 } } },
+ }
+ }
+\stopluacode
+
+\starttext
+
+\definecolor[tgray][s=.5,t=.5,a=1] \showfontkerns \showglyphs
+
+\definefontfeature[pairtest] [mode=node,pairtest=yes]
+
+\definedfont[file:dejavu-serif.ttf*pairtest @ 48pt]
+
+\startTEXpage[offset=10pt,foregroundcolor=tgray]
+ ABCDEF
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features-singletest.pdf b/doc/context/presentations/context/2017/context-2017-features-singletest.pdf
new file mode 100644
index 000000000..624ee547f
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-singletest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-singletest.tex b/doc/context/presentations/context/2017/context-2017-features-singletest.tex
new file mode 100644
index 000000000..fb0326fa3
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-singletest.tex
@@ -0,0 +1,25 @@
+\setupbodyfont[dejavu]
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "singletest",
+ type = "single",
+ data = {
+ B = { -30, 0, -50, 0 },
+ }
+ }
+\stopluacode
+
+\starttext
+
+\definecolor[tgray][s=.5,t=.5,a=1] \showfontkerns \showglyphs
+
+\definefontfeature[singletest] [mode=node,singletest=yes]
+
+\definedfont[file:dejavu-serif.ttf*singletest @ 48pt]
+
+\startTEXpage[offset=10pt,foregroundcolor=tgray]
+ ABCDEF
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features-spacetest.pdf b/doc/context/presentations/context/2017/context-2017-features-spacetest.pdf
new file mode 100644
index 000000000..9a2c7b012
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-spacetest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-spacetest.tex b/doc/context/presentations/context/2017/context-2017-features-spacetest.tex
new file mode 100644
index 000000000..48ad4e32f
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-spacetest.tex
@@ -0,0 +1,43 @@
+\setupbodyfont[dejavu]
+
+\startluacode
+
+ -- we could populate this one mostly automatic if needed
+ -- but also expect a font to have such kerns
+
+ local kern = -50
+ local pair = { [32] = kern }
+
+ fonts.handlers.otf.addfeature {
+ name = "kern", -- spacekerns assume kern (for now)
+ type = "kern",
+ data = {
+ D = pair,
+ E = pair,
+ F = pair,
+ [32] = {
+ D = kern,
+ E = kern,
+ F = kern,
+ },
+ }
+ }
+
+\stopluacode
+
+\starttext
+
+\enabledirectives[fonts.injections.useitalics] % use italic kerns for tracing
+
+\definecolor[tgray][s=.5,t=.5,a=1] \showfontkerns \showfontitalics \showglyphs
+
+\definefontfeature[kern] [mode=node,kern=yes,spacekerns=yes]
+
+\definedfont[file:dejavu-serif.ttf*kern @ 48pt]
+\definedfont[file:dejavu-serif.ttf*default @ 48pt]
+
+\startTEXpage[offset=10pt,foregroundcolor=tgray]
+ A B C D E F G H
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features-substitutiontest.pdf b/doc/context/presentations/context/2017/context-2017-features-substitutiontest.pdf
new file mode 100644
index 000000000..b95e531ec
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-substitutiontest.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features-substitutiontest.tex b/doc/context/presentations/context/2017/context-2017-features-substitutiontest.tex
new file mode 100644
index 000000000..9e2657a6e
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features-substitutiontest.tex
@@ -0,0 +1,141 @@
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "singlesubstitution",
+ type = "substitution",
+ data = {
+ a = "X",
+ b = "P",
+ }
+ }
+\stopluacode
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "alternatesubstitution",
+ type = "alternate",
+ data = {
+ a = { "X", "Y" },
+ b = { "P", "Q" },
+ }
+ }
+\stopluacode
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "multiplesubstitution",
+ type = "multiple",
+ data = {
+ a = { "X", "Y" },
+ b = { "P", "Q" },
+ }
+ }
+\stopluacode
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "ligaturesubstitution",
+ type = "ligature",
+ data = {
+ ['1'] = { "a", "b" },
+ ['2'] = { "d", "a" },
+ }
+ }
+\stopluacode
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "chainsubstitution-1",
+ type = "chainsubstitution",
+ -- flags = { false, false, false, false },
+ lookups = {
+ {
+ type = "substitution",
+ data = {
+ ["b"] = "B",
+ ["c"] = "C",
+ },
+ },
+ },
+ -- steps = {
+ -- {
+ -- rules = {
+ -- {
+ -- before = { { "a" } },
+ -- current = { { "b", "c" } },
+ -- lookups = { 1 },
+ -- },
+ -- },
+ -- },
+ -- },
+ data = {
+ rules = {
+ {
+ before = { { "a" } },
+ current = { { "b", "c" } },
+ lookups = { 1 },
+ },
+ },
+ },
+ }
+\stopluacode
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "chainsubstitution-2",
+ type = "chainsubstitution",
+ prepend = 1,
+ lookups = {
+ {
+ type = "multiple",
+ data = {
+ ["f"] = { "f", 0x200C },
+ },
+ },
+ {
+ type = "substitution",
+ data = {
+ ["a"] = "1",
+ ["b"] = "2",
+ ["c"] = "3",
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ current = { { "f" }, { "f" } },
+ lookups = { 1 },
+ },
+ {
+ current = { { "a" }, { "b" }, { "c" } },
+ lookups = { 2, false, 2 },
+ },
+ },
+ }
+ }
+\stopluacode
+
+\definefontfeature[singlesubstitution] [singlesubstitution=yes]
+\definefontfeature[alternatesubstitution][alternatesubstitution=2]
+\definefontfeature[multiplesubstitution] [multiplesubstitution=yes]
+\definefontfeature[ligaturesubstitution] [ligaturesubstitution=yes]
+\definefontfeature[chainsubstitution-1] [chainsubstitution-1=yes]
+\definefontfeature[chainsubstitution-2] [chainsubstitution-2=yes]
+
+\setupbodyfont[dejavu]
+
+\starttext
+
+\definedfont[Serif*default] \showfontkerns \showfontitalics \showglyphs
+
+\startTEXpage
+ abracadabra\par
+ {\addff {singlesubstitution}abracadabra\par}
+ {\addff{alternatesubstitution}abracadabra\par}
+ {\addff {multiplesubstitution}abracadabra\par}
+ {\addff {ligaturesubstitution}abracadabra\par}
+ {\addff {chainsubstitution-1}abracadabra\par}
+ {\addff {chainsubstitution-2}effe abcdef !f\par}
+\stopTEXpage
+
+\stoptext
diff --git a/doc/context/presentations/context/2017/context-2017-features.pdf b/doc/context/presentations/context/2017/context-2017-features.pdf
new file mode 100644
index 000000000..e70afbed7
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-features.tex b/doc/context/presentations/context/2017/context-2017-features.tex
new file mode 100644
index 000000000..772de4ff6
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-features.tex
@@ -0,0 +1,153 @@
+\usemodule[present-lines]
+
+\definecolor[maincolor][r=.4,g=.4]
+
+\startdocument[title=Font features,subtitle={\CONTEXT\ 2017 Maibach}]
+
+\startchapter[title=What are they]
+
+\startitemize
+ \startitem
+ built in substitution that is often optional like ligatures but for some
+ languages mandate
+ \stopitem
+ \startitem
+ built in positioning that is assumed to be applied like kerning, mark
+ anchoring cursive
+ \stopitem
+ \startitem
+ external properties like coloring, spacing, fallback combinations
+ \stopitem
+ \startitem
+ engine related tricks like expansion and protrusion
+ \stopitem
+ \startitem
+ tracing options
+ \stopitem
+ \startitem
+ whatever you like \unknown\ so let me know
+ \stopitem
+ \blank[2*big]
+ \startitem
+ so in \CONTEXT\ we have font features (driven by font) and pseudo
+ features (driven by additional needs)
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Substitution]
+
+\startitemize
+ \startitem
+ single: replace one by another
+ \stopitem
+ \startitem
+ alternate: replace one by one of a set
+ \stopitem
+ \startitem
+ multiple: replace one by multiple others
+ \stopitem
+ \startitem
+ ligature: replace multiple by one shape
+ \stopitem
+ \blank[2*big]
+ \startitem
+ contextual lookups and replacements with look back and look ahead
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Positioning]
+
+\startitemize
+ \startitem
+ single: repositioning a glyph (with optional marks), this includes
+ traditional kerning
+ \stopitem
+ \startitem
+ pairwise: repositioning two adjacent glyphs (with optional marks)
+ \stopitem
+ \startitem
+ anchoring: often used for marks to base glyphs, ligatures and other marks
+ \stopitem
+ \startitem
+ attachment: often used for cursive scripts, pasting glyphs in a word together
+ \stopitem
+ \blank[2*big]
+ \startitem
+ contextual lookups and positioning with look back and look ahead
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Related]
+
+\startitemize
+ \startitem
+ analyze: needed for dealing with features that need information about
+ initial, medial, final and isolated properties
+ \stopitem
+ \startitem
+ reordering: needed for script like devanagari
+ \stopitem
+ \startitem
+ spacing: deals with for positioning glyphs and spaces
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Pitfalls]
+
+\startitemize
+ \startitem
+ solutions for similar tasks can be quite different which makes tracing
+ or checking sometimes hard (many ways to make ligatures)
+ \stopitem
+ \startitem
+ order matters and demands careful font design but it is hard to predict
+ all cases
+ \stopitem
+ \startitem
+ a sloppy font design can result in a performance hit or huge fonts
+ \stopitem
+ \startitem
+ features can be bugged and fonts vendors seldom have an update policy
+ \stopitem
+ \startitem
+ shapers can differ due to assumptions, heuristics, interpreting
+ specifications, bugs, \unknown
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Examples]
+ \startitem
+ all kind of substitutions: \type {2017-features-substitutiontest.tex}
+ \stopitem
+ \startitem
+ simple inter character kerns: \type {2017-features-kerntest.tex}
+ \stopitem
+ \startitem
+ single character positioning: \type {2017-features-singletest.tex}
+ \stopitem
+ \startitem
+ pairwise character positioning: \type {2017-features-pairtest.tex}
+ \stopitem
+ \startitem
+ contextual positioning: \type {2017-features-contexttest.tex}
+ \stopitem
+ \startitem
+ kerning with space (glue): \type {2017-features-spacetest.tex}
+ \stopitem
+\startitemize
+
+\stopitemize
+
+\stopchapter
+
+\stopdocument
diff --git a/doc/context/presentations/context/2017/context-2017-performance.pdf b/doc/context/presentations/context/2017/context-2017-performance.pdf
new file mode 100644
index 000000000..9656e2f0e
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-performance.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-performance.tex b/doc/context/presentations/context/2017/context-2017-performance.tex
new file mode 100644
index 000000000..458a051a5
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-performance.tex
@@ -0,0 +1,65 @@
+\usemodule[present-lines]
+
+\definecolor[maincolor][g=.4,b=.4]
+
+\startdocument[title=Performance,subtitle={\CONTEXT\ 2017 Maibach}]
+
+\startchapter[title=Why bother]
+
+\startitemize
+ \startitem because we don't want to waste time waiting \stopitem
+ \startitem because I get tired of ignorance related complaints \stopitem
+ \startitem because it (sometimes) can be a nice puzzle to improve performance \stopitem
+ \startitem because it occasionally reviewing makes code better \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Possible bottlenecks]
+
+\startitemize
+ \startitem starting up \stopitem
+ \startitem loading fonts \stopitem
+ \startitem processing features \stopitem
+ \startitem applying trickery \stopitem
+ \startitem enabling tracing \stopitem
+ \blank[2*big]
+ \startitem fonts \stopitem
+ \startitem \LUA \stopitem
+ \startitem images \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Measurements]
+
+\startitemize
+ \startitem how long does a run take \stopitem
+ \startitem how does the number of pages matter \stopitem
+ \startitem how many runs are needed \stopitem
+ \blank[2*big]
+ \startitem start-up time \stopitem
+ \startitem processing pages \stopitem
+ \startitem finishing the document \stopitem
+ \startitem the console used \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Examples]
+
+\startitemize
+\startitem
+ see \goto{onandon-performance.pdf}[file(onandon-performance.pdf)] for timings
+\stopitem
+\startitem
+ you can try \type {--timing} to see where \LUA\ spends it time
+\stopitem
+\startitem
+ analyzing with \type {--profile} can give some indication (but is slow)
+\stopitem
+\stopitemize
+
+\stopchapter
+
+\stopdocument
diff --git a/doc/context/presentations/context/2017/context-2017-synctex.pdf b/doc/context/presentations/context/2017/context-2017-synctex.pdf
new file mode 100644
index 000000000..d5b39f095
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-synctex.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-synctex.tex b/doc/context/presentations/context/2017/context-2017-synctex.tex
new file mode 100644
index 000000000..0ca6dfd0e
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-synctex.tex
@@ -0,0 +1,102 @@
+% \setupsynctex
+% [state=start]
+
+% \enabletrackers
+% [system.synctex.visualize]
+
+\usemodule[present-lines]
+
+\definecolor[maincolor][r=.6]
+
+\startdocument[title=\SYNCTEX,subtitle={\CONTEXT\ 2017 Maibach}]
+
+\startchapter[title=What is \SYNCTEX]
+
+\startitemize
+ \startitem it is a mechanism for going back from viewer to editor \stopitem
+ \startitem it uses an extra (zipped) output file \stopitem
+ \startitem it adds an overhead of 5 to 15 percent runtime \stopitem
+ \startitem it is designed with a specific macro package in mind \stopitem
+ \startitem the rather generic approach works okay for simple document layouts \stopitem
+ \startitem but it often fails for projects that use multiple files\stopitem
+ \startitem and that moves information around like \XML\ encoded files \stopitem
+\stopitemize
+
+\startchapter[title=Disclaimer]
+
+\startitemize
+ \startitem till recently it was supported in \CONTEXT\ as-it-was \stopitem
+ \startitem there were no compliants, so it must have worked ok for most users \stopitem
+ \startitem we never used it ourselves because of mentioned reasons \stopitem
+ \startitem we only wanted to support it when it works ok in projects \stopitem
+ \startitem (think of thousands of \XML\ with deeply nested inclusions in one document) \stopitem
+ \startitem but what we support now is purely based on personal experiences \stopitem
+ \startitem we don't use it ourselves so feedback is welcome \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=What we do]
+
+\startitemize
+ \startitem the normal \SYNCTEX\ mechanism is disabled \stopitem
+ \startitem when told so, \CONTEXT\ will kick in its own code \stopitem
+ \startitem this is done by using \LUA\ code to set the right information \stopitem
+ \startitem only source files that make sense are dealt with \stopitem
+ \startitem this protects the styles from unwanted changes \stopitem
+ \startitem within reasonable bounds \XML\ is supported \stopitem
+ \startitem this also includes nested documents \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=How it works]
+
+\startitemize
+ \startitem we only mark text and don't bother about the rest \stopitem
+ \startitem we collapse information about whole stretches \stopitem
+ \startitem the extra file is therefore not that large \stopitem
+ \startitem so we can do without compression \stopitem
+ \startitem some care is needed to avoid interference with the editors parser \stopitem
+ \startitem (read: we need to get rid of the rather complex and heuristics) \stopitem
+ \startitem (read: it would be nice to have a simple robust parser option) \stopitem
+ \startitem there are flaws but I will look into them when motivated \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=What the user gets]
+
+\startitemize
+ \startitem a way to turn it on:
+ \starttyping
+ \setupsynctex[state=start]
+ \stoptyping
+ \stopitem
+ \startitem control over methods:
+ \starttyping
+ \setupsynctex[method=max]
+ \stoptyping
+ \stopitem
+ \startitem visual tracing:
+ \starttyping
+ \enabletrackers[system.synctex.visualize]
+ \stoptyping
+ \stopitem
+ \startitem some low level commands:
+ \starttyping
+ \synctexblockfilename{filename}
+ \synctexsetfilename {filename}
+ \synctexresetfilename
+ \synctexpause
+ \synctexresume
+ \stoptyping
+ \stopitem
+\stopitemize
+
+% \enabletrackers[system.synctex.xml]
+% \enabledirectives[system.synctex.details]
+
+\stopchapter
+
+\stopdocument
diff --git a/doc/context/presentations/context/2017/context-2017-tables.pdf b/doc/context/presentations/context/2017/context-2017-tables.pdf
new file mode 100644
index 000000000..299c21f39
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-tables.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2017/context-2017-tables.tex b/doc/context/presentations/context/2017/context-2017-tables.tex
new file mode 100644
index 000000000..6f2822668
--- /dev/null
+++ b/doc/context/presentations/context/2017/context-2017-tables.tex
@@ -0,0 +1,175 @@
+\usemodule[present-lines]
+
+\definecolor[maincolor][r=.4,b=.4]
+
+\startdocument[title=Tables,subtitle={\CONTEXT\ 2017 Maibach}]
+
+\startchapter[title=Variants]
+
+\startitemize
+ \startitem
+ Good old \TABLE, a wrapper about \TEX's alignment.
+ \stopitem
+ \startitem
+ Running text, break across pages tabulates.
+ \stopitem
+ \startitem
+ Tables that behave like \HTML\ tables therefore called
+ natural tables.
+ \stopitem
+ \startitem
+ A variant on this that is more easy to extend, tagged
+ extreme tables.
+ \stopitem
+ \startitem
+ A low profile linetable mechanism that can span pages
+ and breaks well.
+ \stopitem
+ \startitem
+ A way to make huge tables without overflowing \TEX\ too
+ soon.
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=\TABLE]
+
+\startitemize
+ \startitem
+ Based on the \TABLE\ macro package.
+ \stopitem
+ \startitem
+ Detailed control over spacing.
+ \stopitem
+ \startitem
+ Somewhat inconsistent spacing out of the box.
+ \stopitem
+ \startitem
+ Extended with extra features.
+ \stopitem
+ \startitem
+ Mostly rewritten but within the original concept.
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Tabulate]
+
+\startitemize
+ \startitem
+ Mostly meant for tables that are part of the text flow.
+ \stopitem
+ \startitem
+ Breaks paragraphs across pages.
+ \stopitem
+ \startitem
+ Sort of compatible in control with \TABLE.
+ \stopitem
+ \startitem
+ The system that I used most often.
+ \stopitem
+ \startitem
+ It uses multiple passes if needed.
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Natural tables]
+
+\startitemize
+ \startitem
+ Modelled after \HTML\ tables.
+ \stopitem
+ \startitem
+ Often used in \XML\ workflows, possibly as cals tables.
+ \stopitem
+ \startitem
+ To some extend automatic spans horizontally and vertically.
+ \stopitem
+ \startitem
+ There are a couple of (undocumented and obscure) flags that can control
+ behaviour.
+ \stopitem
+ \startitem
+ They can break cross pages if needed.
+ \stopitem
+ \startitem
+ Tables, rows and cells have framed like properties.
+ \stopitem
+ \startitem
+ Not the fastest mechanism as it used several passes (for which it
+ stores all cells).
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Extreme tables]
+
+\startitemize
+ \startitem
+ Again modelled after \HTML\ tables.
+ \stopitem
+ \startitem
+ A few less options but also some more than natural tables.
+ \stopitem
+ \startitem
+ Most work is delegated to \LUA.
+ \stopitem
+ \startitem
+ Uses buffers and therefore nesting is (as with natural tables)
+ possible but with care.
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+\startchapter[title=Line tables]
+
+\startitemize
+ \startitem
+ Written for and used in a project long ago.
+ \stopitem
+ \startitem
+ Meant for huge tables that span multiple pages horizontally
+ and vertically.
+ \stopitem
+ \startitem
+ It only can have simple colored backgrounds.
+ \stopitem
+ \startitem
+ Hardly used.
+ \stopitem
+ \startitem
+ I need to redo (or check) the implementation some day.
+ \stopitem
+\stopitemize
+
+\startchapter[title=Frame tables]
+
+\startitemize
+ \startitem
+ Written for and used for Thomas who needs real huge tables
+ generated from \XML.
+ \stopitem
+ \startitem
+ It's a single pass mechanism.
+ \stopitem
+ \startitem
+ Each cell is a framed.
+ \stopitem
+ \startitem
+ Dimensions need to be adapted when you want predictable output.
+ \stopitem
+ \startitem
+ I might extend it but within reasonable bounds.
+ \stopitem
+\stopitemize
+
+\stopchapter
+
+
+\stopdocument
diff --git a/doc/context/presentations/context/2019/context-2019-lmtx.pdf b/doc/context/presentations/context/2019/context-2019-lmtx.pdf
new file mode 100644
index 000000000..7cf257347
--- /dev/null
+++ b/doc/context/presentations/context/2019/context-2019-lmtx.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2019/context-2019-lmtx.tex b/doc/context/presentations/context/2019/context-2019-lmtx.tex
new file mode 100644
index 000000000..62dd915ad
--- /dev/null
+++ b/doc/context/presentations/context/2019/context-2019-lmtx.tex
@@ -0,0 +1,201 @@
+% macros=mkvi
+
+\usemodule[abbreviations-smallcaps]
+\usemodule[present-luatex]
+
+\logo [LUAMETATEX] {LuaMeta\TeX}
+
+\setupbodyfont[12pt]
+
+\setupalign[verytolerant]
+
+\setupdocument
+ [title={Lean and mean},
+ subtitle={\LUAMETATEX},
+ location={\ConTeXt\ meeting, September 2019},
+ author={Hans & Alan},
+ mp:title={\LUAMETATEX}]
+
+\startdocument
+
+\setupitemize[headintext]
+\setupitemize[headstyle=bold]
+
+\page \setupdocument[mp:subtitle={How it became}]
+
+\startitemize
+ \starthead {interferences:}
+ \CONTEXT, plain \TEX\ and \LATEX\ all have different demands (we want to
+ experiment and move on and users pick up fast)
+ \stophead
+ \starthead {complexity:}
+ the source tree is way too complex as is the build (we only need \LUATEX)
+ \stophead
+ \starthead {distributions:}
+ no one can guarantee stability for \CONTEXT\ (being a minor player but
+ often a bit ahead)
+ \stophead
+ \starthead {annoyances:}
+ experimental codes leads to usage outside \CONTEXT\ and that triggers
+ complaints
+ \stophead
+ \starthead {motivation:}
+ running into folks who love to stress \quotation {huge bugs} and
+ \quotation {much instability} wastes energy
+ \stophead
+ \starthead {arguments:}
+ I got tired of \quotation {you need to support this because \unknown}
+ blabla
+ \stophead
+ \starthead {nagging:}
+ like \quotation {the manual \unknown} is becoming too tiresome, so best
+ keep experiments within the \CONTEXT\ bubble
+ \stophead
+\stopitemize
+
+\page \setupdocument[mp:subtitle={What it is}]
+
+\startitemize
+ \starthead {simplification:}
+ we don't need all what is currently in the \LUATEX\ engine as we don't
+ use it
+ \stophead
+ \starthead {source:}
+ there is much less of it and we can get rid of \WEB\ artifacts
+ \stophead
+ \starthead {compilation:}
+ there was much more going on than was needed and only a few knew those
+ details
+ \stophead
+ \starthead {consistency:}
+ to guarantee consistency with \CONTEXT\ the source code will be part of
+ the source distribution (once I'm satisfied)
+ \stophead
+ \starthead {marketing:}
+ this way the relation with \CONTEXT\ and its user base is more clear
+ \stophead
+ \starthead {playground:}
+ we can move forward and experiment without the danger of running into
+ problems with non \CONTEXT\ users: \quotation {use it at your own risk}
+ \stophead
+ \starthead {possibilities:}
+ playing a bit more with the bits and pieces that are reponsible for most
+ (interfering) issues, like the the (asynchronous) page builder
+ \stophead
+\stopitemize
+
+\page \setupdocument[mp:subtitle={Implications}]
+
+\startitemize
+ \starthead {binary:}
+ there is only one relatively small binary needed (that does all things
+ needed)
+ \stophead
+ \starthead {code base:}
+ there comes an extra source tree, but it's small (compresses to around 2
+ MB)
+ \stophead
+ \starthead {user control:}
+ if needed users can compile the program so we're self contained
+ \stophead
+ \starthead {future safe:}
+ we can move forward and improve
+ \stophead
+ \starthead {modern:}
+ a code base with the latest \LUATEX, \MPLIB\ and \LUA
+ \stopitem
+ \starthead {side effect:}
+ we drop \LUAJIT\ as it doesn't keep up (and benefits are too small)
+ \stophead
+ \starthead {design:}
+ we have a better separation between the Knuthian front- and output format
+ driven backend
+ \stophead
+ \starthead {independent:}
+ there is no dependency on external libraries, we keep all we need in the
+ code base (we only use a few small third party libraries)
+ \stophead
+\stopitemize
+
+\page \setupdocument[mp:subtitle={A few notes}]
+
+\startitemize
+ \starthead {hobyism}
+ we don't need to carry the burden of everything (unless paid for it's
+ only fun and users that drives development)
+ \stophead
+ \starthead {convenience:}
+ the faster compilation makes reworking and experimenting reasonable
+ \stophead
+ \starthead {stepwise:}
+ I take my time an do string stepswise because things should not break
+ without fast recovery
+ \stophead
+ \starthead {feelgood:}
+ this all fits well into the good old \TEX\ extension model
+ \stophead
+ \starthead {eventually:}
+ when proven useful we can always push code upstream into \LUATEX
+ \stophead
+\stopitemize
+
+\page \setupdocument[mp:subtitle={Bits and pieces}]
+
+\startitemize
+ \starthead {original:}
+ the starting point is \LUATEX, original \WEB\ code, already \CWEB\ code
+ \stophead
+ \starthead {stability:}
+ after a initial stage \LUATEX\ was stepwise extended till version one
+ a few years ago
+ \stophead
+ \starthead {frozen:}
+ there were only a few changes after that but no real conceptual ones
+ \stophead
+ \starthead {engine:}
+ what is now called \LUAMETATEX\ is a reworked code base
+ \stophead
+ \starthead {graphics:}
+ also \MPLIB\ has been reworked a bit and some extensions were added
+ \stophead
+ \starthead {libraries:}
+ there are a few extra (small) helper libs, but all in the source tree
+ \stophead
+ \starthead {pplib:}
+ we already use the next version of pplib
+ \stophead
+ \starthead {pruning:}
+ and best of all, quite some not used code could go
+ \stophead
+\stopitemize
+
+\page \setupdocument[mp:subtitle={Some details}]
+
+\startitemize
+ \starthead {source tree:}
+ the code base has been regrouped, globals became more local (work in
+ progress), header files were added
+ \stophead
+ \starthead {source files:}
+ there is hardly any font related code, languages were kept, and the
+ backend code is dropped: show files
+ \stophead
+ \starthead {libraries:}
+ a few libs were added and dropped: show some
+ \stophead
+ \starthead {cmake:}
+ compilation is different: work in progress
+ \stophead
+ \starthead {mkxl:}
+ there are new files in \CONTEXT: \type {driv}, \type {lpdf}, \type {.mkxl}
+ and expect more
+ \stophead
+ \starthead {binary:}
+ there is only one stub for all
+ \stophead
+\stopitemize
+
+{\infofont during presentation: show the source tree as well as the binary directory}
+
+\stopdocument
+