summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2011-06-14 00:20:14 +0300
committerMarius <mariausol@gmail.com>2011-06-14 00:20:14 +0300
commitfaaa984b45c82f7345e0a8daf457685feae54dcc (patch)
tree3a4863cf12bc797c0489b6295e5f76725a710203 /tex
parent510cb140d2e8baed13b8b27daa02f3ad2f5df3e1 (diff)
downloadcontext-faaa984b45c82f7345e0a8daf457685feae54dcc.tar.gz
beta 2011.06.13 23:08
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv4
-rw-r--r--tex/context/base/m-dimensions.mkiv194
-rw-r--r--tex/context/base/phys-dim.lua (renamed from tex/context/base/m-dimensions.lua)275
-rw-r--r--tex/context/base/phys-dim.mkiv277
-rw-r--r--tex/context/base/status-files.pdfbin23463 -> 23623 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin155139 -> 155784 bytes
-rw-r--r--tex/context/base/strc-sec.mkiv4
-rw-r--r--tex/context/base/supp-num.mkiv85
-rw-r--r--tex/generic/context/luatex-fonts-merged.lua2
12 files changed, 416 insertions, 431 deletions
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 991bd8225..845dd7d30 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.06.11 16:45}
+\newcontextversion{2011.06.13 23:08}
%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/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 62e80131f..ffe6a39f9 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.06.11 16:45}
+\newcontextversion{2011.06.13 23:08}
%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/context.mkii b/tex/context/base/context.mkii
index baef733f4..a04470313 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.06.11 16:45}
+\edef\contextversion{2011.06.13 23:08}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 5d39430ed..653ee6c64 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.06.11 16:45}
+\edef\contextversion{2011.06.13 23:08}
%D For those who want to use this:
@@ -357,6 +357,8 @@
\loadmarkfile{math-dis}
%loadmarkfile{math-lan}
+\loadmarkfile{phys-dim}
+
\loadmarkfile{strc-mat}
\loadmarkfile{chem-ini}
diff --git a/tex/context/base/m-dimensions.mkiv b/tex/context/base/m-dimensions.mkiv
deleted file mode 100644
index 2e4495e82..000000000
--- a/tex/context/base/m-dimensions.mkiv
+++ /dev/null
@@ -1,194 +0,0 @@
-%D \module
-%D [ file=m-dimensions,
-%D version=1997.03.19,
-%D title=\CONTEXT\ Extra Modules,
-%D subtitle=Scientific Units,
-%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
-
-\registerctxluafile{m-dimensions}{}
-
-\startmodule[dimensions]
-
-%D \macros
-%D {su}
-%D
-%D We have been using the units module (and its predecessor) for over a decade
-%D now but when we moved on to \LUATEX\ a variant was prototyped that permits a
-%D less texie coding. I finally picked up that thread and cleaned up the code a
-%D bit so users can now play with it. (The main reason was that I wanted to
-%D test exporting.)
-%D
-%D \startbuffer
-%D \su{10 km/h}
-%D 10\su{km/h}
-%D 10 \su{km/h}
-%D $10\su{km/h}$
-%D $10 \su{km/h}$
-%D 10 \su{KiloMeter/Hour}
-%D 10 \su{kilometer/hour}
-%D 10 \su{km/h}
-%D 10 \su{kilometer per hour}
-%D 10 \su{km / h}
-%D 10 \su{ km / h }
-%D 10 \su{km/ms2}
-%D 10 \su{meter per second}
-%D 10 \su{cubic meter}
-%D 10 \su{cubic meter per second}
-%D 10 \su{cubic meter / second}
-%D $10 \su{cubic meter / second}$
-%D 30 \su{kilo pascal }
-%D 30 \su{kilo pascal square meter / second}
-%D 30 \su{kilo pascal square meter / second kelvin}
-%D 30 \su{crap}
-%D $ \frac{10 \su{m/s}}{20 \su{m/s}} $
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Result: \getbuffer
-
-\newconstant \c_scientificunit_mode % 0=text 1=math
-\newconstant \c_scientificunit_state % 0=start 1=suffix 2=operator 3=unit 4=prefix 5=number
-\newconditional\c_scientificunit_number
-
-% tags and export
-% smash == snapper
-% hbox ook in mmode
-
-\def\scientificunithalfspace{\thinspace}
-\def\scientificunitbackspace{\negthinspace}
-
-\newtoks \everyscientificunit % we keep the old \units command so we need a longer one
-
-\unexpanded\def\scientificunit#1%
- {\begingroup
- \the\everyscientificunit
- \removeunwantedspaces
- \ifmmode
- \c_scientificunit_mode\plusone
- \rm\tf
- \mathtf
- \fi
- \scientificunit_indeed{#1}%
- \scientificunit_finish
- \endgroup}
-
-\appendtoks
- \let\scientificunit\scientificunit_indeed
-\to \everyscientificunit
-
-\let\su\scientificunit
-
-\appendtoks
- \let\su\scientificunit_indeed
-\to \everyscientificunit
-
-\unexpanded\def\scientificunit_indeed#1{\ctxcommand{scientificunit(\!!bs#1\!!es)}}
-
-\unexpanded\def\scientificunitPUS#1#2#3{\scientificunit_next#1#2\scientificunitraise{#3}\c_scientificunit_state\plusone} % suffix
-\unexpanded\def\scientificunitPU #1#2{\scientificunit_next#1#2\c_scientificunit_state \plusthree} % unit
-\unexpanded\def\scientificunitPS #1#2{\scientificunit_next#1\scientificunitraise{#2}\c_scientificunit_state \plusone} % suffix
-\unexpanded\def\scientificunitUS #1#2{\scientificunit_next#1\scientificunitraise{#2}\c_scientificunit_state \plusone} % suffix
-\unexpanded\def\scientificunitP #1{\scientificunit_next#1\c_scientificunit_state \plusfour} % prefix
-\unexpanded\def\scientificunitU #1{\scientificunit_next#1\c_scientificunit_state \plusthree} % unit
-\unexpanded\def\scientificunitS #1{\scientificunit_start{}\scientificunitraise{#1}\c_scientificunit_state \plusone} % suffix
-\unexpanded\def\scientificunitO #1{\scientificunit_start#1\c_scientificunit_state \plustwo} % operator
-\unexpanded\def\scientificunitN #1{\scientificunit_start#1\c_scientificunit_state \plusfive} % number
-
-\setelementnature[unit] [mixed]
-\setelementnature[quantity][mixed]
-
-\unexpanded\def\scientificunitN#1%
- {\ifmmode
- #1%
- \else
- \dostarttagged{quantity}\empty
- \dostarttagged{number}\empty
- #1%
- \dostoptagged
- \settrue\c_scientificunit_number
- \fi
- %\scientificunit_start
- \c_scientificunit_state\plusfive}
-
-\def\scientificunit_start
- {\ifmmode
- \dostarttagged\t!mathaction{unit}%
- \bgroup % make an mrow
- \else
- \dostarttagged{unit}\empty
- \fi
- \let\scientificunit_finish\scientificunit_stop
- \let\scientificunit_start\relax}
-
-\def\scientificunit_stop
- {\ifmmode
- \egroup
- \fi
- \ifconditional\c_scientificunit_number
- \dostoptagged
- \fi
- \dostoptagged}
-
-\def\scientificunitraise
- {\ifnum\c_scientificunit_mode=\plusone
- \expandafter\normalsuperscript
- \else
- \expandafter\high
- \fi}
-
-\def\scientificunitlower
- {\ifnum\c_scientificunit_mode=\plusone
- \expandafter\normalsubscript
- \else
- \expandafter\low
- \fi}
-
-\unexpanded\def\scientificunit_next
- {\ifcase\c_scientificunit_state % start
- \scientificunithalfspace
- \scientificunithalfspace
- \or % suffix
- {\cdot}% \scientificunithalfspace
- \or % operator
- \or % unit
- {\cdot}% \scientificunithalfspace
- \or % prefix
- \or % number
- \scientificunithalfspace
- \scientificunithalfspace
- \fi
- \scientificunit_start}
-
-\unexpanded\def\scientificunitTIMES
- {\ifnum\c_scientificunit_state=\plusone % suffix
- \else
- \scientificunithalfspace
- \fi
- \cdot} % or \times
-
-\unexpanded\def\scientificunitOUTOF
- {\ifnum\c_scientificunit_state=\plusone % suffix
- \else
- \scientificunithalfspace
- \fi
- :}
-
-\unexpanded\def\scientificunitSOLIDUS
- {\ifnum\c_scientificunit_state=\plusone % suffix
- \scientificunitbackspace
- \fi
- {/}%
- }%\scientificunitbackspace}
-
-\stopmodule
-
-\protect \endinput
diff --git a/tex/context/base/m-dimensions.lua b/tex/context/base/phys-dim.lua
index 19a3e9702..e27d48ffa 100644
--- a/tex/context/base/m-dimensions.lua
+++ b/tex/context/base/phys-dim.lua
@@ -1,6 +1,6 @@
-if not modules then modules = { } end modules ['m-dimensions'] = {
+if not modules then modules = { } end modules ['phys-dim'] = {
version = 1.001,
- comment = "companion to m-dimensions.mkiv",
+ comment = "companion to phys-dim.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,13 +9,86 @@ if not modules then modules = { } end modules ['m-dimensions'] = {
-- This is pretty old code that I found back, but let's give it a try
-- in practice. It started out as m-units.lua but as we want to keep that
-- module around we moved the code to the dimensions module.
+--
+-- todo: maybe also an sciunit command that converts to si units (1 inch -> 0.0254 m)
+-- etc .. typical something to do when listening to a news whow or b-movie
-local P, C, Cc, Cs, matchlpeg = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.match
+local P, S, R, C, Cc, Cs, matchlpeg = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.match
local format = string.format
local appendlpeg = lpeg.append
local mergetable, mergedtable, keys, loweredkeys = table.merge, table.merged, table.keys, table.loweredkeys
+physics = physics or { }
+physics.patterns = physics.patterns or { }
+
+-- digits parser (todo : use patterns)
+
+local done = false
+local swap = false
+
+local digit = R("09")
+local sign = S("+-")
+local power = S("^e")
+local digitspace = S("~@_")
+local digitspacex = digitspace + P(" ")
+local comma = P(",")
+local period = P(".")
+local signspace = P("/")
+local positive = S("p")
+local negative = S("n")
+local highspace = P("s")
+local padding = P("=")
+local plus = P("+")
+local minus = P("-")
+
+-- rename context.digitsspace -> digitsS
+-- also have digitsN
+
+
+-- move done to tex end
+
+local digits = (digit^1)
+
+local ddigitspacex = digitspacex / "" / context.digitsspace
+local ddigitspace = digitspace / "" / context.digitsspace
+local ddigit = digits / function(s) done = true context(s) end
+local dseparator = comma / "" / function() if not done then context.digitsseparatorspace() elseif swap then context(".") else context(",") end end
+ + period / "" / function() if not done then context.digitsseparatorspace() elseif swap then context(",") else context(".") end end
+local dsignspace = signspace / "" / context.digitssignspace
+local dpositive = positive / "" / context.digitspositive
+local dnegative = negative / "" / context.digitsnegative
+local dhighspace = highspace / "" / context.digitshighspace
+local dsomesign = plus / "" / context.digitsplus
+ + minus / "" / context.digitsminus
+local dpower = power / "" * (
+ plus * C(digits) / context.digitspowerplus
+ + minus * C(digits) / context.digitspowerminus
+ + C(digits) / context.digitspower
+ )
+local dpadding = padding / "" / context.digitszeropadding -- todo
+
+local digitparsernospace =
+ (dsomesign + dsignspace + dpositive + dnegative + dhighspace)^0
+ * (dseparator^0 * (ddigitspacex + ddigit)^1)^1
+ * dpower^0
+
+local digitparser =
+ (dsomesign + dsignspace + dpositive + dnegative + dhighspace)^0
+ * (dseparator^0 * (ddigitspace + ddigit)^1)^1
+ * dpower^0
+
+physics.patterns.digitparserspace = digitparserspace
+physics.patterns.digitparser = digitparser
+
+function commands.digits(str)
+ done = false
+ -- swap = true
+ matchlpeg(digitparserspace,str) -- also space
+end
+
+-- units parser
+
local long_prefixes = {
Yocto = [[y]], -- 10^{-24}
Zepto = [[z]], -- 10^{-21}
@@ -82,10 +155,10 @@ local long_units = {
Volt = [[V]],
eVolt = [[eV]],
Tesla = [[T]],
- VoltAC = [[V\scientificunitbackspace\scientificunitlower{ac}]],
- VoltDC = [[V\scientificunitbackspace\scientificunitlower{dc}]],
- AC = [[V\scientificunitbackspace\scientificunitlower{ac}]],
- DC = [[V\scientificunitbackspace\scientificunitlower{dc}]],
+ VoltAC = [[V\unitsbackspace\unitslower{ac}]],
+ VoltDC = [[V\unitsbackspace\unitslower{dc}]],
+ AC = [[V\unitsbackspace\unitslower{ac}]],
+ DC = [[V\unitsbackspace\unitslower{dc}]],
Bit = [[bit]],
Baud = [[Bd]],
Byte = [[B]],
@@ -119,10 +192,10 @@ local long_units = {
}
local long_operators = {
- Times = [[\scientificunitTIMES]], -- cdot
- Solidus = [[\scientificunitSOLIDUS]],
- Per = [[\scientificunitSOLIDUS]],
- OutOf = [[\scientificunitOUTOF]],
+ Times = [[\unitsTIMES]], -- cdot
+ Solidus = [[\unitsSOLIDUS]],
+ Per = [[\unitsSOLIDUS]],
+ OutOf = [[\unitsOUTOF]],
}
local long_suffixes = {
@@ -206,7 +279,7 @@ local units = mergedtable(long_units,short_units)
local operators = mergedtable(long_operators,short_operators)
local suffixes = mergedtable(long_suffixes,short_suffixes)
-local space = P(" ")^0/""
+local somespace = P(" ")^0/""
local l_prefix = appendlpeg(keys(long_prefixes))
local l_unit = appendlpeg(keys(long_units))
@@ -222,17 +295,29 @@ local s_suffix = appendlpeg(keys(short_suffixes))
-- square centi meter per square kilo seconds
-local l_suffix = Cs(space * l_suffix)
-local s_suffix = Cs(space * s_suffix) + Cc("")
-local l_operator = Cs(space * l_operator)
-local l_combination = (Cs(space * l_prefix) + Cc("")) * Cs(space * l_unit)
-local s_combination = Cs(space * s_prefix) * Cs(space * s_unit) + Cc("") * Cs(space * s_unit)
+local l_suffix = Cs(somespace * l_suffix)
+local s_suffix = Cs(somespace * s_suffix) + Cc("")
+local l_operator = Cs(somespace * l_operator)
+local l_combination = (Cs(somespace * l_prefix) + Cc("")) * Cs(somespace * l_unit)
+local s_combination = Cs(somespace * s_prefix) * Cs(somespace * s_unit) + Cc("") * Cs(somespace * s_unit)
local combination = l_combination + s_combination
-- square kilo meter
-- square km
+local unitsPUS = context.unitsPUS
+local unitsPU = context.unitsPU
+local unitsPS = context.unitsPS
+local unitsP = context.unitsP
+local unitsUS = context.unitsUS
+local unitsU = context.unitsU
+local unitsS = context.unitsS
+local unitsO = context.unitsO
+local unitsN = context.unitsN
+local unitsNstart = context.unitsNstart
+local unitsNstop = context.unitsNstop
+
local function dimpus(p,u,s)
p = prefixes[p] or p
u = units[u] or u
@@ -240,159 +325,59 @@ local function dimpus(p,u,s)
if p ~= "" then
if u ~= "" then
if s ~= "" then
- return format(" p=%s u=%s s=%s ",p,u,s)
+ unitsPUS(p,u,s)
else
- return format(" p=%s u=%s ",p,u)
+ unitsPU(p,u)
end
elseif s ~= "" then
- return format(" p=%s s=%s ",p,s)
+ unitsPS(p,s)
else
- return format(" p=%s ",p)
+ unitsP(p)
end
else
if u ~= "" then
if s ~= "" then
- return format(" u=%s s=%s ",u,s)
+ unitsUS(u,s)
else
- return format(" u=%s ",u)
+ unitsU(u)
end
elseif s ~= "" then
- return format(" s=%s ",s)
+ unitsS(s)
else
- return format(" p=%s ",p)
+ unitsP(p)
end
end
end
+local function dimspu(s,p,u)
+ return dimpus(p,u,s)
+end
+
local function dimop(o)
o = operators[o] or o
if o then
- return format(" o=%s ",o)
+ unitsO(o)
end
end
-local function dimnum(n)
- if n ~= "" then
- return format(" n=%s ",n)
- end
-end
+local dimension = (l_suffix * combination) / dimspu + (combination * s_suffix) / dimpus
+local number = lpeg.patterns.number / unitsN
+local operator = (l_operator + s_operator) / dimop
+local whatever = (P(1)^0) / unitsU
-local function dimerror(s)
- return s ~= "" and s or "error"
-end
+dimension = somespace * dimension * somespace
+number = somespace * number * somespace
+operator = somespace * operator * somespace
-local dimension =
- (l_suffix * combination) / function (s,p,u)
- return dimpus(p,u,s)
- end
- + (combination * s_suffix) / function (p,u,s)
- return dimpus(p,u,s)
- end
+----- unitparser = dimension * dimension^0 * (operator * dimension^1)^-1 + whatever
+local unitparser = dimension^1 * (operator * dimension^1)^-1 + whatever
-local operator = (l_operator + s_operator) / function(o)
- return dimop(o)
-end
+local unitdigitparser = (P(true)/unitsNstart) * digitparser * (P(true)/unitsNstop)
+local combinedparser = (unitdigitparser + number)^-1 * unitparser
-local number = (lpeg.patterns.number / function(n)
- return dimnum(n)
-end)^-1
-
-dimension = space * dimension * space
-number = space * number * space
-operator = space * operator * space
-
-local expression = lpeg.Cs (
- number * dimension * dimension^0 * (operator * dimension^1)^-1 * P(-1)
- + (P(1)^0) / function(s) return dimerror(s) end
-)
-
-if commands and context then
-
- local scientificunitPUS = context.scientificunitPUS
- local scientificunitPU = context.scientificunitPU
- local scientificunitPS = context.scientificunitPS
- local scientificunitP = context.scientificunitP
- local scientificunitUS = context.scientificunitUS
- local scientificunitU = context.scientificunitU
- local scientificunitS = context.scientificunitS
- local scientificunitO = context.scientificunitO
- local scientificunitN = context.scientificunitN
-
- dimpus = function(p,u,s)
- p = prefixes[p] or p
- u = units[u] or u
- s = suffixes[s] or s
- if p ~= "" then
- if u ~= "" then
- if s ~= "" then
- scientificunitPUS(p,u,s)
- else
- scientificunitPU(p,u)
- end
- elseif s ~= "" then
- scientificunitPS(p,s)
- else
- scientificunitP(p)
- end
- else
- if u ~= "" then
- if s ~= "" then
- scientificunitUS(u,s)
- else
- scientificunitU(u)
- end
- elseif s ~= "" then
- scientificunitS(s)
- else
- scientificunitP(p)
- end
- end
- end
-
- dimop = function(o)
- o = operators[o] or o
- if o then
- scientificunitO(o)
- end
- end
-
- dimnum = function(n)
- if n ~= "" then
- scientificunitN(n)
- end
- end
-
- dimerror = function(s)
- scientificunitU(s)
- end
-
- function commands.scientificunit(str)
- matchlpeg(expression,str)
- end
-
-else
-
- local tests = {
---~ "m/u",
---~ "km/u",
---~ "km",
---~ "km/s2",
---~ "km/ms2",
---~ "km/ms-2",
---~ "km/h",
---~ " meter ",
---~ " meter per meter",
---~ "cubic meter per square meter",
---~ "cubic kilo meter per square meter",
---~ "KiloMeter/Hour",
---~ "10.5 kilo pascal",
---~ "kilo pascal meter liter per second",
---~ "100 crap",
- }
-
- for i=1,#tests do
- local test = tests[i]
- print(test,matchlpeg(expression,test) or test)
- end
+physics.patterns.unitparser = unitparser
+physics.patterns.combinedparser = combinedparser
+function commands.unit(str)
+ matchlpeg(combinedparser,str)
end
diff --git a/tex/context/base/phys-dim.mkiv b/tex/context/base/phys-dim.mkiv
new file mode 100644
index 000000000..5a44be53d
--- /dev/null
+++ b/tex/context/base/phys-dim.mkiv
@@ -0,0 +1,277 @@
+%D \module
+%D [ file=phys-dim,
+%D version=2011-06-13, % was digits and units 1997.03.19,
+%D title=\CONTEXT\ Physics,
+%D subtitle=Digits and Units,
+%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.
+
+\registerctxluafile{phys-dim}{}
+
+\unprotect
+
+% We will have
+%
+% \setupunits
+% [alternative=text, % maybe no longer
+% grid=yes, % snapper
+% style=..., %
+% space=...] % small medium big
+
+% digits code:
+
+%D \startbuffer
+%D \digits{12}
+%D \digits{~~~.~~~.~~~.68.712,34}
+%D \digits{~~~.~~~.~~~.68.712,34}
+%D \digits{___.___.111.68.712,34}
+%D \digits{111.111.111.68.712,34}
+%D \digits{12.345,90}
+%D \digits{12.345.000}
+%D \digits{12,34}
+%D \digits{392.857.230.68.712,34}
+%D \digits{1234}
+%D \digits{123.222,00}
+%D \digits{123.222,==}
+%D \digits{123.222,00^10}
+%D \digits{123.222,00e10}
+%D \digits{-123.222,00e-12}
+%D \digits{/123.222,00e-12}
+%D \digits{+123.222,00e-12}
+%D \digits{n123.222,00e-12}
+%D \digits{s123.222,00e-12}
+%D \digits{p123.222,00e/12}
+%D %D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Result: \getbuffer
+
+% todo: ifmmode
+
+\def\digitsnormalized#1#2{{\setbox\scratchbox\hbox{#1}\hbox to \wd\scratchbox{\hss#2\hss}}}
+
+\def\digitsraised {\ifmmode\expandafter\normalsuperscript\else\expandafter\high\fi}
+
+\def\digitszeropadding {\zeroamount}
+\def\digitsnegative {\digitsnormalized\zeroamount{\digitsraised{\textminus}}} % \mathematics \negative
+\def\digitspositive {\digitsnormalized\zeroamount{\digitsraised{\textplus }}} % \mathematics \positive
+\def\digitsnegative {\mathematics\negative}
+\def\digitspositive {\mathematics\positive}
+\def\digitsspace {\hphantom{0}}
+\def\digitsseparatorspace{\hphantom{.}}
+\def\digitssignspace {\hphantom{\digitsminus}}
+\def\digitshighspace {\hphantom{\digitspositive}}
+\def\digitspower {\digitsraised}
+\def\digitspowerplus #1{\digitsraised{\digitsplus #1}}
+\def\digitspowerminus #1{\digitsraised{\digitsminus#1}}
+\def\digitsminus {\mathematics-}
+\def\digitsplus {\mathematics+}
+
+% First I need to check the old supp-num code for compatibility.
+
+\unexpanded\def\tempdigits#1% for testing
+ {\dontleavehmode
+ \ctxcommand{digits(\!!bs\detokenize{#1}\!!es)}}
+
+%D \macros
+%D {su}
+%D
+%D We have been using the units module (and its predecessor) for over a decade
+%D now but when we moved on to \LUATEX\ a variant was prototyped that permits a
+%D less texie coding. I finally picked up that thread and cleaned up the code a
+%D bit so users can now play with it. (The main reason was that I wanted to
+%D test exporting.)
+%D
+%D \startbuffer
+%D 01: $10\su{km/h}$
+%D 02: $\su{10 km/h}$
+%D 03: \su{km/h}
+%D 04: \su{10 km/h}
+%D 05: \su{10 km/h}
+%D 06: \su{~1 km/h}
+%D 07: 10\su{km/h}
+%D 08: 10 \su{km/h}
+%D 09: $10 \su{km/h}$
+%D 10: 10 \su{KiloMeter/Hour}
+%D 11: 10 \su{kilometer/hour}
+%D 12: 10 \su{km/h}
+%D 13: 10 \su{kilometer per hour}
+%D 14: 10 \su{km / h}
+%D 15: 10 \su{ km / h }
+%D 16: 10 \su{km/ms2}
+%D 17: 10 \su{meter per second}
+%D 18: 10 \su{cubic meter}
+%D 19: 10 \su{cubic meter per second}
+%D 21: 10 \su{cubic meter / second}
+%D 22: $10 \su{cubic meter / second}$
+%D 23: 30 \su{kilo pascal }
+%D 24: 30 \su{kilo pascal square meter / second}
+%D 25: 30 \su{kilo pascal square meter / kelvin second}
+%D 26: \su{30 kilo pascal square meter / kelvin second}
+%D 27: $30 \su{kilo pascal square meter / kelvin second }$
+%D 28: 30 \su{crap}
+%D 29: 30 \su{AC}
+%D 30: $\frac{10 \su{m/s}}{20 \su{m/s}} $
+%D 31: {\ss 30 \su{kilo pascal square meter / second kelvin}}
+%D 32: \su{123.22^-3 km/s}
+%D 33: \su{123.22e-3 km/s}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Result: \getbuffer
+
+\newconstant \c_units_mode % 0=text 1=math
+\newconstant \c_units_state % 0=start 1=suffix 2=operator 3=unit 4=prefix 5=number
+\newconditional\c_units_number
+
+% tags and export
+% smash == snapper
+% hbox ook in mmode
+
+\def\unitshalfspace{\thinspace}
+\def\unitsbackspace{\negthinspace}
+
+\newtoks \everyunits % we keep the old \units command so we need a longer one
+
+\unexpanded\def\unit#1%
+ {\begingroup
+ \the\everyunits
+ %\removeunwantedspaces % now ok yet
+ \ifmmode
+ \c_units_mode\plusone
+ \rm\tf
+ \mathtf
+ \fi
+ \units_indeed{#1}%
+ \units_finish
+ \endgroup}
+
+\appendtoks
+ \let\unit\units_indeed
+\to \everyunits
+
+% bonus ... we might go for \un instead or maybe du (digit+unit)
+
+% \let\su\unit
+%
+% \appendtoks
+% \let\su\units_indeed
+% \to \everyunits
+
+\unexpanded\def\units_indeed#1{\ctxcommand{unit(\!!bs\detokenize{#1}\!!es)}}
+
+\unexpanded\def\unitsPUS#1#2#3{\units_next#1#2\unitsraise{#3}\c_units_state\plusone} % suffix
+\unexpanded\def\unitsPU #1#2{\units_next#1#2\c_units_state \plusthree} % unit
+\unexpanded\def\unitsPS #1#2{\units_next#1\unitsraise{#2}\c_units_state \plusone} % suffix
+\unexpanded\def\unitsUS #1#2{\units_next#1\unitsraise{#2}\c_units_state \plusone} % suffix
+\unexpanded\def\unitsP #1{\units_next#1\c_units_state \plusfour} % prefix
+\unexpanded\def\unitsU #1{\units_next#1\c_units_state \plusthree} % unit
+\unexpanded\def\unitsS #1{\units_start{}\unitsraise{#1}\c_units_state \plusone} % suffix
+\unexpanded\def\unitsO #1{\units_start#1\c_units_state \plustwo} % operator
+\unexpanded\def\unitsN #1{\units_start#1\c_units_state \plusfive} % number
+
+\setelementnature[unit] [mixed]
+\setelementnature[quantity][mixed]
+
+\let\units_finish\relax
+
+\unexpanded\def\unitsNstart
+ {\ifmmode
+ \else
+ \dostarttagged{quantity}\empty
+ \dostarttagged{number}\empty
+ \fi}
+
+\unexpanded\def\unitsNstop
+ {\ifmmode
+ \else
+ \dostoptagged
+ \fi
+ %\units_start
+ \c_units_state\plusfive}
+
+\unexpanded\def\unitsN#1%
+ {\unitsNstart#1\unitsNstop}
+
+\def\units_start
+ {\ifmmode
+ \dostarttagged\t!mathaction{unit}%
+ \bgroup % make an mrow
+ \else
+ \dostarttagged{unit}\empty
+ \fi
+ \let\units_finish\units_stop
+ \let\units_start\relax}
+
+\def\units_stop
+ {\ifmmode
+ \egroup
+ \fi
+ \ifconditional\c_units_number
+ \dostoptagged
+ \fi
+ \dostoptagged}
+
+\def\unitsraise
+ {\ifnum\c_units_mode=\plusone
+ \expandafter\normalsuperscript
+ \else
+ \expandafter\high
+ \fi}
+
+\def\unitslower
+ {\ifnum\c_units_mode=\plusone
+ \expandafter\normalsubscript
+ \else
+ \expandafter\low
+ \fi}
+
+\unexpanded\def\units_next
+ {\ifcase\c_units_state % start
+ \ifdim\lastskip=\zeropoint
+ \unitshalfspace
+ \unitshalfspace
+ \else
+ % too tricky ... we could remove and add
+ \fi
+ \or % suffix
+ {\cdot}% \unitshalfspace
+ \or % operator
+ \or % unit
+ {\cdot}% \unitshalfspace
+ \or % prefix
+ \or % number
+ \unitshalfspace
+ \unitshalfspace
+ \fi
+ \units_start}
+
+\unexpanded\def\unitsTIMES
+ {\ifnum\c_units_state=\plusone % suffix
+ \else
+ \unitshalfspace
+ \fi
+ \cdot} % or \times
+
+\unexpanded\def\unitsOUTOF
+ {\ifnum\c_units_state=\plusone % suffix
+ \else
+ \unitshalfspace
+ \fi
+ :}
+
+\unexpanded\def\unitsSOLIDUS
+ {\ifnum\c_units_state=\plusone % suffix
+ \unitsbackspace
+ \fi
+ {/}%
+ }%\unitsbackspace}
+
+\protect \endinput
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 0f70d464e..732fb6c7c 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index eb731ba05..6cd2ece6f 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv
index c64d379ea..a36f549b1 100644
--- a/tex/context/base/strc-sec.mkiv
+++ b/tex/context/base/strc-sec.mkiv
@@ -702,12 +702,12 @@
\settrue\autoheadbreak % todo: \vspacing[category:8] == keep_together
\def\dopreventbreakafterheadauto % used after \c!before
- {\ifconditonal\autoheadbreak
+ {\ifconditional\autoheadbreak
\vspacing[\v!samepage-\currentheadlevel]%
\fi}
\def\dopreventbreakafterheadspec#1% see enumerations etc
- {\ifconditonal\autoheadbreak
+ {\ifconditional\autoheadbreak
\vspacing[\v!samepage-\the\numexpr\currentheadlevel+1\relax]% todo #1
\fi}
diff --git a/tex/context/base/supp-num.mkiv b/tex/context/base/supp-num.mkiv
index 271e2588a..43b7fce9b 100644
--- a/tex/context/base/supp-num.mkiv
+++ b/tex/context/base/supp-num.mkiv
@@ -417,88 +417,3 @@
\fi\fi}
\protect \endinput
-
-
-\endinput
-
-\def\digitszeropadding {\zeroamount}
-\def\digitsnegative {\mathematics\negative}
-\def\digitspositive {\mathematics\positive}
-\def\digitsspace {\hphantom{0}}
-\def\digitsseparatorspace{\hphantom{.}}
-\def\digitssignspace {\hphantom{+}}
-\def\digitshighspace {\hphantom{\mathematics\positive}}
-\def\digitspower {\high}
-
-\starttext
-
-% print(table.serialize(table.keys(jobs)))
-
-local P, S, R, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.Cs
-
-local done = false
-local swap = false
-local digit = R("09")
-local sign = S("+-")
-local power = S("^e")
-local space = S(" ~@_")
-local comma = P(",")
-local period = P(".")
-local signspace = P("/")
-local positive = P("p")
-local negative = P("n")
-local highspace = P("s")
-local padding = P("=")
-
-local space = space / "\\digitsspace"
-local digit = digit / function(s) done = true return s end
-local separator = comma / function(s) if not done then return "\\digitsseparatorspace" elseif swap then return "." else return "," end end
- + period / function(s) if not done then return "\\digitsseparatorspace" elseif swap then return "," else return "." end end
-local signspace = signspace / "\\digitssignspace"
-local positive = positive / "\\digitspositive"
-local negative = negative / "\\digitsnegative"
-local highspace = highspace / "\\digitshighspace"
-local power = power/"" * (Cs((sign + signspace)^0 * digit^1) / function(s) return "\\digitspower{" .. s .. "}" end)
-local padding = padding / "\\digitszeropadding"
-
-local replace = lpeg.Cs (
- (sign + signspace + positive + negative + highspace)^0
- * (separator^0 * (space + digit)^1)^1
- * power^0
-)
-
-local function digits(str)
- done = false
---~ swap = true
- local str = lpeg.match(replace,str)
--- print(str)
- tex.sprint(tex.ctxcatcodes,"\\dontleavehmode",str,"\\par")
-end
--- namespaces.register("digits")
-
-digits("12")
-digits("~~~.~~~.~~~.68.712,34")
-digits("~~~.~~~.~~~.68.712,34")
-digits("___.___.111.68.712,34")
-digits("111.111.111.68.712,34")
-digits("12.345,90")
-digits("12.345.000")
-digits("12,34")
-digits("392.857.230.68.712,34")
-digits("1234")
-digits("123.222,00")
-digits("123.222,==")
-digits("123.222,00^10")
-digits("123.222,00e10")
-digits("/123.222,00e-12")
-digits("-123.222,00e-12")
--- digits("+123.222,00e-12")
-digits("n123.222,00e-12")
-digits("s123.222,00e-12")
-digits("p123.222,00e/12")
-
-\stopluacode
-[[\digitsseparatorspace]]
-\stoptext
-
-
diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua
index 0cfbf2a0c..02177a09a 100644
--- a/tex/generic/context/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 06/11/11 16:45:35
+-- merge date : 06/13/11 23:08:53
do -- begin closure to overcome local limits and interference