diff options
Diffstat (limited to 'doc/context/presentations/context')
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 Binary files differnew file mode 100644 index 000000000..d4575f0e7 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-css-selectors.pdf 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 Binary files differnew file mode 100644 index 000000000..1da70b355 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-chaintest.pdf 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 Binary files differnew file mode 100644 index 000000000..5a8d0d38d --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-kerntest.pdf 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 Binary files differnew file mode 100644 index 000000000..ba959e4f7 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-pairtest.pdf 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 Binary files differnew file mode 100644 index 000000000..624ee547f --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-singletest.pdf 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 Binary files differnew file mode 100644 index 000000000..9a2c7b012 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-spacetest.pdf 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 Binary files differnew file mode 100644 index 000000000..b95e531ec --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features-substitutiontest.pdf 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 Binary files differnew file mode 100644 index 000000000..e70afbed7 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-features.pdf 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 Binary files differnew file mode 100644 index 000000000..9656e2f0e --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-performance.pdf 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 Binary files differnew file mode 100644 index 000000000..d5b39f095 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-synctex.pdf 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 Binary files differnew file mode 100644 index 000000000..299c21f39 --- /dev/null +++ b/doc/context/presentations/context/2017/context-2017-tables.pdf 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 Binary files differnew file mode 100644 index 000000000..7cf257347 --- /dev/null +++ b/doc/context/presentations/context/2019/context-2019-lmtx.pdf 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 + |