summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/context/documents/general/manuals/luatex.pdfbin1172111 -> 1172101 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin844063 -> 844335 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin843927 -> 844081 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin848470 -> 848652 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin839892 -> 840065 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin845690 -> 845852 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin359016 -> 359152 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-de.pdfbin438314 -> 438449 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin356523 -> 356655 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin359269 -> 359403 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin358059 -> 358192 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin357721 -> 357853 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin624504 -> 624635 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin837024 -> 837182 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin839966 -> 840149 bytes
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-appendix.tex3
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-extensions.tex20
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-features.tex74
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-formats.tex2
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-mkiv.tex2
-rw-r--r--doc/context/sources/general/manuals/cld/cld-specialcommands.tex55
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex.tex2
-rw-r--r--doc/context/sources/general/manuals/math/math-spacing.tex51
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex4
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-style.tex2
-rw-r--r--tex/context/base/mkii/cont-fil.mkii2
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-pe.mkii1
-rw-r--r--tex/context/base/mkiv/cont-fil.mkiv13
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv120
-rw-r--r--tex/context/base/mkiv/context.mkiv5
-rw-r--r--tex/context/base/mkiv/core-def.mkiv4
-rw-r--r--tex/context/base/mkiv/font-chk.lua10
-rw-r--r--tex/context/base/mkiv/mult-ini.mkiv447
-rw-r--r--tex/context/base/mkiv/page-ini.mkiv9
-rw-r--r--tex/context/base/mkiv/page-mak.mkvi17
-rw-r--r--tex/context/base/mkiv/page-sid.mkiv4
-rw-r--r--tex/context/base/mkiv/spac-grd.mkiv16
-rw-r--r--tex/context/base/mkiv/spac-ver.lua197
-rw-r--r--tex/context/base/mkiv/spac-ver.mkiv19
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin25783 -> 25807 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin252639 -> 251734 bytes
-rw-r--r--tex/context/base/mkiv/strc-mat.mkiv75
-rw-r--r--tex/context/base/mkiv/supp-box.mkiv5
-rw-r--r--tex/context/base/mkiv/tabl-ntb.mkiv38
-rw-r--r--tex/context/base/mkiv/trac-vis.lua16
-rw-r--r--tex/context/base/mkiv/typo-del.mkiv2
-rw-r--r--tex/context/interface/mkii/keys-pe.xml1
-rw-r--r--tex/context/interface/mkiv/context-en.xml5
-rw-r--r--tex/context/interface/mkiv/i-common-value.xml3
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin848470 -> 848652 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin60775 -> 60774 bytes
-rw-r--r--tex/context/modules/common/s-abbreviations-extras.tex56
-rw-r--r--tex/context/modules/common/s-abr-01.tex386
-rw-r--r--tex/context/modules/mkii/s-abr-01.mkii (renamed from tex/context/modules/common/s-abr-04.tex)22
-rw-r--r--tex/context/modules/mkii/s-abr-02.mkii (renamed from tex/context/modules/common/s-abr-02.tex)19
-rw-r--r--tex/context/modules/mkiv/m-compatible.mkiv63
-rw-r--r--tex/context/modules/mkiv/m-typesetting.mkiv22
-rw-r--r--tex/context/modules/mkiv/s-abbreviations-mixed.mkiv28
-rw-r--r--tex/context/modules/mkiv/s-abbreviations-pseudocaps.mkiv30
-rw-r--r--tex/context/modules/mkiv/s-abbreviations-smallcaps.mkiv31
-rw-r--r--tex/context/modules/mkiv/s-abbreviations-words.mkiv (renamed from tex/context/modules/common/s-abr-03.tex)18
-rw-r--r--tex/context/modules/mkiv/s-article-basic.mkiv (renamed from tex/context/modules/mkiv/s-art-01.mkiv)17
-rw-r--r--tex/context/modules/mkiv/s-fonts-kerns.mkiv215
-rw-r--r--tex/context/modules/mkiv/s-magazine-basic.mkiv (renamed from tex/context/modules/mkiv/s-mag-01.mkiv)2
-rw-r--r--tex/context/modules/mkiv/s-maps.mkiv (renamed from tex/context/modules/mkiv/s-map-10.mkiv)0
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
68 files changed, 1145 insertions, 994 deletions
diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf
index 26af7ac71..b9925775e 100644
--- a/doc/context/documents/general/manuals/luatex.pdf
+++ b/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index 3926cfac5..0d929224b 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
index 20efbd5d7..3e27696a7 100644
--- a/doc/context/documents/general/qrcs/setup-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index f1f8d70ea..320425cce 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index fa5312138..7e223100f 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index abe88638f..dbf1c98e1 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index 0b9ba505e..7a4e48567 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
index a398bf4f4..48ba62868 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index d5e6aa920..f022b0450 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index 6bba49f4c..71704b5fc 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index 935e90f49..5024c50ef 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index fa8981a63..5898f674d 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index 2fe88f804..c3a148d00 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 477fa54ac..ccff57ad6 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index b741ce78d..8fdb83307 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/doc/context/sources/general/fonts/fonts/fonts-appendix.tex b/doc/context/sources/general/fonts/fonts/fonts-appendix.tex
index ae42b10fa..2eab26a93 100644
--- a/doc/context/sources/general/fonts/fonts/fonts-appendix.tex
+++ b/doc/context/sources/general/fonts/fonts/fonts-appendix.tex
@@ -456,7 +456,7 @@ to render this version. Because fonts might have changed in the meantime, some e
might come out other than intended.
\startluacode
-local list = table.load("fonts-mkiv-usedfonts.lua")
+local list = table.load("fonts-mkiv-usedfonts.lua") or { }
local NC, NR = context.NC, context.NR
@@ -473,7 +473,6 @@ for i=1,#list do
NC() context("version") NC() context.type(version) NC() NR()
context.stoptabulate()
end
-
\stopluacode
\stopsection
diff --git a/doc/context/sources/general/fonts/fonts/fonts-extensions.tex b/doc/context/sources/general/fonts/fonts/fonts-extensions.tex
index 5800f2c57..8de29fcaf 100644
--- a/doc/context/sources/general/fonts/fonts/fonts-extensions.tex
+++ b/doc/context/sources/general/fonts/fonts/fonts-extensions.tex
@@ -931,19 +931,16 @@ effect of expanded kerns is invisible. The used definitions are:
\startplacefigure[reference=hz:natural,title={The two expansion methods compared.}]
\showfontkerns
\dontcomplain
- \enabledirectives[fonts.injections.fontkern]
\startcombination[1*3]
{\ExtremeHzFont\ruledhpack{\startoverlay {\NoHzSample} {\HzSample } \stopoverlay}} {no hz \& hz}
{\ExtremeHzFont\ruledhpack{\startoverlay {\NoHzSample} {\FullHzSample} \stopoverlay}} {no hz \& full hz}
{\ExtremeHzFont\ruledhpack{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {hz \& full hz}
\stopcombination
- \disabledirectives[fonts.injections.fontkern]
\stopplacefigure
\startplacefigure[reference=hz:zoomed,title={The two expansion methods compared (zoomed in).}]
\showfontkerns
\dontcomplain
- \enabledirectives[fonts.injections.fontkern]
\startcombination[3*3]
{\ExtremeHzFont
@@ -968,20 +965,13 @@ effect of expanded kerns is invisible. The used definitions are:
\clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {minimal: hz \& full hz}
\stopcombination
- \disabledirectives[fonts.injections.fontkern]
\stopplacefigure
-In \CONTEXT\ the \type {hz} alignment option only enables expansion of glyphs, while \type
-{fullhz} also applies it to kerns. However, in the examples here we had to explicitly enable
-font kerns in node mode:
-
-\starttyping
-\enabledirectives[fonts.injections.fontkern]
-\stoptyping
-
-It will be clear that you can just stick to using the \type {hz} directive (if
-you want expansion at all) because this directive is normally disabled and
-because most fonts are processed in node mode.
+In \CONTEXT\ the \type {hz} alignment option only enables expansion of glyphs,
+while \type {fullhz} also applies it to kerns. It will be clear that you can just
+stick to using the \type {hz} directive (if you want expansion at all) because
+this directive is normally disabled and because most fonts are processed in node
+mode.
\stopsubsubject
diff --git a/doc/context/sources/general/fonts/fonts/fonts-features.tex b/doc/context/sources/general/fonts/fonts/fonts-features.tex
index 0ecd3c9d9..73d1cd96d 100644
--- a/doc/context/sources/general/fonts/fonts/fonts-features.tex
+++ b/doc/context/sources/general/fonts/fonts/fonts-features.tex
@@ -2543,48 +2543,40 @@ unlikely to show up in future versions of the Latin Modern fonts.
\stopsection
-\startsection[title=Discretionaries]
-
-% speed test:
+% \startsection[title=Discretionaries]
%
-% \edef\tufte{\cldloadfile{tufte}}
-% \enabledirectives[otf.alwaysdisc]
-% \testfeatureonce{100}{\setbox0\hbox{\tufte \smallcaps \tufte}}\elapsedtime\par
-% \disabledirectives[otf.alwaysdisc]
-% \testfeatureonce{100}{\setbox0\hbox{\tufte \smallcaps \tufte}}\elapsedtime\par
-
-\startbuffer
-\definedfont[cambria*default]
-12\discretionary
- {3} {4} {5}%
-67\par
-12{\oldstyle\discretionary
- {3} {4} {5}}%
-67\par
-12\discretionary
- {3{\oldstyle3}} {{\oldstyle4}4} {5{\oldstyle5}5}%
-67\par
-\stopbuffer
-
-The font handler has to do some magick to get features working with and across
-discretionaries. To some extend you can use font switches inside discretionaries
-but for sure border cases are not dealt with. This works:
-
-\startlinecorrection[blank]
-\startcombination[nx=4,ny=1,location=top]
- {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {1}
- {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\hsize1mm\getbuffer}} {2}
- {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {3}
- {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\hsize1mm\getbuffer}} {4}
-\stopcombination
-\stoplinecorrection
-
-The first two examples have \type {otf.alwaysdisk} enabled, the last two have it
-disabled.
-
-\typebuffer
-
-\stopsection
+% \startbuffer
+% \definedfont[cambria*default]
+% 12\discretionary
+% {3} {4} {5}%
+% 67\par
+% 12{\oldstyle\discretionary
+% {3} {4} {5}}%
+% 67\par
+% 12\discretionary
+% {3{\oldstyle3}} {{\oldstyle4}4} {5{\oldstyle5}5}%
+% 67\par
+% \stopbuffer
+%
+% The font handler has to do some magick to get features working with and across
+% discretionaries. To some extend you can use font switches inside discretionaries
+% but for sure border cases are not dealt with. This works:
+%
+% \startlinecorrection[blank]
+% \startcombination[nx=4,ny=1,location=top]
+% {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {1}
+% {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\hsize1mm\getbuffer}} {2}
+% {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {3}
+% {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\hsize1mm\getbuffer}} {4}
+% \stopcombination
+% \stoplinecorrection
+%
+% The first two examples have \type {otf.alwaysdisk} enabled, the last two have it
+% disabled.
+%
+% \typebuffer
+%
+% \stopsection
\startsection[title=Some remarks]
diff --git a/doc/context/sources/general/fonts/fonts/fonts-formats.tex b/doc/context/sources/general/fonts/fonts/fonts-formats.tex
index 68a28fadc..9ad6bc9bd 100644
--- a/doc/context/sources/general/fonts/fonts/fonts-formats.tex
+++ b/doc/context/sources/general/fonts/fonts/fonts-formats.tex
@@ -81,7 +81,7 @@ descender. The width of the bounding box is not by definition the width of the
glyph. In \TYPEONE\ and \OPENTYPE\ fonts each shape has a so called advance width
and that is the one that will be used.
-\usemodule[fnt-40]
+\usemodule[fonts-kerns]
\startplacefigure [location=here,reference=fig:glyph-kerns,title={Kerning in Latin Roman, Cambria, Pagella and Dejavu.}]
\scale[width=\textwidth]{\startcombination[1*4]
diff --git a/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex b/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex
index 6b05bb0c2..fa53492f0 100644
--- a/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex
+++ b/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex
@@ -21,7 +21,7 @@
%
% \usemodule[speedtest]
-\enabletrackers[fonts.files]
+\enabletrackers[fonts.usage]
\enablemode[simple] % ,oversized
diff --git a/doc/context/sources/general/manuals/cld/cld-specialcommands.tex b/doc/context/sources/general/manuals/cld/cld-specialcommands.tex
index 151952c53..37ecf45c6 100644
--- a/doc/context/sources/general/manuals/cld/cld-specialcommands.tex
+++ b/doc/context/sources/general/manuals/cld/cld-specialcommands.tex
@@ -63,7 +63,11 @@ Other examples of macros that have optimized functions are \type {\par},
\startsection[title=Steps]
-When you run the following code:
+% added and extended in sync with an article about a generic 'execute'
+% feature
+
+We already mentioned the stepper as a very special trick so let's give
+some more explanation here. When you run the following code:
\setbox0\emptybox
@@ -197,7 +201,54 @@ which gives:
A step returns control to \TEX\ immediately and after the \TEX\ code that it
feeds back is expanded, returns to \LUA. There are some limitations due to the
-input stack but normally that us no real issue.
+input stack but normally that is no real issue.
+
+You can run the following code:
+
+\starttyping
+\definenumber[LineCounter][way=bypage]
+\starttext
+\startluacode
+for i=1,2000 do
+ context.incrementnumber { "LineCounter" }
+ context.getnumber { "LineCounter" }
+ context.par()
+end
+\stopluacode
+\stoptext
+\stoptyping
+
+You will notice however that the number is not right on each page. This is
+because \TEX\ doesn't know yet that there is no room on the page. The next will
+work better:
+
+\starttyping
+\definenumber[LineCounter][way=bypage]
+\starttext
+\startluacode
+context.stepwise(function()
+ for i=1,2000 do
+ context.testpage { 0 }
+ context.incrementnumber { "LineCounter" }
+ context.getnumber { "LineCounter" }
+ context.par()
+ context.step()
+ end
+end)
+\stopluacode
+\stoptext
+\starttyping
+
+Instead of the \type {testpage} function you can also play directly with
+registers, like:
+
+\starttyping
+if tex.pagegtotal + tex.count.lineheight > tex.pagetotal then
+\starttyping
+
+but often an already defined helper does a better job. Of course you will
+probably never need this kind of hacks anyway, if only because much more is going
+on and there are better ways then.
\stopsection
diff --git a/doc/context/sources/general/manuals/luatex/luatex.tex b/doc/context/sources/general/manuals/luatex/luatex.tex
index 43f81ab5e..1d6f16f6a 100644
--- a/doc/context/sources/general/manuals/luatex/luatex.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex.tex
@@ -1,5 +1,7 @@
% macros=mkvi
+% \disabledirectives[vspacing.synchronizepage]
+
% author : Hans Hagen with Taco Hoekwater, Luigi Scarso & Hartmut Henkel
% copyright : PRAGMA ADE & ConTeXt Development Team
% license : Creative Commons Attribution ShareAlike 4.0 International
diff --git a/doc/context/sources/general/manuals/math/math-spacing.tex b/doc/context/sources/general/manuals/math/math-spacing.tex
index 3a665a7d8..913a90d9e 100644
--- a/doc/context/sources/general/manuals/math/math-spacing.tex
+++ b/doc/context/sources/general/manuals/math/math-spacing.tex
@@ -1,3 +1,5 @@
+% language=uk
+
\environment math-layout
\startcomponent math-spacing
@@ -689,6 +691,55 @@ We have
\stopsection
+\startsection[title=Choices]
+
+The next examples are generated using this macro:
+
+\startbuffer
+\starttexdefinition unexpanded Test#1#2
+
+ \begingroup
+
+ \showmakeup[depth]
+
+ \def\TestA{\dontleavehmode\ruledhbox{\dorecurse{8}{before }}}
+ \def\TestB{\dontleavehmode\ruledhbox{\dorecurse{8}{after }}}
+ \def\TestC{\dorecurse{18}{x+}x}
+
+ \setdisplaymathspacemodel[3]
+ \setupalign[flushleft] 1\space:\space\TestA \par
+ \startformula #2 \TestC \stopformula \par
+ \setupalign[flushleft] 2\space:\space\TestB \par
+
+ \setdisplaymathspacemodel[4]
+
+ \vskip#1\lineheight
+
+ \setupalign[flushright] \TestA\space:\space2 \par
+ \startformula #2 \TestC \stopformula \par
+ \setupalign[flushright] \TestB\space:\space2 \par
+
+ \endgroup
+
+\stoptexdefinition
+\stopbuffer
+
+\typebuffer \getbuffer
+
+It demonstrates the often hard decisions that we have to make with regards to
+spacing. On the one hand we want to be adaptive, on the other hand we want to be
+consistent, for instance in the depth of lines. These examples overlay the two
+variants (which is of course font and style dependent).
+
+\Test{-4.70}{} \blank[2*line]
+\Test{-6.00}{\frac{1}{2}} \blank[2*line]
+\Test{-6.55}{\frac{1}{\frac{1}{2}}}
+
+One side effect of these options is that at some point we need to choose a
+default and then easily forget about the other variants.
+
+\stopsection
+
\stopchapter
\stopcomponent
diff --git a/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex b/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
index c16afbf0a..525dd7490 100644
--- a/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
+++ b/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
@@ -6,6 +6,8 @@
\startchapter[title=Line correction]
+\startsection[title=Wrapping content]
+
\startbuffer[linecorrection]
\typebuffer
\blank
@@ -103,6 +105,8 @@ 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.
+\stopsection
+
\stopchapter
\stopcomponent
diff --git a/doc/context/sources/general/manuals/spacing/spacing-style.tex b/doc/context/sources/general/manuals/spacing/spacing-style.tex
index c9d168f1c..5514df729 100644
--- a/doc/context/sources/general/manuals/spacing/spacing-style.tex
+++ b/doc/context/sources/general/manuals/spacing/spacing-style.tex
@@ -1,6 +1,6 @@
\startenvironment spacing-style
-\usemodule[abr-03]
+\usemodule[abbreviations-words,typesetting]
\setupbodyfont
[pagella]
diff --git a/tex/context/base/mkii/cont-fil.mkii b/tex/context/base/mkii/cont-fil.mkii
index 604ea233d..1f2923a69 100644
--- a/tex/context/base/mkii/cont-fil.mkii
+++ b/tex/context/base/mkii/cont-fil.mkii
@@ -100,6 +100,8 @@
\definefilesynonym [abr-pseudocaps] [abr-01]
\definefilesynonym [abr-smallcaps] [abr-02]
+\definefilesynonym [abr-03] [abr-01]
+\definefilesynonym [abr-04] [abr-01]
\definefilesynonym [chinese] [chi-00]
\definefilesynonym [japanese] [jap-00]
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index d7992c70b..0ae066a63 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.02.21 18:19}
+\newcontextversion{2018.02.23 22:11}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 15ebe39d0..4e584f125 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.02.21 18:19}
+\edef\contextversion{2018.02.23 22:11}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii
index 60a772815..5115758ec 100644
--- a/tex/context/base/mkii/mult-pe.mkii
+++ b/tex/context/base/mkii/mult-pe.mkii
@@ -1162,6 +1162,7 @@
\setinterfaceconstant{sidemethod}{روش‌کنار}
\setinterfaceconstant{sidespaceafter}{فضای‌کناری‌بعد}
\setinterfaceconstant{sidespacebefore}{فضای‌کناری‌قبل}
+\setinterfaceconstant{sidespaceinbetween}{sidespaceinbetween}
\setinterfaceconstant{sidethreshold}{sidethreshold}
\setinterfaceconstant{sign}{علامت}
\setinterfaceconstant{simplecommand}{simplecommand}
diff --git a/tex/context/base/mkiv/cont-fil.mkiv b/tex/context/base/mkiv/cont-fil.mkiv
index 507effd02..efadd8ca4 100644
--- a/tex/context/base/mkiv/cont-fil.mkiv
+++ b/tex/context/base/mkiv/cont-fil.mkiv
@@ -101,11 +101,16 @@
\definefilesynonym [pre-random] [present-random]
\definefilesynonym [pre-71] [present-random]
-\definefilesynonym [abr-pseudocaps] [abr-01]
-\definefilesynonym [abr-smallcaps] [abr-02]
+\definefilesynonym [abr-01] [abbreviations-pseudocaps]
+\definefilesynonym [abr-02] [abbreviations-smallcaps]
+\definefilesynonym [abr-03] [abbreviations-words]
+\definefilesynonym [abr-04] [abbreviations-mixed]
-\definefilesynonym [pracjourn] [ptj-01]
-\definefilesynonym [maps] [map-10]
+\definefilesynonym [art-01] [article-basic]
+\definefilesynonym [article] [article-basic]
+\definefilesynonym [mag-01] [magazine-basic]
+
+\definefilesynonym [map-10] [maps] % for a while
\definefilesynonym [mml] [mathml]
\definefilesynonym [cml] [chemml]
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index b48f7a39e..d0dc335c9 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,131 +11,13 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.02.21 18:19}
+\newcontextversion{2018.02.23 22:11}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
-% \usemodule[newotf]
-% \usemodule[oldotf]
-
\unprotect
% \writestatus\m!system{beware: some patches loaded from cont-new.mkiv}
-% \attribute152\zerocount : marks ... lots of sweeps so best early in list
-
-%D Maybe:
-
-% \appendtoks
-% \inheritmaintextcolor
-% \to \everybeforenoteinsert
-
-% \appendtoks
-% \inheritmaintextcolor
-% \to \everymargindatacontent
-
-% This is experimental; if this changes we need to adapt the mb-mp style too. It's
-% not in the core yet.
-%
-% \def\ActionY{\blank\inleftmargin{\shownofparlines}}
-% \def\ActionN{\inleftmargin{\shownofparlines}}
-%
-% \saveparnumber
-% ...
-% \checknofparlines
-% \ifnum\nofparlines<2
-% \ActionY
-% \else
-% \ActionN
-% \fi
-% ...
-
-\newcount\c_typo_par_current
-\newcount\c_typo_par_saved
-\newcount\c_typo_par_lines
-\newcount\c_typo_par_temp
-
-\appendtoks
- \advance\c_typo_par_current\plusone % local
- %\llap{\infofont[\the\c_typo_par_saved:\the\c_typo_par_current]\quad}%
-\to \everypar
-
-\unexpanded\def\saveparnumber % the upcoming number
- {\c_typo_par_saved\c_typo_par_current} % local
-
-\def\savedparnumber {\number\c_typo_par_saved}
-\def\currentparnumber{\number\c_typo_par_current}
-\def\nofparlines {\number\c_typo_par_lines}
-\let\savedparstate \empty
-
-\unexpanded\def\shownofparlines
- {\dontleavehmode\hbox\bgroup
- \infofont[\savedparstate]%
- \egroup}
-
-\unexpanded\def\checknofparlines
- {\c_typo_par_temp\numexpr\c_typo_par_saved+\plusone\relax
- \ifhmode
- \c_typo_par_lines\zerocount
- \edef\savedparstate{\number\c_typo_par_temp:\number\c_typo_par_current\space-}%
- \else\ifnum\c_typo_par_current=\c_typo_par_temp
- \c_typo_par_lines\prevgraf
- \edef\savedparstate{\number\c_typo_par_temp:\number\c_typo_par_current\space\number\prevgraf}%
- \else\ifnum\c_typo_par_temp>\c_typo_par_current
- \c_typo_par_lines\zerocount
- \edef\savedparstate{\number\c_typo_par_temp:\number\c_typo_par_current\space-}%
- \else
- \c_typo_par_lines\maxdimen
- \edef\savedparstate{\number\c_typo_par_temp:\number\c_typo_par_current\space+}%
- \fi\fi\fi}
-
-%D Maybe:
-
-\unexpanded\def\tightvbox{\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\vbox}
-\unexpanded\def\tightvtop{\dowithnextbox{\ht\nextbox\zeropoint\box\nextbox}\vtop}
-
-%D Needs some work:
-
-\unexpanded\def\startgridcorrection
- {\dosingleempty\spac_grid_correction_start}
-
-\def\spac_grid_correction_start[#1]%
- {\ifgridsnapping
- \snaptogrid[#1]\vbox\bgroup
- \else
- \startbaselinecorrection
- \fi}
-
-\unexpanded\def\stopgridcorrection
- {\ifgridsnapping
- \egroup
- \else
- \stopbaselinecorrection
- \fi}
-
-\unexpanded\def\checkgridsnapping
- {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi}
-
-%D Probably obsolete:
-
-\unexpanded\def\startcolumnmakeup % don't change
- {\bgroup
- \getrawnoflines\textheight % raw as we cna have topskip
- \setbox\scratchbox\vbox to \dimexpr\noflines\lineheight-\lineheight+\topskip\relax
- \bgroup
- \forgetall}
-
-\unexpanded\def\stopcolumnmakeup
- {\egroup
- \dp\scratchbox\zeropoint
- \wd\scratchbox\textwidth
- \box\scratchbox
- \egroup
- \page_otr_command_synchronize_hsize}
-
-%D Till we fixed all styles:
-
-\let\\=\crlf
-
\protect \endinput
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 53ef6e71c..2f889f572 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -38,10 +38,11 @@
% \everypar{\writestatus{!!!!}{some spurious input in line \the\inputlineno}\wait}
%D The order of loading will change when all modules have been cleaned
-%D up and the dependencies are more consistent.
+%D up and the dependencies are more consistent. beware, the version number
+%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.02.21 18:19}
+\edef\contextversion{2018.02.23 22:11}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/core-def.mkiv b/tex/context/base/mkiv/core-def.mkiv
index 0e7cd2d2e..9dbb16f5c 100644
--- a/tex/context/base/mkiv/core-def.mkiv
+++ b/tex/context/base/mkiv/core-def.mkiv
@@ -167,4 +167,8 @@
% \setbreakpoints[compound]
+%D Till we fixed all styles:
+
+\let\\=\crlf
+
\protect \endinput
diff --git a/tex/context/base/mkiv/font-chk.lua b/tex/context/base/mkiv/font-chk.lua
index b8533986f..3613432c1 100644
--- a/tex/context/base/mkiv/font-chk.lua
+++ b/tex/context/base/mkiv/font-chk.lua
@@ -85,8 +85,12 @@ local action = false
-- to tfmdata.properties ?
local function onetimemessage(font,char,message) -- char == false returns table
- local tfmdata = fontdata[font]
- local shared = tfmdata.shared
+ local tfmdata = fontdata[font]
+ local shared = tfmdata.shared
+ if not shared then
+ shared = { }
+ tfmdata.shared = shared
+ end
local messages = shared.messages
if not messages then
messages = { }
@@ -355,7 +359,7 @@ local function getmissing(id)
local t = { }
for id, d in next, fontdata do
local shared = d.shared
- local messages = shared.messages
+ local messages = shared and shared.messages
if messages then
local filename = d.properties.filename
local tf = t[filename] or { }
diff --git a/tex/context/base/mkiv/mult-ini.mkiv b/tex/context/base/mkiv/mult-ini.mkiv
index 288d19271..d66749d14 100644
--- a/tex/context/base/mkiv/mult-ini.mkiv
+++ b/tex/context/base/mkiv/mult-ini.mkiv
@@ -11,9 +11,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D This module is a stripped down version of \type {mult-ini.tex},
-%D which we keep around as \type {mult-kep.tex} for sentimental
-%D reasons. There you will find some more historic information.
+%D This module is a stripped down version of \type {mult-ini.tex}, which we keep
+%D around as \type {mult-kep.tex} for sentimental reasons. There you will find some
+%D more historic information.
\writestatus{loading}{ConTeXt Multilingual Macros / Initialization}
@@ -25,13 +25,11 @@
%D [constanten,variabelen,commands]
%D {v!,c!,k!,s!,e!,m!,l!,r!,f!,p!,x!,y!}
%D
-%D In the system modules we introduced some prefixed constants,
-%D variables (both macros) and registers. Apart from a
-%D tremendous saving in terms of memory and a gain in speed we
-%D use from now on prefixes when possible for just another
-%D reason: consistency and multi||linguality. Systematically
-%D using prefixed macros enables us to implement a
-%D multi||lingual user interface. Redefining these next set of
+%D In the system modules we introduced some prefixed constants, variables (both
+%D macros) and registers. Apart from a tremendous saving in terms of memory and a
+%D gain in speed we use from now on prefixes when possible for just another reason:
+%D consistency and multi||linguality. Systematically using prefixed macros enables
+%D us to implement a multi||lingual user interface. Redefining these next set of
%D prefixes therefore can have desastrous results.
%D
%D \startlinecorrection
@@ -50,9 +48,9 @@
%D \stoptable
%D \stoplinecorrection
%D
-%D In the single||lingual version we used \type{!}, \type{!!},
-%D \type{!!!} and \type{!!!!}. In the meantime some of these
-%D are obsolete (we had some 12 originally).
+%D In the single||lingual version we used \type {!}, \type {!!}, \type {!!!} and
+%D \type {!!!!}. In the meantime some of these are obsolete (we had some 12
+%D originally).
\def\c!prefix!{c!}
\def\k!prefix!{k!}
@@ -66,18 +64,16 @@
%D [constants,variables,commands]
%D {@@,??}
%D
-%D Variables generated by the system can be recognized on their
-%D prefix \type{@@}. They are composed of a command (class)
-%D specific tag, which can be recognized on \type{??}, and a
-%D system constant, which has the prefix \type{c!}. We'll se
-%D some more of this.
+%D Variables generated by the system can be recognized on their prefix \type {@@}.
+%D They are composed of a command (class) specific tag, which can be recognized on
+%D \type {??}, and a system constant, which has the prefix \type {c!}. We'll se some
+%D more of this.
\def\??prefix {??}
\def\@@prefix {@@}
-%D Just to be complete we repeat some of the already defined
-%D system constants here. Maybe their prefix \type{\s!} now
-%D falls into place.
+%D Just to be complete we repeat some of the already defined system constants here.
+%D Maybe their prefix \type {\s!} now falls into place.
\def\s!next {next} \def\s!default {default}
\def\s!dummy {dummy} \def\s!unknown {unknown}
@@ -90,26 +86,24 @@
\def\s!true {true}
\def\s!false {false}
-%D The word \type{height} takes 6~token memory cells. The
-%D control sequence \type{\height} on the other hand uses only
-%D one. Knowing this, we can improve the performance of \TEX,
-%D both is terms of speed and memory usage, by using control
+%D The word \type {height} takes 6~token memory cells. The control sequence \type
+%D {\height} on the other hand uses only one. Knowing this, we can improve the
+%D performance of \TEX, both is terms of speed and memory usage, by using control
%D sequences instead of the words written in full.
%D
-%D Where in the \ASCII\ file the second lines takes nine extra
-%D characters, \TEX\ saves us 13~tokens.
+%D Where in the \ASCII\ file the second lines takes nine extra characters, \TEX\
+%D saves us 13~tokens.
%D
%D \starttyping
%D \hrule width 10pt height 2pt depth 1pt
%D \hrule \s!width 10pt \s!height 2pt \s!depth 1pt
%D \stoptyping
%D
-%D One condition is that we have defined \type {\s!height},
-%D \type {\s!width} and \type {\s!depth} as respectively
-%D \type {height}, \type {width} and \type {depth}. Using this
-%D scheme therefore only makes sense when a token sequence is
-%D used more than once. Savings like this should of course be
-%D implemented in english, just because \TEX\ is english.
+%D One condition is that we have defined \type {\s!height}, \type {\s!width} and
+%D \type {\s!depth} as respectively \type {height}, \type {width} and \type {depth}.
+%D Using this scheme therefore only makes sense when a token sequence is used more
+%D than once. Savings like this should of course be implemented in english, just
+%D because \TEX\ is english.
\def\s!width {width} \let\!!width \s!width % obsolete
\def\s!height{height} \let\!!height\s!height % obsolete
@@ -142,19 +136,16 @@
%D definemessageconstant,
%D definefileconstant}
%D
-%D The first part of this module is dedicated to dealing with
-%D multi||lingual constants and variables. When \CONTEXT\ grew
-%D bigger and bigger in terms of bytes and used string space,
-%D we switched to predefined constants. At the cost of more
-%D hash table entries, the macros not only becase more compact,
-%D they became much faster too. Maybe an even bigger advantage
-%D was that mispelling could no longer lead to problems. Even a
-%D multi||lingual interface became possible.
+%D The first part of this module is dedicated to dealing with multi||lingual
+%D constants and variables. When \CONTEXT\ grew bigger and bigger in terms of bytes
+%D and used string space, we switched to predefined constants. At the cost of more
+%D hash table entries, the macros not only becase more compact, they became much
+%D faster too. Maybe an even bigger advantage was that mispelling could no longer
+%D lead to problems. Even a multi||lingual interface became possible.
%D
-%D Constants --- we'll introduce the concept of variables later
-%D on --- are preceded by a type specific prefix, followed by a
-%D \type{!}. To force consistency, we provide a few commands
-%D for defining such constants.
+%D Constants |<|we'll introduce the concept of variables later on|>| are preceded by
+%D a type specific prefix, followed by a \type {!}. To force consistency, we provide
+%D a few commands for defining such constants.
%D
%D \starttyping
%D \defineinterfaceconstant {name} {meaning}
@@ -192,10 +183,9 @@
\unexpanded\def\definesystemconstant #1{\expandafter\def\csname\s!prefix!#1\endcsname{#1}}
\unexpanded\def\definemessageconstant #1{\expandafter\def\csname\m!prefix!#1\endcsname{#1}}
-%D In a parameter driven system, some parameters are shared
-%D by more system components. In \CONTEXT\ we can distinguish
-%D parameters by a unique prefix. Such a prefix is defined
-%D with:
+%D In a parameter driven system, some parameters are shared by more system
+%D components. In \CONTEXT\ we can distinguish parameters by a unique prefix. Such a
+%D prefix is defined with:
%D
%D \starttyping
%D \definesystemvariable {name}
@@ -209,16 +199,14 @@
%D {selectinterface,
%D defaultinterface, currentinterface, currentresponses}
%D
-%D With \type{\selectinterface} we specify the language we are
-%D going to use. The system asks for the language wanted, and
-%D defaults to \type{\currentinterface} when we just give
-%D \type{enter}. By default the message system uses the
-%D current interface language, but \type{\currentresponses}
-%D can specify another language too.
+%D With \type {\selectinterface} we specify the language we are going to use. The
+%D system asks for the language wanted, and defaults to \type {\currentinterface}
+%D when we just give \type {enter}. By default the message system uses the current
+%D interface language, but \type {\currentresponses} can specify another language
+%D too.
%D
-%D Because we want to generate formats directly too, we do
-%D not ask for interface specifications when these are already
-%D defined (like in cont-nl.tex and alike).
+%D Because we want to generate formats directly too, we do not ask for interface
+%D specifications when these are already defined (like in cont-nl.tex and alike).
\ifdefined\defaultinterface
@@ -257,9 +245,8 @@
%D \macros
%D {startinterface}
%D
-%D Sometimes we want to define things only for specific
-%D interface languages. This can be done by means of the
-%D selector:
+%D Sometimes we want to define things only for specific interface languages. This
+%D can be done by means of the selector:
%D
%D \starttyping
%D \startinterface language
@@ -273,24 +260,22 @@
{\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}}
\let\stopinterface\relax
-
+
%D \macros
%D {startmessages,
%D getmessage,
%D showmessage,
%D makemessage}
%D
-%D A package as large as \CONTEXT\ can hardly function without
-%D a decent message mechanism. Due to its multi||lingual
-%D interface, the message subsystem has to be multi||lingual
-%D too. A major drawback of this feature is that we have to
-%D code messages. As a result, the source becomes less self
-%D documented. On the other hand, consistency will improve.
+%D A package as large as \CONTEXT\ can hardly function without a decent message
+%D mechanism. Due to its multi||lingual interface, the message subsystem has to be
+%D multi||lingual too. A major drawback of this feature is that we have to code
+%D messages. As a result, the source becomes less self documented. On the other
+%D hand, consistency will improve.
%D
-%D Because the overhead in terms of entries in the (already
-%D exhausted) hash table has to be minimal, messages are packed
-%D in libraries. We can extract a message from such a library
-%D in three ways:
+%D Because the overhead in terms of entries in the (already exhausted) hash table
+%D has to be minimal, messages are packed in libraries. We can extract a message
+%D from such a library in three ways:
%D
%D \starttyping
%D \getmessage {library} {tag}
@@ -298,13 +283,11 @@
%D \makemessage {library} {tag} {data}
%D \stoptyping
%D
-%D The first command gets the message \type{tag} from the
-%D \type{library} specified. The other commands take an extra
-%D argument: a list of items to be inserted in the message
-%D text. While \type{\showmessage} shows the message at the
-%D terminal, the other commands generate the message as text.
-%D Before we explain the \type{data} argument, we give an
-%D example of a library.
+%D The first command gets the message \type {tag} from the \type {library}
+%D specified. The other commands take an extra argument: a list of items to be
+%D inserted in the message text. While \type {\showmessage} shows the message at the
+%D terminal, the other commands generate the message as text. Before we explain the
+%D \type {data} argument, we give an example of a library.
%D
%D \starttyping
%D \startmessages english library: alfa
@@ -332,12 +315,11 @@
%D something : second (and last) message to you
%D \stoptyping
%D
-%D As we can see, the title entry is shown with the message.
-%D The data fields are comma separated and are specified in the
-%D message text by \type{--}.
+%D As we can see, the title entry is shown with the message. The data fields are
+%D comma separated and are specified in the message text by \type {--}.
%D
-%D It is not required to define all messages in a library at
-%D once. We can add messages to a library in the following way:
+%D It is not required to define all messages in a library at once. We can add
+%D messages to a library in the following way:
%D
%D \starttyping
%D \startmessages english library: alfa
@@ -345,21 +327,17 @@
%D \stopmessages
%D \stoptyping
%D
-%D Because such definitions can take place in different
-%D modules, the system gives a warning when a tag occurs more
-%D than once. The first occurrence takes preference over later
-%D ones, so we had better use a save offset, as shown in the
-%D example. As we can see, the title field is specified only
-%D the first time!
+%D Because such definitions can take place in different modules, the system gives a
+%D warning when a tag occurs more than once. The first occurrence takes preference
+%D over later ones, so we had better use a save offset, as shown in the example. As
+%D we can see, the title field is specified only the first time!
%D
-%D Because we want to check for duplicate tags, the macros
-%D are a bit more complicated than neccessary. The \NEWLINE\
-%D token is used as message separator.
+%D Because we want to check for duplicate tags, the macros are a bit more
+%D complicated than neccessary. The \NEWLINE\ token is used as message separator.
+%D
+%D For internal purposes one can use \type {\setmessagetext}, which puts the message
+%D text asked for in \type {\currentmessagetext}.
%D
-%D For internal purposes one can use \type {\setmessagetext},
-%D which puts the message text asked for in \type
-%D {\currentmessagetext}.
-
%D These will become obsolete:
\unexpanded\def\startmessages #1 library: #2 %
@@ -399,17 +377,16 @@
%D \macros
%D {ifshowwarnings, ifshowmessages}
%D
-%D Sometimes displaying message can slow down processing
-%D considerably. We therefore introduce warnings. Users can
-%D turn of warnings and messages by saying:
+%D Sometimes displaying message can slow down processing considerably. We therefore
+%D introduce warnings. Users can turn of warnings and messages by saying:
%D
%D \starttyping
%D \showwarningstrue
%D \showmessagestrue
%D \stoptyping
%D
-%D Turning off messages also turns off warnings, which is
-%D quote logical because they are less important.
+%D Turning off messages also turns off warnings, which is quote logical because they
+%D are less important.
% not yet mkiv
@@ -435,13 +412,12 @@
%D \macros
%D {dosetvalue,dosetevalue,dosetgvalue,dosetxvalue,docopyvalue,doresetvalue} % dogetvalue
%D
-%D We already defined these auxiliary macros in the system
-%D modules. Starting with this module however, we have to take
-%D multi||linguality a bit more serious.
-
-%D In due time, when we exclusively use the parameter handler code, we can drop
-%D the backmapping (\type{\c!k...}) and make \type {\c!c...} similar to
-%D \type {\v!...}. In that case we can simply the following setters.
+%D We already defined these auxiliary macros in the system modules. Starting with
+%D this module however, we have to take multi||linguality a bit more serious.
+%D
+%D In due time, when we exclusively use the parameter handler code, we can drop the
+%D backmapping (\type{\c!k...}) and make \type {\c!c...} similar to \type {\v!...}.
+%D In that case we can simply the following setters.
\unexpanded\def\doletvalue #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname}
\unexpanded\def\dosetvalue #1#2{\expandafter\def \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname}
@@ -476,16 +452,16 @@
\stopinterface
-%D We can now redefine some messages that will be
-%D introduced in the multi||lingual system module.
+%D We can now redefine some messages that will be introduced in the multi||lingual
+%D system module.
\unexpanded\def\showassignerror #1#2{\showmessage\m!check1{#1,#2}\waitonfatalerror}
\unexpanded\def\showargumenterror#1#2{\showmessage\m!check2{#1,#2}\waitonfatalerror}
\unexpanded\def\showdefinederror #1#2{\showmessage\m!check3{#1,#2}\waitonfatalerror}
-%D \CONTEXT\ is a parameter driven package. This means that
-%D users instruct the system by means of variables, values and
-%D keywords. These instructions take the form:
+%D \CONTEXT\ is a parameter driven package. This means that users instruct the
+%D system by means of variables, values and keywords. These instructions take the
+%D form:
%D
%D \starttyping
%D \setupsomething[some variable=some value, another one=a keyword]
@@ -497,13 +473,11 @@
%D \dosomething[this way,that way,no way]
%D \stoptyping
%D
-%D Because the same variables can occur in more than one setup
-%D command, we have to be able to distinguish them. This is
-%D achieved by assigning them a unique prefix.
+%D Because the same variables can occur in more than one setup command, we have to
+%D be able to distinguish them. This is achieved by assigning them a unique prefix.
%D
-%D Imagine a setup command for boxed text, that enables us to
-%D specify the height and width of the box. Behide the scenes
-%D the command
+%D Imagine a setup command for boxed text, that enables us to specify the height and
+%D width of the box. Behide the scenes the command
%D
%D \starttyping
%D \setupbox [width=12cm, height=3cm]
@@ -517,16 +491,16 @@
%D \stoptyping
%D
%D while a similar command for specifying the page dimensions
-%D of an \cap{A4} page results in:
+%D of an \cap {A4} page results in:
%D
%D \starttyping
%D \<page><width> {21.0cm}
%D \<page><height> {27.9cm}
%D \stoptyping
%D
-%D The prefixes \type{<box>} and \type{<page>} are hidden from
-%D users and can therefore be language independant. Variables
-%D on the other hand, differ for each language:
+%D The prefixes \type {<box>} and \type {<page>} are hidden from users and can
+%D therefore be language independant. Variables on the other hand, differ for each
+%D language:
%D
%D \starttyping
%D \<box><color> {<blue>}
@@ -534,28 +508,24 @@
%D \<box><couleur> {<blue>}
%D \stoptyping
%D
-%D In this example we can see that the assigned values or
-%D keywords are language dependant too. This will be a
-%D complication when defining multi||lingual setup files.
+%D In this example we can see that the assigned values or keywords are language
+%D dependant too. This will be a complication when defining multi||lingual setup
+%D files.
%D
-%D A third phenomena is that variables and values can have a
-%D similar meaning.
+%D A third phenomena is that variables and values can have a similar meaning.
%D
%D \starttyping
%D \<pagenumber><location> {<left>}
%D \<skip><left> {12cm}
%D \stoptyping
%D
-%D A (minor) complication is that where in english we use
-%D \type{<left>}, in dutch we find both \type{<links>} and
-%D \type{<linker>}. This means that when we use some sort of
-%D translation table, we have to distinguish between the
-%D variables at the left side and the fixed values at the
-%D right.
+%D A (minor) complication is that where in english we use \type {<left>}, in dutch
+%D we find both \type {<links>} and \type {<linker>}. This means that when we use
+%D some sort of translation table, we have to distinguish between the variables at
+%D the left side and the fixed values at the right.
%D
-%D The same goes for commands that are composed of different
-%D user supplied and/or language specific elements. In english
-%D we can use:
+%D The same goes for commands that are composed of different user supplied and/or
+%D language specific elements. In english we can use:
%D
%D \starttyping
%D \<empty><figure>
@@ -569,14 +539,13 @@
%D \<leeg><intermezzo>
%D \stoptyping
%D
-%D These subtle differences automatically lead to a solution
-%D where variables, values, elements and other components have
-%D a similar logical name (used in macro's) but a different
-%D meaning (supplied by the user).
+%D These subtle differences automatically lead to a solution where variables,
+%D values, elements and other components have a similar logical name (used in
+%D macro's) but a different meaning (supplied by the user).
%D
-%D Our solution is one in which the whole system is programmed
-%D in terms of identifiers with language specific meanings. In
-%D such an implementation, each fixed variable is available as:
+%D Our solution is one in which the whole system is programmed in terms of
+%D identifiers with language specific meanings. In such an implementation, each
+%D fixed variable is available as:
%D
%D \starttyping
%D \<prefix><variable>
@@ -594,75 +563,66 @@
%D \def\boxwidth{12cm}
%D \stoptyping
%D
-%D because we don't want to recode the source, a setup command
-%D in another language has to expand to this variable, so:
+%D because we don't want to recode the source, a setup command in another language
+%D has to expand to this variable, so:
%D
%D \starttyping
%D \setupblock[width=12cm]
%D \stoptyping
%D
-%D has to result in the definition of \type{\boxwidth} too.
-%D This method enables us to build compact, fast and readable
-%D code.
+%D has to result in the definition of \type {\boxwidth} too. This method enables us
+%D to build compact, fast and readable code.
%D
-%D An alternative method, which we considered using, uses a
-%D more indirect way. In this case, both calls generate a
-%D different variable:
+%D An alternative method, which we considered using, uses a more indirect way. In
+%D this case, both calls generate a different variable:
%D
%D \starttyping
%D \def\boxwidth {12cm}
%D \def\boxbreedte {12cm}
%D \stoptyping
%D
-%D And because we don't want to recode those megabytes of
-%D already developed code, this variable has to be called with
-%D something like:
+%D And because we don't want to recode those megabytes of already developed code,
+%D this variable has to be called with something like:
%D
%D \starttyping
%D \valueof\box\width
%D \stoptyping
%D
-%D where \type{\valueof} takes care of the translation of
-%D \type{width} or \type{breedte} to \type{width} and
-%D combining this with \type{box} to \type{\boxwidth}.
+%D where \type {\valueof} takes care of the translation of \type {width} or \type
+%D {breedte} to \type {width} and combining this with \type {box} to \type
+%D {\boxwidth}.
%D
-%D One advantage of this other scheme is that, within certain
-%D limits, we can implement an interface that can be switched
-%D to another language at will, while the current approach
-%D fixes the interface at startup. There are, by the way,
-%D other reasons too for not choosing this scheme. Switching
-%D user generated commands is for instance impossible and a
-%D dual interface would therefore give a strange mix of
-%D languages.
+%D One advantage of this other scheme is that, within certain limits, we can
+%D implement an interface that can be switched to another language at will, while
+%D the current approach fixes the interface at startup. There are, by the way, other
+%D reasons too for not choosing this scheme. Switching user generated commands is
+%D for instance impossible and a dual interface would therefore give a strange mix
+%D of languages.
%D
-%D Now let's work out the first scheme. Although the left hand
-%D of the assignment is a variable from the users point of
-%D view, it is a constant in terms of the system. Both
-%D \type{width} and \type{breedte} expand to \type{width}
-%D because in the source we only encounter \type{width}. Such
-%D system constants are presented as
+%D Now let's work out the first scheme. Although the left hand of the assignment is
+%D a variable from the users point of view, it is a constant in terms of the system.
+%D Both \type {width} and \type {breedte} expand to \type {width} because in the
+%D source we only encounter \type {width}. Such system constants are presented as
%D
%D \starttyping
%D \c!width
%D \stoptyping
%D
-%D This constant is always equivalent to \type{width}. As we
-%D can see, we use \type{c!} to mark this one as constant. Its
-%D dutch counterpart is:
+%D This constant is always equivalent to \type {width}. As we can see, we use \type
+%D {c!} to mark this one as constant. Its dutch counterpart is:
%D
%D \starttyping
%D breedte
%D \stoptyping
%D
-%D When we interpret a setup command each variable is
-%D translated to it's \type{c!} counterpart. This means that
-%D \type{breedte} and \type{width} expand to \type{breedte}
-%D and \type{\c!width} which both expand to \type{width}. That
-%D way user variables become system constants.
+%D When we interpret a setup command each variable is translated to it's \type{c!}
+%D counterpart. This means that \type {breedte} and \type{width} expand to \type
+%D {breedte} and \type {\c!width} which both expand to \type {width}. That way user
+%D variables become system constants.
%D
-%D The interpretation is done by means of a general setup
-%D command \type{\getparameters} that we introduced in the
-%D system module. Let us define some simple setup command:
+%D The interpretation is done by means of a general setup command \type
+%D {\getparameters} that we introduced in the system module. Let us define some
+%D simple setup command:
%D
%D \starttyping
%D \unexpanded\def\setupbox[#1]%
@@ -675,27 +635,25 @@
%D \setupbox [width=3cm, height=1cm]
%D \stoptyping
%D
-%D Afterwards we have two variables \type{\@@bxwidth} and
-%D \type{\@@bxheight} which have the values \type{3cm} and
-%D \type{1cm} assigned. These variables are a combinatiom of
-%D the setup prefix \type{\??bx}, which expands to \type{@@bx}
-%D and the translated user supplied variables \type{width} and
-%D \type{height} or \type{breedte} and \type{hoogte},
-%D depending on the actual language. In dutch we just say:
+%D Afterwards we have two variables \type {\@@bxwidth} and \type {\@@bxheight} which
+%D have the values \type {3cm} and \type {1cm} assigned. These variables are a
+%D combinatiom of the setup prefix \type {\??bx}, which expands to \type {@@bx} and
+%D the translated user supplied variables \type {width} and \type {height} or \type
+%D {breedte} and \type {hoogte}, depending on the actual language. In dutch we just
+%D say:
%D
%D \starttyping
%D \stelblokin [breedte=3cm,hoogte=1cm]
%D \stoptyping
%D
-%D and get ourselves \type{\@@bxwidth} and \type{\@@bxheight}
-%D too. In the source of \CONTEXT, we can recognize constants
-%D and variables on their leading \type{c!}, \type{v!} etc.,
-%D prefixes on \type{??} and composed variables on \type{@@}.
+%D and get ourselves \type {\@@bxwidth} and \type {\@@bxheight} too. In the source
+%D of \CONTEXT, we can recognize constants and variables on their leading \type
+%D {c!}, \type {v!} etc., prefixes on \type {??} and composed variables on \type
+%D {@@}.
%D
-%D We already saw that user supplied keywords need some
-%D special treatment too. This time we don't translate the
-%D keyword, but instead use in the source a variable which
-%D meaning depends on the interface language.
+%D We already saw that user supplied keywords need some special treatment too. This
+%D time we don't translate the keyword, but instead use in the source a variable
+%D which meaning depends on the interface language.
%D
%D \starttyping
%D \v!left
@@ -711,16 +669,14 @@
%D \v!right=>\dosomethingontheright]
%D \stoptyping
%D
-%D Because variables like \type{\@@bxlocation} can have a lot
-%D of meanings, including tricky expandable tokens, we cannot
-%D translate this meaning when we compare. This means that
-%D \type{\@@bxlocation} can be \type{left} of \type{links} of
-%D whatever meaning suits the language. But because
-%D \type{\v!left} also has a meaning that suits the language,
-%D we are able to compare.
+%D Because variables like \type {\@@bxlocation} can have a lot of meanings,
+%D including tricky expandable tokens, we cannot translate this meaning when we
+%D compare. This means that \type {\@@bxlocation} can be \type {left} of \type
+%D {links} of whatever meaning suits the language. But because \type {\v!left} also
+%D has a meaning that suits the language, we are able to compare.
%D
-%D Although we know it sounds confusing we want to state two
-%D important characteristics of the interface as described:
+%D Although we know it sounds confusing we want to state two important
+%D characteristics of the interface as described:
%D
%D \startnarrower \em
%D user variables become system constants
@@ -731,11 +687,10 @@
%D \startnarrower \em
%D user constants (keywords) become system variables
%D \stopnarrower
-
-%D The \type {\c!internal} is a left over from the time that
-%D the user interface documents were not using a specification
-%D alongside a keyword specification but used a shared file in
-%D which case we need to go in both directions.
+%D
+%D The \type {\c!internal} is a left over from the time that the user interface
+%D documents were not using a specification alongside a keyword specification but
+%D used a shared file in which case we need to go in both directions.
% temporary mkiv hack (we can best just store the whole table in memory)
@@ -750,10 +705,9 @@
%D \macros
%D {defineinterfaceconstant}
%D
-%D Next we redefine a previously defined macro to take care of
-%D interface translation too. It's a bit redundant, because
-%D in these situations we could use the c||version, but for
-%D documentation purposes the x||alternative comes in handy.
+%D Next we redefine a previously defined macro to take care of interface translation
+%D too. It's a bit redundant, because in these situations we could use the
+%D c||version, but for documentation purposes the x||alternative comes in handy.
\unexpanded\def\defineinterfaceconstant#1#2%
{\expandafter\def\csname\c!prefix!#1\endcsname{#2}}
@@ -761,16 +715,14 @@
%D \macros
%D {startelements}
%D
-%D Due to the object oriented nature of \CONTEXT, we also need
-%D to define the elements that are used to build commands.
+%D Due to the object oriented nature of \CONTEXT, we also need to define the
+%D elements that are used to build commands.
%D
-%D Such elements sometimes are the same in diferent
-%D languages, but mostly they differ. Things can get even
-%D confusing when we look at for instance the setup commands.
-%D In english we say \type{\setup<something>}, but in dutch we
-%D have: \type{\stel<iets>in}. Such split elements are no
-%D problem, because we just define two elements. When no second
-%D part is needed, we use a \type{-}:
+%D Such elements sometimes are the same in different languages, but mostly they
+%D differ. Things can get even confusing when we look at for instance the setup
+%D commands. In english we say \type{\setup<something>}, but in dutch we have: \type
+%D {\stel<iets>in}. Such split elements are no problem, because we just define two
+%D elements. When no second part is needed, we use a \type {-}:
\unexpanded\def\setinterfaceelement#1#2%
{\clf_setinterfaceelement{#1}{#2}%
@@ -820,15 +772,18 @@
\stopinterface
-%D So much for the basic multi||lingual interface commands. The
-%D macro's can be enhanced with more testing facilities, but
-%D for the moment they suffice.
+%D So much for the basic multi||lingual interface commands. The macro's can be
+%D enhanced with more testing facilities, but for the moment they suffice.
\ifdefined\zwnj \else \edef\zwnj{\directlua{utf.char(\number"200C)}} \fi % needed for cont-pe % maybe to char-utf.mkiv
\ifdefined\zwj \else \edef\zwj {\directlua{utf.char(\number"200D)}} \fi % needed for cont-pe % maybe to char-utf.mkiv
-%D Out of convenience we define the banners here. This might move
-%D to the \LUA\ end.
+
+%D \macros
+%D {contextversion, contextversionnumber, contextversionno,
+%D contextbanner, showcontextbanner, formatversion}
+%D
+%D Out of convenience we define the banners here. This might move to the \LUA\ end.
\def\contextbanner
{ConTeXt \space
@@ -837,28 +792,34 @@
int: \currentinterface/\currentresponses}
\unexpanded\def\showcontextbanner
- %{\writeline
- % \writestring\contextbanner
- % \writeline}
{\writestatus\m!system\empty
\writestatus\m!system\contextbanner
\writestatus\m!system\empty}
\edef\formatversion
- {\the\normalyear .\the\normalmonth.\the\normalday}
+ {\the\normalyear.\the\normalmonth.\the\normalday}
+
+\newcount\contextversionno
\ifx\contextversion\undefined
- \def\contextversion {unknown}
- \def\contextversionnumber{0}
-\else
- %\def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi#2\ifnum#3<10 0\fi#3 #4:#5}
- \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi\purenumber{#2}\ifnum#3<10 0\fi\purenumber{#3} #4:#5}
- \edef\contextversionnumber{\expandafter\contextversionnumber\contextversion\relax\space\contextmark}
+ \edef\contextversion{\the\normalyear.\the\normalmonth.\the\normalday\space 00:00}
\fi
+% \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi\purenumber{#2}\ifnum#3<10 0\fi\purenumber{#3} #4:#5}
+% \edef\contextversionnumber{\expandafter\contextversionnumber\contextversion\relax\space\contextmark}
+
+\unexpanded\def \contextversionnumber #1.#2.#3 #4:#5\relax{#1#2#3}
+ \contextversionno \expandafter\contextversionnumber\contextversion\relax
+ \edef \contextversionnumber {\the\contextversionno\space\contextmark}
+
+%D \macros
+%D {everydump}
+%D
+%D This one is only used when we generate the format.
+
\ifx\undefined\everydump
- \newtoks\everydump
- \def\dump{\the\everydump\normaldump}
+ \newtoks\everydump
+ \def\dump{\the\everydump\normaldump}
\fi
% \appendtoks \showcontextbanner \to \everydump
diff --git a/tex/context/base/mkiv/page-ini.mkiv b/tex/context/base/mkiv/page-ini.mkiv
index 5402bd71d..a2559481a 100644
--- a/tex/context/base/mkiv/page-ini.mkiv
+++ b/tex/context/base/mkiv/page-ini.mkiv
@@ -332,4 +332,13 @@
{\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode
\unvbox\normalpagebox}
+% maybe better:
+%
+% \installoutputroutine\doforcestrutdepth
+% {\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode
+% \unvbox\normalpagebox}
+%
+% \unexpanded\def\forcestrutdepth
+% {\par\ifvmode\ifinner\else\doforcestrutdepth\fi\fi}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/page-mak.mkvi b/tex/context/base/mkiv/page-mak.mkvi
index bbb7cc148..d64000542 100644
--- a/tex/context/base/mkiv/page-mak.mkvi
+++ b/tex/context/base/mkiv/page-mak.mkvi
@@ -201,6 +201,23 @@
\emptyhbox
\page}
+%D Probably obsolete (but used in one manual by Taco):
+
+\unexpanded\def\startcolumnmakeup % don't change
+ {\bgroup
+ \getrawnoflines\textheight % raw as we can have topskip
+ \setbox\scratchbox\vbox to \dimexpr\noflines\lineheight-\lineheight+\topskip\relax
+ \bgroup
+ \forgetall}
+
+\unexpanded\def\stopcolumnmakeup
+ {\egroup
+ \dp\scratchbox\zeropoint
+ \wd\scratchbox\textwidth
+ \box\scratchbox
+ \egroup
+ \page_otr_command_synchronize_hsize}
+
%D The text surrounding the main body text can be influenced
%D by setting their associated status variables. The
%D connection between them is made by the following macro
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index a777efa32..5742ce8c4 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -29,7 +29,8 @@
%D This code had been redone many times because we kept running into spacing issues
%D and it's not that much fun (or rewarding). It's probably the module that made
%D me go into distraciton mode most often (like watching amusing Walk of The
-%D Earth or sophisticated Massive Attack video clips).
+%D Earth, sophisticated Massive Attack video clips, impressive Davie504 movies
+%D and so on).
\newdimen \d_page_sides_height % includes the topskip
\newdimen \d_page_sides_width
@@ -692,6 +693,7 @@
\advance\scratchdimentwo -.5\strutdp
\or
% verytolerant
+ % \advance\scratchdimenone -\onepoint (maybe)
\else
\advance\scratchdimentwo -\strutdp
\fi
diff --git a/tex/context/base/mkiv/spac-grd.mkiv b/tex/context/base/mkiv/spac-grd.mkiv
index 66e582879..73c6e0dd1 100644
--- a/tex/context/base/mkiv/spac-grd.mkiv
+++ b/tex/context/base/mkiv/spac-grd.mkiv
@@ -323,13 +323,13 @@
% \fi
% \endgroup}
-\unexpanded\def\fakenextstrutline
- {\par
- \begingroup
- \reseteverypar
- \forgetall
- \dontleavehmode\hpack{\strut}\par
- \clf_removelastline
- \endgroup}
+% \unexpanded\def\fakenextstrutline
+% {\par
+% \begingroup
+% \reseteverypar
+% \forgetall
+% \dontleavehmode\hpack{\strut}\par
+% \clf_removelastline
+% \endgroup}
\protect \endinput
diff --git a/tex/context/base/mkiv/spac-ver.lua b/tex/context/base/mkiv/spac-ver.lua
index aee61adf9..3d263dafd 100644
--- a/tex/context/base/mkiv/spac-ver.lua
+++ b/tex/context/base/mkiv/spac-ver.lua
@@ -171,6 +171,7 @@ local new_rule = nodepool.rule
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
+local penaltycodes = nodes.penaltycodes
local penalty_code = nodecodes.penalty
local kern_code = nodecodes.kern
@@ -180,16 +181,19 @@ local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local localpar_code = nodecodes.localpar
-local userskip_code = skipcodes.userskip
-local lineskip_code = skipcodes.lineskip
-local baselineskip_code = skipcodes.baselineskip
-local parskip_code = skipcodes.parskip
+local linebreak_code = penaltycodes.linebreakpenalty
+
+local userskip_code = skipcodes.userskip
+local lineskip_code = skipcodes.lineskip
+local baselineskip_code = skipcodes.baselineskip
+local parskip_code = skipcodes.parskip
+local topskip_code = skipcodes.topskip
+local splittopskip_code = skipcodes.splittopskip
+
local abovedisplayskip_code = skipcodes.abovedisplayskip
local belowdisplayskip_code = skipcodes.belowdisplayskip
local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip
local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip
-local topskip_code = skipcodes.topskip
-local splittopskip_code = skipcodes.splittopskip
local vspacing = builders.vspacing or { }
builders.vspacing = vspacing
@@ -1249,8 +1253,6 @@ end
-- topskip
-- splittopskip
-local experiment = true directives.register("vspacing.experiment",function(v) experiment = v end)
-
local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also pass tail
if trace then
reset_tracing(head)
@@ -1558,7 +1560,7 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
glue_order, glue_data = 0, nil
elseif sc == disable or sc == enable then
local next = getnext(current)
- if not experiment or next then
+ if next then
ignore_following = sc == disable
if trace then
trace_skip(sc == disable and "disable" or "enable",sc,so,sp,current)
@@ -1569,7 +1571,7 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
end
elseif sc == together then
local next = getnext(current)
- if not experiment or next then
+ if next then
keep_together = true
if trace then
trace_skip("together",sc,so,sp,current)
@@ -1580,7 +1582,7 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
end
elseif sc == nowhite then
local next = getnext(current)
- if not experiment or next then
+ if next then
ignore_whitespace = true
head, current = remove_node(head, current, true)
else
@@ -2015,34 +2017,108 @@ end
do
- local outer = texnest[0]
- local reset = true
- local trace = false
- local report = logs.reporter("vspacing")
-
- directives.register("vspacing.resetprevdepth",function(v) reset = v end)
- trackers.register ("vspacing.resetprevdepth",function(v) trace = v end)
+ local outer = texnest[0]
+ local enabled = true
+ local count = true
+ local trace = false
+ local report = logs.reporter("vspacing")
+
+ trackers.register("vspacing.synchronizepage",function(v)
+ trace = v
+ end)
+
+ directives.register("vspacing.synchronizepage",function(v)
+ if v == true or v == "count" then
+ enabled = true
+ count = true
+ elseif v == "first" then
+ enabled = true
+ count = false
+ else
+ enabled = false
+ count = false
+ end
+ end)
+
+ -- hm, check the old one
+
+ -- function vspacing.synchronizepage()
+ -- if enabled then
+ -- local head = texlists.hold_head
+ -- local skip = 0
+ -- while head and head.id == insert_code do
+ -- head = head.next
+ -- skip = skip + 1
+ -- end
+ -- if head then
+ -- outer.prevdepth = 0
+ -- end
+ -- if trace then
+ -- report("prevdepth %s at page %i, skipped %i, value %p",
+ -- head and "reset" or "kept",texgetcount("realpageno"),skip,outer.prevdepth)
+ -- end
+ -- end
+ -- end
- -- use getid and getnext
+ local ignoredepth = -65536000
- function vspacing.resetprevdepth()
- if reset then
- local head = texlists.hold_head
+ function vspacing.synchronizepage()
+ if enabled then
+ local newdepth = outer.prevdepth
+ local olddepth = newdepth
+ local oldlines = outer.prevgraf
+ local newlines = 0
+ local boxfound = false
+ local head = texlists.contrib_head
if head then
- head = tonut(head)
- local skip = 0
- while head and getid(head) == insert_code do
- head = getnext(head)
- skip = skip + 1
- end
- if head then
- outer.prevdepth = 0
- end
- if trace then
- report("prevdepth %s at page %i, skipped %i, value %p",
- head and "reset" or "kept",texgetcount("realpageno"),skip,outer.prevdepth)
+ local tail = find_node_tail(tonut(head))
+ while tail do
+ local id = getid(tail)
+ if id == hlist_code then
+ if not boxfound then
+ newdepth = getdepth(tail)
+ boxfound = true
+ end
+ newlines = newlines + 1
+ if not count then
+ break
+ end
+ elseif id == vlist_code then
+ if not boxfound then
+ newdepth = getdepth(tail)
+ boxfound = true
+ end
+ break
+ elseif id == glue_code then
+ local subtype = getsubtype(tail)
+ if not (subtype == baselineskip_code or subtype == lineskip_code) then
+ break
+ elseif boxfound and not count then
+ break
+ end
+ elseif id == penalty_code then
+ if boxfound and not count then
+ break
+ end
+ else
+ -- ins, mark, kern, rule, boundary, whatsit
+ break
+ end
+ tail = getprev(tail)
end
end
+ if boxfound then
+ -- what if newdepth ...
+ else
+ texset("prevdepth",ignoredepth)
+ outer.prevdepth = ignoredepth
+ end
+ texset("prevgraf", newlines)
+ outer.prevgraf = newlines
+ if trace then
+ report("page %i, prevdepth %p (last depth %p), prevgraf %i (from %i), %sboxes",
+ texgetcount("realpageno"),olddepth,newdepth,oldlines,newlines,boxfound and "" or "no ")
+ end
end
end
@@ -2050,27 +2126,6 @@ do
trackers.register("vspacing.forcestrutdepth",function(v) trace = v end)
--- function vspacing.forcestrutdepth(n,depth,trace_mode)
--- local box = texgetbox(n)
--- if box then
--- box = tonut(box)
--- local dp = getdepth(box)
--- if dp < depth then
--- local head = getlist(box)
--- if head then
--- local tail = find_node_tail(head)
--- if tail and getid(tail) == hlist_code then
--- setdepth(tail,depth)
--- outer.prevdepth = depth
--- if trace or trace_mode > 0 then
--- nuts.setvisual(tail,"depth")
--- end
--- end
--- end
--- end
--- end
--- end
-
function vspacing.forcestrutdepth(n,depth,trace_mode)
local box = texgetbox(n)
if box then
@@ -2106,8 +2161,8 @@ do
}
implement {
- name = "resetprevdepth",
- actions = vspacing.resetprevdepth,
+ name = "synchronizepage",
+ actions = vspacing.synchronizepage,
scope = "private"
}
@@ -2160,20 +2215,20 @@ do
arguments = { "string", "string" }
}
- local remove_node = nodes.remove
- local find_node_tail = nodes.tail
-
- interfaces.implement {
- name = "fakenextstrutline",
- actions = function()
- local head = texlists.page_head
- if head then
- local head = remove_node(head,find_node_tail(head),true)
- texlists.page_head = head
- buildpage()
- end
- end
- }
+ -- local remove_node = nodes.remove
+ -- local find_node_tail = nodes.tail
+ --
+ -- interfaces.implement {
+ -- name = "fakenextstrutline",
+ -- actions = function()
+ -- local head = texlists.page_head
+ -- if head then
+ -- local head = remove_node(head,find_node_tail(head),true)
+ -- texlists.page_head = head
+ -- buildpage()
+ -- end
+ -- end
+ -- }
interfaces.implement {
name = "removelastline",
diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv
index 0927758c2..98e46fa39 100644
--- a/tex/context/base/mkiv/spac-ver.mkiv
+++ b/tex/context/base/mkiv/spac-ver.mkiv
@@ -527,7 +527,6 @@
\unexpanded\def\spac_lines_start_correction[#1]%
{\edef\m_spac_lines_around{#1}%
- % todo: play with \fakenextstrutline
\spac_lines_action_around
\d_spac_prevdepth\prevdepth
\spac_lines_initialize_corrections
@@ -1309,7 +1308,7 @@
\let\normaloffinterlineskip\offinterlineskip % knuth's original
\appendtoks
- \ifvmode\clf_resetprevdepth\fi % a nasty hack (tested for a while now)
+ \ifvmode\clf_synchronizepage\fi % a nasty hack (tested for a while now)
\to \everyafteroutput
%D My own one:
@@ -2505,22 +2504,6 @@
\prevdepth\zeropoint
-% not ok, so we need to figure out another way to fix this messy prevdepth-across-page issue
-% as encountered in forced blank skips (see lua code)
-%
-% \appendtoks
-% \ifvmode\clf_resetprevdepth\fi
-% \to \everyafteroutput
-%
-% this should only happen when there is nothing left over (how to detemine that) .. testcase:
-%
-% \dorecurse{41}{line\par}
-% \starttyping
-% line 1
-% line 2
-% line 3
-% \stoptyping
-
%D Helper:
\unexpanded\def\checkedblank[#1]%
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index b5d8fd91c..ea587d3a0 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 01bfb9e13..d8c1b019b 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-mat.mkiv b/tex/context/base/mkiv/strc-mat.mkiv
index c6b277991..775d2aca1 100644
--- a/tex/context/base/mkiv/strc-mat.mkiv
+++ b/tex/context/base/mkiv/strc-mat.mkiv
@@ -566,7 +566,7 @@
\newconstant\c_strc_math_vertical % experiment
\c_strc_formulas_mode \plustwo % 0=native 1=simple (old) 2=align (new)
-\c_strc_formulas_space_model\plusthree % replaces \plusone
+\c_strc_formulas_space_model\plusthree % replaces \plusone, we might use \plusfour in the future
\newconditional\c_strc_formulas_tight
@@ -641,33 +641,6 @@
\directvspacing\p_spaceafter
\fi}
-% \def\strc_math_obey_depth
-% {\ifvmode\ifdim\prevdepth<\zeropoint\else\ifdim\prevdepth<\strutdp
-% % maybe add a tracing option here
-% \ifgridsnapping
-% \directvspacing\v!depth
-% \else
-% \kern\dimexpr\strutdp-\prevdepth\relax
-% \prevdepth\strutdp
-% \fi
-% \fi\fi\fi}
-%
-% \setvalue{\??mathdisplayspacemodel\v!before:3}%
-% {% not ok, try \stopformula\par\startformula vs \stopformula\startformula
-% \ifdim\lastskip>\zeropoint
-% % bah
-% \else
-% \strc_math_obey_depth % somehow \fakenextstrutline doesn't work here
-% \nointerlineskip
-% \fi
-% \ifx\p_spacebefore\v!none
-% % nothing
-% \else\ifx\p_spacebefore\empty
-% \directvspacing\currentvspacing
-% \else
-% \directvspacing\p_spacebefore
-% \fi\fi}
-
\setvalue{\??mathdisplayspacemodel\v!before:3}%
{% not ok, try \stopformula\par\startformula vs \stopformula\startformula
\let\m_spacebefore\empty
@@ -714,6 +687,49 @@
\directvspacing\p_spaceafter
\fi\fi}
+\newconditional\c_math_model_four_indeed
+
+\setvalue{\??mathdisplayspacemodel\v!before:4}%
+ {% not ok, try \stopformula\par\startformula vs \stopformula\startformula
+ \ifvmode
+ \ifinner
+ \csname\??mathdisplayspacemodel\v!before:3\endcsname
+ \else
+ \settrue\c_math_model_four_indeed
+ \forcestrutdepth
+ \nointerlineskip
+ \ifx\p_spacebefore\v!none
+ % nothing
+ \else\ifx\p_spacebefore\empty
+ \directvspacing\currentvspacing
+ \else
+ \directvspacing{\p_spacebefore,\the\scratchdimen}%
+ \fi\fi
+ \fi
+ \else
+ \csname\??mathdisplayspacemodel\v!before:3\endcsname
+ \fi}
+
+\setvalue{\??mathdisplayspacemodel\v!after:4}%
+ {\ifconditional\c_math_model_four_indeed
+ \setfalse\c_math_model_four_indeed
+ \forcestrutdepth
+ \else
+ \prevdepth\strutdp % \directvspacing\v!depth
+ \fi
+ \ifx\p_spaceafter\v!none
+ % nothing
+ \else\ifx\p_spaceafter\empty
+ \directvspacing\currentvspacing
+ \else
+ \directvspacing\p_spaceafter
+ \fi\fi}
+
+\unexpanded\def\setdisplaymathspacemodel[#1]%
+ {\ifcsname\??mathdisplayspacemodel\v!before:\number#1\endcsname
+ \c_strc_formulas_space_model#1\relax
+ \fi}
+
% \newtoks\everybeforedisplay
% \appendtoks\page_sides_check_floats_indeed\to\everybeforedisplay
@@ -785,6 +801,9 @@
{\d_strc_formulas_display_skip_left \zeropoint
\d_strc_formulas_display_skip_right\zeropoint}
+\setvalue{\??formulaoption\v!depth}%
+ {\c_strc_formulas_space_model\plusfour}
+
\setvalue{\??formulaoption\v!line}%
{\ifgridsnapping
\setformulaparameter\c!grid{\v!math:\v!line}%
diff --git a/tex/context/base/mkiv/supp-box.mkiv b/tex/context/base/mkiv/supp-box.mkiv
index 1e85d3421..d187518fe 100644
--- a/tex/context/base/mkiv/supp-box.mkiv
+++ b/tex/context/base/mkiv/supp-box.mkiv
@@ -2969,6 +2969,11 @@
\unexpanded\def\lastlinewidth{\dimexpr\clf_lastlinelength\scaledpoint\relax}
+%D Keep as reference:
+
+% \unexpanded\def\tightvbox{\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\vbox}
+% \unexpanded\def\tightvtop{\dowithnextbox{\ht\nextbox\zeropoint\box\nextbox}\vtop}
+
\protect \endinput
% a bit of test code:
diff --git a/tex/context/base/mkiv/tabl-ntb.mkiv b/tex/context/base/mkiv/tabl-ntb.mkiv
index b74694c02..9acf2ef36 100644
--- a/tex/context/base/mkiv/tabl-ntb.mkiv
+++ b/tex/context/base/mkiv/tabl-ntb.mkiv
@@ -331,6 +331,20 @@
\def\tabl_ntb_col_doif #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
\def\tabl_ntb_col_doifnot #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi}
+%D If we ever run into memory issues we can do:
+%
+% \def\tabl_ntb_let_tag#1#2#3%
+% {\ifx#3\c_tabl_ntb_none\else
+% \expandafter\let\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname#3%
+% \fi}
+%
+% \def\tabl_ntb_get_tag#1#2%
+% {\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname
+% \lastnamedcs
+% \else
+% \c_tabl_ntb_none
+% \fi}
+
% not used
%
% \def\tabl_ntb_tag_state#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi}
@@ -1493,18 +1507,18 @@
\def\tabl_ntb_table_get_max_width
{\scratchdimen\wd\scratchbox\relax}
-% first needs testing (in projects), see cont-loc for final version:
-%
-% \def\tabl_ntb_table_get_max_width_step
-% {\advance\scratchdimen\tabl_ntb_get_wid\fastloopindex
-% \advance\scratchdimen\tabl_ntb_get_dis\fastloopindex}
-%
-% \def\tabl_ntb_table_get_max_width
-% {\scratchdimen\zeropoint
-% \dofastloopcs\c_tabl_ntb_maximum_col\tabl_ntb_table_get_max_width_step
-% \ifdim\scratchdimen<\wd\scratchbox\relax
-% \scratchdimen\wd\scratchbox\relax
-% \fi}
+% enable dper 2018-02-22
+
+\def\tabl_ntb_table_get_max_width_step
+ {\advance\scratchdimen\tabl_ntb_get_wid\fastloopindex
+ \advance\scratchdimen\tabl_ntb_get_dis\fastloopindex}
+
+\def\tabl_ntb_table_get_max_width
+ {\scratchdimen\zeropoint
+ \dofastloopcs\c_tabl_ntb_maximum_col\tabl_ntb_table_get_max_width_step
+ \ifdim\scratchdimen<\wd\scratchbox\relax
+ \scratchdimen\wd\scratchbox\relax
+ \fi}
\def\tabl_ntb_table_stop
{\forgetall % new, here see narrower-004.tex
diff --git a/tex/context/base/mkiv/trac-vis.lua b/tex/context/base/mkiv/trac-vis.lua
index 839d78b0c..0e37752db 100644
--- a/tex/context/base/mkiv/trac-vis.lua
+++ b/tex/context/base/mkiv/trac-vis.lua
@@ -668,16 +668,14 @@ end
local ruleddepth do
- ruleddepth = function(current)
- local depth = getdepth(current)
- if depth ~= 0 then
- local width = getwidth(current)
- local rule = new_rule(width,0,depth)
- local kern = new_kern(-width)
+ ruleddepth = function(current,wd,ht,dp)
+ local wd, ht, dp = getwhd(current)
+ if dp ~= 0 then
+ local rule = new_rule(wd,0,dp)
setcolor(rule,c_depth)
settransparency(rule,c_zero)
setattr(rule,a_layer,l_depth)
- setlist(current,new_hlist(setlink(rule,kern,getlist(current))))
+ setlist(current,setlink(rule,new_kern(-wd),getlist(current)))
end
end
@@ -712,7 +710,7 @@ local ruledbox do
setboth(current)
local linewidth = emwidth/fraction
local size = 2*linewidth
- local baseline, baseskip
+ -- local baseline, baseskip
-- if dp ~= 0 and ht ~= 0 then
-- if wd > 20*linewidth then
-- local targetsize = wd - size
@@ -859,11 +857,11 @@ local ruledglyph do
local prev = previous
setboth(current)
local linewidth = emwidth/(2*fraction)
- local baseline
local info
--
-- original
--
+ -- local baseline
-- if (dp >= 0 and ht >= 0) or (dp <= 0 and ht <= 0) then
-- baseline = new_rule(wd-2*linewidth,linewidth,0)
-- end
diff --git a/tex/context/base/mkiv/typo-del.mkiv b/tex/context/base/mkiv/typo-del.mkiv
index 33688b9d3..d12be6bcf 100644
--- a/tex/context/base/mkiv/typo-del.mkiv
+++ b/tex/context/base/mkiv/typo-del.mkiv
@@ -140,7 +140,7 @@
% \def\beforesubsentence{\removeunwantedspaces}
% \def\aftersubsentence {\ignorespaces}
-\newconditional\c_typo_subsentence_cleanup % \settrue\c_typo_subsentence_cleanup
+\newconditional\c_typo_subsentence_cleanup \settrue\c_typo_subsentence_cleanup
\def\typo_subsentence_cleanup_start
{\ifconditional\c_typo_subsentence_cleanup
diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml
index 58f26400d..486c8f530 100644
--- a/tex/context/interface/mkii/keys-pe.xml
+++ b/tex/context/interface/mkii/keys-pe.xml
@@ -1168,6 +1168,7 @@
<cd:constant name='sidemethod' value='روش‌کنار'/>
<cd:constant name='sidespaceafter' value='فضای‌کناری‌بعد'/>
<cd:constant name='sidespacebefore' value='فضای‌کناری‌قبل'/>
+ <cd:constant name='sidespaceinbetween' value='sidespaceinbetween'/>
<cd:constant name='sidethreshold' value='sidethreshold'/>
<cd:constant name='sign' value='علامت'/>
<cd:constant name='simplecommand' value='simplecommand'/>
diff --git a/tex/context/interface/mkiv/context-en.xml b/tex/context/interface/mkiv/context-en.xml
index 08d28f944..84101f798 100644
--- a/tex/context/interface/mkiv/context-en.xml
+++ b/tex/context/interface/mkiv/context-en.xml
@@ -13032,6 +13032,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant method="none" prefix="-" type="line"/>
@@ -13146,6 +13147,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant method="none" prefix="-" type="line"/>
@@ -13167,6 +13169,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant method="none" prefix="-" type="line"/>
@@ -13183,6 +13186,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant method="none" prefix="-" type="line"/>
@@ -13221,6 +13225,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant method="none" prefix="-" type="line"/>
diff --git a/tex/context/interface/mkiv/i-common-value.xml b/tex/context/interface/mkiv/i-common-value.xml
index 81b672e7b..c362779c4 100644
--- a/tex/context/interface/mkiv/i-common-value.xml
+++ b/tex/context/interface/mkiv/i-common-value.xml
@@ -587,6 +587,7 @@
<cd:constant type="tight"/>
<cd:constant type="middle"/>
<cd:constant type="frame"/>
+ <cd:constant type="depth"/>
<cd:constant type="line"/>
<cd:constant type="halfline"/>
<cd:constant type="line" prefix="-" method="none"/>
@@ -682,4 +683,4 @@
<cd:constant type="cd:name"/>
</cd:define>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index f1f8d70ea..320425cce 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index bbbe01dac..be59353a2 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/context/modules/common/s-abbreviations-extras.tex b/tex/context/modules/common/s-abbreviations-extras.tex
new file mode 100644
index 000000000..7ee6e1553
--- /dev/null
+++ b/tex/context/modules/common/s-abbreviations-extras.tex
@@ -0,0 +1,56 @@
+%D \module
+%D [ file=s-abbrevations-extras.tex, % was: s-abr-01
+%D version=1996.01.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=General Abbreviated Extras,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[abbreviations-extras]
+
+\def\SystemSpecialA#1{$\langle\it#1\rangle$}
+\def\SystemSpecialB#1{{\tttf<#1>}}
+
+\unexpanded\def\CATCODE {\SystemSpecialA{catcode}}
+\unexpanded\def\CATCODES {\SystemSpecialA{catcodes}}
+\unexpanded\def\DIMENSION {\SystemSpecialA{dimension}}
+\unexpanded\def\DIMENSIONS {\SystemSpecialA{dimensions}}
+\unexpanded\def\COUNTER {\SystemSpecialA{counter}}
+\unexpanded\def\COUNTERS {\SystemSpecialA{counters}}
+\unexpanded\def\HBOX {\SystemSpecialA{hbox}}
+\unexpanded\def\HBOXES {\SystemSpecialA{hboxes}}
+\unexpanded\def\VBOX {\SystemSpecialA{vbox}}
+\unexpanded\def\VBOXES {\SystemSpecialA{vboxes}}
+\unexpanded\def\BOX {\SystemSpecialA{box}}
+\unexpanded\def\BOXES {\SystemSpecialA{boxes}}
+\unexpanded\def\TOKENLIST {\SystemSpecialA{token list}}
+\unexpanded\def\TOKENLISTS {\SystemSpecialA{token lists}}
+\unexpanded\def\NEWLINE {\SystemSpecialA{newline}}
+\unexpanded\def\SKIP {\SystemSpecialA{skip}}
+\unexpanded\def\SKIPS {\SystemSpecialA{skips}}
+\unexpanded\def\MUSKIP {\SystemSpecialA{muskip}}
+\unexpanded\def\MUSKIPS {\SystemSpecialA{muskips}}
+\unexpanded\def\MARK {\SystemSpecialA{mark}}
+\unexpanded\def\MARKS {\SystemSpecialA{marks}}
+
+\unexpanded\def\SPACE {\SystemSpecialB{space}}
+\unexpanded\def\EOF {\SystemSpecialB{eof}}
+\unexpanded\def\TAB {\SystemSpecialB{tab}}
+\unexpanded\def\NEWPAGE {\SystemSpecialB{newpage}}
+\unexpanded\def\NEWLINE {\SystemSpecialB{newline}}
+
+\unexpanded\def\LUWATEEKH {لُواتيخ} % kh ī t ā w [u] l
+\unexpanded\def\luwateekh {luwātīkh}
+
+\doifmodeelse {mkiv} {
+ \unexpanded\def\THANH{H\agrave n Th\ecircumflexacute\ Th\agrave nh}
+} {
+ \unexpanded\def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
+}
+
+\stopmodule
diff --git a/tex/context/modules/common/s-abr-01.tex b/tex/context/modules/common/s-abr-01.tex
deleted file mode 100644
index b36ae7a0d..000000000
--- a/tex/context/modules/common/s-abr-01.tex
+++ /dev/null
@@ -1,386 +0,0 @@
-%D \module
-%D [ file=s-abr-01,
-%D version=1996.01.01,
-%D title=\CONTEXT\ Style File,
-%D subtitle=General Abbreviations 1,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-\unprotect
-
-\setupsorting[logo][\c!style=\v!capital]
-
-\setupcapitals[\c!title=\v!no]
-
-\protect
-
-\logo [MKI] {MkI} % joke
-\logo [MKII] {MkII}
-\logo [MKIII] {MkIII} % joke
-\logo [MKIV] {MkIV}
-\logo [MKVI] {MkVI}
-\logo [MKIX] {MkIX}
-\logo [MKXI] {MkXI}
-\logo [MKIC] {MkIC}
-\logo [MKCI] {MkCI}
-\logo [MPII] {MpII}
-\logo [MPIV] {MpIV}
-
-%logo [FGA] {fga}
-%logo [FGBBS] {fgbbs}
-\logo [AI] {ai}
-\logo [ACROBAT] {Acro\-bat}
-\logo [APA] {apa}
-\logo [AFM] {afm}
-\logo [API] {api}
-\logo [ALEPH] {Aleph} % {\mathematics{\aleph}}
-\logo [ALGOL] {ALGOL}
-\logo [AMS] {ams}
-\logo [AMSLATEX] {\AmSLaTeX}
-\logo [AMSTEX] {\AmSTeX}
-\logo [ANSI] {ansi}
-\logo [ARABTEX] {Arab\TeXsuffix}
-\logo [ASCII] {ascii}
-\logo [ASCIITEX] {ascii\TeXsuffix}
-\logo [ASCIIMATH] {AsciiMath}
-\logo [BACHOTEX] {Bacho\TeXsuffix}
-\logo [BIBTEX] {bib\TeXsuffix}
-\logo [MLBIBTEX] {MLbib\TeXsuffix}
-\logo [BLUESKY] {BlueSky}
-\logo [BMP] {bmp}
-\logo [BSD] {bsd}
-\logo [CCODE] {C}
-\logo [CPLUSPLUS] {C\high{++}}
-\logo [CALCMATH] {CalcMath}
-\logo [CLD] {cld}
-\logo [CD] {cd}
-\logo [CPU] {cpu}
-\logo [CDROM] {cdrom}
-\logo [CID] {cid}
-\logo [CJK] {cjk}
-\logo [CMR] {cmr}
-\logo [CNC] {cnc}
-\logo [CLD] {cld}
-\logo [CMYK] {cmyk}
-\logo [CODHOST] {CodHost}
-\logo [CONTEXT] {\ConTeXt}
-\logo [CONTEXTWIKI] {\ConTeXt\ Wiki}
-\logo [CONTEXTGROUP] {\ConTeXt\ Group}
-\logo [CSS] {css}
-\logo [CTAN] {ctan}
-\logo [CTXTOOLS] {ctxtools}
-\logo [CWEB] {cweb}
-\logo [CSTUG] {cstug}
-\logo [DAC] {dac}
-\logo [DANTE] {Dante}
-\logo [DECTEN] {dec-10}
-\logo [DNA] {dna}
-\logo [DISTILLER] {distiller}
-\logo [DPI] {dpi}
-\logo [DRATEX] {Dra\TeXsuffix}
-\logo [DSC] {dsc}
-\logo [DTD] {dtd}
-\logo [DTK] {dtk}
-\logo [DTP] {dtp}
-\logo [DVD] {dvd}
-\logo [DVI] {dvi}
-\logo [DVIPDFM] {dvipdfm}
-\logo [DVIPDFMX] {dvipdfmx}
-\logo [DVIPOS] {dvipos}
-\logo [DVIPS] {dvips}
-\logo [DVIPSONE] {dvipsone}
-\logo [DVISCR] {dviscr}
-\logo [DVIWINDO] {dviwindo}
-\logo [EBCDIC] {ebcdic}
-\logo [EC] {ec}
-\logo [EIFFEL] {Eiffel}
-\logo [EMACS] {emacs}
-\logo [EMTEX] {em\TeXsuffix}
-\logo [ENCODING] {enc}
-\logo [ENCTEX] {enc\TeXsuffix}
-\logo [EPUB] {ePub}
-\logo [EPS] {eps}
-\logo [ETEX] {\eTeX}
-\logo [EUROBACHOTEX] {EuroBacho\TeXsuffix}
-\logo [EUROMATH] {EuroMath}
-\logo [EUROTEX] {Euro\TeXsuffix}
-\logo [EXAMPLE] {eXaMpLe}
-\logo [EXAMPLED] {exampled}
-\logo [EXAMPLEQ] {exampleq}
-\logo [EXAMPLER] {exampler}
-\logo [EXAMPLET] {examplet}
-\logo [EXAMPLEX] {examplex}
-\logo [EXIMPLE] {eXiMpLe}
-\logo [FLAC] {flac}
-\logo [FAQ] {faq}
-\logo [FDF] {fdf}
-\logo [FFI] {ffi}
-\logo [FONTFORGE] {FontForge}
-\logo [FOXET] {foXet}
-\logo [FPTEX] {fp\TeXsuffix}
-\logo [FREEBSD] {FreeBSD}
-\logo [FTP] {ftp}
-\logo [GHOSTSCRIPT] {Ghost\-script}
-\logo [GHOSTVIEW] {Ghost\-view}
-\logo [GIF] {gif}
-\logo [GNU] {gnu}
-\logo [GNUPLOT] {gnuplot}
-\logo [GS] {Ghost\-Script}
-\logo [GUST] {Gust}
-\logo [GCC] {gcc}
-\logo [GWTEX] {gw\TeXsuffix}
-\logo [HSB] {hsb} % ?
-\logo [HSV] {hsv}
-\logo [HTML] {html}
-\logo [HTTP] {http}
-\logo [HZ] {hz}
-\logo [IBM] {ibm}
-\logo [IMAGEMAGICK] {ImageMagick}
-\logo [INITEX] {ini\TeXsuffix}
-\logo [INRSTEX] {inrs\TeXsuffix}
-\logo [IO] {io}
-\logo [IRCNET] {IRCnet}
-\logo [ISO] {iso}
-\logo [JAVA] {Java}
-\logo [JAVASCRIPT] {Java\-Script}
-\logo [JPEG] {jpeg}
-\logo [JPG] {jpg}
-\logo [JBIG] {jbig}
-\logo [JSON] {json}
-\logo [KPATHSEA] {kpathsea}
-\logo [KPSE] {kpse}
-\logo [KVM] {kvm}
-\logo [KPSEWHICH] {kpsewhich}
-\logo [MKTEXLSR] {mktexlsr}
-\logo [MYSQL] {MySQL}
-\logo [LAMSTEX] {\LamSTeX}
-\logo [LATEX] {\LaTeX}
-\logo [LATEXTE] {\LaTeX2e}
-\logo [LATEXTN] {\LaTeX2.09}
-\logo [LCD] {lcd}
-\logo [LINUX] {linux}
-\logo [LISP] {Lisp}
-\logo [LPEG] {lpeg}
-\logo [LUA] {Lua}
-\logo [LUAJIT] {LuaJIT}
-\logo [LUAJITTEX] {Luajit\TeXsuffix}
-\logo [LUATEX] {Lua\TeXsuffix}
-\logo [LUATOOLS] {luatools}
-\logo [LMX] {lmx}
-\logo [MACOSX] {MacOSX}
-\logo [MACROTEX] {Macro\TeXsuffix}
-\logo [MAKEMPY] {MakeMPY}
-\logo [MAPPING] {map}
-\logo [MAPS] {Maps}
-\logo [MATHML] {MathML}
-\logo [METAFONT] {\MetaFont}
-\logo [METAPOST] {\MetaPost}
-\logo [METATEX] {Meta\TeXsuffix}
-\logo [MIKTEX] {Mik\TeXsuffix}
-\logo [MINGW] {MingW}
-\logo [MLTEX] {ml\TeXsuffix}
-\logo [METATYPE] {MetaType1}
-\logo [MODULA] {Modula}
-\logo [MOV] {mov}
-\logo [MPEG] {mpeg}
-\logo [MPS] {mps}
-\logo [MPTOPDF] {mptopdf}
-\logo [MPLIB] {mplib}
-\logo [MSDOS] {msdos}
-\logo [MICROSOFT] {Microsoft}
-\logo [MSWINDOWS] {MS~Windows}
-\logo [MSWORD] {MS~Word}
-\logo [MTXRUN] {mtxrun}
-\logo [MTXTOOLS] {mtxtools}
-\logo [NETPBM] {NetPBM}
-\logo [NTG] {ntg}
-\logo [NTS] {nts}
-\logo [OFM] {ofm}
-\logo [OMEGA] {Omega}
-\logo [OPENMATH] {OpenMath}
-\logo [OPENTYPE] {OpenType}
-\logo [OPI] {opi}
-\logo [OTEX] {Oriental \TeXsuffix}
-\logo [OTF] {otf}
-\logo [OTP] {otp}
-\logo [OVF] {ovf}
-\logo [PASCAL] {Pascal}
-\logo [PCTEX] {pc\TeXsuffix}
-\logo [PFA] {pfa}
-\logo [PFB] {pfb}
-\logo [PDF] {pdf}
-\logo [PDFETEX] {pdfe\TeXsuffix}
-\logo [PDFTEX] {pdf\TeXsuffix}
-\logo [PDFTOOLS] {pdftools}
-\logo [PDFTOPS] {pdftops}
-\logo [PERL] {Perl}
-\logo [PERLTK] {Perl/Tk}
-\logo [PICTEX] {\PiCTeX}
-\logo [PK] {pk}
-\logo [PLAIN] {Plain}
-\logo [PNG] {png}
-\logo [POSIX] {posix}
-\logo [POSTSCRIPT] {Post\-Script}
-\logo [PPCHTEX] {\PPCHTeX}
-\logo [PRAGMA] {Pragma ADE}
-\logo [PRESS] {press}
-\logo [PRIFIL] {prifil}
-\logo [PS] {Post\-Script}
-\logo [PSCHECK] {pscheck}
-\logo [PSTOEDIT] {pstoedit}
-\logo [PSTOPAGE] {pstopage}
-\logo [PSTOPDF] {pstopdf}
-\logo [PSTRICKS] {pstricks}
-\logo [RAID] {raid}
-\logo [RAM] {ram}
-\logo [RCA] {RCA}
-\logo [READER] {Acro\-bat Reader}
-\logo [RELAXNG] {Relax\kern.125emNG}
-\logo [RGB] {rgb}
-\logo [RLXTOOLS] {rlxtools}
-\logo [RUBY] {Ruby}
-\logo [SCITE] {SciTE}
-\logo [SGML] {sgml}
-\logo [SI] {si}
-\logo [SQL] {sql}
-\logo [SSD] {ssd}
-\logo [SVG] {svg}
-\logo [STIX] {Stix}
-\logo [SUMATRAPDF] {SumatraPDF}
-\logo [SYNCTEX] {Sync\TeX}
-\logo [SWIG] {swig}
-\logo [SWIGLIB] {SwigLib}
-\logo [TABLE] {\TaBlE}
-\logo [TCPIP] {tcp/ip}
-\logo [TDS] {tds} % no sc te
-\logo [TEI] {tei} % no sc te
-\logo [TETEX] {te\TeXsuffix} % no sc te
-\logo [TEX] {\TeX}
-\logo [TEXADRES] {\TeXprefix adress}
-\logo [TEXBASE] {\TeXprefix base}
-\logo [TEXEDIT] {\TeXprefix edit}
-\logo [TEXEXEC] {\TeXprefix exec}
-\logo [TEXFONT] {\TeXprefix font}
-\logo [TEXFORM] {\TeXprefix form}
-\logo [TEXLIVE] {\TeXprefix Live}
-\logo [TEXLUA] {\TeXprefix Lua}
-\logo [TEXMF] {texmf}
-\logo [TEXMFSTART] {texmfstart}
-\logo [TEXNL] {tex-nl}
-\logo [TEXSHOW] {\TeXprefix show}
-\logo [TEXSPELL] {\TeXprefix spell}
-\logo [TEXGYRE] {\TeX\ Gyre}
-\logo [TEXSYNC] {texsync}
-\logo [TEXTMATE] {TextMate}
-\logo [TEXTOOLS] {\TeXprefix tools}
-\logo [TEXUTIL] {\TeXprefix util}
-\logo [TEXWORK] {\TeXprefix work}
-\logo [TEXWORKS] {\TeXprefix works}
-\logo [TEXXET] {\TeX\XeT} \def\XeT{XeT}
-\logo [TFM] {tfm}
-\logo [THREED] {3D}
-\logo [TIF] {tif}
-\logo [TIFF] {tiff}
-\logo [TIFFINFO] {tiffinfo}
-\logo [TIFFTAGS] {tifftags}
-\logo [TMFTOOLS] {tmftools}
-\logo [TPIC] {tpic}
-\logo [TPM] {tpm}
-\logo [TRUETYPE] {TrueType}
-\logo [TTC] {ttc}
-\logo [TTF] {ttf}
-\logo [TUG] {tug}
-\logo [TUGBOAT] {Tug\-Boat}
-\logo [TUGNEWS] {Tug\-News}
-\logo [TYPEONE] {Type1}
-\logo [UCS] {ucs}
-\logo [UNICODE] {Uni\-code}
-\logo [UNIX] {Unix}
-\logo [URI] {uri}
-\logo [URL] {url}
-\logo [USA] {usa}
-\logo [USENET] {usenet}
-\logo [UTF] {utf}
-\logo [USB] {usb}
-\logo [VF] {vf}
-\logo [WDT] {wdt}
-\logo [WEB] {web}
-\logo [WEBC] {web2c}
-\logo [WIKI] {Wiki}
-\logo [WINDOWS] {Windows}
-\logo [WINNT] {WinNT}
-\logo [WINNX] {Win9x}
-\logo [WWW] {www}
-\logo [WTHREEC] {W3C}
-\logo [WYSIWYG] {wysiwyg}
-\logo [XDVI] {Xdvi}
-\logo [XETEX] {\XeTeX}
-\logo [XFDF] {xfdf}
-\logo [XHTML] {xhtml}
-\logo [XINDY] {Xindy}
-\logo [XITS] {Xits}
-\logo [XML] {xml}
-\logo [XPATH] {xpath}
-\logo [XMLTOOLS] {xmltools}
-\logo [XPDFETEX] {xpdfe\TeXsuffix}
-\logo [XSL] {xsl}
-\logo [XSLFO] {xsl-fo}
-\logo [XSLT] {xslt}
-\logo [XSLTPROC] {xsltproc}
-\logo [XYPIC] {XYPIC} % wrong logo
-\logo [VAX] {vax}
-\logo [VMWARE] {VMWare}
-\logo [YOUTUBE] {YouTube}
-\logo [YandY] {y\&y}
-\logo [ZIP] {zip}
-
-\def\METAFUN {\MetaFun}
-
-\logo [METAFUN] {\MetaFun}
-
-\def\SystemSpecialA#1{$\langle\it#1\rangle$}
-\def\SystemSpecialB#1{{\tttf<#1>}}
-
-\unexpanded\def\CATCODE {\SystemSpecialA{catcode}}
-\unexpanded\def\CATCODES {\SystemSpecialA{catcodes}}
-\unexpanded\def\DIMENSION {\SystemSpecialA{dimension}}
-\unexpanded\def\DIMENSIONS {\SystemSpecialA{dimensions}}
-\unexpanded\def\COUNTER {\SystemSpecialA{counter}}
-\unexpanded\def\COUNTERS {\SystemSpecialA{counters}}
-\unexpanded\def\HBOX {\SystemSpecialA{hbox}}
-\unexpanded\def\HBOXES {\SystemSpecialA{hboxes}}
-\unexpanded\def\VBOX {\SystemSpecialA{vbox}}
-\unexpanded\def\VBOXES {\SystemSpecialA{vboxes}}
-\unexpanded\def\BOX {\SystemSpecialA{box}}
-\unexpanded\def\BOXES {\SystemSpecialA{boxes}}
-\unexpanded\def\TOKENLIST {\SystemSpecialA{token list}}
-\unexpanded\def\TOKENLISTS {\SystemSpecialA{token lists}}
-\unexpanded\def\NEWLINE {\SystemSpecialA{newline}}
-\unexpanded\def\SKIP {\SystemSpecialA{skip}}
-\unexpanded\def\SKIPS {\SystemSpecialA{skips}}
-\unexpanded\def\MUSKIP {\SystemSpecialA{muskip}}
-\unexpanded\def\MUSKIPS {\SystemSpecialA{muskips}}
-\unexpanded\def\MARK {\SystemSpecialA{mark}}
-\unexpanded\def\MARKS {\SystemSpecialA{marks}}
-
-\unexpanded\def\SPACE {\SystemSpecialB{space}}
-\unexpanded\def\EOF {\SystemSpecialB{eof}}
-\unexpanded\def\TAB {\SystemSpecialB{tab}}
-\unexpanded\def\NEWPAGE {\SystemSpecialB{newpage}}
-\unexpanded\def\NEWLINE {\SystemSpecialB{newline}}
-
-\unexpanded\def\LUWATEEKH {لُواتيخ} % kh ī t ā w [u] l
-\unexpanded\def\luwateekh {luwātīkh}
-
-\doifmodeelse {mkiv} {
- \unexpanded\def\THANH{H\agrave n Th\ecircumflexacute\ Th\agrave nh}
-} {
- \unexpanded\def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
-}
-
-\endinput
diff --git a/tex/context/modules/common/s-abr-04.tex b/tex/context/modules/mkii/s-abr-01.mkii
index 23940b526..6e147a701 100644
--- a/tex/context/modules/common/s-abr-04.tex
+++ b/tex/context/modules/mkii/s-abr-01.mkii
@@ -1,8 +1,8 @@
%D \module
-%D [ file=s-abr-04,
+%D [ file=s-abr-01,
%D version=1996.01.01,
%D title=\CONTEXT\ Style File,
-%D subtitle=General Abbreviations 2,
+%D subtitle=General Abbreviations 1,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
@@ -11,14 +11,20 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\usemodule[abr-01]
-
\unprotect
-% \definealternativestyle [\v!mixed] [\font_style_pseudoMixedCapped] [\font_style_pseudoMixedCapped]
+\setupsorting
+ [logo]
+ [\c!style=\v!capital]
+
+\setupcapitals
+ [\c!title=\v!no]
+
+\protect
-\setupsorting[logo][\c!style=\font_style_pseudoMixedCapped]
+\startmodule[abr-01]
-% \setupcapitals[\c!title=\v!no]
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
-\protect \endinput
+\stopmodule
diff --git a/tex/context/modules/common/s-abr-02.tex b/tex/context/modules/mkii/s-abr-02.mkii
index 8bb6a2898..bf3265073 100644
--- a/tex/context/modules/common/s-abr-02.tex
+++ b/tex/context/modules/mkii/s-abr-02.mkii
@@ -11,12 +11,21 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\usemodule[abr-01]
-
\unprotect
-\setupsorting[logo][\c!style=\v!smallcaps]
+\setupsorting
+ [logo]
+ [\c!style=\v!smallcaps]
+
+\setupcapitals
+ [\c!title=\v!no]
+
+\protect
+
+\startmodule[abr-02]
+
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
-\setupcapitals[\c!title=\v!no]
+\stopmodule
-\protect \endinput
diff --git a/tex/context/modules/mkiv/m-compatible.mkiv b/tex/context/modules/mkiv/m-compatible.mkiv
new file mode 100644
index 000000000..0e056180a
--- /dev/null
+++ b/tex/context/modules/mkiv/m-compatible.mkiv
@@ -0,0 +1,63 @@
+%D \module
+%D [ file=m-compatibility,
+%D version=2018.02.21,
+%D title=\CONTEXT\ System Macros,
+%D subtitle=ConTeXt Compatibility Layer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D I fear that I will not keep up in this file so feel free to contribute to the
+%D following. The idea is nto to load this file but more to have some insight in
+%D how to control compatibility (to some extent).
+
+\writestatus{loading}{ConTeXt Compatibility Layer}
+
+%D The side float mechanism has been redone and is not space compatible. Hopefully
+%D it will become stable soon and after that we will not touch it unless we have a
+%D real bug. There might be more control options. The problem is that there are too
+%D many combinations of content before and after a side float possible.
+
+\ifnum\contextversionno<20180101\relax
+ % nothing here
+\fi
+
+%D Picking up the right last line depth is sort of tricky when we cross a page and
+%D have some left|-|over material. The sychronizer is normally not needed but for
+%D now turned on by default.
+
+\ifnum\contextversionno<20180221\relax
+ \disabledirectives[vspacing.synchronizepage]
+\fi
+
+%D Some day we might default to the following which is a bit more conistent but
+%D not compatible.
+
+% \setdisplaymathspacemodel[4]
+%
+% \ifnum\contextversionno<20180221\relax
+% \setdisplaymathspacemodel[3]
+% \fi
+
+%D Currently this is in \type {cont-loc.mkiv} but some day we might do:
+
+% \definemixedcolumns
+% [\v!columns]
+% % compatible with columns default :
+% [\c!balance=\v!yes,
+% \c!blank={\v!line,\v!fixed}]
+%
+% \unexpanded\def\setupcolumns
+% {\setupmixedcolumns[\v!columns]}
+
+%D as well as:
+
+% \input page-cst.mkiv
+
+
+
+\endinput
diff --git a/tex/context/modules/mkiv/m-typesetting.mkiv b/tex/context/modules/mkiv/m-typesetting.mkiv
index 56cf85bbe..4456778ff 100644
--- a/tex/context/modules/mkiv/m-typesetting.mkiv
+++ b/tex/context/modules/mkiv/m-typesetting.mkiv
@@ -99,6 +99,28 @@
\stoplinecorrection
\stoptexdefinition
+\starttexdefinition unexpanded FourPairs #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][2*2]
+ {\typesetfile[#1.tex][page=1,width=\measure{firstpages}]} {1}
+ {\WhenValidPage{2}{\typesetfile[#1.tex][page=2,width=\measure{firstpages}]}} {\WhenValidPage{2}{2}}
+ {\WhenValidPage{3}{\typesetfile[#1.tex][page=3,width=\measure{firstpages}]}} {\WhenValidPage{3}{3}}
+ {\WhenValidPage{4}{\typesetfile[#1.tex][page=4,width=\measure{firstpages}]}} {\WhenValidPage{4}{4}}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+% \starttexdefinition unexpanded FourPagesTwo #1#2
+% \startlinecorrection[blank]
+% \startcombination[fourpages][4*1]
+% {\typesetfile[#1.tex][page=1,width=\measure{fourpages}]} {1}
+% {\WhenValidPage{2}{\typesetfile[#1.tex][page=2,width=\measure{fourpages}]}} {\WhenValidPage{2}{2}}
+% {\typesetfile[#2.tex][page=1,width=\measure{fourpages}]} {1}
+% {\WhenValidPage{2}{\typesetfile[#2.tex][page=2,width=\measure{fourpages}]}} {\WhenValidPage{2}{2}}
+% \stopcombination
+% \stoplinecorrection
+% \stoptexdefinition
+
\starttexdefinition unexpanded FourSpread #1
\startlinecorrection[blank]
\startcombination[fourpages][4*1]
diff --git a/tex/context/modules/mkiv/s-abbreviations-mixed.mkiv b/tex/context/modules/mkiv/s-abbreviations-mixed.mkiv
new file mode 100644
index 000000000..f7b2121d0
--- /dev/null
+++ b/tex/context/modules/mkiv/s-abbreviations-mixed.mkiv
@@ -0,0 +1,28 @@
+%D \module
+%D [ file= s-abbreviations-mixed, % was: s-abr-04
+%D version=1996.01.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=General Abbreviations Mixed,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\setupsorting
+ [logo]
+ [\c!style=\font_style_pseudoMixedCapped]
+
+\protect
+
+\startmodule[abbreviations-mixed]
+
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
+
+\stopmodule
+
diff --git a/tex/context/modules/mkiv/s-abbreviations-pseudocaps.mkiv b/tex/context/modules/mkiv/s-abbreviations-pseudocaps.mkiv
new file mode 100644
index 000000000..fa8606a7b
--- /dev/null
+++ b/tex/context/modules/mkiv/s-abbreviations-pseudocaps.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file= s-abbreviations-pseudocaps, % was: s-abr-01
+%D version=1996.01.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=General Abbreviations Pseudocaps,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\setupsorting
+ [logo]
+ [\c!style=\v!capital]
+
+\setupcapitals
+ [\c!title=\v!no]
+
+\protect
+
+\startmodule[abbreviations-pseudocaps]
+
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
+
+\stopmodule
diff --git a/tex/context/modules/mkiv/s-abbreviations-smallcaps.mkiv b/tex/context/modules/mkiv/s-abbreviations-smallcaps.mkiv
new file mode 100644
index 000000000..2ce86ca33
--- /dev/null
+++ b/tex/context/modules/mkiv/s-abbreviations-smallcaps.mkiv
@@ -0,0 +1,31 @@
+%D \module
+%D [ file= s-abbreviations-smallcaps, % was: s-abr-02
+%D version=1996.01.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=General Abbreviations Smallcaps,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\setupsorting
+ [logo]
+ [\c!style=\v!smallcaps]
+
+\setupcapitals
+ [\c!title=\v!no]
+
+\protect
+
+\startmodule[abbreviations-smallcaps]
+
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
+
+\stopmodule
+
diff --git a/tex/context/modules/common/s-abr-03.tex b/tex/context/modules/mkiv/s-abbreviations-words.mkiv
index 8247b68a9..2b7d7cedc 100644
--- a/tex/context/modules/common/s-abr-03.tex
+++ b/tex/context/modules/mkiv/s-abbreviations-words.mkiv
@@ -1,8 +1,8 @@
%D \module
-%D [ file=s-abr-03,
+%D [ file= s-abbreviations-words, % was: s-abr-32
%D version=1998.08.10,
%D title=\CONTEXT\ Style File,
-%D subtitle=General Abbreviations 3,
+%D subtitle=General Abbreviations Words,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
@@ -11,12 +11,18 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\usemodule[abr-01]
-
\unprotect
-\setupsorting[logo][\c!style=\v!WORD]
+\setupsorting
+ [logo]
+ [\c!style=\v!WORD]
\protect
-\endinput
+\startmodule[abbreviations-words]
+
+\usemodule[abbreviations-logos]
+\usemodule[abbreviations-extras]
+
+\stopmodule
+
diff --git a/tex/context/modules/mkiv/s-art-01.mkiv b/tex/context/modules/mkiv/s-article-basic.mkiv
index 601ee1adc..69a577961 100644
--- a/tex/context/modules/mkiv/s-art-01.mkiv
+++ b/tex/context/modules/mkiv/s-article-basic.mkiv
@@ -1,6 +1,19 @@
-\unprotect
+%D \module
+%D [ file=s-article-basic,
+%D version=2010.01.01, % long ago, just for me
+%D title=\CONTEXT\ Style File,
+%D subtitle=Article Basic Setup,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[article-basic]
-\startmodule[art-01]
+\unprotect
\definemeasure [article:margin] [\paperheight/20] % was 15, see xtables-mkiv for results
\definemeasure [overview:margin] [\paperheight/30]
diff --git a/tex/context/modules/mkiv/s-fonts-kerns.mkiv b/tex/context/modules/mkiv/s-fonts-kerns.mkiv
new file mode 100644
index 000000000..c3a5637c3
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-kerns.mkiv
@@ -0,0 +1,215 @@
+%D \module
+%D [ file=s-fonts-kerns,
+%D version=2018.02.20, % was s-fnt-40 (given the kin dof code < 2010)
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Fonts Kerns,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is real old code but we keep it around for educational purposes. it's
+%D not that efficient and we have better ways.
+%D
+%D \starttyping
+%D \showfontkerns
+%D \stoptyping
+%D
+%D This one shows all kerns so it's s bit different and as we use it in the
+%D manual \unknown
+
+\startluacode
+
+ local nodecodes = nodes.nodecodes
+
+ local disc_code = nodecodes.disc
+ local kern_code = nodecodes.kern
+ local glyph_code = nodecodes.glyph
+ local hlist_code = nodecodes.hlist
+
+ -- local function flatten(l)
+ -- while l do
+ -- local id = l.id
+ -- if id == disc_code then
+ -- local r = l.replace
+ -- if r then
+ -- local p = l.prev
+ -- local n = l.next
+ -- if n and p and n.id == glyph_code and p.id == glyph_code then
+ -- local s = node.slide(r)
+ -- p.next = r
+ -- n.prev = s
+ -- r.prev = p
+ -- s.next= n
+ -- l.replace = nil
+ -- node.free(l)
+ -- end
+ -- end
+ -- elseif id == hlist_code then
+ -- flatten(l.list)
+ -- end
+ -- l = l.next
+ -- end
+ -- end
+
+ local function mark(l,c)
+ while l do
+ local id = l.id
+ if id == kern_code then
+ context.showkern(l.kern,c)
+ elseif id == disc_code then
+ mark(l.pre,2)
+ mark(l.post,3)
+ mark(l.replace,4)
+ elseif id == hlist_code then
+ mark(l.list,c)
+ end
+ l = l.next
+ end
+ end
+
+ local function collect(l)
+ local m = { }
+ while l do
+ local id = l.id
+ if id == hlist_code then
+ m[#m+1] = l
+ end
+ l = l.next
+ end
+ return m
+ end
+
+ local function inject(l,m,i)
+ local x = l
+ i = i or 0
+ while l do
+ local id = l.id
+ if id == kern_code then
+ i = i + 1
+ node.insert_before(x,l,node.copy(m[i]))
+ elseif id == disc_code then
+ i = inject(l.pre,m,i)
+ i = inject(l.post,m,i)
+ i = inject(l.replace,m,i)
+ elseif id == hlist_code then
+ i = inject(l.list,m,i)
+ end
+ l = l.next
+ end
+ return i
+ end
+
+ moduledata.fonts = moduledata.fonts or { }
+ moduledata.fonts.kerns = moduledata.fonts.kerns or { }
+
+ function moduledata.fonts.kerns._show_(n)
+ inject(tex.box[n].list,collect(tex.box[6].list))
+ end
+
+ function moduledata.fonts.kerns.show(n)
+ context("\\bgroup")
+ context("\\setbox6\\vbox\\bgroup\\forgetall")
+ -- flatten(tex.box[n].list)
+ mark(tex.box[n].list,1)
+ context("\\egroup")
+ context("\\ctxlua{moduledata.fonts.kerns._show_('%s')}",n)
+ context("\\egroup")
+ end
+
+\stopluacode
+
+\setupcolors[state=start]
+
+\definefont[VerySmall][Mono at 4pt]
+
+\definecolor[kern:0][s=.5]
+\definecolor[kern:1][b=.5]
+\definecolor[kern:2][r=.5]
+\definecolor[kern:3][g=.5]
+\definecolor[kern:4][r=.5,g=.5]
+
+\def\showkernwidthfactor{1}
+
+\newconditional\showkernstate
+\settrue \showexplicitkerns
+
+\unexpanded\def\showkern#1#2%
+ {\begingroup
+ \dontcomplain
+ \setbox\scratchbox\hbox to \zeropoint \bgroup
+ \ifcase#2\or
+ \ifconditional\showkernstate
+ \color[kern:0]{\dovlwdhtdp\showkernwidthfactor{0.75}{0.5}}%
+ \global\setfalse\showkernstate
+ \raise.8\strutht
+ \else
+ \color[kern:0]{\dovlwdhtdp\showkernwidthfactor{1.05}{0.5}}%
+ \global\settrue\showkernstate
+ \raise1.1\strutht
+ \fi
+ \else\ifconditional\showexplicitkerns % if other kerns
+ \color[kern:0]{\dovlwdhtdp\showkernwidthfactor{0.75}{0.5}}%
+ \lower1.2\strutdp
+ \fi\fi
+ \hbox to 0pt{\hss\VerySmall\color[kern:#2]{\expandafter\withoutpt\the\dimexpr#1sp}\hss}%
+ \egroup
+ \smashbox\scratchbox
+ \box\scratchbox
+ \endgroup
+ \par}
+
+\newbox\KernBox
+
+\unexpanded\def\ShowKerns#1%
+ {\global\setfalse
+ \showkernstate\ctxlua{moduledata.fonts.kerns.show("#1")}}
+
+\unexpanded\def\ShowKernedVBox#1%
+ {\global\setfalse\showkernstate
+ \setbox\KernBox\vbox{#1}%
+ \ShowKerns{KernBox}%
+ \unvbox\KernBox}
+
+\unexpanded\def\ShowKernedHBox#1%
+ {\global\setfalse\showkernstate
+ \setbox\KernBox\hbox{#1}%
+ \ShowKerns{KernBox}%
+ \unhbox\KernBox}
+
+\continueifinputfile{s-fonts-kerns.mkiv}
+
+\setupinterlinespace[1.5] % \setfalse\showexplicitkerns
+
+\definefontfeature[default][default][mode=node] % ,script=latn]
+
+\starttext
+
+% \enabletrackers[otf.kerns]
+
+\setuplayout[width=middle,height=middle]
+
+\usetypescript[modern] \setupbodyfont[modern]
+\setbox\KernBox\vbox{\input knuth } \ShowKerns{KernBox} \copy\KernBox \blank
+
+\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}
+
+\usetypescript[cambria] \setupbodyfont[cambria]
+\setbox\KernBox\vbox{\input knuth } \ShowKerns{KernBox} \copy\KernBox \blank
+
+\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}
+
+\usetypescript[palatino] \setupbodyfont[palatino]
+\setbox\KernBox\vbox{\input knuth } \ShowKerns{KernBox} \copy\KernBox \blank
+
+\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}
+
+\usetypescript[dejavu] \setupbodyfont[dejavu]
+\setbox\KernBox\vbox{\input knuth } \ShowKerns{KernBox} \copy\KernBox \blank
+
+\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-mag-01.mkiv b/tex/context/modules/mkiv/s-magazine-basic.mkiv
index 7191d760c..267bf50d8 100644
--- a/tex/context/modules/mkiv/s-mag-01.mkiv
+++ b/tex/context/modules/mkiv/s-magazine-basic.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=s-mag-01,
+%D [ file=s-magazine-basic, % was: s-mag-01
%D version=2016.09.12, % mkiv version of 2002.12.14,
%D title=\CONTEXT\ Style File,
%D subtitle=\CONTEXT\ Magazine Base Style,
diff --git a/tex/context/modules/mkiv/s-map-10.mkiv b/tex/context/modules/mkiv/s-maps.mkiv
index c7541babc..c7541babc 100644
--- a/tex/context/modules/mkiv/s-map-10.mkiv
+++ b/tex/context/modules/mkiv/s-maps.mkiv
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index f1719781a..f274c4319 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 02/21/18 18:19:44
+-- merge date : 02/23/18 22:11:13
do -- begin closure to overcome local limits and interference