summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-06-23 23:38:05 +0000
committerKarl Berry <karl@freefriends.org>2013-06-23 23:38:05 +0000
commit60f28f85f2707b6a48c3b5aec0ea68b8ee21e466 (patch)
treeab34d8d573457bea6a804ee3d5de48dd500bf028 /Master/texmf-dist/tex/context/base
parentac5882d0cb115e11b5cc2e62107ef5822f3507f5 (diff)
context
git-svn-id: svn://tug.org/texlive/trunk@30865 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base')
-rw-r--r--Master/texmf-dist/tex/context/base/char-def.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/cldf-bas.lua25
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ini.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/cont-fil.mkiv17
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.tmp2
-rw-r--r--Master/texmf-dist/tex/context/base/context-version.pdfbin4127 -> 4111 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/context-version.pngbin39797 -> 40350 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/context.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/base/context.tmp6
-rw-r--r--Master/texmf-dist/tex/context/base/data-con.lua7
-rw-r--r--Master/texmf-dist/tex/context/base/file-mod.mkvi46
-rw-r--r--Master/texmf-dist/tex/context/base/font-age.lua7832
-rw-r--r--Master/texmf-dist/tex/context/base/font-agl.lua384
-rw-r--r--Master/texmf-dist/tex/context/base/font-chk.lua84
-rw-r--r--Master/texmf-dist/tex/context/base/font-con.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-ctx.lua75
-rw-r--r--Master/texmf-dist/tex/context/base/font-def.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-enc.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-gds.lua15
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.mkvi14
-rw-r--r--Master/texmf-dist/tex/context/base/font-lib.mkvi3
-rw-r--r--Master/texmf-dist/tex/context/base/font-log.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/font-map.lua125
-rw-r--r--Master/texmf-dist/tex/context/base/font-mis.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-otb.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/font-otf.lua70
-rw-r--r--Master/texmf-dist/tex/context/base/font-otn.lua55
-rw-r--r--Master/texmf-dist/tex/context/base/font-otp.lua25
-rw-r--r--Master/texmf-dist/tex/context/base/font-ott.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-otx.lua16
-rw-r--r--Master/texmf-dist/tex/context/base/font-pre.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/base/font-syn.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/font-trt.lua57
-rw-r--r--Master/texmf-dist/tex/context/base/l-file.lua43
-rw-r--r--Master/texmf-dist/tex/context/base/l-gzip.lua54
-rw-r--r--Master/texmf-dist/tex/context/base/l-package.lua29
-rw-r--r--Master/texmf-dist/tex/context/base/l-pdfview.lua21
-rw-r--r--Master/texmf-dist/tex/context/base/l-table.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/lang-def.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/lang-def.mkiv20
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.lua39
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.mkiv3
-rw-r--r--Master/texmf-dist/tex/context/base/luat-bas.mkiv1
-rw-r--r--Master/texmf-dist/tex/context/base/luat-cbk.lua10
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/m-graph.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/m-sql.mkiv17
-rw-r--r--Master/texmf-dist/tex/context/base/math-def.mkiv11
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.lua52
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.mkiv22
-rw-r--r--Master/texmf-dist/tex/context/base/math-map.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-ini.mkiv34
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-run.lua7
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-sql.tex64
-rw-r--r--Master/texmf-dist/tex/context/base/mult-aux.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/mult-def.mkiv1
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.lua24
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/mult-low.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/mult-sys.mkiv1
-rw-r--r--Master/texmf-dist/tex/context/base/node-inj.lua83
-rw-r--r--Master/texmf-dist/tex/context/base/node-rul.lua10
-rw-r--r--Master/texmf-dist/tex/context/base/node-rul.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/pack-rul.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/base/page-lay.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/page-mix.lua177
-rw-r--r--Master/texmf-dist/tex/context/base/page-mix.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/phys-dim.mkiv48
-rw-r--r--Master/texmf-dist/tex/context/base/s-art-01.mkiv36
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-10.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-11.mkiv73
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-23.mkiv290
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-26.mkiv82
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-28.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-29.mkiv71
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-30.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-31.mkiv180
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-32.mkiv60
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-coverage.lua113
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv131
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-features.lua161
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-features.mkiv82
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-goodies.lua117
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv37
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-missing.lua101
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv59
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-shapes.lua328
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv117
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-system.lua68
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-system.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-tables.lua47
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv15
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-vectors.lua104
-rw-r--r--Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv72
-rw-r--r--Master/texmf-dist/tex/context/base/s-lan-03.mkiv40
-rw-r--r--Master/texmf-dist/tex/context/base/s-lan-04.mkiv153
-rw-r--r--Master/texmf-dist/tex/context/base/s-lan-06.mkiv53
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-counters.lua52
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-counters.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-frequencies.lua33
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv38
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua135
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv75
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-sorting.lua118
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-system.lua35
-rw-r--r--Master/texmf-dist/tex/context/base/s-languages-system.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/s-mat-11.mkiv104
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-characters.lua (renamed from Master/texmf-dist/tex/context/base/s-mat-10.mkiv)144
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-characters.mkiv184
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-coverage.lua180
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-coverage.mkiv34
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv145
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-parameters.lua (renamed from Master/texmf-dist/tex/context/base/s-mat-20.mkiv)48
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-parameters.mkiv41
-rw-r--r--Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv (renamed from Master/texmf-dist/tex/context/base/s-mat-12.mkiv)196
-rw-r--r--Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv134
-rw-r--r--Master/texmf-dist/tex/context/base/s-phy-01.mkiv111
-rw-r--r--Master/texmf-dist/tex/context/base/s-physics-units.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/s-present-tiles.mkiv297
-rw-r--r--Master/texmf-dist/tex/context/base/s-sql-tables.lua152
-rw-r--r--Master/texmf-dist/tex/context/base/s-sql-tables.mkiv24
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-ini.mkvi7
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-cjk.lua30
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-eth.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-ini.lua74
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-ini.mkiv25
-rw-r--r--Master/texmf-dist/tex/context/base/status-files.pdfbin24730 -> 24734 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/status-lua.pdfbin211559 -> 212009 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/status-mkiv.lua222
-rw-r--r--Master/texmf-dist/tex/context/base/strc-itm.mkvi3
-rw-r--r--Master/texmf-dist/tex/context/base/strc-lst.lua16
-rw-r--r--Master/texmf-dist/tex/context/base/strc-sec.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/supp-box.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/syst-aux.mkiv24
-rw-r--r--Master/texmf-dist/tex/context/base/syst-ini.mkiv201
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ntb.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-xtb.mkvi55
-rw-r--r--Master/texmf-dist/tex/context/base/task-ini.lua5
-rw-r--r--Master/texmf-dist/tex/context/base/trac-log.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-cow.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv136
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv136
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv67
-rw-r--r--Master/texmf-dist/tex/context/base/type-ini.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/type-ini.mkvi41
-rw-r--r--Master/texmf-dist/tex/context/base/type-set.mkiv38
-rw-r--r--Master/texmf-dist/tex/context/base/typo-cap.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/typo-dig.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/typo-dig.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/util-jsn.lua5
-rw-r--r--Master/texmf-dist/tex/context/base/util-lib.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/util-prs.lua54
-rw-r--r--Master/texmf-dist/tex/context/base/util-soc.lua93
-rw-r--r--Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua1
-rw-r--r--Master/texmf-dist/tex/context/base/util-sql-tracers.lua48
-rw-r--r--Master/texmf-dist/tex/context/base/util-tab.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/x-cals.lua10
-rw-r--r--Master/texmf-dist/tex/context/base/x-cals.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/x-mathml.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-02.mkii2
165 files changed, 10202 insertions, 6131 deletions
diff --git a/Master/texmf-dist/tex/context/base/char-def.lua b/Master/texmf-dist/tex/context/base/char-def.lua
index 8580fb6990b..7d2df5d41e4 100644
--- a/Master/texmf-dist/tex/context/base/char-def.lua
+++ b/Master/texmf-dist/tex/context/base/char-def.lua
@@ -78726,6 +78726,8 @@ characters.data={
description="DOUBLE COLON EQUAL",
direction="on",
linebreak="al",
+ mathclass="relation",
+ mathname="coloncolonequals",
specials={ "compat", 0x003A, 0x003A, 0x003D },
unicodeslot=0x2A74,
},
diff --git a/Master/texmf-dist/tex/context/base/cldf-bas.lua b/Master/texmf-dist/tex/context/base/cldf-bas.lua
index 298b374f045..6adeb227233 100644
--- a/Master/texmf-dist/tex/context/base/cldf-bas.lua
+++ b/Master/texmf-dist/tex/context/base/cldf-bas.lua
@@ -29,12 +29,16 @@ local format = string.format
local utfchar = utf.char
local concat = table.concat
-local context = context
-local generics = context.generics
-local variables = interfaces.variables
+local context = context
+local generics = context.generics
+local variables = interfaces.variables
-local new_rule = nodes.pool.rule
-local texcount = tex.count
+local nodepool = nodes.pool
+local new_rule = nodepool.rule
+local new_glyph = nodepool.glyph
+
+local current_font = font.current
+local texcount = tex.count
function context.char(k) -- used as escape too, so don't change to utf
if type(k) == "table" then
@@ -72,7 +76,7 @@ function context.egroup()
end
function context.space()
- context(" ")
+ context("\\space") -- no " " as that gets intercepted
end
function context.hrule(w,h,d,dir)
@@ -83,6 +87,15 @@ function context.hrule(w,h,d,dir)
end
end
+function context.glyph(id,k)
+ if id then
+ if not k then
+ id, k = current_font(), id
+ end
+ context(new_glyph(id,k))
+ end
+end
+
context.vrule = context.hrule
--~ local hbox, bgroup, egroup = context.hbox, context.bgroup, context.egroup
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.lua b/Master/texmf-dist/tex/context/base/colo-ini.lua
index 14873393216..b9e8eb203d6 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.lua
+++ b/Master/texmf-dist/tex/context/base/colo-ini.lua
@@ -39,8 +39,6 @@ local attributes_list = attributes.list
local colorvalues = colors.values
local transparencyvalues = transparencies.values
-local texattribute = tex.attribute
-
colors.sets = colors.sets or { } -- sets are mostly used for
local colorsets = colors.sets -- showing lists of defined
local colorset = { } -- colors
@@ -500,7 +498,7 @@ local function mpcolor(model,ca,ta,default)
end
local function mpnamedcolor(name)
- return mpcolor(texattribute[a_colorspace],l_color[name] or l_color.black)
+ return mpcolor(gettexattribute(a_colorspace),l_color[name] or l_color.black)
end
local function mpoptions(model,ca,ta,default) -- will move to mlib-col
diff --git a/Master/texmf-dist/tex/context/base/cont-fil.mkiv b/Master/texmf-dist/tex/context/base/cont-fil.mkiv
index db7505bcbd3..8e9be155bfe 100644
--- a/Master/texmf-dist/tex/context/base/cont-fil.mkiv
+++ b/Master/texmf-dist/tex/context/base/cont-fil.mkiv
@@ -81,6 +81,8 @@
%definefilesynonym [pre-more] [pre-29]
%definefilesynonym [pre-more] [pre-30]
+\definefilesynonym [pre-tiles] [pre-41]
+
\definefilesynonym [pre-stepwise] [pre-60]
\definefilesynonym [pre-stepper] [pre-61]
@@ -100,4 +102,19 @@
\definefilesynonym [memo] [cor-02]
\definefilesynonym [resume] [cor-03]
+% downward compatible mapping:
+
+\definefilesynonym [pre-41] [present-tiles]
+\definefilesynonym [fnt-29] [fonts-shapes]
+\definefilesynonym [fnt-33] [math-coverage]
+\definefilesynonym [mat-12] [math-parameters]
+\definefilesynonym [mat-20] [math-parameters]
+\definefilesynonym [fnt-25] [math-characters]
+\definefilesynonym [fnt-28] [fonts-goodies]
+\definefilesynonym [fnt-31] [fonts-coverage]
+\definefilesynonym [mat-10] [math-characters]
+\definefilesynonym [mat-11] [math-characters]
+\definefilesynonym [fnt-11] [fonts-system]
+\definefilesynonym [fnt-23] [fonts-shapes]
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkiv b/Master/texmf-dist/tex/context/base/cont-new.mkiv
index 5734855aebe..7f241e357aa 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkiv
+++ b/Master/texmf-dist/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2013.04.20 01:15}
+\newcontextversion{2013.05.28 00:36}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/Master/texmf-dist/tex/context/base/cont-new.tmp b/Master/texmf-dist/tex/context/base/cont-new.tmp
index 4838c5219c8..5d4fcd60a0a 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.tmp
+++ b/Master/texmf-dist/tex/context/base/cont-new.tmp
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2013.04.20 01:08}
+\newcontextversion{2013.05.28 00:34}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/Master/texmf-dist/tex/context/base/context-version.pdf b/Master/texmf-dist/tex/context/base/context-version.pdf
index a91d22aaa6b..1c70a39fc64 100644
--- a/Master/texmf-dist/tex/context/base/context-version.pdf
+++ b/Master/texmf-dist/tex/context/base/context-version.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/context-version.png b/Master/texmf-dist/tex/context/base/context-version.png
index d3ced9ec12b..67edf8a5340 100644
--- a/Master/texmf-dist/tex/context/base/context-version.png
+++ b/Master/texmf-dist/tex/context/base/context-version.png
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/context.mkiv b/Master/texmf-dist/tex/context/base/context.mkiv
index 9945f2a15b7..eaa4311228a 100644
--- a/Master/texmf-dist/tex/context/base/context.mkiv
+++ b/Master/texmf-dist/tex/context/base/context.mkiv
@@ -25,7 +25,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2013.04.20 01:15}
+\edef\contextversion{2013.05.28 00:36}
\edef\contextkind {current}
%D For those who want to use this:
@@ -198,7 +198,6 @@
\loadmarkfile{lang-mis}
\loadmarkfile{lang-url}
\loadmarkfile{lang-def}
-\loadmarkfile{lang-wrd} % can be optional
\loadmkvifile{file-job} % why so late?
@@ -392,6 +391,9 @@
\loadmarkfile{scrp-ini}
+\loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect)
+%loadmarkfile{lang-rep} % can be optional (bt 2013 side effect)
+
\loadmarkfile{prop-ini} % only for downward compatibility
\loadmarkfile{mlib-ctx}
diff --git a/Master/texmf-dist/tex/context/base/context.tmp b/Master/texmf-dist/tex/context/base/context.tmp
index 144f265ae50..7976b46413b 100644
--- a/Master/texmf-dist/tex/context/base/context.tmp
+++ b/Master/texmf-dist/tex/context/base/context.tmp
@@ -25,7 +25,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2013.04.20 01:08}
+\edef\contextversion{2013.05.28 00:34}
\edef\contextkind {beta}
%D For those who want to use this:
@@ -198,7 +198,6 @@
\loadmarkfile{lang-mis}
\loadmarkfile{lang-url}
\loadmarkfile{lang-def}
-\loadmarkfile{lang-wrd} % can be optional
\loadmkvifile{file-job} % why so late?
@@ -392,6 +391,9 @@
\loadmarkfile{scrp-ini}
+\loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect)
+%loadmarkfile{lang-rep} % can be optional (bt 2013 side effect)
+
\loadmarkfile{prop-ini} % only for downward compatibility
\loadmarkfile{mlib-ctx}
diff --git a/Master/texmf-dist/tex/context/base/data-con.lua b/Master/texmf-dist/tex/context/base/data-con.lua
index 354c6807d9f..240538df2db 100644
--- a/Master/texmf-dist/tex/context/base/data-con.lua
+++ b/Master/texmf-dist/tex/context/base/data-con.lua
@@ -74,11 +74,11 @@ function containers.define(category, subcategory, version, enabled)
end
end
-function containers.is_usable(container, name)
+function containers.is_usable(container,name)
return container.enabled and caches and caches.is_writable(container.writable, name)
end
-function containers.is_valid(container, name)
+function containers.is_valid(container,name)
if name and name ~= "" then
local storage = container.storage[name]
return storage and storage.cache_version == container.version
@@ -133,5 +133,6 @@ function containers.content(container,name)
end
function containers.cleanname(name)
- return (gsub(lower(name),"[^%w%d]+","-"))
+ -- return (gsub(lower(name),"[^%w]+","-"))
+ return (gsub(lower(name),"[^%w\128-\255]+","-")) -- more utf friendly
end
diff --git a/Master/texmf-dist/tex/context/base/file-mod.mkvi b/Master/texmf-dist/tex/context/base/file-mod.mkvi
index 92b8a895940..0dbd14bdbe9 100644
--- a/Master/texmf-dist/tex/context/base/file-mod.mkvi
+++ b/Master/texmf-dist/tex/context/base/file-mod.mkvi
@@ -238,6 +238,52 @@
\unexpanded\def\doifolderversionelse#parent#child{\ctxcommand{doifolderversionelse("#parent","#child")}}
\unexpanded\def\doifoldercontextelse #child{\ctxcommand{doifolderversionelse("#child")}}
+%D Relatively new:
+
+\unexpanded\def\syst_modules_direct_lua#1#2%
+ {\edef\m_module_command_command {#1}%
+ \edef\m_module_command_function{#2}%
+ \directsetup{module:\m_module_command_command:start}%
+ \ctxlua{\m_module_command_function()}%
+ \directsetup{module:\m_module_command_command:stop}}
+
+\unexpanded\def\syst_modules_single_lua#1#2%
+ {\edef\m_module_command_command {#1}%
+ \edef\m_module_command_function{#2}%
+ \dosingleempty\syst_modules_single_lua_indeed}
+
+\unexpanded\def\syst_modules_single_lua_indeed[#1]%
+ {\directsetup{module:\m_module_command_command:start}%
+ \ctxlua{\m_module_command_function(\!!bs#1\!!es)}%
+ \directsetup{module:\m_module_command_command:stop}}
+
+\unexpanded\def\syst_modules_double_lua#1#2%
+ {\edef\m_module_command_command {#1}%
+ \edef\m_module_command_function{#2}%
+ \dodoubleempty\syst_modules_double_lua_indeed}
+
+\unexpanded\def\syst_modules_double_lua_indeed[#1][#2]%
+ {\directsetup{module:\m_module_command_command:start}%
+ \ctxlua{\m_module_command_function(\!!bs#1\!!es,\!!bs#2\!!es)}%
+ \directsetup{module:\m_module_command_command:stop}}
+
+\def\installmodulecommandlua #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_direct_lua{\strippedcsname#1}{#2}}}}
+\def\installmodulecommandluasingle#1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_single_lua{\strippedcsname#1}{#2}}}}
+\def\installmodulecommandluadouble#1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_double_lua{\strippedcsname#1}{#2}}}}
+
+\unexpanded\def\syst_modules_one_lua#1#2#3%
+ {\directsetup{module:#1:start}%
+ \ctxlua{#2(\!!bs#3\!!es)}%
+ \directsetup{module:#1:stop}}
+
+\unexpanded\def\syst_modules_two_lua#1#2#3#4%
+ {\directsetup{module:#1:start}%
+ \ctxlua{#2(\!!bs#3\!!es,\!!bs#4\!!es)}%
+ \directsetup{module:#1:stop}}
+
+\def\installmodulecommandluaone #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_one_lua {\strippedcsname#1}{#2}}}}
+\def\installmodulecommandluatwo #1#2{\unexpanded\def#1{\normalexpanded{\syst_modules_two_lua {\strippedcsname#1}{#2}}}}
+
% obsolete
%
% \def\documentresources{\@@erurl}
diff --git a/Master/texmf-dist/tex/context/base/font-age.lua b/Master/texmf-dist/tex/context/base/font-age.lua
index ba8f0bb0b84..bb6883a7470 100644
--- a/Master/texmf-dist/tex/context/base/font-age.lua
+++ b/Master/texmf-dist/tex/context/base/font-age.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-age'] = {
version = 1.001,
- comment = "companion to font-gee.lua",
+ comment = "companion to luatex-fonts.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt",
original = "Adobe Glyph List, version 2.0, September 20, 2002",
@@ -12,3734 +12,4104 @@ if context then
os.exit()
end
-return { -- generated
- ["A"]=65,
- ["AE"]=198,
- ["AEacute"]=508,
- ["AEmacron"]=482,
- ["Aacute"]=193,
- ["Abreve"]=258,
- ["Abreveacute"]=7854,
- ["Abrevecyrillic"]=1232,
- ["Abrevedotbelow"]=7862,
- ["Abrevegrave"]=7856,
- ["Abrevehookabove"]=7858,
- ["Abrevetilde"]=7860,
- ["Acaron"]=461,
- ["Acircle"]=9398,
- ["Acircumflex"]=194,
- ["Acircumflexacute"]=7844,
- ["Acircumflexdotbelow"]=7852,
- ["Acircumflexgrave"]=7846,
- ["Acircumflexhookabove"]=7848,
- ["Acircumflextilde"]=7850,
- ["Adblgrave"]=512,
- ["Adieresis"]=196,
- ["Adieresiscyrillic"]=1234,
- ["Adieresismacron"]=478,
- ["Adotbelow"]=7840,
- ["Adotmacron"]=480,
- ["Agrave"]=192,
- ["Ahookabove"]=7842,
- ["Aiecyrillic"]=1236,
- ["Ainvertedbreve"]=514,
- ["Alpha"]=913,
- ["Alphatonos"]=902,
- ["Amacron"]=256,
- ["Amonospace"]=65313,
- ["Aogonek"]=260,
- ["Aring"]=197,
- ["Aringacute"]=506,
- ["Aringbelow"]=7680,
- ["Atilde"]=195,
- ["Aybarmenian"]=1329,
- ["B"]=66,
- ["Bcircle"]=9399,
- ["Bdotaccent"]=7682,
- ["Bdotbelow"]=7684,
- ["Benarmenian"]=1330,
- ["Beta"]=914,
- ["Bhook"]=385,
- ["Blinebelow"]=7686,
- ["Bmonospace"]=65314,
- ["Btopbar"]=386,
- ["C"]=67,
- ["Caarmenian"]=1342,
- ["Cacute"]=262,
- ["Ccaron"]=268,
- ["Ccedilla"]=199,
- ["Ccedillaacute"]=7688,
- ["Ccircle"]=9400,
- ["Ccircumflex"]=264,
- ["Cdotaccent"]=266,
- ["Chaarmenian"]=1353,
- ["Cheabkhasiancyrillic"]=1212,
- ["Chedescenderabkhasiancyrillic"]=1214,
- ["Chedescendercyrillic"]=1206,
- ["Chedieresiscyrillic"]=1268,
- ["Cheharmenian"]=1347,
- ["Chekhakassiancyrillic"]=1227,
- ["Cheverticalstrokecyrillic"]=1208,
- ["Chi"]=935,
- ["Chook"]=391,
- ["Cmonospace"]=65315,
- ["Coarmenian"]=1361,
- ["D"]=68,
- ["DZ"]=497,
- ["DZcaron"]=452,
- ["Daarmenian"]=1332,
- ["Dafrican"]=393,
- ["Dcaron"]=270,
- ["Dcedilla"]=7696,
- ["Dcircle"]=9401,
- ["Dcircumflexbelow"]=7698,
- ["Ddotaccent"]=7690,
- ["Ddotbelow"]=7692,
- ["Deicoptic"]=1006,
- ["Deltagreek"]=916,
- ["Dhook"]=394,
- ["Digammagreek"]=988,
- ["Dlinebelow"]=7694,
- ["Dmonospace"]=65316,
- ["Dslash"]=272,
- ["Dtopbar"]=395,
- ["Dz"]=498,
- ["Dzcaron"]=453,
- ["Dzeabkhasiancyrillic"]=1248,
- ["E"]=69,
- ["Eacute"]=201,
- ["Ebreve"]=276,
- ["Ecaron"]=282,
- ["Ecedillabreve"]=7708,
- ["Echarmenian"]=1333,
- ["Ecircle"]=9402,
- ["Ecircumflex"]=202,
- ["Ecircumflexacute"]=7870,
- ["Ecircumflexbelow"]=7704,
- ["Ecircumflexdotbelow"]=7878,
- ["Ecircumflexgrave"]=7872,
- ["Ecircumflexhookabove"]=7874,
- ["Ecircumflextilde"]=7876,
- ["Edblgrave"]=516,
- ["Edieresis"]=203,
- ["Edotaccent"]=278,
- ["Edotbelow"]=7864,
- ["Egrave"]=200,
- ["Eharmenian"]=1335,
- ["Ehookabove"]=7866,
- ["Eightroman"]=8551,
- ["Einvertedbreve"]=518,
- ["Eiotifiedcyrillic"]=1124,
- ["Elevenroman"]=8554,
- ["Emacron"]=274,
- ["Emacronacute"]=7702,
- ["Emacrongrave"]=7700,
- ["Emonospace"]=65317,
- ["Endescendercyrillic"]=1186,
- ["Eng"]=330,
- ["Enghecyrillic"]=1188,
- ["Enhookcyrillic"]=1223,
- ["Eogonek"]=280,
- ["Eopen"]=400,
- ["Epsilon"]=917,
- ["Epsilontonos"]=904,
- ["Ereversed"]=398,
- ["Esdescendercyrillic"]=1194,
- ["Esh"]=425,
- ["Eta"]=919,
- ["Etarmenian"]=1336,
- ["Etatonos"]=905,
- ["Eth"]=208,
- ["Etilde"]=7868,
- ["Etildebelow"]=7706,
- ["Ezh"]=439,
- ["Ezhcaron"]=494,
- ["Ezhreversed"]=440,
- ["F"]=70,
- ["Fcircle"]=9403,
- ["Fdotaccent"]=7710,
- ["Feharmenian"]=1366,
- ["Feicoptic"]=996,
- ["Fhook"]=401,
- ["Fiveroman"]=8548,
- ["Fmonospace"]=65318,
- ["Fourroman"]=8547,
- ["G"]=71,
- ["GBsquare"]=13191,
- ["Gacute"]=500,
- ["Gamma"]=915,
- ["Gammaafrican"]=404,
- ["Gangiacoptic"]=1002,
- ["Gbreve"]=286,
- ["Gcaron"]=486,
- ["Gcircle"]=9404,
- ["Gcircumflex"]=284,
- ["Gcommaaccent"]=290,
- ["Gdotaccent"]=288,
- ["Ghadarmenian"]=1346,
- ["Ghemiddlehookcyrillic"]=1172,
- ["Ghestrokecyrillic"]=1170,
- ["Ghook"]=403,
- ["Gimarmenian"]=1331,
- ["Gmacron"]=7712,
- ["Gmonospace"]=65319,
- ["Gsmallhook"]=667,
- ["Gstroke"]=484,
- ["H"]=72,
- ["HPsquare"]=13259,
- ["Haabkhasiancyrillic"]=1192,
- ["Hadescendercyrillic"]=1202,
- ["Hbar"]=294,
- ["Hbrevebelow"]=7722,
- ["Hcedilla"]=7720,
- ["Hcircle"]=9405,
- ["Hcircumflex"]=292,
- ["Hdieresis"]=7718,
- ["Hdotaccent"]=7714,
- ["Hdotbelow"]=7716,
- ["Hmonospace"]=65320,
- ["Hoarmenian"]=1344,
- ["Horicoptic"]=1000,
- ["Hzsquare"]=13200,
- ["I"]=73,
- ["IJ"]=306,
- ["Iacute"]=205,
- ["Ibreve"]=300,
- ["Icaron"]=463,
- ["Icircle"]=9406,
- ["Icircumflex"]=206,
- ["Idblgrave"]=520,
- ["Idieresis"]=207,
- ["Idieresisacute"]=7726,
- ["Idieresiscyrillic"]=1252,
- ["Idotaccent"]=304,
- ["Idotbelow"]=7882,
- ["Iebrevecyrillic"]=1238,
- ["Ifraktur"]=8465,
- ["Igrave"]=204,
- ["Ihookabove"]=7880,
- ["Iinvertedbreve"]=522,
- ["Imacron"]=298,
- ["Imacroncyrillic"]=1250,
- ["Imonospace"]=65321,
- ["Iniarmenian"]=1339,
- ["Iogonek"]=302,
- ["Iota"]=921,
- ["Iotaafrican"]=406,
- ["Iotadieresis"]=938,
- ["Iotatonos"]=906,
- ["Istroke"]=407,
- ["Itilde"]=296,
- ["Itildebelow"]=7724,
- ["Izhitsadblgravecyrillic"]=1142,
- ["J"]=74,
- ["Jaarmenian"]=1345,
- ["Jcircle"]=9407,
- ["Jcircumflex"]=308,
- ["Jheharmenian"]=1355,
- ["Jmonospace"]=65322,
- ["K"]=75,
- ["KBsquare"]=13189,
- ["KKsquare"]=13261,
- ["Kabashkircyrillic"]=1184,
- ["Kacute"]=7728,
- ["Kadescendercyrillic"]=1178,
- ["Kahookcyrillic"]=1219,
- ["Kappa"]=922,
- ["Kastrokecyrillic"]=1182,
- ["Kaverticalstrokecyrillic"]=1180,
- ["Kcaron"]=488,
- ["Kcircle"]=9408,
- ["Kcommaaccent"]=310,
- ["Kdotbelow"]=7730,
- ["Keharmenian"]=1364,
- ["Kenarmenian"]=1343,
- ["Kheicoptic"]=998,
- ["Khook"]=408,
- ["Klinebelow"]=7732,
- ["Kmonospace"]=65323,
- ["Koppacyrillic"]=1152,
- ["Koppagreek"]=990,
- ["Ksicyrillic"]=1134,
- ["L"]=76,
- ["LJ"]=455,
- ["Lacute"]=313,
- ["Lambda"]=923,
- ["Lcaron"]=317,
- ["Lcircle"]=9409,
- ["Lcircumflexbelow"]=7740,
- ["Lcommaaccent"]=315,
- ["Ldotaccent"]=319,
- ["Ldotbelow"]=7734,
- ["Ldotbelowmacron"]=7736,
- ["Liwnarmenian"]=1340,
- ["Lj"]=456,
- ["Llinebelow"]=7738,
- ["Lmonospace"]=65324,
- ["Lslash"]=321,
- ["M"]=77,
- ["MBsquare"]=13190,
- ["Macute"]=7742,
- ["Mcircle"]=9410,
- ["Mdotaccent"]=7744,
- ["Mdotbelow"]=7746,
- ["Menarmenian"]=1348,
- ["Mmonospace"]=65325,
- ["Mturned"]=412,
- ["Mu"]=924,
- ["N"]=78,
- ["NJ"]=458,
- ["Nacute"]=323,
- ["Ncaron"]=327,
- ["Ncircle"]=9411,
- ["Ncircumflexbelow"]=7754,
- ["Ncommaaccent"]=325,
- ["Ndotaccent"]=7748,
- ["Ndotbelow"]=7750,
- ["Nhookleft"]=413,
- ["Nineroman"]=8552,
- ["Nj"]=459,
- ["Nlinebelow"]=7752,
- ["Nmonospace"]=65326,
- ["Nowarmenian"]=1350,
- ["Ntilde"]=209,
- ["Nu"]=925,
- ["O"]=79,
- ["OE"]=338,
- ["Oacute"]=211,
- ["Obarredcyrillic"]=1256,
- ["Obarreddieresiscyrillic"]=1258,
- ["Obreve"]=334,
- ["Ocaron"]=465,
- ["Ocenteredtilde"]=415,
- ["Ocircle"]=9412,
- ["Ocircumflex"]=212,
- ["Ocircumflexacute"]=7888,
- ["Ocircumflexdotbelow"]=7896,
- ["Ocircumflexgrave"]=7890,
- ["Ocircumflexhookabove"]=7892,
- ["Ocircumflextilde"]=7894,
- ["Odblgrave"]=524,
- ["Odieresis"]=214,
- ["Odieresiscyrillic"]=1254,
- ["Odotbelow"]=7884,
- ["Ograve"]=210,
- ["Oharmenian"]=1365,
- ["Ohookabove"]=7886,
- ["Ohorn"]=416,
- ["Ohornacute"]=7898,
- ["Ohorndotbelow"]=7906,
- ["Ohorngrave"]=7900,
- ["Ohornhookabove"]=7902,
- ["Ohorntilde"]=7904,
- ["Ohungarumlaut"]=336,
- ["Oi"]=418,
- ["Oinvertedbreve"]=526,
- ["Omacron"]=332,
- ["Omacronacute"]=7762,
- ["Omacrongrave"]=7760,
- ["Omega"]=8486,
- ["Omegacyrillic"]=1120,
- ["Omegagreek"]=937,
- ["Omegaroundcyrillic"]=1146,
- ["Omegatitlocyrillic"]=1148,
- ["Omegatonos"]=911,
- ["Omicron"]=927,
- ["Omicrontonos"]=908,
- ["Omonospace"]=65327,
- ["Oneroman"]=8544,
- ["Oogonek"]=490,
- ["Oogonekmacron"]=492,
- ["Oopen"]=390,
- ["Oslash"]=216,
- ["Ostrokeacute"]=510,
- ["Otcyrillic"]=1150,
- ["Otilde"]=213,
- ["Otildeacute"]=7756,
- ["Otildedieresis"]=7758,
- ["P"]=80,
- ["Pacute"]=7764,
- ["Pcircle"]=9413,
- ["Pdotaccent"]=7766,
- ["Peharmenian"]=1354,
- ["Pemiddlehookcyrillic"]=1190,
- ["Phi"]=934,
- ["Phook"]=420,
- ["Pi"]=928,
- ["Piwrarmenian"]=1363,
- ["Pmonospace"]=65328,
- ["Psi"]=936,
- ["Psicyrillic"]=1136,
- ["Q"]=81,
- ["Qcircle"]=9414,
- ["Qmonospace"]=65329,
- ["R"]=82,
- ["Raarmenian"]=1356,
- ["Racute"]=340,
- ["Rcaron"]=344,
- ["Rcircle"]=9415,
- ["Rcommaaccent"]=342,
- ["Rdblgrave"]=528,
- ["Rdotaccent"]=7768,
- ["Rdotbelow"]=7770,
- ["Rdotbelowmacron"]=7772,
- ["Reharmenian"]=1360,
- ["Rfraktur"]=8476,
- ["Rho"]=929,
- ["Rinvertedbreve"]=530,
- ["Rlinebelow"]=7774,
- ["Rmonospace"]=65330,
- ["Rsmallinverted"]=641,
- ["Rsmallinvertedsuperior"]=694,
- ["S"]=83,
- ["SF010000"]=9484,
- ["SF020000"]=9492,
- ["SF030000"]=9488,
- ["SF040000"]=9496,
- ["SF050000"]=9532,
- ["SF060000"]=9516,
- ["SF070000"]=9524,
- ["SF080000"]=9500,
- ["SF090000"]=9508,
- ["SF100000"]=9472,
- ["SF110000"]=9474,
- ["SF190000"]=9569,
- ["SF200000"]=9570,
- ["SF210000"]=9558,
- ["SF220000"]=9557,
- ["SF230000"]=9571,
- ["SF240000"]=9553,
- ["SF250000"]=9559,
- ["SF260000"]=9565,
- ["SF270000"]=9564,
- ["SF280000"]=9563,
- ["SF360000"]=9566,
- ["SF370000"]=9567,
- ["SF380000"]=9562,
- ["SF390000"]=9556,
- ["SF400000"]=9577,
- ["SF410000"]=9574,
- ["SF420000"]=9568,
- ["SF430000"]=9552,
- ["SF440000"]=9580,
- ["SF450000"]=9575,
- ["SF460000"]=9576,
- ["SF470000"]=9572,
- ["SF480000"]=9573,
- ["SF490000"]=9561,
- ["SF500000"]=9560,
- ["SF510000"]=9554,
- ["SF520000"]=9555,
- ["SF530000"]=9579,
- ["SF540000"]=9578,
- ["Sacute"]=346,
- ["Sacutedotaccent"]=7780,
- ["Sampigreek"]=992,
- ["Scaron"]=352,
- ["Scarondotaccent"]=7782,
- ["Scedilla"]=350,
- ["Schwa"]=399,
- ["Schwacyrillic"]=1240,
- ["Schwadieresiscyrillic"]=1242,
- ["Scircle"]=9416,
- ["Scircumflex"]=348,
- ["Scommaaccent"]=536,
- ["Sdotaccent"]=7776,
- ["Sdotbelow"]=7778,
- ["Sdotbelowdotaccent"]=7784,
- ["Seharmenian"]=1357,
- ["Sevenroman"]=8550,
- ["Shaarmenian"]=1351,
- ["Sheicoptic"]=994,
- ["Shhacyrillic"]=1210,
- ["Shimacoptic"]=1004,
- ["Sigma"]=931,
- ["Sixroman"]=8549,
- ["Smonospace"]=65331,
- ["Stigmagreek"]=986,
- ["T"]=84,
- ["Tau"]=932,
- ["Tbar"]=358,
- ["Tcaron"]=356,
- ["Tcircle"]=9417,
- ["Tcircumflexbelow"]=7792,
- ["Tcommaaccent"]=354,
- ["Tdotaccent"]=7786,
- ["Tdotbelow"]=7788,
- ["Tedescendercyrillic"]=1196,
- ["Tenroman"]=8553,
- ["Tetsecyrillic"]=1204,
- ["Theta"]=920,
- ["Thook"]=428,
- ["Thorn"]=222,
- ["Threeroman"]=8546,
- ["Tiwnarmenian"]=1359,
- ["Tlinebelow"]=7790,
- ["Tmonospace"]=65332,
- ["Toarmenian"]=1337,
- ["Tonefive"]=444,
- ["Tonesix"]=388,
- ["Tonetwo"]=423,
- ["Tretroflexhook"]=430,
- ["Twelveroman"]=8555,
- ["Tworoman"]=8545,
- ["U"]=85,
- ["Uacute"]=218,
- ["Ubreve"]=364,
- ["Ucaron"]=467,
- ["Ucircle"]=9418,
- ["Ucircumflex"]=219,
- ["Ucircumflexbelow"]=7798,
- ["Udblgrave"]=532,
- ["Udieresis"]=220,
- ["Udieresisacute"]=471,
- ["Udieresisbelow"]=7794,
- ["Udieresiscaron"]=473,
- ["Udieresiscyrillic"]=1264,
- ["Udieresisgrave"]=475,
- ["Udieresismacron"]=469,
- ["Udotbelow"]=7908,
- ["Ugrave"]=217,
- ["Uhookabove"]=7910,
- ["Uhorn"]=431,
- ["Uhornacute"]=7912,
- ["Uhorndotbelow"]=7920,
- ["Uhorngrave"]=7914,
- ["Uhornhookabove"]=7916,
- ["Uhorntilde"]=7918,
- ["Uhungarumlaut"]=368,
- ["Uhungarumlautcyrillic"]=1266,
- ["Uinvertedbreve"]=534,
- ["Ukcyrillic"]=1144,
- ["Umacron"]=362,
- ["Umacroncyrillic"]=1262,
- ["Umacrondieresis"]=7802,
- ["Umonospace"]=65333,
- ["Uogonek"]=370,
- ["Upsilon"]=933,
- ["Upsilonacutehooksymbolgreek"]=979,
- ["Upsilonafrican"]=433,
- ["Upsilondieresis"]=939,
- ["Upsilondieresishooksymbolgreek"]=980,
- ["Upsilonhooksymbol"]=978,
- ["Upsilontonos"]=910,
- ["Uring"]=366,
- ["Ustraightcyrillic"]=1198,
- ["Ustraightstrokecyrillic"]=1200,
- ["Utilde"]=360,
- ["Utildeacute"]=7800,
- ["Utildebelow"]=7796,
- ["V"]=86,
- ["Vcircle"]=9419,
- ["Vdotbelow"]=7806,
- ["Vewarmenian"]=1358,
- ["Vhook"]=434,
- ["Vmonospace"]=65334,
- ["Voarmenian"]=1352,
- ["Vtilde"]=7804,
- ["W"]=87,
- ["Wacute"]=7810,
- ["Wcircle"]=9420,
- ["Wcircumflex"]=372,
- ["Wdieresis"]=7812,
- ["Wdotaccent"]=7814,
- ["Wdotbelow"]=7816,
- ["Wgrave"]=7808,
- ["Wmonospace"]=65335,
- ["X"]=88,
- ["Xcircle"]=9421,
- ["Xdieresis"]=7820,
- ["Xdotaccent"]=7818,
- ["Xeharmenian"]=1341,
- ["Xi"]=926,
- ["Xmonospace"]=65336,
- ["Y"]=89,
- ["Yacute"]=221,
- ["Ycircle"]=9422,
- ["Ycircumflex"]=374,
- ["Ydieresis"]=376,
- ["Ydotaccent"]=7822,
- ["Ydotbelow"]=7924,
- ["Yerudieresiscyrillic"]=1272,
- ["Ygrave"]=7922,
- ["Yhook"]=435,
- ["Yhookabove"]=7926,
- ["Yiarmenian"]=1349,
- ["Yiwnarmenian"]=1362,
- ["Ymonospace"]=65337,
- ["Ytilde"]=7928,
- ["Yusbigcyrillic"]=1130,
- ["Yusbigiotifiedcyrillic"]=1132,
- ["Yuslittlecyrillic"]=1126,
- ["Yuslittleiotifiedcyrillic"]=1128,
- ["Z"]=90,
- ["Zaarmenian"]=1334,
- ["Zacute"]=377,
- ["Zcaron"]=381,
- ["Zcircle"]=9423,
- ["Zcircumflex"]=7824,
- ["Zdotaccent"]=379,
- ["Zdotbelow"]=7826,
- ["Zedescendercyrillic"]=1176,
- ["Zedieresiscyrillic"]=1246,
- ["Zeta"]=918,
- ["Zhearmenian"]=1338,
- ["Zhebrevecyrillic"]=1217,
- ["Zhedescendercyrillic"]=1174,
- ["Zhedieresiscyrillic"]=1244,
- ["Zlinebelow"]=7828,
- ["Zmonospace"]=65338,
- ["Zstroke"]=437,
- ["a"]=97,
- ["aabengali"]=2438,
- ["aacute"]=225,
- ["aadeva"]=2310,
- ["aagujarati"]=2694,
- ["aagurmukhi"]=2566,
- ["aamatragurmukhi"]=2622,
- ["aarusquare"]=13059,
- ["aavowelsignbengali"]=2494,
- ["aavowelsigndeva"]=2366,
- ["aavowelsigngujarati"]=2750,
- ["abbreviationmarkarmenian"]=1375,
- ["abbreviationsigndeva"]=2416,
- ["abengali"]=2437,
- ["abopomofo"]=12570,
- ["abreve"]=259,
- ["abreveacute"]=7855,
- ["abrevecyrillic"]=1233,
- ["abrevedotbelow"]=7863,
- ["abrevegrave"]=7857,
- ["abrevehookabove"]=7859,
- ["abrevetilde"]=7861,
- ["acaron"]=462,
- ["acircle"]=9424,
- ["acircumflex"]=226,
- ["acircumflexacute"]=7845,
- ["acircumflexdotbelow"]=7853,
- ["acircumflexgrave"]=7847,
- ["acircumflexhookabove"]=7849,
- ["acircumflextilde"]=7851,
- ["acute"]=180,
- ["acutebelowcmb"]=791,
- ["acutecomb"]=769,
- ["acutedeva"]=2388,
- ["acutelowmod"]=719,
- ["acutetonecmb"]=833,
- ["adblgrave"]=513,
- ["addakgurmukhi"]=2673,
- ["adeva"]=2309,
- ["adieresis"]=228,
- ["adieresiscyrillic"]=1235,
- ["adieresismacron"]=479,
- ["adotbelow"]=7841,
- ["adotmacron"]=481,
- ["ae"]=230,
- ["aeacute"]=509,
- ["aekorean"]=12624,
- ["aemacron"]=483,
- ["afii10017"]=1040,
- ["afii10018"]=1041,
- ["afii10019"]=1042,
- ["afii10020"]=1043,
- ["afii10021"]=1044,
- ["afii10022"]=1045,
- ["afii10023"]=1025,
- ["afii10024"]=1046,
- ["afii10025"]=1047,
- ["afii10026"]=1048,
- ["afii10027"]=1049,
- ["afii10028"]=1050,
- ["afii10029"]=1051,
- ["afii10030"]=1052,
- ["afii10031"]=1053,
- ["afii10032"]=1054,
- ["afii10033"]=1055,
- ["afii10034"]=1056,
- ["afii10035"]=1057,
- ["afii10036"]=1058,
- ["afii10037"]=1059,
- ["afii10038"]=1060,
- ["afii10039"]=1061,
- ["afii10040"]=1062,
- ["afii10041"]=1063,
- ["afii10042"]=1064,
- ["afii10043"]=1065,
- ["afii10044"]=1066,
- ["afii10045"]=1067,
- ["afii10046"]=1068,
- ["afii10047"]=1069,
- ["afii10048"]=1070,
- ["afii10049"]=1071,
- ["afii10050"]=1168,
- ["afii10051"]=1026,
- ["afii10052"]=1027,
- ["afii10053"]=1028,
- ["afii10054"]=1029,
- ["afii10055"]=1030,
- ["afii10056"]=1031,
- ["afii10057"]=1032,
- ["afii10058"]=1033,
- ["afii10059"]=1034,
- ["afii10060"]=1035,
- ["afii10061"]=1036,
- ["afii10062"]=1038,
- ["afii10065"]=1072,
- ["afii10145"]=1039,
- ["afii10146"]=1122,
- ["afii10147"]=1138,
- ["afii10148"]=1140,
- ["afii299"]=8206,
- ["afii300"]=8207,
- ["afii301"]=8205,
- ["afii57534"]=1749,
- ["afii61573"]=8236,
- ["afii61574"]=8237,
- ["afii61575"]=8238,
- ["agrave"]=224,
- ["agujarati"]=2693,
- ["agurmukhi"]=2565,
- ["ahiragana"]=12354,
- ["ahookabove"]=7843,
- ["aibengali"]=2448,
- ["aibopomofo"]=12574,
- ["aideva"]=2320,
- ["aiecyrillic"]=1237,
- ["aigujarati"]=2704,
- ["aigurmukhi"]=2576,
- ["aimatragurmukhi"]=2632,
- ["ainarabic"]=1593,
- ["ainfinalarabic"]=65226,
- ["aininitialarabic"]=65227,
- ["ainmedialarabic"]=65228,
- ["ainvertedbreve"]=515,
- ["aivowelsignbengali"]=2504,
- ["aivowelsigndeva"]=2376,
- ["aivowelsigngujarati"]=2760,
- ["akatakana"]=12450,
- ["akatakanahalfwidth"]=65393,
- ["akorean"]=12623,
- ["alefarabic"]=1575,
- ["alefdageshhebrew"]=64304,
- ["aleffinalarabic"]=65166,
- ["alefhamzaabovearabic"]=1571,
- ["alefhamzaabovefinalarabic"]=65156,
- ["alefhamzabelowarabic"]=1573,
- ["alefhamzabelowfinalarabic"]=65160,
- ["alefhebrew"]=1488,
- ["aleflamedhebrew"]=64335,
- ["alefmaddaabovearabic"]=1570,
- ["alefmaddaabovefinalarabic"]=65154,
- ["alefmaksuraarabic"]=1609,
- ["alefmaksurafinalarabic"]=65264,
- ["alefpatahhebrew"]=64302,
- ["alefqamatshebrew"]=64303,
- ["aleph"]=8501,
- ["allequal"]=8780,
- ["alpha"]=945,
- ["alphatonos"]=940,
- ["amacron"]=257,
- ["amonospace"]=65345,
- ["ampersand"]=38,
- ["ampersandmonospace"]=65286,
- ["amsquare"]=13250,
- ["anbopomofo"]=12578,
- ["angbopomofo"]=12580,
- ["angkhankhuthai"]=3674,
- ["angle"]=8736,
- ["anglebracketleft"]=12296,
- ["anglebracketleftvertical"]=65087,
- ["anglebracketright"]=12297,
- ["anglebracketrightvertical"]=65088,
- ["angleleft"]=9001,
- ["angleright"]=9002,
- ["angstrom"]=8491,
- ["anoteleia"]=903,
- ["anudattadeva"]=2386,
- ["anusvarabengali"]=2434,
- ["anusvaradeva"]=2306,
- ["anusvaragujarati"]=2690,
- ["aogonek"]=261,
- ["apaatosquare"]=13056,
- ["aparen"]=9372,
- ["apostrophearmenian"]=1370,
- ["apostrophemod"]=700,
- ["apple"]=63743,
- ["approaches"]=8784,
- ["approxequal"]=8776,
- ["approxequalorimage"]=8786,
- ["araeaekorean"]=12686,
- ["araeakorean"]=12685,
- ["arc"]=8978,
- ["arighthalfring"]=7834,
- ["aring"]=229,
- ["aringacute"]=507,
- ["aringbelow"]=7681,
- ["arrowboth"]=8596,
- ["arrowdashdown"]=8675,
- ["arrowdashleft"]=8672,
- ["arrowdashright"]=8674,
- ["arrowdashup"]=8673,
- ["arrowdbldown"]=8659,
- ["arrowdblup"]=8657,
- ["arrowdown"]=8595,
- ["arrowdownleft"]=8601,
- ["arrowdownright"]=8600,
- ["arrowdownwhite"]=8681,
- ["arrowheaddownmod"]=709,
- ["arrowheadleftmod"]=706,
- ["arrowheadrightmod"]=707,
- ["arrowheadupmod"]=708,
- ["arrowleft"]=8592,
- ["arrowleftdbl"]=8656,
- ["arrowleftdblstroke"]=8653,
- ["arrowleftoverright"]=8646,
- ["arrowleftwhite"]=8678,
- ["arrowright"]=8594,
- ["arrowrightdblstroke"]=8655,
- ["arrowrightheavy"]=10142,
- ["arrowrightoverleft"]=8644,
- ["arrowrightwhite"]=8680,
- ["arrowtableft"]=8676,
- ["arrowtabright"]=8677,
- ["arrowup"]=8593,
- ["arrowupdn"]=8597,
- ["arrowupdownbase"]=8616,
- ["arrowupleft"]=8598,
- ["arrowupleftofdown"]=8645,
- ["arrowupright"]=8599,
- ["arrowupwhite"]=8679,
- ["asciicircum"]=94,
- ["asciicircummonospace"]=65342,
- ["asciitilde"]=126,
- ["asciitildemonospace"]=65374,
- ["ascript"]=593,
- ["ascriptturned"]=594,
- ["asmallhiragana"]=12353,
- ["asmallkatakana"]=12449,
- ["asmallkatakanahalfwidth"]=65383,
- ["asterisk"]=42,
- ["asteriskarabic"]=1645,
- ["asteriskmath"]=8727,
- ["asteriskmonospace"]=65290,
- ["asterisksmall"]=65121,
- ["asterism"]=8258,
- ["asymptoticallyequal"]=8771,
- ["at"]=64,
- ["atilde"]=227,
- ["atmonospace"]=65312,
- ["atsmall"]=65131,
- ["aturned"]=592,
- ["aubengali"]=2452,
- ["aubopomofo"]=12576,
- ["audeva"]=2324,
- ["augujarati"]=2708,
- ["augurmukhi"]=2580,
- ["aulengthmarkbengali"]=2519,
- ["aumatragurmukhi"]=2636,
- ["auvowelsignbengali"]=2508,
- ["auvowelsigndeva"]=2380,
- ["auvowelsigngujarati"]=2764,
- ["avagrahadeva"]=2365,
- ["aybarmenian"]=1377,
- ["ayinaltonehebrew"]=64288,
- ["ayinhebrew"]=1506,
- ["b"]=98,
- ["babengali"]=2476,
- ["backslash"]=92,
- ["backslashmonospace"]=65340,
- ["badeva"]=2348,
- ["bagujarati"]=2732,
- ["bagurmukhi"]=2604,
- ["bahiragana"]=12400,
- ["bahtthai"]=3647,
- ["bakatakana"]=12496,
- ["barmonospace"]=65372,
- ["bbopomofo"]=12549,
- ["bcircle"]=9425,
- ["bdotaccent"]=7683,
- ["bdotbelow"]=7685,
- ["beamedsixteenthnotes"]=9836,
- ["because"]=8757,
- ["becyrillic"]=1073,
- ["beharabic"]=1576,
- ["behfinalarabic"]=65168,
- ["behinitialarabic"]=65169,
- ["behiragana"]=12409,
- ["behmedialarabic"]=65170,
- ["behmeeminitialarabic"]=64671,
- ["behmeemisolatedarabic"]=64520,
- ["behnoonfinalarabic"]=64621,
- ["bekatakana"]=12505,
- ["benarmenian"]=1378,
- ["beta"]=946,
- ["betasymbolgreek"]=976,
- ["betdageshhebrew"]=64305,
- ["bethebrew"]=1489,
- ["betrafehebrew"]=64332,
- ["bhabengali"]=2477,
- ["bhadeva"]=2349,
- ["bhagujarati"]=2733,
- ["bhagurmukhi"]=2605,
- ["bhook"]=595,
- ["bihiragana"]=12403,
- ["bikatakana"]=12499,
- ["bilabialclick"]=664,
- ["bindigurmukhi"]=2562,
- ["birusquare"]=13105,
- ["blackcircle"]=9679,
- ["blackdiamond"]=9670,
- ["blackleftpointingtriangle"]=9664,
- ["blacklenticularbracketleft"]=12304,
- ["blacklenticularbracketleftvertical"]=65083,
- ["blacklenticularbracketright"]=12305,
- ["blacklenticularbracketrightvertical"]=65084,
- ["blacklowerlefttriangle"]=9699,
- ["blacklowerrighttriangle"]=9698,
- ["blackrightpointingtriangle"]=9654,
- ["blacksmallsquare"]=9642,
- ["blackstar"]=9733,
- ["blackupperlefttriangle"]=9700,
- ["blackupperrighttriangle"]=9701,
- ["blackuppointingsmalltriangle"]=9652,
- ["blank"]=9251,
- ["blinebelow"]=7687,
- ["block"]=9608,
- ["bmonospace"]=65346,
- ["bobaimaithai"]=3610,
- ["bohiragana"]=12412,
- ["bokatakana"]=12508,
- ["bparen"]=9373,
- ["bqsquare"]=13251,
- ["braceleft"]=123,
- ["braceleftmonospace"]=65371,
- ["braceleftsmall"]=65115,
- ["braceleftvertical"]=65079,
- ["braceright"]=125,
- ["bracerightmonospace"]=65373,
- ["bracerightsmall"]=65116,
- ["bracerightvertical"]=65080,
- ["bracketleft"]=91,
- ["bracketleftmonospace"]=65339,
- ["bracketright"]=93,
- ["bracketrightmonospace"]=65341,
- ["breve"]=728,
- ["brevebelowcmb"]=814,
- ["brevecmb"]=774,
- ["breveinvertedbelowcmb"]=815,
- ["breveinvertedcmb"]=785,
- ["breveinverteddoublecmb"]=865,
- ["bridgebelowcmb"]=810,
- ["bridgeinvertedbelowcmb"]=826,
- ["brokenbar"]=166,
- ["bstroke"]=384,
- ["btopbar"]=387,
- ["buhiragana"]=12406,
- ["bukatakana"]=12502,
- ["bullet"]=8226,
- ["bulletoperator"]=8729,
- ["bullseye"]=9678,
- ["c"]=99,
- ["caarmenian"]=1390,
- ["cabengali"]=2458,
- ["cacute"]=263,
- ["cadeva"]=2330,
- ["cagujarati"]=2714,
- ["cagurmukhi"]=2586,
- ["calsquare"]=13192,
- ["candrabindubengali"]=2433,
- ["candrabinducmb"]=784,
- ["candrabindudeva"]=2305,
- ["candrabindugujarati"]=2689,
- ["capslock"]=8682,
- ["careof"]=8453,
- ["caron"]=711,
- ["caronbelowcmb"]=812,
- ["caroncmb"]=780,
- ["carriagereturn"]=8629,
- ["cbopomofo"]=12568,
- ["ccaron"]=269,
- ["ccedilla"]=231,
- ["ccedillaacute"]=7689,
- ["ccircle"]=9426,
- ["ccircumflex"]=265,
- ["ccurl"]=597,
- ["cdotaccent"]=267,
- ["cdsquare"]=13253,
- ["cedilla"]=184,
- ["cedillacmb"]=807,
- ["cent"]=162,
- ["centigrade"]=8451,
- ["centmonospace"]=65504,
- ["chaarmenian"]=1401,
- ["chabengali"]=2459,
- ["chadeva"]=2331,
- ["chagujarati"]=2715,
- ["chagurmukhi"]=2587,
- ["chbopomofo"]=12564,
- ["cheabkhasiancyrillic"]=1213,
- ["checkmark"]=10003,
- ["checyrillic"]=1095,
- ["chedescenderabkhasiancyrillic"]=1215,
- ["chedescendercyrillic"]=1207,
- ["chedieresiscyrillic"]=1269,
- ["cheharmenian"]=1395,
- ["chekhakassiancyrillic"]=1228,
- ["cheverticalstrokecyrillic"]=1209,
- ["chi"]=967,
- ["chieuchacirclekorean"]=12919,
- ["chieuchaparenkorean"]=12823,
- ["chieuchcirclekorean"]=12905,
- ["chieuchkorean"]=12618,
- ["chieuchparenkorean"]=12809,
- ["chochangthai"]=3594,
- ["chochanthai"]=3592,
- ["chochingthai"]=3593,
- ["chochoethai"]=3596,
- ["chook"]=392,
- ["cieucacirclekorean"]=12918,
- ["cieucaparenkorean"]=12822,
- ["cieuccirclekorean"]=12904,
- ["cieuckorean"]=12616,
- ["cieucparenkorean"]=12808,
- ["cieucuparenkorean"]=12828,
- ["circleot"]=8857,
- ["circlepostalmark"]=12342,
- ["circlewithlefthalfblack"]=9680,
- ["circlewithrighthalfblack"]=9681,
- ["circumflex"]=710,
- ["circumflexbelowcmb"]=813,
- ["circumflexcmb"]=770,
- ["clear"]=8999,
- ["clickalveolar"]=450,
- ["clickdental"]=448,
- ["clicklateral"]=449,
- ["clickretroflex"]=451,
- ["clubsuitblack"]=9827,
- ["clubsuitwhite"]=9831,
- ["cmcubedsquare"]=13220,
- ["cmonospace"]=65347,
- ["cmsquaredsquare"]=13216,
- ["coarmenian"]=1409,
- ["colon"]=58,
- ["colonmonospace"]=65306,
- ["colonsign"]=8353,
- ["colonsmall"]=65109,
- ["colontriangularhalfmod"]=721,
- ["colontriangularmod"]=720,
- ["comma"]=44,
- ["commaabovecmb"]=787,
- ["commaaboverightcmb"]=789,
- ["commaarabic"]=1548,
- ["commaarmenian"]=1373,
- ["commamonospace"]=65292,
- ["commareversedabovecmb"]=788,
- ["commareversedmod"]=701,
- ["commasmall"]=65104,
- ["commaturnedabovecmb"]=786,
- ["commaturnedmod"]=699,
- ["congruent"]=8773,
- ["contourintegral"]=8750,
- ["control"]=8963,
- ["controlACK"]=6,
- ["controlBEL"]=7,
- ["controlBS"]=8,
- ["controlCAN"]=24,
- ["controlCR"]=13,
- ["controlDC1"]=17,
- ["controlDC2"]=18,
- ["controlDC3"]=19,
- ["controlDC4"]=20,
- ["controlDEL"]=127,
- ["controlDLE"]=16,
- ["controlEM"]=25,
- ["controlENQ"]=5,
- ["controlEOT"]=4,
- ["controlESC"]=27,
- ["controlETB"]=23,
- ["controlETX"]=3,
- ["controlFF"]=12,
- ["controlFS"]=28,
- ["controlGS"]=29,
- ["controlHT"]=9,
- ["controlLF"]=10,
- ["controlNAK"]=21,
- ["controlRS"]=30,
- ["controlSI"]=15,
- ["controlSO"]=14,
- ["controlSOT"]=2,
- ["controlSTX"]=1,
- ["controlSUB"]=26,
- ["controlSYN"]=22,
- ["controlUS"]=31,
- ["controlVT"]=11,
- ["copyright"]=169,
- ["cornerbracketleft"]=12300,
- ["cornerbracketlefthalfwidth"]=65378,
- ["cornerbracketleftvertical"]=65089,
- ["cornerbracketright"]=12301,
- ["cornerbracketrighthalfwidth"]=65379,
- ["cornerbracketrightvertical"]=65090,
- ["corporationsquare"]=13183,
- ["cosquare"]=13255,
- ["coverkgsquare"]=13254,
- ["cparen"]=9374,
- ["cruzeiro"]=8354,
- ["cstretched"]=663,
- ["curlyand"]=8911,
- ["curlyor"]=8910,
- ["currency"]=164,
- ["d"]=100,
- ["daarmenian"]=1380,
- ["dabengali"]=2470,
- ["dadarabic"]=1590,
- ["dadeva"]=2342,
- ["dadfinalarabic"]=65214,
- ["dadinitialarabic"]=65215,
- ["dadmedialarabic"]=65216,
- ["dageshhebrew"]=1468,
- ["dagger"]=8224,
- ["daggerdbl"]=8225,
- ["dagujarati"]=2726,
- ["dagurmukhi"]=2598,
- ["dahiragana"]=12384,
- ["dakatakana"]=12480,
- ["dalarabic"]=1583,
- ["daletdageshhebrew"]=64307,
- ["dalettserehebrew"]=1491,
- ["dalfinalarabic"]=65194,
- ["dammalowarabic"]=1615,
- ["dammatanarabic"]=1612,
- ["danda"]=2404,
- ["dargalefthebrew"]=1447,
- ["dasiapneumatacyrilliccmb"]=1157,
- ["dblanglebracketleft"]=12298,
- ["dblanglebracketleftvertical"]=65085,
- ["dblanglebracketright"]=12299,
- ["dblanglebracketrightvertical"]=65086,
- ["dblarchinvertedbelowcmb"]=811,
- ["dblarrowleft"]=8660,
- ["dblarrowright"]=8658,
- ["dbldanda"]=2405,
- ["dblgravecmb"]=783,
- ["dblintegral"]=8748,
- ["dbllowlinecmb"]=819,
- ["dbloverlinecmb"]=831,
- ["dblprimemod"]=698,
- ["dblverticalbar"]=8214,
- ["dblverticallineabovecmb"]=782,
- ["dbopomofo"]=12553,
- ["dbsquare"]=13256,
- ["dcaron"]=271,
- ["dcedilla"]=7697,
- ["dcircle"]=9427,
- ["dcircumflexbelow"]=7699,
- ["ddabengali"]=2465,
- ["ddadeva"]=2337,
- ["ddagujarati"]=2721,
- ["ddagurmukhi"]=2593,
- ["ddalarabic"]=1672,
- ["ddalfinalarabic"]=64393,
- ["dddhadeva"]=2396,
- ["ddhabengali"]=2466,
- ["ddhadeva"]=2338,
- ["ddhagujarati"]=2722,
- ["ddhagurmukhi"]=2594,
- ["ddotaccent"]=7691,
- ["ddotbelow"]=7693,
- ["decimalseparatorpersian"]=1643,
- ["decyrillic"]=1076,
- ["degree"]=176,
- ["dehihebrew"]=1453,
- ["dehiragana"]=12391,
- ["deicoptic"]=1007,
- ["dekatakana"]=12487,
- ["deleteleft"]=9003,
- ["deleteright"]=8998,
- ["delta"]=948,
- ["deltaturned"]=397,
- ["denominatorminusonenumeratorbengali"]=2552,
- ["dezh"]=676,
- ["dhabengali"]=2471,
- ["dhadeva"]=2343,
- ["dhagujarati"]=2727,
- ["dhagurmukhi"]=2599,
- ["dhook"]=599,
- ["dialytikatonoscmb"]=836,
- ["diamond"]=9830,
- ["diamondsuitwhite"]=9826,
- ["dieresis"]=168,
- ["dieresisbelowcmb"]=804,
- ["dieresiscmb"]=776,
- ["dieresistonos"]=901,
- ["dihiragana"]=12386,
- ["dikatakana"]=12482,
- ["dittomark"]=12291,
- ["divide"]=247,
- ["divides"]=8739,
- ["divisionslash"]=8725,
- ["djecyrillic"]=1106,
- ["dlinebelow"]=7695,
- ["dlsquare"]=13207,
- ["dmacron"]=273,
- ["dmonospace"]=65348,
- ["dnblock"]=9604,
- ["dochadathai"]=3598,
- ["dodekthai"]=3604,
- ["dohiragana"]=12393,
- ["dokatakana"]=12489,
- ["dollar"]=36,
- ["dollarmonospace"]=65284,
- ["dollarsmall"]=65129,
- ["dong"]=8363,
- ["dorusquare"]=13094,
- ["dotaccent"]=729,
- ["dotaccentcmb"]=775,
- ["dotbelowcomb"]=803,
- ["dotkatakana"]=12539,
- ["dotlessi"]=305,
- ["dotlessjstrokehook"]=644,
- ["dotmath"]=8901,
- ["dottedcircle"]=9676,
- ["downtackbelowcmb"]=798,
- ["downtackmod"]=725,
- ["dparen"]=9375,
- ["dtail"]=598,
- ["dtopbar"]=396,
- ["duhiragana"]=12389,
- ["dukatakana"]=12485,
- ["dz"]=499,
- ["dzaltone"]=675,
- ["dzcaron"]=454,
- ["dzcurl"]=677,
- ["dzeabkhasiancyrillic"]=1249,
- ["dzecyrillic"]=1109,
- ["dzhecyrillic"]=1119,
- ["e"]=101,
- ["eacute"]=233,
- ["earth"]=9793,
- ["ebengali"]=2447,
- ["ebopomofo"]=12572,
- ["ebreve"]=277,
- ["ecandradeva"]=2317,
- ["ecandragujarati"]=2701,
- ["ecandravowelsigndeva"]=2373,
- ["ecandravowelsigngujarati"]=2757,
- ["ecaron"]=283,
- ["ecedillabreve"]=7709,
- ["echarmenian"]=1381,
- ["echyiwnarmenian"]=1415,
- ["ecircle"]=9428,
- ["ecircumflex"]=234,
- ["ecircumflexacute"]=7871,
- ["ecircumflexbelow"]=7705,
- ["ecircumflexdotbelow"]=7879,
- ["ecircumflexgrave"]=7873,
- ["ecircumflexhookabove"]=7875,
- ["ecircumflextilde"]=7877,
- ["ecyrillic"]=1108,
- ["edblgrave"]=517,
- ["edeva"]=2319,
- ["edieresis"]=235,
- ["edotaccent"]=279,
- ["edotbelow"]=7865,
- ["eegurmukhi"]=2575,
- ["eematragurmukhi"]=2631,
- ["efcyrillic"]=1092,
- ["egrave"]=232,
- ["egujarati"]=2703,
- ["eharmenian"]=1383,
- ["ehbopomofo"]=12573,
- ["ehiragana"]=12360,
- ["ehookabove"]=7867,
- ["eibopomofo"]=12575,
- ["eight"]=56,
- ["eightbengali"]=2542,
- ["eightcircle"]=9319,
- ["eightcircleinversesansserif"]=10129,
- ["eightdeva"]=2414,
- ["eighteencircle"]=9329,
- ["eighteenparen"]=9349,
- ["eighteenperiod"]=9369,
- ["eightgujarati"]=2798,
- ["eightgurmukhi"]=2670,
- ["eighthackarabic"]=1640,
- ["eighthangzhou"]=12328,
- ["eightideographicparen"]=12839,
- ["eightinferior"]=8328,
- ["eightmonospace"]=65304,
- ["eightparen"]=9339,
- ["eightperiod"]=9359,
- ["eightpersian"]=1784,
- ["eightroman"]=8567,
- ["eightsuperior"]=8312,
- ["eightthai"]=3672,
- ["einvertedbreve"]=519,
- ["eiotifiedcyrillic"]=1125,
- ["ekatakana"]=12456,
- ["ekatakanahalfwidth"]=65396,
- ["ekonkargurmukhi"]=2676,
- ["ekorean"]=12628,
- ["elcyrillic"]=1083,
- ["element"]=8712,
- ["elevencircle"]=9322,
- ["elevenparen"]=9342,
- ["elevenperiod"]=9362,
- ["elevenroman"]=8570,
- ["ellipsis"]=8230,
- ["ellipsisvertical"]=8942,
- ["emacron"]=275,
- ["emacronacute"]=7703,
- ["emacrongrave"]=7701,
- ["emcyrillic"]=1084,
- ["emdash"]=8212,
- ["emdashvertical"]=65073,
- ["emonospace"]=65349,
- ["emphasismarkarmenian"]=1371,
- ["emptyset"]=8709,
- ["enbopomofo"]=12579,
- ["encyrillic"]=1085,
- ["endash"]=8211,
- ["endashvertical"]=65074,
- ["endescendercyrillic"]=1187,
- ["eng"]=331,
- ["engbopomofo"]=12581,
- ["enghecyrillic"]=1189,
- ["enhookcyrillic"]=1224,
- ["enspace"]=8194,
- ["eogonek"]=281,
- ["eokorean"]=12627,
- ["eopen"]=603,
- ["eopenclosed"]=666,
- ["eopenreversed"]=604,
- ["eopenreversedclosed"]=606,
- ["eopenreversedhook"]=605,
- ["eparen"]=9376,
- ["epsilon"]=949,
- ["epsilontonos"]=941,
- ["equal"]=61,
- ["equalmonospace"]=65309,
- ["equalsmall"]=65126,
- ["equalsuperior"]=8316,
- ["equivalence"]=8801,
- ["erbopomofo"]=12582,
- ["ercyrillic"]=1088,
- ["ereversed"]=600,
- ["ereversedcyrillic"]=1101,
- ["escyrillic"]=1089,
- ["esdescendercyrillic"]=1195,
- ["esh"]=643,
- ["eshcurl"]=646,
- ["eshortdeva"]=2318,
- ["eshortvowelsigndeva"]=2374,
- ["eshreversedloop"]=426,
- ["eshsquatreversed"]=645,
- ["esmallhiragana"]=12359,
- ["esmallkatakana"]=12455,
- ["esmallkatakanahalfwidth"]=65386,
- ["estimated"]=8494,
- ["eta"]=951,
- ["etarmenian"]=1384,
- ["etatonos"]=942,
- ["eth"]=240,
- ["etilde"]=7869,
- ["etildebelow"]=7707,
- ["etnahtalefthebrew"]=1425,
- ["eturned"]=477,
- ["eukorean"]=12641,
- ["euro"]=8364,
- ["evowelsignbengali"]=2503,
- ["evowelsigndeva"]=2375,
- ["evowelsigngujarati"]=2759,
- ["exclam"]=33,
- ["exclamarmenian"]=1372,
- ["exclamdbl"]=8252,
- ["exclamdown"]=161,
- ["exclammonospace"]=65281,
- ["ezh"]=658,
- ["ezhcaron"]=495,
- ["ezhcurl"]=659,
- ["ezhreversed"]=441,
- ["ezhtail"]=442,
- ["f"]=102,
- ["fadeva"]=2398,
- ["fagurmukhi"]=2654,
- ["fahrenheit"]=8457,
- ["fathalowarabic"]=1614,
- ["fathatanarabic"]=1611,
- ["fbopomofo"]=12552,
- ["fcircle"]=9429,
- ["fdotaccent"]=7711,
- ["feharabic"]=1601,
- ["feharmenian"]=1414,
- ["fehfinalarabic"]=65234,
- ["fehinitialarabic"]=65235,
- ["fehmedialarabic"]=65236,
- ["feicoptic"]=997,
- ["ff"]=64256,
- ["ffi"]=64259,
- ["ffl"]=64260,
- ["fi"]=64257,
- ["fifteencircle"]=9326,
- ["fifteenparen"]=9346,
- ["fifteenperiod"]=9366,
- ["figuredash"]=8210,
- ["filledbox"]=9632,
- ["filledrect"]=9644,
- ["finalkafdageshhebrew"]=64314,
- ["finalkafshevahebrew"]=1498,
- ["finalmemhebrew"]=1501,
- ["finalnunhebrew"]=1503,
- ["finalpehebrew"]=1507,
- ["finaltsadihebrew"]=1509,
- ["firsttonechinese"]=713,
- ["fisheye"]=9673,
- ["fitacyrillic"]=1139,
- ["five"]=53,
- ["fivebengali"]=2539,
- ["fivecircle"]=9316,
- ["fivecircleinversesansserif"]=10126,
- ["fivedeva"]=2411,
- ["fiveeighths"]=8541,
- ["fivegujarati"]=2795,
- ["fivegurmukhi"]=2667,
- ["fivehackarabic"]=1637,
- ["fivehangzhou"]=12325,
- ["fiveideographicparen"]=12836,
- ["fiveinferior"]=8325,
- ["fivemonospace"]=65301,
- ["fiveparen"]=9336,
- ["fiveperiod"]=9356,
- ["fivepersian"]=1781,
- ["fiveroman"]=8564,
- ["fivesuperior"]=8309,
- ["fivethai"]=3669,
- ["fl"]=64258,
- ["florin"]=402,
- ["fmonospace"]=65350,
- ["fmsquare"]=13209,
- ["fofanthai"]=3615,
- ["fofathai"]=3613,
- ["fongmanthai"]=3663,
- ["four"]=52,
- ["fourbengali"]=2538,
- ["fourcircle"]=9315,
- ["fourcircleinversesansserif"]=10125,
- ["fourdeva"]=2410,
- ["fourgujarati"]=2794,
- ["fourgurmukhi"]=2666,
- ["fourhackarabic"]=1636,
- ["fourhangzhou"]=12324,
- ["fourideographicparen"]=12835,
- ["fourinferior"]=8324,
- ["fourmonospace"]=65300,
- ["fournumeratorbengali"]=2551,
- ["fourparen"]=9335,
- ["fourperiod"]=9355,
- ["fourpersian"]=1780,
- ["fourroman"]=8563,
- ["foursuperior"]=8308,
- ["fourteencircle"]=9325,
- ["fourteenparen"]=9345,
- ["fourteenperiod"]=9365,
- ["fourthai"]=3668,
- ["fourthtonechinese"]=715,
- ["fparen"]=9377,
- ["fraction"]=8260,
- ["franc"]=8355,
- ["g"]=103,
- ["gabengali"]=2455,
- ["gacute"]=501,
- ["gadeva"]=2327,
- ["gafarabic"]=1711,
- ["gaffinalarabic"]=64403,
- ["gafinitialarabic"]=64404,
- ["gafmedialarabic"]=64405,
- ["gagujarati"]=2711,
- ["gagurmukhi"]=2583,
- ["gahiragana"]=12364,
- ["gakatakana"]=12460,
- ["gamma"]=947,
- ["gammalatinsmall"]=611,
- ["gammasuperior"]=736,
- ["gangiacoptic"]=1003,
- ["gbopomofo"]=12557,
- ["gbreve"]=287,
- ["gcaron"]=487,
- ["gcircle"]=9430,
- ["gcircumflex"]=285,
- ["gcommaaccent"]=291,
- ["gdotaccent"]=289,
- ["gecyrillic"]=1075,
- ["gehiragana"]=12370,
- ["gekatakana"]=12466,
- ["geometricallyequal"]=8785,
- ["gereshaccenthebrew"]=1436,
- ["gereshhebrew"]=1523,
- ["gereshmuqdamhebrew"]=1437,
- ["germandbls"]=223,
- ["gershayimaccenthebrew"]=1438,
- ["gershayimhebrew"]=1524,
- ["getamark"]=12307,
- ["ghabengali"]=2456,
- ["ghadarmenian"]=1394,
- ["ghadeva"]=2328,
- ["ghagujarati"]=2712,
- ["ghagurmukhi"]=2584,
- ["ghainarabic"]=1594,
- ["ghainfinalarabic"]=65230,
- ["ghaininitialarabic"]=65231,
- ["ghainmedialarabic"]=65232,
- ["ghemiddlehookcyrillic"]=1173,
- ["ghestrokecyrillic"]=1171,
- ["gheupturncyrillic"]=1169,
- ["ghhadeva"]=2394,
- ["ghhagurmukhi"]=2650,
- ["ghook"]=608,
- ["ghzsquare"]=13203,
- ["gihiragana"]=12366,
- ["gikatakana"]=12462,
- ["gimarmenian"]=1379,
- ["gimeldageshhebrew"]=64306,
- ["gimelhebrew"]=1490,
- ["gjecyrillic"]=1107,
- ["glottalinvertedstroke"]=446,
- ["glottalstop"]=660,
- ["glottalstopinverted"]=662,
- ["glottalstopmod"]=704,
- ["glottalstopreversed"]=661,
- ["glottalstopreversedmod"]=705,
- ["glottalstopreversedsuperior"]=740,
- ["glottalstopstroke"]=673,
- ["glottalstopstrokereversed"]=674,
- ["gmacron"]=7713,
- ["gmonospace"]=65351,
- ["gohiragana"]=12372,
- ["gokatakana"]=12468,
- ["gparen"]=9378,
- ["gpasquare"]=13228,
- ["grave"]=96,
- ["gravebelowcmb"]=790,
- ["gravecomb"]=768,
- ["gravedeva"]=2387,
- ["gravelowmod"]=718,
- ["gravemonospace"]=65344,
- ["gravetonecmb"]=832,
- ["greater"]=62,
- ["greaterequal"]=8805,
- ["greaterequalorless"]=8923,
- ["greatermonospace"]=65310,
- ["greaterorequivalent"]=8819,
- ["greaterorless"]=8823,
- ["greateroverequal"]=8807,
- ["greatersmall"]=65125,
- ["gscript"]=609,
- ["gstroke"]=485,
- ["guhiragana"]=12368,
- ["guillemotleft"]=171,
- ["guillemotright"]=187,
- ["guilsinglleft"]=8249,
- ["guilsinglright"]=8250,
- ["gukatakana"]=12464,
- ["guramusquare"]=13080,
- ["gysquare"]=13257,
- ["h"]=104,
- ["haabkhasiancyrillic"]=1193,
- ["habengali"]=2489,
- ["hadescendercyrillic"]=1203,
- ["hadeva"]=2361,
- ["hagujarati"]=2745,
- ["hagurmukhi"]=2617,
- ["haharabic"]=1581,
- ["hahfinalarabic"]=65186,
- ["hahinitialarabic"]=65187,
- ["hahiragana"]=12399,
- ["hahmedialarabic"]=65188,
- ["haitusquare"]=13098,
- ["hakatakana"]=12495,
- ["hakatakanahalfwidth"]=65418,
- ["halantgurmukhi"]=2637,
- ["hamzasukunarabic"]=1569,
- ["hangulfiller"]=12644,
- ["hardsigncyrillic"]=1098,
- ["harpoonleftbarbup"]=8636,
- ["harpoonrightbarbup"]=8640,
- ["hasquare"]=13258,
- ["hatafpatahwidehebrew"]=1458,
- ["hatafqamatswidehebrew"]=1459,
- ["hatafsegolwidehebrew"]=1457,
- ["hbar"]=295,
- ["hbopomofo"]=12559,
- ["hbrevebelow"]=7723,
- ["hcedilla"]=7721,
- ["hcircle"]=9431,
- ["hcircumflex"]=293,
- ["hdieresis"]=7719,
- ["hdotaccent"]=7715,
- ["hdotbelow"]=7717,
- ["heartsuitblack"]=9829,
- ["heartsuitwhite"]=9825,
- ["hedageshhebrew"]=64308,
- ["hehaltonearabic"]=1729,
- ["heharabic"]=1607,
- ["hehebrew"]=1492,
- ["hehfinalaltonearabic"]=64423,
- ["hehfinalarabic"]=65258,
- ["hehhamzaabovefinalarabic"]=64421,
- ["hehhamzaaboveisolatedarabic"]=64420,
- ["hehinitialaltonearabic"]=64424,
- ["hehinitialarabic"]=65259,
- ["hehiragana"]=12408,
- ["hehmedialaltonearabic"]=64425,
- ["hehmedialarabic"]=65260,
- ["heiseierasquare"]=13179,
- ["hekatakana"]=12504,
- ["hekatakanahalfwidth"]=65421,
- ["hekutaarusquare"]=13110,
- ["henghook"]=615,
- ["herutusquare"]=13113,
- ["hethebrew"]=1495,
- ["hhook"]=614,
- ["hhooksuperior"]=689,
- ["hieuhacirclekorean"]=12923,
- ["hieuhaparenkorean"]=12827,
- ["hieuhcirclekorean"]=12909,
- ["hieuhkorean"]=12622,
- ["hieuhparenkorean"]=12813,
- ["hihiragana"]=12402,
- ["hikatakana"]=12498,
- ["hikatakanahalfwidth"]=65419,
- ["hiriqwidehebrew"]=1460,
- ["hlinebelow"]=7830,
- ["hmonospace"]=65352,
- ["hoarmenian"]=1392,
- ["hohipthai"]=3627,
- ["hohiragana"]=12411,
- ["hokatakana"]=12507,
- ["hokatakanahalfwidth"]=65422,
- ["holamwidehebrew"]=1465,
- ["honokhukthai"]=3630,
- ["hookcmb"]=777,
- ["hookpalatalizedbelowcmb"]=801,
- ["hookretroflexbelowcmb"]=802,
- ["hoonsquare"]=13122,
- ["horicoptic"]=1001,
- ["horizontalbar"]=8213,
- ["horncmb"]=795,
- ["hotsprings"]=9832,
- ["house"]=8962,
- ["hparen"]=9379,
- ["hsuperior"]=688,
- ["hturned"]=613,
- ["huhiragana"]=12405,
- ["huiitosquare"]=13107,
- ["hukatakana"]=12501,
- ["hukatakanahalfwidth"]=65420,
- ["hungarumlaut"]=733,
- ["hungarumlautcmb"]=779,
- ["hv"]=405,
- ["hyphen"]=45,
- ["hyphenmonospace"]=65293,
- ["hyphensmall"]=65123,
- ["hyphentwo"]=8208,
- ["i"]=105,
- ["iacute"]=237,
- ["iacyrillic"]=1103,
- ["ibengali"]=2439,
- ["ibopomofo"]=12583,
- ["ibreve"]=301,
- ["icaron"]=464,
- ["icircle"]=9432,
- ["icircumflex"]=238,
- ["icyrillic"]=1110,
- ["idblgrave"]=521,
- ["ideographearthcircle"]=12943,
- ["ideographfirecircle"]=12939,
- ["ideographicallianceparen"]=12863,
- ["ideographiccallparen"]=12858,
- ["ideographiccentrecircle"]=12965,
- ["ideographicclose"]=12294,
- ["ideographiccomma"]=12289,
- ["ideographiccommaleft"]=65380,
- ["ideographiccongratulationparen"]=12855,
- ["ideographiccorrectcircle"]=12963,
- ["ideographicearthparen"]=12847,
- ["ideographicenterpriseparen"]=12861,
- ["ideographicexcellentcircle"]=12957,
- ["ideographicfestivalparen"]=12864,
- ["ideographicfinancialcircle"]=12950,
- ["ideographicfinancialparen"]=12854,
- ["ideographicfireparen"]=12843,
- ["ideographichaveparen"]=12850,
- ["ideographichighcircle"]=12964,
- ["ideographiciterationmark"]=12293,
- ["ideographiclaborcircle"]=12952,
- ["ideographiclaborparen"]=12856,
- ["ideographicleftcircle"]=12967,
- ["ideographiclowcircle"]=12966,
- ["ideographicmedicinecircle"]=12969,
- ["ideographicmetalparen"]=12846,
- ["ideographicmoonparen"]=12842,
- ["ideographicnameparen"]=12852,
- ["ideographicperiod"]=12290,
- ["ideographicprintcircle"]=12958,
- ["ideographicreachparen"]=12867,
- ["ideographicrepresentparen"]=12857,
- ["ideographicresourceparen"]=12862,
- ["ideographicrightcircle"]=12968,
- ["ideographicsecretcircle"]=12953,
- ["ideographicselfparen"]=12866,
- ["ideographicsocietyparen"]=12851,
- ["ideographicspace"]=12288,
- ["ideographicspecialparen"]=12853,
- ["ideographicstockparen"]=12849,
- ["ideographicstudyparen"]=12859,
- ["ideographicsunparen"]=12848,
- ["ideographicsuperviseparen"]=12860,
- ["ideographicwaterparen"]=12844,
- ["ideographicwoodparen"]=12845,
- ["ideographiczero"]=12295,
- ["ideographmetalcircle"]=12942,
- ["ideographmooncircle"]=12938,
- ["ideographnamecircle"]=12948,
- ["ideographsuncircle"]=12944,
- ["ideographwatercircle"]=12940,
- ["ideographwoodcircle"]=12941,
- ["ideva"]=2311,
- ["idieresis"]=239,
- ["idieresisacute"]=7727,
- ["idieresiscyrillic"]=1253,
- ["idotbelow"]=7883,
- ["iebrevecyrillic"]=1239,
- ["iecyrillic"]=1077,
- ["ieungacirclekorean"]=12917,
- ["ieungaparenkorean"]=12821,
- ["ieungcirclekorean"]=12903,
- ["ieungkorean"]=12615,
- ["ieungparenkorean"]=12807,
- ["igrave"]=236,
- ["igujarati"]=2695,
- ["igurmukhi"]=2567,
- ["ihiragana"]=12356,
- ["ihookabove"]=7881,
- ["iibengali"]=2440,
- ["iicyrillic"]=1080,
- ["iideva"]=2312,
- ["iigujarati"]=2696,
- ["iigurmukhi"]=2568,
- ["iimatragurmukhi"]=2624,
- ["iinvertedbreve"]=523,
- ["iishortcyrillic"]=1081,
- ["iivowelsignbengali"]=2496,
- ["iivowelsigndeva"]=2368,
- ["iivowelsigngujarati"]=2752,
- ["ij"]=307,
- ["ikatakana"]=12452,
- ["ikatakanahalfwidth"]=65394,
- ["ikorean"]=12643,
- ["iluyhebrew"]=1452,
- ["imacron"]=299,
- ["imacroncyrillic"]=1251,
- ["imageorapproximatelyequal"]=8787,
- ["imatragurmukhi"]=2623,
- ["imonospace"]=65353,
- ["increment"]=8710,
- ["infinity"]=8734,
- ["iniarmenian"]=1387,
- ["integral"]=8747,
- ["integralbt"]=8993,
- ["integraltp"]=8992,
- ["intersection"]=8745,
- ["intisquare"]=13061,
- ["invbullet"]=9688,
- ["invsmileface"]=9787,
- ["iocyrillic"]=1105,
- ["iogonek"]=303,
- ["iota"]=953,
- ["iotadieresis"]=970,
- ["iotadieresistonos"]=912,
- ["iotalatin"]=617,
- ["iotatonos"]=943,
- ["iparen"]=9380,
- ["irigurmukhi"]=2674,
- ["ismallhiragana"]=12355,
- ["ismallkatakana"]=12451,
- ["ismallkatakanahalfwidth"]=65384,
- ["issharbengali"]=2554,
- ["istroke"]=616,
- ["iterationhiragana"]=12445,
- ["iterationkatakana"]=12541,
- ["itilde"]=297,
- ["itildebelow"]=7725,
- ["iubopomofo"]=12585,
- ["iucyrillic"]=1102,
- ["ivowelsignbengali"]=2495,
- ["ivowelsigndeva"]=2367,
- ["ivowelsigngujarati"]=2751,
- ["izhitsacyrillic"]=1141,
- ["izhitsadblgravecyrillic"]=1143,
- ["j"]=106,
- ["jaarmenian"]=1393,
- ["jabengali"]=2460,
- ["jadeva"]=2332,
- ["jagujarati"]=2716,
- ["jagurmukhi"]=2588,
- ["jbopomofo"]=12560,
- ["jcaron"]=496,
- ["jcircle"]=9433,
- ["jcircumflex"]=309,
- ["jcrossedtail"]=669,
- ["jdotlessstroke"]=607,
- ["jecyrillic"]=1112,
- ["jeemarabic"]=1580,
- ["jeemfinalarabic"]=65182,
- ["jeeminitialarabic"]=65183,
- ["jeemmedialarabic"]=65184,
- ["jeharabic"]=1688,
- ["jehfinalarabic"]=64395,
- ["jhabengali"]=2461,
- ["jhadeva"]=2333,
- ["jhagujarati"]=2717,
- ["jhagurmukhi"]=2589,
- ["jheharmenian"]=1403,
- ["jis"]=12292,
- ["jmonospace"]=65354,
- ["jparen"]=9381,
- ["jsuperior"]=690,
- ["k"]=107,
- ["kabashkircyrillic"]=1185,
- ["kabengali"]=2453,
- ["kacute"]=7729,
- ["kacyrillic"]=1082,
- ["kadescendercyrillic"]=1179,
- ["kadeva"]=2325,
- ["kafarabic"]=1603,
- ["kafdageshhebrew"]=64315,
- ["kaffinalarabic"]=65242,
- ["kafhebrew"]=1499,
- ["kafinitialarabic"]=65243,
- ["kafmedialarabic"]=65244,
- ["kafrafehebrew"]=64333,
- ["kagujarati"]=2709,
- ["kagurmukhi"]=2581,
- ["kahiragana"]=12363,
- ["kahookcyrillic"]=1220,
- ["kakatakana"]=12459,
- ["kakatakanahalfwidth"]=65398,
- ["kappa"]=954,
- ["kappasymbolgreek"]=1008,
- ["kapyeounmieumkorean"]=12657,
- ["kapyeounphieuphkorean"]=12676,
- ["kapyeounpieupkorean"]=12664,
- ["kapyeounssangpieupkorean"]=12665,
- ["karoriisquare"]=13069,
- ["kasmallkatakana"]=12533,
- ["kasquare"]=13188,
- ["kasraarabic"]=1616,
- ["kasratanarabic"]=1613,
- ["kastrokecyrillic"]=1183,
- ["katahiraprolongmarkhalfwidth"]=65392,
- ["kaverticalstrokecyrillic"]=1181,
- ["kbopomofo"]=12558,
- ["kcalsquare"]=13193,
- ["kcaron"]=489,
- ["kcircle"]=9434,
- ["kcommaaccent"]=311,
- ["kdotbelow"]=7731,
- ["keharmenian"]=1412,
- ["kehiragana"]=12369,
- ["kekatakana"]=12465,
- ["kekatakanahalfwidth"]=65401,
- ["kenarmenian"]=1391,
- ["kesmallkatakana"]=12534,
- ["kgreenlandic"]=312,
- ["khabengali"]=2454,
- ["khacyrillic"]=1093,
- ["khadeva"]=2326,
- ["khagujarati"]=2710,
- ["khagurmukhi"]=2582,
- ["khaharabic"]=1582,
- ["khahfinalarabic"]=65190,
- ["khahinitialarabic"]=65191,
- ["khahmedialarabic"]=65192,
- ["kheicoptic"]=999,
- ["khhadeva"]=2393,
- ["khhagurmukhi"]=2649,
- ["khieukhacirclekorean"]=12920,
- ["khieukhaparenkorean"]=12824,
- ["khieukhcirclekorean"]=12906,
- ["khieukhkorean"]=12619,
- ["khieukhparenkorean"]=12810,
- ["khokhaithai"]=3586,
- ["khokhonthai"]=3589,
- ["khokhuatthai"]=3587,
- ["khokhwaithai"]=3588,
- ["khomutthai"]=3675,
- ["khook"]=409,
- ["khorakhangthai"]=3590,
- ["khzsquare"]=13201,
- ["kihiragana"]=12365,
- ["kikatakana"]=12461,
- ["kikatakanahalfwidth"]=65399,
- ["kiroguramusquare"]=13077,
- ["kiromeetorusquare"]=13078,
- ["kirosquare"]=13076,
- ["kiyeokacirclekorean"]=12910,
- ["kiyeokaparenkorean"]=12814,
- ["kiyeokcirclekorean"]=12896,
- ["kiyeokkorean"]=12593,
- ["kiyeokparenkorean"]=12800,
- ["kiyeoksioskorean"]=12595,
- ["kjecyrillic"]=1116,
- ["klinebelow"]=7733,
- ["klsquare"]=13208,
- ["kmcubedsquare"]=13222,
- ["kmonospace"]=65355,
- ["kmsquaredsquare"]=13218,
- ["kohiragana"]=12371,
- ["kohmsquare"]=13248,
- ["kokaithai"]=3585,
- ["kokatakana"]=12467,
- ["kokatakanahalfwidth"]=65402,
- ["kooposquare"]=13086,
- ["koppacyrillic"]=1153,
- ["koreanstandardsymbol"]=12927,
- ["koroniscmb"]=835,
- ["kparen"]=9382,
- ["kpasquare"]=13226,
- ["ksicyrillic"]=1135,
- ["ktsquare"]=13263,
- ["kturned"]=670,
- ["kuhiragana"]=12367,
- ["kukatakana"]=12463,
- ["kukatakanahalfwidth"]=65400,
- ["kvsquare"]=13240,
- ["kwsquare"]=13246,
- ["l"]=108,
- ["labengali"]=2482,
- ["lacute"]=314,
- ["ladeva"]=2354,
- ["lagujarati"]=2738,
- ["lagurmukhi"]=2610,
- ["lakkhangyaothai"]=3653,
- ["lamaleffinalarabic"]=65276,
- ["lamalefhamzaabovefinalarabic"]=65272,
- ["lamalefhamzaaboveisolatedarabic"]=65271,
- ["lamalefhamzabelowfinalarabic"]=65274,
- ["lamalefhamzabelowisolatedarabic"]=65273,
- ["lamalefisolatedarabic"]=65275,
- ["lamalefmaddaabovefinalarabic"]=65270,
- ["lamalefmaddaaboveisolatedarabic"]=65269,
- ["lamarabic"]=1604,
- ["lambda"]=955,
- ["lambdastroke"]=411,
- ["lameddageshhebrew"]=64316,
- ["lamedholamhebrew"]=1500,
- ["lamfinalarabic"]=65246,
- ["lamhahinitialarabic"]=64714,
- ["lamjeeminitialarabic"]=64713,
- ["lamkhahinitialarabic"]=64715,
- ["lamlamhehisolatedarabic"]=65010,
- ["lammedialarabic"]=65248,
- ["lammeemhahinitialarabic"]=64904,
- ["lammeeminitialarabic"]=64716,
- ["lammeemkhahinitialarabic"]=65247,
- ["largecircle"]=9711,
- ["lbar"]=410,
- ["lbelt"]=620,
- ["lbopomofo"]=12556,
- ["lcaron"]=318,
- ["lcircle"]=9435,
- ["lcircumflexbelow"]=7741,
- ["lcommaaccent"]=316,
- ["ldotaccent"]=320,
- ["ldotbelow"]=7735,
- ["ldotbelowmacron"]=7737,
- ["leftangleabovecmb"]=794,
- ["lefttackbelowcmb"]=792,
- ["less"]=60,
- ["lessequal"]=8804,
- ["lessequalorgreater"]=8922,
- ["lessmonospace"]=65308,
- ["lessorequivalent"]=8818,
- ["lessorgreater"]=8822,
- ["lessoverequal"]=8806,
- ["lesssmall"]=65124,
- ["lezh"]=622,
- ["lfblock"]=9612,
- ["lhookretroflex"]=621,
- ["lira"]=8356,
- ["liwnarmenian"]=1388,
- ["lj"]=457,
- ["ljecyrillic"]=1113,
- ["lladeva"]=2355,
- ["llagujarati"]=2739,
- ["llinebelow"]=7739,
- ["llladeva"]=2356,
- ["llvocalicbengali"]=2529,
- ["llvocalicdeva"]=2401,
- ["llvocalicvowelsignbengali"]=2531,
- ["llvocalicvowelsigndeva"]=2403,
- ["lmiddletilde"]=619,
- ["lmonospace"]=65356,
- ["lmsquare"]=13264,
- ["lochulathai"]=3628,
- ["logicaland"]=8743,
- ["logicalnot"]=172,
- ["logicalor"]=8744,
- ["lolingthai"]=3621,
- ["lowlinecenterline"]=65102,
- ["lowlinecmb"]=818,
- ["lowlinedashed"]=65101,
- ["lozenge"]=9674,
- ["lparen"]=9383,
- ["lslash"]=322,
- ["lsquare"]=8467,
- ["luthai"]=3622,
- ["lvocalicbengali"]=2444,
- ["lvocalicdeva"]=2316,
- ["lvocalicvowelsignbengali"]=2530,
- ["lvocalicvowelsigndeva"]=2402,
- ["lxsquare"]=13267,
- ["m"]=109,
- ["mabengali"]=2478,
- ["macron"]=175,
- ["macronbelowcmb"]=817,
- ["macroncmb"]=772,
- ["macronlowmod"]=717,
- ["macronmonospace"]=65507,
- ["macute"]=7743,
- ["madeva"]=2350,
- ["magujarati"]=2734,
- ["magurmukhi"]=2606,
- ["mahapakhlefthebrew"]=1444,
- ["mahiragana"]=12414,
- ["maichattawathai"]=3659,
- ["maiekthai"]=3656,
- ["maihanakatthai"]=3633,
- ["maitaikhuthai"]=3655,
- ["maithothai"]=3657,
- ["maitrithai"]=3658,
- ["maiyamokthai"]=3654,
- ["makatakana"]=12510,
- ["makatakanahalfwidth"]=65423,
- ["mansyonsquare"]=13127,
- ["maqafhebrew"]=1470,
- ["mars"]=9794,
- ["masoracirclehebrew"]=1455,
- ["masquare"]=13187,
- ["mbopomofo"]=12551,
- ["mbsquare"]=13268,
- ["mcircle"]=9436,
- ["mcubedsquare"]=13221,
- ["mdotaccent"]=7745,
- ["mdotbelow"]=7747,
- ["meemarabic"]=1605,
- ["meemfinalarabic"]=65250,
- ["meeminitialarabic"]=65251,
- ["meemmedialarabic"]=65252,
- ["meemmeeminitialarabic"]=64721,
- ["meemmeemisolatedarabic"]=64584,
- ["meetorusquare"]=13133,
- ["mehiragana"]=12417,
- ["meizierasquare"]=13182,
- ["mekatakana"]=12513,
- ["mekatakanahalfwidth"]=65426,
- ["memdageshhebrew"]=64318,
- ["memhebrew"]=1502,
- ["menarmenian"]=1396,
- ["merkhakefulalefthebrew"]=1446,
- ["merkhalefthebrew"]=1445,
- ["mhook"]=625,
- ["mhzsquare"]=13202,
- ["middledotkatakanahalfwidth"]=65381,
- ["mieumacirclekorean"]=12914,
- ["mieumaparenkorean"]=12818,
- ["mieumcirclekorean"]=12900,
- ["mieumkorean"]=12609,
- ["mieumpansioskorean"]=12656,
- ["mieumparenkorean"]=12804,
- ["mieumpieupkorean"]=12654,
- ["mieumsioskorean"]=12655,
- ["mihiragana"]=12415,
- ["mikatakana"]=12511,
- ["mikatakanahalfwidth"]=65424,
- ["minus"]=8722,
- ["minusbelowcmb"]=800,
- ["minuscircle"]=8854,
- ["minusmod"]=727,
- ["minusplus"]=8723,
- ["minute"]=8242,
- ["miribaarusquare"]=13130,
- ["mirisquare"]=13129,
- ["mlonglegturned"]=624,
- ["mlsquare"]=13206,
- ["mmcubedsquare"]=13219,
- ["mmonospace"]=65357,
- ["mmsquaredsquare"]=13215,
- ["mohiragana"]=12418,
- ["mohmsquare"]=13249,
- ["mokatakana"]=12514,
- ["mokatakanahalfwidth"]=65427,
- ["molsquare"]=13270,
- ["momathai"]=3617,
- ["moverssquare"]=13223,
- ["moverssquaredsquare"]=13224,
- ["mparen"]=9384,
- ["mpasquare"]=13227,
- ["mssquare"]=13235,
- ["mturned"]=623,
- ["mu1"]=181,
- ["muasquare"]=13186,
- ["muchgreater"]=8811,
- ["muchless"]=8810,
- ["mufsquare"]=13196,
- ["mugreek"]=956,
- ["mugsquare"]=13197,
- ["muhiragana"]=12416,
- ["mukatakana"]=12512,
- ["mukatakanahalfwidth"]=65425,
- ["mulsquare"]=13205,
- ["multiply"]=215,
- ["mumsquare"]=13211,
- ["munahlefthebrew"]=1443,
- ["musicalnote"]=9834,
- ["musicalnotedbl"]=9835,
- ["musicflatsign"]=9837,
- ["musicsharpsign"]=9839,
- ["mussquare"]=13234,
- ["muvsquare"]=13238,
- ["muwsquare"]=13244,
- ["mvmegasquare"]=13241,
- ["mvsquare"]=13239,
- ["mwmegasquare"]=13247,
- ["mwsquare"]=13245,
- ["n"]=110,
- ["nabengali"]=2472,
- ["nabla"]=8711,
- ["nacute"]=324,
- ["nadeva"]=2344,
- ["nagujarati"]=2728,
- ["nagurmukhi"]=2600,
- ["nahiragana"]=12394,
- ["nakatakana"]=12490,
- ["nakatakanahalfwidth"]=65413,
- ["nasquare"]=13185,
- ["nbopomofo"]=12555,
- ["ncaron"]=328,
- ["ncircle"]=9437,
- ["ncircumflexbelow"]=7755,
- ["ncommaaccent"]=326,
- ["ndotaccent"]=7749,
- ["ndotbelow"]=7751,
- ["nehiragana"]=12397,
- ["nekatakana"]=12493,
- ["nekatakanahalfwidth"]=65416,
- ["nfsquare"]=13195,
- ["ngabengali"]=2457,
- ["ngadeva"]=2329,
- ["ngagujarati"]=2713,
- ["ngagurmukhi"]=2585,
- ["ngonguthai"]=3591,
- ["nhiragana"]=12435,
- ["nhookleft"]=626,
- ["nhookretroflex"]=627,
- ["nieunacirclekorean"]=12911,
- ["nieunaparenkorean"]=12815,
- ["nieuncieuckorean"]=12597,
- ["nieuncirclekorean"]=12897,
- ["nieunhieuhkorean"]=12598,
- ["nieunkorean"]=12596,
- ["nieunpansioskorean"]=12648,
- ["nieunparenkorean"]=12801,
- ["nieunsioskorean"]=12647,
- ["nieuntikeutkorean"]=12646,
- ["nihiragana"]=12395,
- ["nikatakana"]=12491,
- ["nikatakanahalfwidth"]=65414,
- ["nikhahitthai"]=3661,
- ["nine"]=57,
- ["ninebengali"]=2543,
- ["ninecircle"]=9320,
- ["ninecircleinversesansserif"]=10130,
- ["ninedeva"]=2415,
- ["ninegujarati"]=2799,
- ["ninegurmukhi"]=2671,
- ["ninehackarabic"]=1641,
- ["ninehangzhou"]=12329,
- ["nineideographicparen"]=12840,
- ["nineinferior"]=8329,
- ["ninemonospace"]=65305,
- ["nineparen"]=9340,
- ["nineperiod"]=9360,
- ["ninepersian"]=1785,
- ["nineroman"]=8568,
- ["ninesuperior"]=8313,
- ["nineteencircle"]=9330,
- ["nineteenparen"]=9350,
- ["nineteenperiod"]=9370,
- ["ninethai"]=3673,
- ["nj"]=460,
- ["njecyrillic"]=1114,
- ["nkatakana"]=12531,
- ["nkatakanahalfwidth"]=65437,
- ["nlegrightlong"]=414,
- ["nlinebelow"]=7753,
- ["nmonospace"]=65358,
- ["nmsquare"]=13210,
- ["nnabengali"]=2467,
- ["nnadeva"]=2339,
- ["nnagujarati"]=2723,
- ["nnagurmukhi"]=2595,
- ["nnnadeva"]=2345,
- ["nohiragana"]=12398,
- ["nokatakana"]=12494,
- ["nokatakanahalfwidth"]=65417,
- ["nonbreakingspace"]=160,
- ["nonenthai"]=3603,
- ["nonuthai"]=3609,
- ["noonarabic"]=1606,
- ["noonfinalarabic"]=65254,
- ["noonghunnaarabic"]=1722,
- ["noonghunnafinalarabic"]=64415,
- ["nooninitialarabic"]=65255,
- ["noonjeeminitialarabic"]=64722,
- ["noonjeemisolatedarabic"]=64587,
- ["noonmedialarabic"]=65256,
- ["noonmeeminitialarabic"]=64725,
- ["noonmeemisolatedarabic"]=64590,
- ["noonnoonfinalarabic"]=64653,
- ["notcontains"]=8716,
- ["notelementof"]=8713,
- ["notequal"]=8800,
- ["notgreater"]=8815,
- ["notgreaternorequal"]=8817,
- ["notgreaternorless"]=8825,
- ["notidentical"]=8802,
- ["notless"]=8814,
- ["notlessnorequal"]=8816,
- ["notparallel"]=8742,
- ["notprecedes"]=8832,
- ["notsubset"]=8836,
- ["notsucceeds"]=8833,
- ["notsuperset"]=8837,
- ["nowarmenian"]=1398,
- ["nparen"]=9385,
- ["nssquare"]=13233,
- ["nsuperior"]=8319,
- ["ntilde"]=241,
- ["nu"]=957,
- ["nuhiragana"]=12396,
- ["nukatakana"]=12492,
- ["nukatakanahalfwidth"]=65415,
- ["nuktabengali"]=2492,
- ["nuktadeva"]=2364,
- ["nuktagujarati"]=2748,
- ["nuktagurmukhi"]=2620,
- ["numbersign"]=35,
- ["numbersignmonospace"]=65283,
- ["numbersignsmall"]=65119,
- ["numeralsigngreek"]=884,
- ["numeralsignlowergreek"]=885,
- ["numero"]=8470,
- ["nundageshhebrew"]=64320,
- ["nunhebrew"]=1504,
- ["nvsquare"]=13237,
- ["nwsquare"]=13243,
- ["nyabengali"]=2462,
- ["nyadeva"]=2334,
- ["nyagujarati"]=2718,
- ["nyagurmukhi"]=2590,
- ["o"]=111,
- ["oacute"]=243,
- ["oangthai"]=3629,
- ["obarred"]=629,
- ["obarredcyrillic"]=1257,
- ["obarreddieresiscyrillic"]=1259,
- ["obengali"]=2451,
- ["obopomofo"]=12571,
- ["obreve"]=335,
- ["ocandradeva"]=2321,
- ["ocandragujarati"]=2705,
- ["ocandravowelsigndeva"]=2377,
- ["ocandravowelsigngujarati"]=2761,
- ["ocaron"]=466,
- ["ocircle"]=9438,
- ["ocircumflex"]=244,
- ["ocircumflexacute"]=7889,
- ["ocircumflexdotbelow"]=7897,
- ["ocircumflexgrave"]=7891,
- ["ocircumflexhookabove"]=7893,
- ["ocircumflextilde"]=7895,
- ["ocyrillic"]=1086,
- ["odblgrave"]=525,
- ["odeva"]=2323,
- ["odieresis"]=246,
- ["odieresiscyrillic"]=1255,
- ["odotbelow"]=7885,
- ["oe"]=339,
- ["oekorean"]=12634,
- ["ogonek"]=731,
- ["ogonekcmb"]=808,
- ["ograve"]=242,
- ["ogujarati"]=2707,
- ["oharmenian"]=1413,
- ["ohiragana"]=12362,
- ["ohookabove"]=7887,
- ["ohorn"]=417,
- ["ohornacute"]=7899,
- ["ohorndotbelow"]=7907,
- ["ohorngrave"]=7901,
- ["ohornhookabove"]=7903,
- ["ohorntilde"]=7905,
- ["ohungarumlaut"]=337,
- ["oi"]=419,
- ["oinvertedbreve"]=527,
- ["okatakana"]=12458,
- ["okatakanahalfwidth"]=65397,
- ["okorean"]=12631,
- ["olehebrew"]=1451,
- ["omacron"]=333,
- ["omacronacute"]=7763,
- ["omacrongrave"]=7761,
- ["omdeva"]=2384,
- ["omega"]=969,
- ["omegacyrillic"]=1121,
- ["omegalatinclosed"]=631,
- ["omegaroundcyrillic"]=1147,
- ["omegatitlocyrillic"]=1149,
- ["omegatonos"]=974,
- ["omgujarati"]=2768,
- ["omicron"]=959,
- ["omicrontonos"]=972,
- ["omonospace"]=65359,
- ["one"]=49,
- ["onebengali"]=2535,
- ["onecircle"]=9312,
- ["onecircleinversesansserif"]=10122,
- ["onedeva"]=2407,
- ["onedotenleader"]=8228,
- ["oneeighth"]=8539,
- ["onegujarati"]=2791,
- ["onegurmukhi"]=2663,
- ["onehackarabic"]=1633,
- ["onehalf"]=189,
- ["onehangzhou"]=12321,
- ["oneideographicparen"]=12832,
- ["oneinferior"]=8321,
- ["onemonospace"]=65297,
- ["onenumeratorbengali"]=2548,
- ["oneparen"]=9332,
- ["oneperiod"]=9352,
- ["onepersian"]=1777,
- ["onequarter"]=188,
- ["oneroman"]=8560,
- ["onesuperior"]=185,
- ["onethai"]=3665,
- ["onethird"]=8531,
- ["oogonek"]=491,
- ["oogonekmacron"]=493,
- ["oogurmukhi"]=2579,
- ["oomatragurmukhi"]=2635,
- ["oopen"]=596,
- ["oparen"]=9386,
- ["option"]=8997,
- ["ordfeminine"]=170,
- ["ordmasculine"]=186,
- ["oshortdeva"]=2322,
- ["oshortvowelsigndeva"]=2378,
- ["oslash"]=248,
- ["osmallhiragana"]=12361,
- ["osmallkatakana"]=12457,
- ["osmallkatakanahalfwidth"]=65387,
- ["ostrokeacute"]=511,
- ["otcyrillic"]=1151,
- ["otilde"]=245,
- ["otildeacute"]=7757,
- ["otildedieresis"]=7759,
- ["oubopomofo"]=12577,
- ["overline"]=8254,
- ["overlinecenterline"]=65098,
- ["overlinecmb"]=773,
- ["overlinedashed"]=65097,
- ["overlinedblwavy"]=65100,
- ["overlinewavy"]=65099,
- ["ovowelsignbengali"]=2507,
- ["ovowelsigndeva"]=2379,
- ["ovowelsigngujarati"]=2763,
- ["p"]=112,
- ["paampssquare"]=13184,
- ["paasentosquare"]=13099,
- ["pabengali"]=2474,
- ["pacute"]=7765,
- ["padeva"]=2346,
- ["pagedown"]=8671,
- ["pageup"]=8670,
- ["pagujarati"]=2730,
- ["pagurmukhi"]=2602,
- ["pahiragana"]=12401,
- ["paiyannoithai"]=3631,
- ["pakatakana"]=12497,
- ["palatalizationcyrilliccmb"]=1156,
- ["palochkacyrillic"]=1216,
- ["pansioskorean"]=12671,
- ["paragraph"]=182,
- ["parallel"]=8741,
- ["parenleft"]=40,
- ["parenleftaltonearabic"]=64830,
- ["parenleftinferior"]=8333,
- ["parenleftmonospace"]=65288,
- ["parenleftsmall"]=65113,
- ["parenleftsuperior"]=8317,
- ["parenleftvertical"]=65077,
- ["parenright"]=41,
- ["parenrightaltonearabic"]=64831,
- ["parenrightinferior"]=8334,
- ["parenrightmonospace"]=65289,
- ["parenrightsmall"]=65114,
- ["parenrightsuperior"]=8318,
- ["parenrightvertical"]=65078,
- ["partialdiff"]=8706,
- ["paseqhebrew"]=1472,
- ["pashtahebrew"]=1433,
- ["pasquare"]=13225,
- ["patahwidehebrew"]=1463,
- ["pazerhebrew"]=1441,
- ["pbopomofo"]=12550,
- ["pcircle"]=9439,
- ["pdotaccent"]=7767,
- ["pecyrillic"]=1087,
- ["pedageshhebrew"]=64324,
- ["peezisquare"]=13115,
- ["pefinaldageshhebrew"]=64323,
- ["peharabic"]=1662,
- ["peharmenian"]=1402,
- ["pehebrew"]=1508,
- ["pehfinalarabic"]=64343,
- ["pehinitialarabic"]=64344,
- ["pehiragana"]=12410,
- ["pehmedialarabic"]=64345,
- ["pekatakana"]=12506,
- ["pemiddlehookcyrillic"]=1191,
- ["perafehebrew"]=64334,
- ["percent"]=37,
- ["percentarabic"]=1642,
- ["percentmonospace"]=65285,
- ["percentsmall"]=65130,
- ["period"]=46,
- ["periodarmenian"]=1417,
- ["periodcentered"]=183,
- ["periodhalfwidth"]=65377,
- ["periodmonospace"]=65294,
- ["periodsmall"]=65106,
- ["perispomenigreekcmb"]=834,
- ["perpendicular"]=8869,
- ["perthousand"]=8240,
- ["peseta"]=8359,
- ["pfsquare"]=13194,
- ["phabengali"]=2475,
- ["phadeva"]=2347,
- ["phagujarati"]=2731,
- ["phagurmukhi"]=2603,
- ["phi"]=966,
- ["phieuphacirclekorean"]=12922,
- ["phieuphaparenkorean"]=12826,
- ["phieuphcirclekorean"]=12908,
- ["phieuphkorean"]=12621,
- ["phieuphparenkorean"]=12812,
- ["philatin"]=632,
- ["phinthuthai"]=3642,
- ["phisymbolgreek"]=981,
- ["phook"]=421,
- ["phophanthai"]=3614,
- ["phophungthai"]=3612,
- ["phosamphaothai"]=3616,
- ["pi"]=960,
- ["pieupacirclekorean"]=12915,
- ["pieupaparenkorean"]=12819,
- ["pieupcieuckorean"]=12662,
- ["pieupcirclekorean"]=12901,
- ["pieupkiyeokkorean"]=12658,
- ["pieupkorean"]=12610,
- ["pieupparenkorean"]=12805,
- ["pieupsioskiyeokkorean"]=12660,
- ["pieupsioskorean"]=12612,
- ["pieupsiostikeutkorean"]=12661,
- ["pieupthieuthkorean"]=12663,
- ["pieuptikeutkorean"]=12659,
- ["pihiragana"]=12404,
- ["pikatakana"]=12500,
- ["pisymbolgreek"]=982,
- ["piwrarmenian"]=1411,
- ["plus"]=43,
- ["plusbelowcmb"]=799,
- ["pluscircle"]=8853,
- ["plusminus"]=177,
- ["plusmod"]=726,
- ["plusmonospace"]=65291,
- ["plussmall"]=65122,
- ["plussuperior"]=8314,
- ["pmonospace"]=65360,
- ["pmsquare"]=13272,
- ["pohiragana"]=12413,
- ["pointingindexdownwhite"]=9759,
- ["pointingindexleftwhite"]=9756,
- ["pointingindexrightwhite"]=9758,
- ["pointingindexupwhite"]=9757,
- ["pokatakana"]=12509,
- ["poplathai"]=3611,
- ["postalmark"]=12306,
- ["postalmarkface"]=12320,
- ["pparen"]=9387,
- ["precedes"]=8826,
- ["prescription"]=8478,
- ["primemod"]=697,
- ["primereversed"]=8245,
- ["product"]=8719,
- ["projective"]=8965,
- ["prolongedkana"]=12540,
- ["propellor"]=8984,
- ["proportion"]=8759,
- ["proportional"]=8733,
- ["psi"]=968,
- ["psicyrillic"]=1137,
- ["psilipneumatacyrilliccmb"]=1158,
- ["pssquare"]=13232,
- ["puhiragana"]=12407,
- ["pukatakana"]=12503,
- ["pvsquare"]=13236,
- ["pwsquare"]=13242,
- ["q"]=113,
- ["qadeva"]=2392,
- ["qadmahebrew"]=1448,
- ["qafarabic"]=1602,
- ["qaffinalarabic"]=65238,
- ["qafinitialarabic"]=65239,
- ["qafmedialarabic"]=65240,
- ["qamatswidehebrew"]=1464,
- ["qarneyparahebrew"]=1439,
- ["qbopomofo"]=12561,
- ["qcircle"]=9440,
- ["qhook"]=672,
- ["qmonospace"]=65361,
- ["qofdageshhebrew"]=64327,
- ["qoftserehebrew"]=1511,
- ["qparen"]=9388,
- ["quarternote"]=9833,
- ["qubutswidehebrew"]=1467,
- ["question"]=63,
- ["questionarabic"]=1567,
- ["questionarmenian"]=1374,
- ["questiondown"]=191,
- ["questiongreek"]=894,
- ["questionmonospace"]=65311,
- ["quotedbl"]=34,
- ["quotedblbase"]=8222,
- ["quotedblleft"]=8220,
- ["quotedblmonospace"]=65282,
- ["quotedblprime"]=12318,
- ["quotedblprimereversed"]=12317,
- ["quotedblright"]=8221,
- ["quoteleft"]=8216,
- ["quotereversed"]=8219,
- ["quoteright"]=8217,
- ["quoterightn"]=329,
- ["quotesinglbase"]=8218,
- ["quotesingle"]=39,
- ["quotesinglemonospace"]=65287,
- ["r"]=114,
- ["raarmenian"]=1404,
- ["rabengali"]=2480,
- ["racute"]=341,
- ["radeva"]=2352,
- ["radical"]=8730,
- ["radoverssquare"]=13230,
- ["radoverssquaredsquare"]=13231,
- ["radsquare"]=13229,
- ["rafehebrew"]=1471,
- ["ragujarati"]=2736,
- ["ragurmukhi"]=2608,
- ["rahiragana"]=12425,
- ["rakatakana"]=12521,
- ["rakatakanahalfwidth"]=65431,
- ["ralowerdiagonalbengali"]=2545,
- ["ramiddlediagonalbengali"]=2544,
- ["ramshorn"]=612,
- ["ratio"]=8758,
- ["rbopomofo"]=12566,
- ["rcaron"]=345,
- ["rcircle"]=9441,
- ["rcommaaccent"]=343,
- ["rdblgrave"]=529,
- ["rdotaccent"]=7769,
- ["rdotbelow"]=7771,
- ["rdotbelowmacron"]=7773,
- ["referencemark"]=8251,
- ["registered"]=174,
- ["reharmenian"]=1408,
- ["rehfinalarabic"]=65198,
- ["rehiragana"]=12428,
- ["rehyehaleflamarabic"]=1585,
- ["rekatakana"]=12524,
- ["rekatakanahalfwidth"]=65434,
- ["reshdageshhebrew"]=64328,
- ["reshtserehebrew"]=1512,
- ["reversedtilde"]=8765,
- ["reviamugrashhebrew"]=1431,
- ["revlogicalnot"]=8976,
- ["rfishhook"]=638,
- ["rfishhookreversed"]=639,
- ["rhabengali"]=2525,
- ["rhadeva"]=2397,
- ["rho"]=961,
- ["rhook"]=637,
- ["rhookturned"]=635,
- ["rhookturnedsuperior"]=693,
- ["rhosymbolgreek"]=1009,
- ["rhotichookmod"]=734,
- ["rieulacirclekorean"]=12913,
- ["rieulaparenkorean"]=12817,
- ["rieulcirclekorean"]=12899,
- ["rieulhieuhkorean"]=12608,
- ["rieulkiyeokkorean"]=12602,
- ["rieulkiyeoksioskorean"]=12649,
- ["rieulkorean"]=12601,
- ["rieulmieumkorean"]=12603,
- ["rieulpansioskorean"]=12652,
- ["rieulparenkorean"]=12803,
- ["rieulphieuphkorean"]=12607,
- ["rieulpieupkorean"]=12604,
- ["rieulpieupsioskorean"]=12651,
- ["rieulsioskorean"]=12605,
- ["rieulthieuthkorean"]=12606,
- ["rieultikeutkorean"]=12650,
- ["rieulyeorinhieuhkorean"]=12653,
- ["rightangle"]=8735,
- ["righttackbelowcmb"]=793,
- ["righttriangle"]=8895,
- ["rihiragana"]=12426,
- ["rikatakana"]=12522,
- ["rikatakanahalfwidth"]=65432,
- ["ring"]=730,
- ["ringbelowcmb"]=805,
- ["ringcmb"]=778,
- ["ringhalfleft"]=703,
- ["ringhalfleftarmenian"]=1369,
- ["ringhalfleftbelowcmb"]=796,
- ["ringhalfleftcentered"]=723,
- ["ringhalfright"]=702,
- ["ringhalfrightbelowcmb"]=825,
- ["ringhalfrightcentered"]=722,
- ["rinvertedbreve"]=531,
- ["rittorusquare"]=13137,
- ["rlinebelow"]=7775,
- ["rlongleg"]=636,
- ["rlonglegturned"]=634,
- ["rmonospace"]=65362,
- ["rohiragana"]=12429,
- ["rokatakana"]=12525,
- ["rokatakanahalfwidth"]=65435,
- ["roruathai"]=3619,
- ["rparen"]=9389,
- ["rrabengali"]=2524,
- ["rradeva"]=2353,
- ["rragurmukhi"]=2652,
- ["rreharabic"]=1681,
- ["rrehfinalarabic"]=64397,
- ["rrvocalicbengali"]=2528,
- ["rrvocalicdeva"]=2400,
- ["rrvocalicgujarati"]=2784,
- ["rrvocalicvowelsignbengali"]=2500,
- ["rrvocalicvowelsigndeva"]=2372,
- ["rrvocalicvowelsigngujarati"]=2756,
- ["rtblock"]=9616,
- ["rturned"]=633,
- ["rturnedsuperior"]=692,
- ["ruhiragana"]=12427,
- ["rukatakana"]=12523,
- ["rukatakanahalfwidth"]=65433,
- ["rupeemarkbengali"]=2546,
- ["rupeesignbengali"]=2547,
- ["ruthai"]=3620,
- ["rvocalicbengali"]=2443,
- ["rvocalicdeva"]=2315,
- ["rvocalicgujarati"]=2699,
- ["rvocalicvowelsignbengali"]=2499,
- ["rvocalicvowelsigndeva"]=2371,
- ["rvocalicvowelsigngujarati"]=2755,
- ["s"]=115,
- ["sabengali"]=2488,
- ["sacute"]=347,
- ["sacutedotaccent"]=7781,
- ["sadarabic"]=1589,
- ["sadeva"]=2360,
- ["sadfinalarabic"]=65210,
- ["sadinitialarabic"]=65211,
- ["sadmedialarabic"]=65212,
- ["sagujarati"]=2744,
- ["sagurmukhi"]=2616,
- ["sahiragana"]=12373,
- ["sakatakana"]=12469,
- ["sakatakanahalfwidth"]=65403,
- ["sallallahoualayhewasallamarabic"]=65018,
- ["samekhdageshhebrew"]=64321,
- ["samekhhebrew"]=1505,
- ["saraaathai"]=3634,
- ["saraaethai"]=3649,
- ["saraaimaimalaithai"]=3652,
- ["saraaimaimuanthai"]=3651,
- ["saraamthai"]=3635,
- ["saraathai"]=3632,
- ["saraethai"]=3648,
- ["saraiithai"]=3637,
- ["saraithai"]=3636,
- ["saraothai"]=3650,
- ["saraueethai"]=3639,
- ["sarauethai"]=3638,
- ["sarauthai"]=3640,
- ["sarauuthai"]=3641,
- ["sbopomofo"]=12569,
- ["scaron"]=353,
- ["scarondotaccent"]=7783,
- ["scedilla"]=351,
- ["schwa"]=601,
- ["schwacyrillic"]=1241,
- ["schwadieresiscyrillic"]=1243,
- ["schwahook"]=602,
- ["scircle"]=9442,
- ["scircumflex"]=349,
- ["scommaaccent"]=537,
- ["sdotaccent"]=7777,
- ["sdotbelow"]=7779,
- ["sdotbelowdotaccent"]=7785,
- ["seagullbelowcmb"]=828,
- ["second"]=8243,
- ["secondtonechinese"]=714,
- ["section"]=167,
- ["seenarabic"]=1587,
- ["seenfinalarabic"]=65202,
- ["seeninitialarabic"]=65203,
- ["seenmedialarabic"]=65204,
- ["segoltahebrew"]=1426,
- ["segolwidehebrew"]=1462,
- ["seharmenian"]=1405,
- ["sehiragana"]=12379,
- ["sekatakana"]=12475,
- ["sekatakanahalfwidth"]=65406,
- ["semicolon"]=59,
- ["semicolonarabic"]=1563,
- ["semicolonmonospace"]=65307,
- ["semicolonsmall"]=65108,
- ["semivoicedmarkkana"]=12444,
- ["semivoicedmarkkanahalfwidth"]=65439,
- ["sentisquare"]=13090,
- ["sentosquare"]=13091,
- ["seven"]=55,
- ["sevenbengali"]=2541,
- ["sevencircle"]=9318,
- ["sevencircleinversesansserif"]=10128,
- ["sevendeva"]=2413,
- ["seveneighths"]=8542,
- ["sevengujarati"]=2797,
- ["sevengurmukhi"]=2669,
- ["sevenhackarabic"]=1639,
- ["sevenhangzhou"]=12327,
- ["sevenideographicparen"]=12838,
- ["seveninferior"]=8327,
- ["sevenmonospace"]=65303,
- ["sevenparen"]=9338,
- ["sevenperiod"]=9358,
- ["sevenpersian"]=1783,
- ["sevenroman"]=8566,
- ["sevensuperior"]=8311,
- ["seventeencircle"]=9328,
- ["seventeenparen"]=9348,
- ["seventeenperiod"]=9368,
- ["seventhai"]=3671,
- ["shaarmenian"]=1399,
- ["shabengali"]=2486,
- ["shacyrillic"]=1096,
- ["shaddadammaarabic"]=64609,
- ["shaddadammatanarabic"]=64606,
- ["shaddafathaarabic"]=64608,
- ["shaddafathatanarabic"]=1617,
- ["shaddakasraarabic"]=64610,
- ["shaddakasratanarabic"]=64607,
- ["shadedark"]=9619,
- ["shadelight"]=9617,
- ["shademedium"]=9618,
- ["shadeva"]=2358,
- ["shagujarati"]=2742,
- ["shagurmukhi"]=2614,
- ["shalshelethebrew"]=1427,
- ["shbopomofo"]=12565,
- ["shchacyrillic"]=1097,
- ["sheenarabic"]=1588,
- ["sheenfinalarabic"]=65206,
- ["sheeninitialarabic"]=65207,
- ["sheenmedialarabic"]=65208,
- ["sheicoptic"]=995,
- ["sheqelhebrew"]=8362,
- ["shevawidehebrew"]=1456,
- ["shhacyrillic"]=1211,
- ["shimacoptic"]=1005,
- ["shindageshhebrew"]=64329,
- ["shindageshshindothebrew"]=64300,
- ["shindageshsindothebrew"]=64301,
- ["shindothebrew"]=1473,
- ["shinhebrew"]=1513,
- ["shinshindothebrew"]=64298,
- ["shinsindothebrew"]=64299,
- ["shook"]=642,
- ["sigma"]=963,
- ["sigmafinal"]=962,
- ["sigmalunatesymbolgreek"]=1010,
- ["sihiragana"]=12375,
- ["sikatakana"]=12471,
- ["sikatakanahalfwidth"]=65404,
- ["siluqlefthebrew"]=1469,
- ["sindothebrew"]=1474,
- ["siosacirclekorean"]=12916,
- ["siosaparenkorean"]=12820,
- ["sioscieuckorean"]=12670,
- ["sioscirclekorean"]=12902,
- ["sioskiyeokkorean"]=12666,
- ["sioskorean"]=12613,
- ["siosnieunkorean"]=12667,
- ["siosparenkorean"]=12806,
- ["siospieupkorean"]=12669,
- ["siostikeutkorean"]=12668,
- ["six"]=54,
- ["sixbengali"]=2540,
- ["sixcircle"]=9317,
- ["sixcircleinversesansserif"]=10127,
- ["sixdeva"]=2412,
- ["sixgujarati"]=2796,
- ["sixgurmukhi"]=2668,
- ["sixhackarabic"]=1638,
- ["sixhangzhou"]=12326,
- ["sixideographicparen"]=12837,
- ["sixinferior"]=8326,
- ["sixmonospace"]=65302,
- ["sixparen"]=9337,
- ["sixperiod"]=9357,
- ["sixpersian"]=1782,
- ["sixroman"]=8565,
- ["sixsuperior"]=8310,
- ["sixteencircle"]=9327,
- ["sixteencurrencydenominatorbengali"]=2553,
- ["sixteenparen"]=9347,
- ["sixteenperiod"]=9367,
- ["sixthai"]=3670,
- ["slash"]=47,
- ["slashmonospace"]=65295,
- ["slong"]=383,
- ["slongdotaccent"]=7835,
- ["smonospace"]=65363,
- ["sofpasuqhebrew"]=1475,
- ["softhyphen"]=173,
- ["softsigncyrillic"]=1100,
- ["sohiragana"]=12381,
- ["sokatakana"]=12477,
- ["sokatakanahalfwidth"]=65407,
- ["soliduslongoverlaycmb"]=824,
- ["solidusshortoverlaycmb"]=823,
- ["sorusithai"]=3625,
- ["sosalathai"]=3624,
- ["sosothai"]=3595,
- ["sosuathai"]=3626,
- ["space"]=32,
- ["spadesuitblack"]=9824,
- ["spadesuitwhite"]=9828,
- ["sparen"]=9390,
- ["squarebelowcmb"]=827,
- ["squarecc"]=13252,
- ["squarecm"]=13213,
- ["squarediagonalcrosshatchfill"]=9641,
- ["squarehorizontalfill"]=9636,
- ["squarekg"]=13199,
- ["squarekm"]=13214,
- ["squarekmcapital"]=13262,
- ["squareln"]=13265,
- ["squarelog"]=13266,
- ["squaremg"]=13198,
- ["squaremil"]=13269,
- ["squaremm"]=13212,
- ["squaremsquared"]=13217,
- ["squareorthogonalcrosshatchfill"]=9638,
- ["squareupperlefttolowerrightfill"]=9639,
- ["squareupperrighttolowerleftfill"]=9640,
- ["squareverticalfill"]=9637,
- ["squarewhitewithsmallblack"]=9635,
- ["srsquare"]=13275,
- ["ssabengali"]=2487,
- ["ssadeva"]=2359,
- ["ssagujarati"]=2743,
- ["ssangcieuckorean"]=12617,
- ["ssanghieuhkorean"]=12677,
- ["ssangieungkorean"]=12672,
- ["ssangkiyeokkorean"]=12594,
- ["ssangnieunkorean"]=12645,
- ["ssangpieupkorean"]=12611,
- ["ssangsioskorean"]=12614,
- ["ssangtikeutkorean"]=12600,
- ["sterling"]=163,
- ["sterlingmonospace"]=65505,
- ["strokelongoverlaycmb"]=822,
- ["strokeshortoverlaycmb"]=821,
- ["subset"]=8834,
- ["subsetnotequal"]=8842,
- ["subsetorequal"]=8838,
- ["succeeds"]=8827,
- ["suchthat"]=8715,
- ["suhiragana"]=12377,
- ["sukatakana"]=12473,
- ["sukatakanahalfwidth"]=65405,
- ["sukunarabic"]=1618,
- ["summation"]=8721,
- ["sun"]=9788,
- ["superset"]=8835,
- ["supersetnotequal"]=8843,
- ["supersetorequal"]=8839,
- ["svsquare"]=13276,
- ["syouwaerasquare"]=13180,
- ["t"]=116,
- ["tabengali"]=2468,
- ["tackdown"]=8868,
- ["tackleft"]=8867,
- ["tadeva"]=2340,
- ["tagujarati"]=2724,
- ["tagurmukhi"]=2596,
- ["taharabic"]=1591,
- ["tahfinalarabic"]=65218,
- ["tahinitialarabic"]=65219,
- ["tahiragana"]=12383,
- ["tahmedialarabic"]=65220,
- ["taisyouerasquare"]=13181,
- ["takatakana"]=12479,
- ["takatakanahalfwidth"]=65408,
- ["tatweelarabic"]=1600,
- ["tau"]=964,
- ["tavdageshhebrew"]=64330,
- ["tavhebrew"]=1514,
- ["tbar"]=359,
- ["tbopomofo"]=12554,
- ["tcaron"]=357,
- ["tccurl"]=680,
- ["tcheharabic"]=1670,
- ["tchehfinalarabic"]=64379,
- ["tchehmedialarabic"]=64381,
- ["tchehmeeminitialarabic"]=64380,
- ["tcircle"]=9443,
- ["tcircumflexbelow"]=7793,
- ["tcommaaccent"]=355,
- ["tdieresis"]=7831,
- ["tdotaccent"]=7787,
- ["tdotbelow"]=7789,
- ["tecyrillic"]=1090,
- ["tedescendercyrillic"]=1197,
- ["teharabic"]=1578,
- ["tehfinalarabic"]=65174,
- ["tehhahinitialarabic"]=64674,
- ["tehhahisolatedarabic"]=64524,
- ["tehinitialarabic"]=65175,
- ["tehiragana"]=12390,
- ["tehjeeminitialarabic"]=64673,
- ["tehjeemisolatedarabic"]=64523,
- ["tehmarbutaarabic"]=1577,
- ["tehmarbutafinalarabic"]=65172,
- ["tehmedialarabic"]=65176,
- ["tehmeeminitialarabic"]=64676,
- ["tehmeemisolatedarabic"]=64526,
- ["tehnoonfinalarabic"]=64627,
- ["tekatakana"]=12486,
- ["tekatakanahalfwidth"]=65411,
- ["telephone"]=8481,
- ["telephoneblack"]=9742,
- ["telishagedolahebrew"]=1440,
- ["telishaqetanahebrew"]=1449,
- ["tencircle"]=9321,
- ["tenideographicparen"]=12841,
- ["tenparen"]=9341,
- ["tenperiod"]=9361,
- ["tenroman"]=8569,
- ["tesh"]=679,
- ["tetdageshhebrew"]=64312,
- ["tethebrew"]=1496,
- ["tetsecyrillic"]=1205,
- ["tevirlefthebrew"]=1435,
- ["thabengali"]=2469,
- ["thadeva"]=2341,
- ["thagujarati"]=2725,
- ["thagurmukhi"]=2597,
- ["thalarabic"]=1584,
- ["thalfinalarabic"]=65196,
- ["thanthakhatthai"]=3660,
- ["theharabic"]=1579,
- ["thehfinalarabic"]=65178,
- ["thehinitialarabic"]=65179,
- ["thehmedialarabic"]=65180,
- ["thereexists"]=8707,
- ["therefore"]=8756,
- ["theta"]=952,
- ["thetasymbolgreek"]=977,
- ["thieuthacirclekorean"]=12921,
- ["thieuthaparenkorean"]=12825,
- ["thieuthcirclekorean"]=12907,
- ["thieuthkorean"]=12620,
- ["thieuthparenkorean"]=12811,
- ["thirteencircle"]=9324,
- ["thirteenparen"]=9344,
- ["thirteenperiod"]=9364,
- ["thonangmonthothai"]=3601,
- ["thook"]=429,
- ["thophuthaothai"]=3602,
- ["thorn"]=254,
- ["thothahanthai"]=3607,
- ["thothanthai"]=3600,
- ["thothongthai"]=3608,
- ["thothungthai"]=3606,
- ["thousandcyrillic"]=1154,
- ["thousandsseparatorpersian"]=1644,
- ["three"]=51,
- ["threebengali"]=2537,
- ["threecircle"]=9314,
- ["threecircleinversesansserif"]=10124,
- ["threedeva"]=2409,
- ["threeeighths"]=8540,
- ["threegujarati"]=2793,
- ["threegurmukhi"]=2665,
- ["threehackarabic"]=1635,
- ["threehangzhou"]=12323,
- ["threeideographicparen"]=12834,
- ["threeinferior"]=8323,
- ["threemonospace"]=65299,
- ["threenumeratorbengali"]=2550,
- ["threeparen"]=9334,
- ["threeperiod"]=9354,
- ["threepersian"]=1779,
- ["threequarters"]=190,
- ["threeroman"]=8562,
- ["threesuperior"]=179,
- ["threethai"]=3667,
- ["thzsquare"]=13204,
- ["tihiragana"]=12385,
- ["tikatakana"]=12481,
- ["tikatakanahalfwidth"]=65409,
- ["tikeutacirclekorean"]=12912,
- ["tikeutaparenkorean"]=12816,
- ["tikeutcirclekorean"]=12898,
- ["tikeutkorean"]=12599,
- ["tikeutparenkorean"]=12802,
- ["tilde"]=732,
- ["tildebelowcmb"]=816,
- ["tildecomb"]=771,
- ["tildedoublecmb"]=864,
- ["tildeoperator"]=8764,
- ["tildeoverlaycmb"]=820,
- ["tildeverticalcmb"]=830,
- ["timescircle"]=8855,
- ["tipehalefthebrew"]=1430,
- ["tippigurmukhi"]=2672,
- ["titlocyrilliccmb"]=1155,
- ["tiwnarmenian"]=1407,
- ["tlinebelow"]=7791,
- ["tmonospace"]=65364,
- ["toarmenian"]=1385,
- ["tohiragana"]=12392,
- ["tokatakana"]=12488,
- ["tokatakanahalfwidth"]=65412,
- ["tonebarextrahighmod"]=741,
- ["tonebarextralowmod"]=745,
- ["tonebarhighmod"]=742,
- ["tonebarlowmod"]=744,
- ["tonebarmidmod"]=743,
- ["tonefive"]=445,
- ["tonesix"]=389,
- ["tonetwo"]=424,
- ["tonos"]=900,
- ["tonsquare"]=13095,
- ["topatakthai"]=3599,
- ["tortoiseshellbracketleft"]=12308,
- ["tortoiseshellbracketleftsmall"]=65117,
- ["tortoiseshellbracketleftvertical"]=65081,
- ["tortoiseshellbracketright"]=12309,
- ["tortoiseshellbracketrightsmall"]=65118,
- ["tortoiseshellbracketrightvertical"]=65082,
- ["totaothai"]=3605,
- ["tpalatalhook"]=427,
- ["tparen"]=9391,
- ["trademark"]=8482,
- ["tretroflexhook"]=648,
- ["triagdn"]=9660,
- ["triaglf"]=9668,
- ["triagrt"]=9658,
- ["triagup"]=9650,
- ["ts"]=678,
- ["tsadidageshhebrew"]=64326,
- ["tsadihebrew"]=1510,
- ["tsecyrillic"]=1094,
- ["tserewidehebrew"]=1461,
- ["tshecyrillic"]=1115,
- ["ttabengali"]=2463,
- ["ttadeva"]=2335,
- ["ttagujarati"]=2719,
- ["ttagurmukhi"]=2591,
- ["tteharabic"]=1657,
- ["ttehfinalarabic"]=64359,
- ["ttehinitialarabic"]=64360,
- ["ttehmedialarabic"]=64361,
- ["tthabengali"]=2464,
- ["tthadeva"]=2336,
- ["tthagujarati"]=2720,
- ["tthagurmukhi"]=2592,
- ["tturned"]=647,
- ["tuhiragana"]=12388,
- ["tukatakana"]=12484,
- ["tukatakanahalfwidth"]=65410,
- ["tusmallhiragana"]=12387,
- ["tusmallkatakana"]=12483,
- ["tusmallkatakanahalfwidth"]=65391,
- ["twelvecircle"]=9323,
- ["twelveparen"]=9343,
- ["twelveperiod"]=9363,
- ["twelveroman"]=8571,
- ["twentycircle"]=9331,
- ["twentyparen"]=9351,
- ["twentyperiod"]=9371,
- ["two"]=50,
- ["twobengali"]=2536,
- ["twocircle"]=9313,
- ["twocircleinversesansserif"]=10123,
- ["twodeva"]=2408,
- ["twodotleader"]=8229,
- ["twodotleadervertical"]=65072,
- ["twogujarati"]=2792,
- ["twogurmukhi"]=2664,
- ["twohackarabic"]=1634,
- ["twohangzhou"]=12322,
- ["twoideographicparen"]=12833,
- ["twoinferior"]=8322,
- ["twomonospace"]=65298,
- ["twonumeratorbengali"]=2549,
- ["twoparen"]=9333,
- ["twoperiod"]=9353,
- ["twopersian"]=1778,
- ["tworoman"]=8561,
- ["twostroke"]=443,
- ["twosuperior"]=178,
- ["twothai"]=3666,
- ["twothirds"]=8532,
- ["u"]=117,
- ["uacute"]=250,
- ["ubar"]=649,
- ["ubengali"]=2441,
- ["ubopomofo"]=12584,
- ["ubreve"]=365,
- ["ucaron"]=468,
- ["ucircle"]=9444,
- ["ucircumflex"]=251,
- ["ucircumflexbelow"]=7799,
- ["ucyrillic"]=1091,
- ["udattadeva"]=2385,
- ["udblgrave"]=533,
- ["udeva"]=2313,
- ["udieresis"]=252,
- ["udieresisacute"]=472,
- ["udieresisbelow"]=7795,
- ["udieresiscaron"]=474,
- ["udieresiscyrillic"]=1265,
- ["udieresisgrave"]=476,
- ["udieresismacron"]=470,
- ["udotbelow"]=7909,
- ["ugrave"]=249,
- ["ugujarati"]=2697,
- ["ugurmukhi"]=2569,
- ["uhiragana"]=12358,
- ["uhookabove"]=7911,
- ["uhorn"]=432,
- ["uhornacute"]=7913,
- ["uhorndotbelow"]=7921,
- ["uhorngrave"]=7915,
- ["uhornhookabove"]=7917,
- ["uhorntilde"]=7919,
- ["uhungarumlaut"]=369,
- ["uhungarumlautcyrillic"]=1267,
- ["uinvertedbreve"]=535,
- ["ukatakana"]=12454,
- ["ukatakanahalfwidth"]=65395,
- ["ukcyrillic"]=1145,
- ["ukorean"]=12636,
- ["umacron"]=363,
- ["umacroncyrillic"]=1263,
- ["umacrondieresis"]=7803,
- ["umatragurmukhi"]=2625,
- ["umonospace"]=65365,
- ["underscore"]=95,
- ["underscoredbl"]=8215,
- ["underscoremonospace"]=65343,
- ["underscorevertical"]=65075,
- ["underscorewavy"]=65103,
- ["union"]=8746,
- ["universal"]=8704,
- ["uogonek"]=371,
- ["uparen"]=9392,
- ["upblock"]=9600,
- ["upperdothebrew"]=1476,
- ["upsilon"]=965,
- ["upsilondieresis"]=971,
- ["upsilondieresistonos"]=944,
- ["upsilonlatin"]=650,
- ["upsilontonos"]=973,
- ["uptackbelowcmb"]=797,
- ["uptackmod"]=724,
- ["uragurmukhi"]=2675,
- ["uring"]=367,
- ["ushortcyrillic"]=1118,
- ["usmallhiragana"]=12357,
- ["usmallkatakana"]=12453,
- ["usmallkatakanahalfwidth"]=65385,
- ["ustraightcyrillic"]=1199,
- ["ustraightstrokecyrillic"]=1201,
- ["utilde"]=361,
- ["utildeacute"]=7801,
- ["utildebelow"]=7797,
- ["uubengali"]=2442,
- ["uudeva"]=2314,
- ["uugujarati"]=2698,
- ["uugurmukhi"]=2570,
- ["uumatragurmukhi"]=2626,
- ["uuvowelsignbengali"]=2498,
- ["uuvowelsigndeva"]=2370,
- ["uuvowelsigngujarati"]=2754,
- ["uvowelsignbengali"]=2497,
- ["uvowelsigndeva"]=2369,
- ["uvowelsigngujarati"]=2753,
- ["v"]=118,
- ["vadeva"]=2357,
- ["vagujarati"]=2741,
- ["vagurmukhi"]=2613,
- ["vakatakana"]=12535,
- ["vavdageshhebrew"]=64309,
- ["vavhebrew"]=1493,
- ["vavholamhebrew"]=64331,
- ["vavvavhebrew"]=1520,
- ["vavyodhebrew"]=1521,
- ["vcircle"]=9445,
- ["vdotbelow"]=7807,
- ["vecyrillic"]=1074,
- ["veharabic"]=1700,
- ["vehfinalarabic"]=64363,
- ["vehinitialarabic"]=64364,
- ["vehmedialarabic"]=64365,
- ["vekatakana"]=12537,
- ["venus"]=9792,
- ["verticalbar"]=124,
- ["verticallineabovecmb"]=781,
- ["verticallinebelowcmb"]=809,
- ["verticallinelowmod"]=716,
- ["verticallinemod"]=712,
- ["vewarmenian"]=1406,
- ["vhook"]=651,
- ["vikatakana"]=12536,
- ["viramabengali"]=2509,
- ["viramadeva"]=2381,
- ["viramagujarati"]=2765,
- ["visargabengali"]=2435,
- ["visargadeva"]=2307,
- ["visargagujarati"]=2691,
- ["vmonospace"]=65366,
- ["voarmenian"]=1400,
- ["voicediterationhiragana"]=12446,
- ["voicediterationkatakana"]=12542,
- ["voicedmarkkana"]=12443,
- ["voicedmarkkanahalfwidth"]=65438,
- ["vokatakana"]=12538,
- ["vparen"]=9393,
- ["vtilde"]=7805,
- ["vturned"]=652,
- ["vuhiragana"]=12436,
- ["vukatakana"]=12532,
- ["w"]=119,
- ["wacute"]=7811,
- ["waekorean"]=12633,
- ["wahiragana"]=12431,
- ["wakatakana"]=12527,
- ["wakatakanahalfwidth"]=65436,
- ["wakorean"]=12632,
- ["wasmallhiragana"]=12430,
- ["wasmallkatakana"]=12526,
- ["wattosquare"]=13143,
- ["wavedash"]=12316,
- ["wavyunderscorevertical"]=65076,
- ["wawarabic"]=1608,
- ["wawfinalarabic"]=65262,
- ["wawhamzaabovearabic"]=1572,
- ["wawhamzaabovefinalarabic"]=65158,
- ["wbsquare"]=13277,
- ["wcircle"]=9446,
- ["wcircumflex"]=373,
- ["wdieresis"]=7813,
- ["wdotaccent"]=7815,
- ["wdotbelow"]=7817,
- ["wehiragana"]=12433,
- ["weierstrass"]=8472,
- ["wekatakana"]=12529,
- ["wekorean"]=12638,
- ["weokorean"]=12637,
- ["wgrave"]=7809,
- ["whitebullet"]=9702,
- ["whitecircle"]=9675,
- ["whitecircleinverse"]=9689,
- ["whitecornerbracketleft"]=12302,
- ["whitecornerbracketleftvertical"]=65091,
- ["whitecornerbracketright"]=12303,
- ["whitecornerbracketrightvertical"]=65092,
- ["whitediamond"]=9671,
- ["whitediamondcontainingblacksmalldiamond"]=9672,
- ["whitedownpointingsmalltriangle"]=9663,
- ["whitedownpointingtriangle"]=9661,
- ["whiteleftpointingsmalltriangle"]=9667,
- ["whiteleftpointingtriangle"]=9665,
- ["whitelenticularbracketleft"]=12310,
- ["whitelenticularbracketright"]=12311,
- ["whiterightpointingsmalltriangle"]=9657,
- ["whiterightpointingtriangle"]=9655,
- ["whitesmallsquare"]=9643,
- ["whitesmilingface"]=9786,
- ["whitesquare"]=9633,
- ["whitestar"]=9734,
- ["whitetelephone"]=9743,
- ["whitetortoiseshellbracketleft"]=12312,
- ["whitetortoiseshellbracketright"]=12313,
- ["whiteuppointingsmalltriangle"]=9653,
- ["whiteuppointingtriangle"]=9651,
- ["wihiragana"]=12432,
- ["wikatakana"]=12528,
- ["wikorean"]=12639,
- ["wmonospace"]=65367,
- ["wohiragana"]=12434,
- ["wokatakana"]=12530,
- ["wokatakanahalfwidth"]=65382,
- ["won"]=8361,
- ["wonmonospace"]=65510,
- ["wowaenthai"]=3623,
- ["wparen"]=9394,
- ["wring"]=7832,
- ["wsuperior"]=695,
- ["wturned"]=653,
- ["wynn"]=447,
- ["x"]=120,
- ["xabovecmb"]=829,
- ["xbopomofo"]=12562,
- ["xcircle"]=9447,
- ["xdieresis"]=7821,
- ["xdotaccent"]=7819,
- ["xeharmenian"]=1389,
- ["xi"]=958,
- ["xmonospace"]=65368,
- ["xparen"]=9395,
- ["xsuperior"]=739,
- ["y"]=121,
- ["yaadosquare"]=13134,
- ["yabengali"]=2479,
- ["yacute"]=253,
- ["yadeva"]=2351,
- ["yaekorean"]=12626,
- ["yagujarati"]=2735,
- ["yagurmukhi"]=2607,
- ["yahiragana"]=12420,
- ["yakatakana"]=12516,
- ["yakatakanahalfwidth"]=65428,
- ["yakorean"]=12625,
- ["yamakkanthai"]=3662,
- ["yasmallhiragana"]=12419,
- ["yasmallkatakana"]=12515,
- ["yasmallkatakanahalfwidth"]=65388,
- ["yatcyrillic"]=1123,
- ["ycircle"]=9448,
- ["ycircumflex"]=375,
- ["ydieresis"]=255,
- ["ydotaccent"]=7823,
- ["ydotbelow"]=7925,
- ["yeharabic"]=1610,
- ["yehbarreearabic"]=1746,
- ["yehbarreefinalarabic"]=64431,
- ["yehfinalarabic"]=65266,
- ["yehhamzaabovearabic"]=1574,
- ["yehhamzaabovefinalarabic"]=65162,
- ["yehhamzaaboveinitialarabic"]=65163,
- ["yehhamzaabovemedialarabic"]=65164,
- ["yehinitialarabic"]=65267,
- ["yehmedialarabic"]=65268,
- ["yehmeeminitialarabic"]=64733,
- ["yehmeemisolatedarabic"]=64600,
- ["yehnoonfinalarabic"]=64660,
- ["yehthreedotsbelowarabic"]=1745,
- ["yekorean"]=12630,
- ["yen"]=165,
- ["yenmonospace"]=65509,
- ["yeokorean"]=12629,
- ["yeorinhieuhkorean"]=12678,
- ["yerahbenyomolefthebrew"]=1450,
- ["yericyrillic"]=1099,
- ["yerudieresiscyrillic"]=1273,
- ["yesieungkorean"]=12673,
- ["yesieungpansioskorean"]=12675,
- ["yesieungsioskorean"]=12674,
- ["yetivhebrew"]=1434,
- ["ygrave"]=7923,
- ["yhook"]=436,
- ["yhookabove"]=7927,
- ["yiarmenian"]=1397,
- ["yicyrillic"]=1111,
- ["yikorean"]=12642,
- ["yinyang"]=9775,
- ["yiwnarmenian"]=1410,
- ["ymonospace"]=65369,
- ["yoddageshhebrew"]=64313,
- ["yodhebrew"]=1497,
- ["yodyodhebrew"]=1522,
- ["yodyodpatahhebrew"]=64287,
- ["yohiragana"]=12424,
- ["yoikorean"]=12681,
- ["yokatakana"]=12520,
- ["yokatakanahalfwidth"]=65430,
- ["yokorean"]=12635,
- ["yosmallhiragana"]=12423,
- ["yosmallkatakana"]=12519,
- ["yosmallkatakanahalfwidth"]=65390,
- ["yotgreek"]=1011,
- ["yoyaekorean"]=12680,
- ["yoyakorean"]=12679,
- ["yoyakthai"]=3618,
- ["yoyingthai"]=3597,
- ["yparen"]=9396,
- ["ypogegrammeni"]=890,
- ["ypogegrammenigreekcmb"]=837,
- ["yr"]=422,
- ["yring"]=7833,
- ["ysuperior"]=696,
- ["ytilde"]=7929,
- ["yturned"]=654,
- ["yuhiragana"]=12422,
- ["yuikorean"]=12684,
- ["yukatakana"]=12518,
- ["yukatakanahalfwidth"]=65429,
- ["yukorean"]=12640,
- ["yusbigcyrillic"]=1131,
- ["yusbigiotifiedcyrillic"]=1133,
- ["yuslittlecyrillic"]=1127,
- ["yuslittleiotifiedcyrillic"]=1129,
- ["yusmallhiragana"]=12421,
- ["yusmallkatakana"]=12517,
- ["yusmallkatakanahalfwidth"]=65389,
- ["yuyekorean"]=12683,
- ["yuyeokorean"]=12682,
- ["yyabengali"]=2527,
- ["yyadeva"]=2399,
- ["z"]=122,
- ["zaarmenian"]=1382,
- ["zacute"]=378,
- ["zadeva"]=2395,
- ["zagurmukhi"]=2651,
- ["zaharabic"]=1592,
- ["zahfinalarabic"]=65222,
- ["zahinitialarabic"]=65223,
- ["zahiragana"]=12374,
- ["zahmedialarabic"]=65224,
- ["zainarabic"]=1586,
- ["zainfinalarabic"]=65200,
- ["zakatakana"]=12470,
- ["zaqefgadolhebrew"]=1429,
- ["zaqefqatanhebrew"]=1428,
- ["zarqahebrew"]=1432,
- ["zayindageshhebrew"]=64310,
- ["zayinhebrew"]=1494,
- ["zbopomofo"]=12567,
- ["zcaron"]=382,
- ["zcircle"]=9449,
- ["zcircumflex"]=7825,
- ["zcurl"]=657,
- ["zdotaccent"]=380,
- ["zdotbelow"]=7827,
- ["zecyrillic"]=1079,
- ["zedescendercyrillic"]=1177,
- ["zedieresiscyrillic"]=1247,
- ["zehiragana"]=12380,
- ["zekatakana"]=12476,
- ["zero"]=48,
- ["zerobengali"]=2534,
- ["zerodeva"]=2406,
- ["zerogujarati"]=2790,
- ["zerogurmukhi"]=2662,
- ["zerohackarabic"]=1632,
- ["zeroinferior"]=8320,
- ["zeromonospace"]=65296,
- ["zeropersian"]=1776,
- ["zerosuperior"]=8304,
- ["zerothai"]=3664,
- ["zerowidthjoiner"]=65279,
- ["zerowidthnonjoiner"]=8204,
- ["zerowidthspace"]=8203,
- ["zeta"]=950,
- ["zhbopomofo"]=12563,
- ["zhearmenian"]=1386,
- ["zhebrevecyrillic"]=1218,
- ["zhecyrillic"]=1078,
- ["zhedescendercyrillic"]=1175,
- ["zhedieresiscyrillic"]=1245,
- ["zihiragana"]=12376,
- ["zikatakana"]=12472,
- ["zinorhebrew"]=1454,
- ["zlinebelow"]=7829,
- ["zmonospace"]=65370,
- ["zohiragana"]=12382,
- ["zokatakana"]=12478,
- ["zparen"]=9397,
- ["zretroflexhook"]=656,
- ["zstroke"]=438,
- ["zuhiragana"]=12378,
- ["zukatakana"]=12474,
-
- -- extras
-
- ["Dcroat"]=272,
- ["Delta"]=8710,
- ["Euro"]=8364,
- ["H18533"]=9679,
- ["H18543"]=9642,
- ["H18551"]=9643,
- ["H22073"]=9633,
- ["Ldot"]=319,
- ["Oslashacute"]=510,
- ["SF10000"]=9484,
- ["SF20000"]=9492,
- ["SF30000"]=9488,
- ["SF40000"]=9496,
- ["SF50000"]=9532,
- ["SF60000"]=9516,
- ["SF70000"]=9524,
- ["SF80000"]=9500,
- ["SF90000"]=9508,
- ["Upsilon1"]=978,
- ["afii10066"]=1073,
- ["afii10067"]=1074,
- ["afii10068"]=1075,
- ["afii10069"]=1076,
- ["afii10070"]=1077,
- ["afii10071"]=1105,
- ["afii10072"]=1078,
- ["afii10073"]=1079,
- ["afii10074"]=1080,
- ["afii10075"]=1081,
- ["afii10076"]=1082,
- ["afii10077"]=1083,
- ["afii10078"]=1084,
- ["afii10079"]=1085,
- ["afii10080"]=1086,
- ["afii10081"]=1087,
- ["afii10082"]=1088,
- ["afii10083"]=1089,
- ["afii10084"]=1090,
- ["afii10085"]=1091,
- ["afii10086"]=1092,
- ["afii10087"]=1093,
- ["afii10088"]=1094,
- ["afii10089"]=1095,
- ["afii10090"]=1096,
- ["afii10091"]=1097,
- ["afii10092"]=1098,
- ["afii10093"]=1099,
- ["afii10094"]=1100,
- ["afii10095"]=1101,
- ["afii10096"]=1102,
- ["afii10097"]=1103,
- ["afii10098"]=1169,
- ["afii10099"]=1106,
- ["afii10100"]=1107,
- ["afii10101"]=1108,
- ["afii10102"]=1109,
- ["afii10103"]=1110,
- ["afii10104"]=1111,
- ["afii10105"]=1112,
- ["afii10106"]=1113,
- ["afii10107"]=1114,
- ["afii10108"]=1115,
- ["afii10109"]=1116,
- ["afii10110"]=1118,
- ["afii10193"]=1119,
- ["afii10194"]=1123,
- ["afii10195"]=1139,
- ["afii10196"]=1141,
- ["afii10846"]=1241,
- ["afii208"]=8213,
- ["afii57381"]=1642,
- ["afii57388"]=1548,
- ["afii57392"]=1632,
- ["afii57393"]=1633,
- ["afii57394"]=1634,
- ["afii57395"]=1635,
- ["afii57396"]=1636,
- ["afii57397"]=1637,
- ["afii57398"]=1638,
- ["afii57399"]=1639,
- ["afii57400"]=1640,
- ["afii57401"]=1641,
- ["afii57403"]=1563,
- ["afii57407"]=1567,
- ["afii57409"]=1569,
- ["afii57410"]=1570,
- ["afii57411"]=1571,
- ["afii57412"]=1572,
- ["afii57413"]=1573,
- ["afii57414"]=1574,
- ["afii57415"]=1575,
- ["afii57416"]=1576,
- ["afii57417"]=1577,
- ["afii57418"]=1578,
- ["afii57419"]=1579,
- ["afii57420"]=1580,
- ["afii57421"]=1581,
- ["afii57422"]=1582,
- ["afii57423"]=1583,
- ["afii57424"]=1584,
- ["afii57425"]=1585,
- ["afii57426"]=1586,
- ["afii57427"]=1587,
- ["afii57428"]=1588,
- ["afii57429"]=1589,
- ["afii57430"]=1590,
- ["afii57431"]=1591,
- ["afii57432"]=1592,
- ["afii57433"]=1593,
- ["afii57434"]=1594,
- ["afii57440"]=1600,
- ["afii57441"]=1601,
- ["afii57442"]=1602,
- ["afii57443"]=1603,
- ["afii57444"]=1604,
- ["afii57445"]=1605,
- ["afii57446"]=1606,
- ["afii57448"]=1608,
- ["afii57449"]=1609,
- ["afii57450"]=1610,
- ["afii57451"]=1611,
- ["afii57452"]=1612,
- ["afii57453"]=1613,
- ["afii57454"]=1614,
- ["afii57455"]=1615,
- ["afii57456"]=1616,
- ["afii57457"]=1617,
- ["afii57458"]=1618,
- ["afii57470"]=1607,
- ["afii57505"]=1700,
- ["afii57506"]=1662,
- ["afii57507"]=1670,
- ["afii57508"]=1688,
- ["afii57509"]=1711,
- ["afii57511"]=1657,
- ["afii57512"]=1672,
- ["afii57513"]=1681,
- ["afii57514"]=1722,
- ["afii57519"]=1746,
- ["afii57636"]=8362,
- ["afii57645"]=1470,
- ["afii57658"]=1475,
- ["afii57664"]=1488,
- ["afii57665"]=1489,
- ["afii57666"]=1490,
- ["afii57667"]=1491,
- ["afii57668"]=1492,
- ["afii57669"]=1493,
- ["afii57670"]=1494,
- ["afii57671"]=1495,
- ["afii57672"]=1496,
- ["afii57673"]=1497,
- ["afii57674"]=1498,
- ["afii57675"]=1499,
- ["afii57676"]=1500,
- ["afii57677"]=1501,
- ["afii57678"]=1502,
- ["afii57679"]=1503,
- ["afii57680"]=1504,
- ["afii57681"]=1505,
- ["afii57682"]=1506,
- ["afii57683"]=1507,
- ["afii57684"]=1508,
- ["afii57685"]=1509,
- ["afii57686"]=1510,
- ["afii57687"]=1511,
- ["afii57688"]=1512,
- ["afii57689"]=1513,
- ["afii57690"]=1514,
- ["afii57716"]=1520,
- ["afii57717"]=1521,
- ["afii57718"]=1522,
- ["afii57793"]=1460,
- ["afii57794"]=1461,
- ["afii57795"]=1462,
- ["afii57796"]=1467,
- ["afii57797"]=1464,
- ["afii57798"]=1463,
- ["afii57799"]=1456,
- ["afii57800"]=1458,
- ["afii57801"]=1457,
- ["afii57802"]=1459,
- ["afii57803"]=1474,
- ["afii57804"]=1473,
- ["afii57806"]=1465,
- ["afii57807"]=1468,
- ["afii57839"]=1469,
- ["afii57841"]=1471,
- ["afii57842"]=1472,
- ["afii57929"]=700,
- ["afii61248"]=8453,
- ["afii61289"]=8467,
- ["afii61352"]=8470,
- ["afii61664"]=8204,
- ["afii63167"]=1645,
- ["afii64937"]=701,
- ["arrowdblboth"]=8660,
- ["arrowdblleft"]=8656,
- ["arrowdblright"]=8658,
- ["arrowupdnbse"]=8616,
- ["bar"]=124,
- ["circle"]=9675,
- ["circlemultiply"]=8855,
- ["circleplus"]=8853,
- ["club"]=9827,
- ["colonmonetary"]=8353,
- ["dcroat"]=273,
- ["dkshade"]=9619,
- ["existential"]=8707,
- ["female"]=9792,
- ["gradient"]=8711,
- ["heart"]=9829,
- ["hookabovecomb"]=777,
- ["invcircle"]=9689,
- ["ldot"]=320,
- ["longs"]=383,
- ["ltshade"]=9617,
- ["male"]=9794,
- ["mu"]=181,
- ["napostrophe"]=329,
- ["notelement"]=8713,
- ["omega1"]=982,
- ["openbullet"]=9702,
- ["orthogonal"]=8735,
- ["oslashacute"]=511,
- ["phi1"]=981,
- ["propersubset"]=8834,
- ["propersuperset"]=8835,
- ["reflexsubset"]=8838,
- ["reflexsuperset"]=8839,
- ["shade"]=9618,
- ["sigma1"]=962,
- ["similar"]=8764,
- ["smileface"]=9786,
- ["spacehackarabic"]=32,
- ["spade"]=9824,
- ["theta1"]=977,
- ["twodotenleader"]=8229,
+return { -- generated: inspect(fonts.encodings.agl.unicodes)
+ ["A"]=65,
+ ["AE"]=198,
+ ["AEacute"]=508,
+ ["AEmacron"]=482,
+ ["Aacute"]=193,
+ ["Abreve"]=258,
+ ["Abreveacute"]=7854,
+ ["Abrevecyrillic"]=1232,
+ ["Abrevedotbelow"]=7862,
+ ["Abrevegrave"]=7856,
+ ["Abrevehookabove"]=7858,
+ ["Abrevetilde"]=7860,
+ ["Acaron"]=461,
+ ["Acircle"]=9398,
+ ["Acircumflex"]=194,
+ ["Acircumflexacute"]=7844,
+ ["Acircumflexdotbelow"]=7852,
+ ["Acircumflexgrave"]=7846,
+ ["Acircumflexhookabove"]=7848,
+ ["Acircumflextilde"]=7850,
+ ["Acyrillic"]=1040,
+ ["Adblgrave"]=512,
+ ["Adieresis"]=196,
+ ["Adieresiscyrillic"]=1234,
+ ["Adieresismacron"]=478,
+ ["Adotbelow"]=7840,
+ ["Adotmacron"]=480,
+ ["Agrave"]=192,
+ ["Ahookabove"]=7842,
+ ["Aiecyrillic"]=1236,
+ ["Ainvertedbreve"]=514,
+ ["Alpha"]=913,
+ ["Alphatonos"]=902,
+ ["Amacron"]=256,
+ ["Amonospace"]=65313,
+ ["Aogonek"]=260,
+ ["Aring"]=197,
+ ["Aringacute"]=506,
+ ["Aringbelow"]=7680,
+ ["Atilde"]=195,
+ ["Aybarmenian"]=1329,
+ ["B"]=66,
+ ["Bcircle"]=9399,
+ ["Bdotaccent"]=7682,
+ ["Bdotbelow"]=7684,
+ ["Becyrillic"]=1041,
+ ["Benarmenian"]=1330,
+ ["Beta"]=914,
+ ["Bhook"]=385,
+ ["Blinebelow"]=7686,
+ ["Bmonospace"]=65314,
+ ["Btopbar"]=386,
+ ["C"]=67,
+ ["Caarmenian"]=1342,
+ ["Cacute"]=262,
+ ["Ccaron"]=268,
+ ["Ccedilla"]=199,
+ ["Ccedillaacute"]=7688,
+ ["Ccircle"]=9400,
+ ["Ccircumflex"]=264,
+ ["Cdot"]=266,
+ ["Cdotaccent"]=266,
+ ["Chaarmenian"]=1353,
+ ["Cheabkhasiancyrillic"]=1212,
+ ["Checyrillic"]=1063,
+ ["Chedescenderabkhasiancyrillic"]=1214,
+ ["Chedescendercyrillic"]=1206,
+ ["Chedieresiscyrillic"]=1268,
+ ["Cheharmenian"]=1347,
+ ["Chekhakassiancyrillic"]=1227,
+ ["Cheverticalstrokecyrillic"]=1208,
+ ["Chi"]=935,
+ ["Chook"]=391,
+ ["Cmonospace"]=65315,
+ ["Coarmenian"]=1361,
+ ["D"]=68,
+ ["DZ"]=497,
+ ["DZcaron"]=452,
+ ["Daarmenian"]=1332,
+ ["Dafrican"]=393,
+ ["Dcaron"]=270,
+ ["Dcedilla"]=7696,
+ ["Dcircle"]=9401,
+ ["Dcircumflexbelow"]=7698,
+ ["Dcroat"]=272,
+ ["Ddotaccent"]=7690,
+ ["Ddotbelow"]=7692,
+ ["Decyrillic"]=1044,
+ ["Deicoptic"]=1006,
+ ["Delta"]=8710,
+ ["Deltagreek"]=916,
+ ["Dhook"]=394,
+ ["Digammagreek"]=988,
+ ["Djecyrillic"]=1026,
+ ["Dlinebelow"]=7694,
+ ["Dmonospace"]=65316,
+ ["Dslash"]=272,
+ ["Dtopbar"]=395,
+ ["Dz"]=498,
+ ["Dzcaron"]=453,
+ ["Dzeabkhasiancyrillic"]=1248,
+ ["Dzecyrillic"]=1029,
+ ["Dzhecyrillic"]=1039,
+ ["E"]=69,
+ ["Eacute"]=201,
+ ["Ebreve"]=276,
+ ["Ecaron"]=282,
+ ["Ecedillabreve"]=7708,
+ ["Echarmenian"]=1333,
+ ["Ecircle"]=9402,
+ ["Ecircumflex"]=202,
+ ["Ecircumflexacute"]=7870,
+ ["Ecircumflexbelow"]=7704,
+ ["Ecircumflexdotbelow"]=7878,
+ ["Ecircumflexgrave"]=7872,
+ ["Ecircumflexhookabove"]=7874,
+ ["Ecircumflextilde"]=7876,
+ ["Ecyrillic"]=1028,
+ ["Edblgrave"]=516,
+ ["Edieresis"]=203,
+ ["Edot"]=278,
+ ["Edotaccent"]=278,
+ ["Edotbelow"]=7864,
+ ["Efcyrillic"]=1060,
+ ["Egrave"]=200,
+ ["Eharmenian"]=1335,
+ ["Ehookabove"]=7866,
+ ["Eightroman"]=8551,
+ ["Einvertedbreve"]=518,
+ ["Eiotifiedcyrillic"]=1124,
+ ["Elcyrillic"]=1051,
+ ["Elevenroman"]=8554,
+ ["Emacron"]=274,
+ ["Emacronacute"]=7702,
+ ["Emacrongrave"]=7700,
+ ["Emcyrillic"]=1052,
+ ["Emonospace"]=65317,
+ ["Encyrillic"]=1053,
+ ["Endescendercyrillic"]=1186,
+ ["Eng"]=330,
+ ["Enghecyrillic"]=1188,
+ ["Enhookcyrillic"]=1223,
+ ["Eogonek"]=280,
+ ["Eopen"]=400,
+ ["Epsilon"]=917,
+ ["Epsilontonos"]=904,
+ ["Ercyrillic"]=1056,
+ ["Ereversed"]=398,
+ ["Ereversedcyrillic"]=1069,
+ ["Escyrillic"]=1057,
+ ["Esdescendercyrillic"]=1194,
+ ["Esh"]=425,
+ ["Eta"]=919,
+ ["Etarmenian"]=1336,
+ ["Etatonos"]=905,
+ ["Eth"]=208,
+ ["Etilde"]=7868,
+ ["Etildebelow"]=7706,
+ ["Euro"]=8364,
+ ["Ezh"]=439,
+ ["Ezhcaron"]=494,
+ ["Ezhreversed"]=440,
+ ["F"]=70,
+ ["Fcircle"]=9403,
+ ["Fdotaccent"]=7710,
+ ["Feharmenian"]=1366,
+ ["Feicoptic"]=996,
+ ["Fhook"]=401,
+ ["Fitacyrillic"]=1138,
+ ["Fiveroman"]=8548,
+ ["Fmonospace"]=65318,
+ ["Fourroman"]=8547,
+ ["G"]=71,
+ ["GBsquare"]=13191,
+ ["Gacute"]=500,
+ ["Gamma"]=915,
+ ["Gammaafrican"]=404,
+ ["Gangiacoptic"]=1002,
+ ["Gbreve"]=286,
+ ["Gcaron"]=486,
+ ["Gcedilla"]=290,
+ ["Gcircle"]=9404,
+ ["Gcircumflex"]=284,
+ ["Gcommaaccent"]=290,
+ ["Gdot"]=288,
+ ["Gdotaccent"]=288,
+ ["Gecyrillic"]=1043,
+ ["Ghadarmenian"]=1346,
+ ["Ghemiddlehookcyrillic"]=1172,
+ ["Ghestrokecyrillic"]=1170,
+ ["Gheupturncyrillic"]=1168,
+ ["Ghook"]=403,
+ ["Gimarmenian"]=1331,
+ ["Gjecyrillic"]=1027,
+ ["Gmacron"]=7712,
+ ["Gmonospace"]=65319,
+ ["Gsmallhook"]=667,
+ ["Gstroke"]=484,
+ ["H"]=72,
+ ["H18533"]=9679,
+ ["H18543"]=9642,
+ ["H18551"]=9643,
+ ["H22073"]=9633,
+ ["HPsquare"]=13259,
+ ["Haabkhasiancyrillic"]=1192,
+ ["Hadescendercyrillic"]=1202,
+ ["Hardsigncyrillic"]=1066,
+ ["Hbar"]=294,
+ ["Hbrevebelow"]=7722,
+ ["Hcedilla"]=7720,
+ ["Hcircle"]=9405,
+ ["Hcircumflex"]=292,
+ ["Hdieresis"]=7718,
+ ["Hdotaccent"]=7714,
+ ["Hdotbelow"]=7716,
+ ["Hmonospace"]=65320,
+ ["Hoarmenian"]=1344,
+ ["Horicoptic"]=1000,
+ ["Hzsquare"]=13200,
+ ["I"]=73,
+ ["IAcyrillic"]=1071,
+ ["IJ"]=306,
+ ["IUcyrillic"]=1070,
+ ["Iacute"]=205,
+ ["Ibreve"]=300,
+ ["Icaron"]=463,
+ ["Icircle"]=9406,
+ ["Icircumflex"]=206,
+ ["Icyrillic"]=1030,
+ ["Idblgrave"]=520,
+ ["Idieresis"]=207,
+ ["Idieresisacute"]=7726,
+ ["Idieresiscyrillic"]=1252,
+ ["Idot"]=304,
+ ["Idotaccent"]=304,
+ ["Idotbelow"]=7882,
+ ["Iebrevecyrillic"]=1238,
+ ["Iecyrillic"]=1045,
+ ["Ifraktur"]=8465,
+ ["Igrave"]=204,
+ ["Ihookabove"]=7880,
+ ["Iicyrillic"]=1048,
+ ["Iinvertedbreve"]=522,
+ ["Iishortcyrillic"]=1049,
+ ["Imacron"]=298,
+ ["Imacroncyrillic"]=1250,
+ ["Imonospace"]=65321,
+ ["Iniarmenian"]=1339,
+ ["Iocyrillic"]=1025,
+ ["Iogonek"]=302,
+ ["Iota"]=921,
+ ["Iotaafrican"]=406,
+ ["Iotadieresis"]=938,
+ ["Iotatonos"]=906,
+ ["Istroke"]=407,
+ ["Itilde"]=296,
+ ["Itildebelow"]=7724,
+ ["Izhitsacyrillic"]=1140,
+ ["Izhitsadblgravecyrillic"]=1142,
+ ["J"]=74,
+ ["Jaarmenian"]=1345,
+ ["Jcircle"]=9407,
+ ["Jcircumflex"]=308,
+ ["Jecyrillic"]=1032,
+ ["Jheharmenian"]=1355,
+ ["Jmonospace"]=65322,
+ ["K"]=75,
+ ["KBsquare"]=13189,
+ ["KKsquare"]=13261,
+ ["Kabashkircyrillic"]=1184,
+ ["Kacute"]=7728,
+ ["Kacyrillic"]=1050,
+ ["Kadescendercyrillic"]=1178,
+ ["Kahookcyrillic"]=1219,
+ ["Kappa"]=922,
+ ["Kastrokecyrillic"]=1182,
+ ["Kaverticalstrokecyrillic"]=1180,
+ ["Kcaron"]=488,
+ ["Kcedilla"]=310,
+ ["Kcircle"]=9408,
+ ["Kcommaaccent"]=310,
+ ["Kdotbelow"]=7730,
+ ["Keharmenian"]=1364,
+ ["Kenarmenian"]=1343,
+ ["Khacyrillic"]=1061,
+ ["Kheicoptic"]=998,
+ ["Khook"]=408,
+ ["Kjecyrillic"]=1036,
+ ["Klinebelow"]=7732,
+ ["Kmonospace"]=65323,
+ ["Koppacyrillic"]=1152,
+ ["Koppagreek"]=990,
+ ["Ksicyrillic"]=1134,
+ ["L"]=76,
+ ["LJ"]=455,
+ ["Lacute"]=313,
+ ["Lambda"]=923,
+ ["Lcaron"]=317,
+ ["Lcedilla"]=315,
+ ["Lcircle"]=9409,
+ ["Lcircumflexbelow"]=7740,
+ ["Lcommaaccent"]=315,
+ ["Ldot"]=319,
+ ["Ldotaccent"]=319,
+ ["Ldotbelow"]=7734,
+ ["Ldotbelowmacron"]=7736,
+ ["Liwnarmenian"]=1340,
+ ["Lj"]=456,
+ ["Ljecyrillic"]=1033,
+ ["Llinebelow"]=7738,
+ ["Lmonospace"]=65324,
+ ["Lslash"]=321,
+ ["M"]=77,
+ ["MBsquare"]=13190,
+ ["Macute"]=7742,
+ ["Mcircle"]=9410,
+ ["Mdotaccent"]=7744,
+ ["Mdotbelow"]=7746,
+ ["Menarmenian"]=1348,
+ ["Mmonospace"]=65325,
+ ["Mturned"]=412,
+ ["Mu"]=924,
+ ["N"]=78,
+ ["NJ"]=458,
+ ["Nacute"]=323,
+ ["Ncaron"]=327,
+ ["Ncedilla"]=325,
+ ["Ncircle"]=9411,
+ ["Ncircumflexbelow"]=7754,
+ ["Ncommaaccent"]=325,
+ ["Ndotaccent"]=7748,
+ ["Ndotbelow"]=7750,
+ ["Nhookleft"]=413,
+ ["Nineroman"]=8552,
+ ["Nj"]=459,
+ ["Njecyrillic"]=1034,
+ ["Nlinebelow"]=7752,
+ ["Nmonospace"]=65326,
+ ["Nowarmenian"]=1350,
+ ["Ntilde"]=209,
+ ["Nu"]=925,
+ ["O"]=79,
+ ["OE"]=338,
+ ["Oacute"]=211,
+ ["Obarredcyrillic"]=1256,
+ ["Obarreddieresiscyrillic"]=1258,
+ ["Obreve"]=334,
+ ["Ocaron"]=465,
+ ["Ocenteredtilde"]=415,
+ ["Ocircle"]=9412,
+ ["Ocircumflex"]=212,
+ ["Ocircumflexacute"]=7888,
+ ["Ocircumflexdotbelow"]=7896,
+ ["Ocircumflexgrave"]=7890,
+ ["Ocircumflexhookabove"]=7892,
+ ["Ocircumflextilde"]=7894,
+ ["Ocyrillic"]=1054,
+ ["Odblacute"]=336,
+ ["Odblgrave"]=524,
+ ["Odieresis"]=214,
+ ["Odieresiscyrillic"]=1254,
+ ["Odotbelow"]=7884,
+ ["Ograve"]=210,
+ ["Oharmenian"]=1365,
+ ["Ohm"]=8486,
+ ["Ohookabove"]=7886,
+ ["Ohorn"]=416,
+ ["Ohornacute"]=7898,
+ ["Ohorndotbelow"]=7906,
+ ["Ohorngrave"]=7900,
+ ["Ohornhookabove"]=7902,
+ ["Ohorntilde"]=7904,
+ ["Ohungarumlaut"]=336,
+ ["Oi"]=418,
+ ["Oinvertedbreve"]=526,
+ ["Omacron"]=332,
+ ["Omacronacute"]=7762,
+ ["Omacrongrave"]=7760,
+ ["Omega"]=8486,
+ ["Omegacyrillic"]=1120,
+ ["Omegagreek"]=937,
+ ["Omegaroundcyrillic"]=1146,
+ ["Omegatitlocyrillic"]=1148,
+ ["Omegatonos"]=911,
+ ["Omicron"]=927,
+ ["Omicrontonos"]=908,
+ ["Omonospace"]=65327,
+ ["Oneroman"]=8544,
+ ["Oogonek"]=490,
+ ["Oogonekmacron"]=492,
+ ["Oopen"]=390,
+ ["Oslash"]=216,
+ ["Oslashacute"]=510,
+ ["Ostrokeacute"]=510,
+ ["Otcyrillic"]=1150,
+ ["Otilde"]=213,
+ ["Otildeacute"]=7756,
+ ["Otildedieresis"]=7758,
+ ["P"]=80,
+ ["Pacute"]=7764,
+ ["Pcircle"]=9413,
+ ["Pdotaccent"]=7766,
+ ["Pecyrillic"]=1055,
+ ["Peharmenian"]=1354,
+ ["Pemiddlehookcyrillic"]=1190,
+ ["Phi"]=934,
+ ["Phook"]=420,
+ ["Pi"]=928,
+ ["Piwrarmenian"]=1363,
+ ["Pmonospace"]=65328,
+ ["Psi"]=936,
+ ["Psicyrillic"]=1136,
+ ["Q"]=81,
+ ["Qcircle"]=9414,
+ ["Qmonospace"]=65329,
+ ["R"]=82,
+ ["Raarmenian"]=1356,
+ ["Racute"]=340,
+ ["Rcaron"]=344,
+ ["Rcedilla"]=342,
+ ["Rcircle"]=9415,
+ ["Rcommaaccent"]=342,
+ ["Rdblgrave"]=528,
+ ["Rdotaccent"]=7768,
+ ["Rdotbelow"]=7770,
+ ["Rdotbelowmacron"]=7772,
+ ["Reharmenian"]=1360,
+ ["Rfraktur"]=8476,
+ ["Rho"]=929,
+ ["Rinvertedbreve"]=530,
+ ["Rlinebelow"]=7774,
+ ["Rmonospace"]=65330,
+ ["Rsmallinverted"]=641,
+ ["Rsmallinvertedsuperior"]=694,
+ ["S"]=83,
+ ["SF010000"]=9484,
+ ["SF020000"]=9492,
+ ["SF030000"]=9488,
+ ["SF040000"]=9496,
+ ["SF050000"]=9532,
+ ["SF060000"]=9516,
+ ["SF070000"]=9524,
+ ["SF080000"]=9500,
+ ["SF090000"]=9508,
+ ["SF10000"]=9484,
+ ["SF100000"]=9472,
+ ["SF110000"]=9474,
+ ["SF190000"]=9569,
+ ["SF20000"]=9492,
+ ["SF200000"]=9570,
+ ["SF210000"]=9558,
+ ["SF220000"]=9557,
+ ["SF230000"]=9571,
+ ["SF240000"]=9553,
+ ["SF250000"]=9559,
+ ["SF260000"]=9565,
+ ["SF270000"]=9564,
+ ["SF280000"]=9563,
+ ["SF30000"]=9488,
+ ["SF360000"]=9566,
+ ["SF370000"]=9567,
+ ["SF380000"]=9562,
+ ["SF390000"]=9556,
+ ["SF40000"]=9496,
+ ["SF400000"]=9577,
+ ["SF410000"]=9574,
+ ["SF420000"]=9568,
+ ["SF430000"]=9552,
+ ["SF440000"]=9580,
+ ["SF450000"]=9575,
+ ["SF460000"]=9576,
+ ["SF470000"]=9572,
+ ["SF480000"]=9573,
+ ["SF490000"]=9561,
+ ["SF50000"]=9532,
+ ["SF500000"]=9560,
+ ["SF510000"]=9554,
+ ["SF520000"]=9555,
+ ["SF530000"]=9579,
+ ["SF540000"]=9578,
+ ["SF60000"]=9516,
+ ["SF70000"]=9524,
+ ["SF80000"]=9500,
+ ["SF90000"]=9508,
+ ["Sacute"]=346,
+ ["Sacutedotaccent"]=7780,
+ ["Sampigreek"]=992,
+ ["Scaron"]=352,
+ ["Scarondotaccent"]=7782,
+ ["Scedilla"]=350,
+ ["Schwa"]=399,
+ ["Schwacyrillic"]=1240,
+ ["Schwadieresiscyrillic"]=1242,
+ ["Scircle"]=9416,
+ ["Scircumflex"]=348,
+ ["Scommaaccent"]=536,
+ ["Sdotaccent"]=7776,
+ ["Sdotbelow"]=7778,
+ ["Sdotbelowdotaccent"]=7784,
+ ["Seharmenian"]=1357,
+ ["Sevenroman"]=8550,
+ ["Shaarmenian"]=1351,
+ ["Shacyrillic"]=1064,
+ ["Shchacyrillic"]=1065,
+ ["Sheicoptic"]=994,
+ ["Shhacyrillic"]=1210,
+ ["Shimacoptic"]=1004,
+ ["Sigma"]=931,
+ ["Sixroman"]=8549,
+ ["Smonospace"]=65331,
+ ["Softsigncyrillic"]=1068,
+ ["Stigmagreek"]=986,
+ ["T"]=84,
+ ["Tau"]=932,
+ ["Tbar"]=358,
+ ["Tcaron"]=356,
+ ["Tcedilla"]=354,
+ ["Tcircle"]=9417,
+ ["Tcircumflexbelow"]=7792,
+ ["Tcommaaccent"]=354,
+ ["Tdotaccent"]=7786,
+ ["Tdotbelow"]=7788,
+ ["Tecyrillic"]=1058,
+ ["Tedescendercyrillic"]=1196,
+ ["Tenroman"]=8553,
+ ["Tetsecyrillic"]=1204,
+ ["Theta"]=920,
+ ["Thook"]=428,
+ ["Thorn"]=222,
+ ["Threeroman"]=8546,
+ ["Tiwnarmenian"]=1359,
+ ["Tlinebelow"]=7790,
+ ["Tmonospace"]=65332,
+ ["Toarmenian"]=1337,
+ ["Tonefive"]=444,
+ ["Tonesix"]=388,
+ ["Tonetwo"]=423,
+ ["Tretroflexhook"]=430,
+ ["Tsecyrillic"]=1062,
+ ["Tshecyrillic"]=1035,
+ ["Twelveroman"]=8555,
+ ["Tworoman"]=8545,
+ ["U"]=85,
+ ["Uacute"]=218,
+ ["Ubreve"]=364,
+ ["Ucaron"]=467,
+ ["Ucircle"]=9418,
+ ["Ucircumflex"]=219,
+ ["Ucircumflexbelow"]=7798,
+ ["Ucyrillic"]=1059,
+ ["Udblacute"]=368,
+ ["Udblgrave"]=532,
+ ["Udieresis"]=220,
+ ["Udieresisacute"]=471,
+ ["Udieresisbelow"]=7794,
+ ["Udieresiscaron"]=473,
+ ["Udieresiscyrillic"]=1264,
+ ["Udieresisgrave"]=475,
+ ["Udieresismacron"]=469,
+ ["Udotbelow"]=7908,
+ ["Ugrave"]=217,
+ ["Uhookabove"]=7910,
+ ["Uhorn"]=431,
+ ["Uhornacute"]=7912,
+ ["Uhorndotbelow"]=7920,
+ ["Uhorngrave"]=7914,
+ ["Uhornhookabove"]=7916,
+ ["Uhorntilde"]=7918,
+ ["Uhungarumlaut"]=368,
+ ["Uhungarumlautcyrillic"]=1266,
+ ["Uinvertedbreve"]=534,
+ ["Ukcyrillic"]=1144,
+ ["Umacron"]=362,
+ ["Umacroncyrillic"]=1262,
+ ["Umacrondieresis"]=7802,
+ ["Umonospace"]=65333,
+ ["Uogonek"]=370,
+ ["Upsilon"]=933,
+ ["Upsilon1"]=978,
+ ["Upsilonacutehooksymbolgreek"]=979,
+ ["Upsilonafrican"]=433,
+ ["Upsilondieresis"]=939,
+ ["Upsilondieresishooksymbolgreek"]=980,
+ ["Upsilonhooksymbol"]=978,
+ ["Upsilontonos"]=910,
+ ["Uring"]=366,
+ ["Ushortcyrillic"]=1038,
+ ["Ustraightcyrillic"]=1198,
+ ["Ustraightstrokecyrillic"]=1200,
+ ["Utilde"]=360,
+ ["Utildeacute"]=7800,
+ ["Utildebelow"]=7796,
+ ["V"]=86,
+ ["Vcircle"]=9419,
+ ["Vdotbelow"]=7806,
+ ["Vecyrillic"]=1042,
+ ["Vewarmenian"]=1358,
+ ["Vhook"]=434,
+ ["Vmonospace"]=65334,
+ ["Voarmenian"]=1352,
+ ["Vtilde"]=7804,
+ ["W"]=87,
+ ["Wacute"]=7810,
+ ["Wcircle"]=9420,
+ ["Wcircumflex"]=372,
+ ["Wdieresis"]=7812,
+ ["Wdotaccent"]=7814,
+ ["Wdotbelow"]=7816,
+ ["Wgrave"]=7808,
+ ["Wmonospace"]=65335,
+ ["X"]=88,
+ ["Xcircle"]=9421,
+ ["Xdieresis"]=7820,
+ ["Xdotaccent"]=7818,
+ ["Xeharmenian"]=1341,
+ ["Xi"]=926,
+ ["Xmonospace"]=65336,
+ ["Y"]=89,
+ ["Yacute"]=221,
+ ["Yatcyrillic"]=1122,
+ ["Ycircle"]=9422,
+ ["Ycircumflex"]=374,
+ ["Ydieresis"]=376,
+ ["Ydotaccent"]=7822,
+ ["Ydotbelow"]=7924,
+ ["Yericyrillic"]=1067,
+ ["Yerudieresiscyrillic"]=1272,
+ ["Ygrave"]=7922,
+ ["Yhook"]=435,
+ ["Yhookabove"]=7926,
+ ["Yiarmenian"]=1349,
+ ["Yicyrillic"]=1031,
+ ["Yiwnarmenian"]=1362,
+ ["Ymonospace"]=65337,
+ ["Ytilde"]=7928,
+ ["Yusbigcyrillic"]=1130,
+ ["Yusbigiotifiedcyrillic"]=1132,
+ ["Yuslittlecyrillic"]=1126,
+ ["Yuslittleiotifiedcyrillic"]=1128,
+ ["Z"]=90,
+ ["Zaarmenian"]=1334,
+ ["Zacute"]=377,
+ ["Zcaron"]=381,
+ ["Zcircle"]=9423,
+ ["Zcircumflex"]=7824,
+ ["Zdot"]=379,
+ ["Zdotaccent"]=379,
+ ["Zdotbelow"]=7826,
+ ["Zecyrillic"]=1047,
+ ["Zedescendercyrillic"]=1176,
+ ["Zedieresiscyrillic"]=1246,
+ ["Zeta"]=918,
+ ["Zhearmenian"]=1338,
+ ["Zhebrevecyrillic"]=1217,
+ ["Zhecyrillic"]=1046,
+ ["Zhedescendercyrillic"]=1174,
+ ["Zhedieresiscyrillic"]=1244,
+ ["Zlinebelow"]=7828,
+ ["Zmonospace"]=65338,
+ ["Zstroke"]=437,
+ ["a"]=97,
+ ["aabengali"]=2438,
+ ["aacute"]=225,
+ ["aadeva"]=2310,
+ ["aagujarati"]=2694,
+ ["aagurmukhi"]=2566,
+ ["aamatragurmukhi"]=2622,
+ ["aarusquare"]=13059,
+ ["aavowelsignbengali"]=2494,
+ ["aavowelsigndeva"]=2366,
+ ["aavowelsigngujarati"]=2750,
+ ["abbreviationmarkarmenian"]=1375,
+ ["abbreviationsigndeva"]=2416,
+ ["abengali"]=2437,
+ ["abopomofo"]=12570,
+ ["abreve"]=259,
+ ["abreveacute"]=7855,
+ ["abrevecyrillic"]=1233,
+ ["abrevedotbelow"]=7863,
+ ["abrevegrave"]=7857,
+ ["abrevehookabove"]=7859,
+ ["abrevetilde"]=7861,
+ ["acaron"]=462,
+ ["acircle"]=9424,
+ ["acircumflex"]=226,
+ ["acircumflexacute"]=7845,
+ ["acircumflexdotbelow"]=7853,
+ ["acircumflexgrave"]=7847,
+ ["acircumflexhookabove"]=7849,
+ ["acircumflextilde"]=7851,
+ ["acute"]=180,
+ ["acutebelowcmb"]=791,
+ ["acutecmb"]=769,
+ ["acutecomb"]=769,
+ ["acutedeva"]=2388,
+ ["acutelowmod"]=719,
+ ["acutetonecmb"]=833,
+ ["acyrillic"]=1072,
+ ["adblgrave"]=513,
+ ["addakgurmukhi"]=2673,
+ ["adeva"]=2309,
+ ["adieresis"]=228,
+ ["adieresiscyrillic"]=1235,
+ ["adieresismacron"]=479,
+ ["adotbelow"]=7841,
+ ["adotmacron"]=481,
+ ["ae"]=230,
+ ["aeacute"]=509,
+ ["aekorean"]=12624,
+ ["aemacron"]=483,
+ ["afii00208"]=8213,
+ ["afii08941"]=8356,
+ ["afii10017"]=1040,
+ ["afii10018"]=1041,
+ ["afii10019"]=1042,
+ ["afii10020"]=1043,
+ ["afii10021"]=1044,
+ ["afii10022"]=1045,
+ ["afii10023"]=1025,
+ ["afii10024"]=1046,
+ ["afii10025"]=1047,
+ ["afii10026"]=1048,
+ ["afii10027"]=1049,
+ ["afii10028"]=1050,
+ ["afii10029"]=1051,
+ ["afii10030"]=1052,
+ ["afii10031"]=1053,
+ ["afii10032"]=1054,
+ ["afii10033"]=1055,
+ ["afii10034"]=1056,
+ ["afii10035"]=1057,
+ ["afii10036"]=1058,
+ ["afii10037"]=1059,
+ ["afii10038"]=1060,
+ ["afii10039"]=1061,
+ ["afii10040"]=1062,
+ ["afii10041"]=1063,
+ ["afii10042"]=1064,
+ ["afii10043"]=1065,
+ ["afii10044"]=1066,
+ ["afii10045"]=1067,
+ ["afii10046"]=1068,
+ ["afii10047"]=1069,
+ ["afii10048"]=1070,
+ ["afii10049"]=1071,
+ ["afii10050"]=1168,
+ ["afii10051"]=1026,
+ ["afii10052"]=1027,
+ ["afii10053"]=1028,
+ ["afii10054"]=1029,
+ ["afii10055"]=1030,
+ ["afii10056"]=1031,
+ ["afii10057"]=1032,
+ ["afii10058"]=1033,
+ ["afii10059"]=1034,
+ ["afii10060"]=1035,
+ ["afii10061"]=1036,
+ ["afii10062"]=1038,
+ ["afii10065"]=1072,
+ ["afii10066"]=1073,
+ ["afii10067"]=1074,
+ ["afii10068"]=1075,
+ ["afii10069"]=1076,
+ ["afii10070"]=1077,
+ ["afii10071"]=1105,
+ ["afii10072"]=1078,
+ ["afii10073"]=1079,
+ ["afii10074"]=1080,
+ ["afii10075"]=1081,
+ ["afii10076"]=1082,
+ ["afii10077"]=1083,
+ ["afii10078"]=1084,
+ ["afii10079"]=1085,
+ ["afii10080"]=1086,
+ ["afii10081"]=1087,
+ ["afii10082"]=1088,
+ ["afii10083"]=1089,
+ ["afii10084"]=1090,
+ ["afii10085"]=1091,
+ ["afii10086"]=1092,
+ ["afii10087"]=1093,
+ ["afii10088"]=1094,
+ ["afii10089"]=1095,
+ ["afii10090"]=1096,
+ ["afii10091"]=1097,
+ ["afii10092"]=1098,
+ ["afii10093"]=1099,
+ ["afii10094"]=1100,
+ ["afii10095"]=1101,
+ ["afii10096"]=1102,
+ ["afii10097"]=1103,
+ ["afii10098"]=1169,
+ ["afii10099"]=1106,
+ ["afii10100"]=1107,
+ ["afii10101"]=1108,
+ ["afii10102"]=1109,
+ ["afii10103"]=1110,
+ ["afii10104"]=1111,
+ ["afii10105"]=1112,
+ ["afii10106"]=1113,
+ ["afii10107"]=1114,
+ ["afii10108"]=1115,
+ ["afii10109"]=1116,
+ ["afii10110"]=1118,
+ ["afii10145"]=1039,
+ ["afii10146"]=1122,
+ ["afii10147"]=1138,
+ ["afii10148"]=1140,
+ ["afii10193"]=1119,
+ ["afii10194"]=1123,
+ ["afii10195"]=1139,
+ ["afii10196"]=1141,
+ ["afii10846"]=1241,
+ ["afii208"]=8213,
+ ["afii299"]=8206,
+ ["afii300"]=8207,
+ ["afii301"]=8205,
+ ["afii57381"]=1642,
+ ["afii57388"]=1548,
+ ["afii57392"]=1632,
+ ["afii57393"]=1633,
+ ["afii57394"]=1634,
+ ["afii57395"]=1635,
+ ["afii57396"]=1636,
+ ["afii57397"]=1637,
+ ["afii57398"]=1638,
+ ["afii57399"]=1639,
+ ["afii57400"]=1640,
+ ["afii57401"]=1641,
+ ["afii57403"]=1563,
+ ["afii57407"]=1567,
+ ["afii57409"]=1569,
+ ["afii57410"]=1570,
+ ["afii57411"]=1571,
+ ["afii57412"]=1572,
+ ["afii57413"]=1573,
+ ["afii57414"]=1574,
+ ["afii57415"]=1575,
+ ["afii57416"]=1576,
+ ["afii57417"]=1577,
+ ["afii57418"]=1578,
+ ["afii57419"]=1579,
+ ["afii57420"]=1580,
+ ["afii57421"]=1581,
+ ["afii57422"]=1582,
+ ["afii57423"]=1583,
+ ["afii57424"]=1584,
+ ["afii57425"]=1585,
+ ["afii57426"]=1586,
+ ["afii57427"]=1587,
+ ["afii57428"]=1588,
+ ["afii57429"]=1589,
+ ["afii57430"]=1590,
+ ["afii57431"]=1591,
+ ["afii57432"]=1592,
+ ["afii57433"]=1593,
+ ["afii57434"]=1594,
+ ["afii57440"]=1600,
+ ["afii57441"]=1601,
+ ["afii57442"]=1602,
+ ["afii57443"]=1603,
+ ["afii57444"]=1604,
+ ["afii57445"]=1605,
+ ["afii57446"]=1606,
+ ["afii57448"]=1608,
+ ["afii57449"]=1609,
+ ["afii57450"]=1610,
+ ["afii57451"]=1611,
+ ["afii57452"]=1612,
+ ["afii57453"]=1613,
+ ["afii57454"]=1614,
+ ["afii57455"]=1615,
+ ["afii57456"]=1616,
+ ["afii57457"]=1617,
+ ["afii57458"]=1618,
+ ["afii57470"]=1607,
+ ["afii57505"]=1700,
+ ["afii57506"]=1662,
+ ["afii57507"]=1670,
+ ["afii57508"]=1688,
+ ["afii57509"]=1711,
+ ["afii57511"]=1657,
+ ["afii57512"]=1672,
+ ["afii57513"]=1681,
+ ["afii57514"]=1722,
+ ["afii57519"]=1746,
+ ["afii57534"]=1749,
+ ["afii57636"]=8362,
+ ["afii57645"]=1470,
+ ["afii57658"]=1475,
+ ["afii57664"]=1488,
+ ["afii57665"]=1489,
+ ["afii57666"]=1490,
+ ["afii57667"]=1491,
+ ["afii57668"]=1492,
+ ["afii57669"]=1493,
+ ["afii57670"]=1494,
+ ["afii57671"]=1495,
+ ["afii57672"]=1496,
+ ["afii57673"]=1497,
+ ["afii57674"]=1498,
+ ["afii57675"]=1499,
+ ["afii57676"]=1500,
+ ["afii57677"]=1501,
+ ["afii57678"]=1502,
+ ["afii57679"]=1503,
+ ["afii57680"]=1504,
+ ["afii57681"]=1505,
+ ["afii57682"]=1506,
+ ["afii57683"]=1507,
+ ["afii57684"]=1508,
+ ["afii57685"]=1509,
+ ["afii57686"]=1510,
+ ["afii57687"]=1511,
+ ["afii57688"]=1512,
+ ["afii57689"]=1513,
+ ["afii57690"]=1514,
+ ["afii57694"]=64298,
+ ["afii57695"]=64299,
+ ["afii57700"]=64331,
+ ["afii57705"]=64287,
+ ["afii57716"]=1520,
+ ["afii57717"]=1521,
+ ["afii57718"]=1522,
+ ["afii57723"]=64309,
+ ["afii57793"]=1460,
+ ["afii57794"]=1461,
+ ["afii57795"]=1462,
+ ["afii57796"]=1467,
+ ["afii57797"]=1464,
+ ["afii57798"]=1463,
+ ["afii57799"]=1456,
+ ["afii57800"]=1458,
+ ["afii57801"]=1457,
+ ["afii57802"]=1459,
+ ["afii57803"]=1474,
+ ["afii57804"]=1473,
+ ["afii57806"]=1465,
+ ["afii57807"]=1468,
+ ["afii57839"]=1469,
+ ["afii57841"]=1471,
+ ["afii57842"]=1472,
+ ["afii57929"]=700,
+ ["afii61248"]=8453,
+ ["afii61289"]=8467,
+ ["afii61352"]=8470,
+ ["afii61573"]=8236,
+ ["afii61574"]=8237,
+ ["afii61575"]=8238,
+ ["afii61664"]=8204,
+ ["afii63167"]=1645,
+ ["afii64937"]=701,
+ ["agrave"]=224,
+ ["agujarati"]=2693,
+ ["agurmukhi"]=2565,
+ ["ahiragana"]=12354,
+ ["ahookabove"]=7843,
+ ["aibengali"]=2448,
+ ["aibopomofo"]=12574,
+ ["aideva"]=2320,
+ ["aiecyrillic"]=1237,
+ ["aigujarati"]=2704,
+ ["aigurmukhi"]=2576,
+ ["aimatragurmukhi"]=2632,
+ ["ainarabic"]=1593,
+ ["ainfinalarabic"]=65226,
+ ["aininitialarabic"]=65227,
+ ["ainmedialarabic"]=65228,
+ ["ainvertedbreve"]=515,
+ ["aivowelsignbengali"]=2504,
+ ["aivowelsigndeva"]=2376,
+ ["aivowelsigngujarati"]=2760,
+ ["akatakana"]=12450,
+ ["akatakanahalfwidth"]=65393,
+ ["akorean"]=12623,
+ ["alef"]=1488,
+ ["alefarabic"]=1575,
+ ["alefdageshhebrew"]=64304,
+ ["aleffinalarabic"]=65166,
+ ["alefhamzaabovearabic"]=1571,
+ ["alefhamzaabovefinalarabic"]=65156,
+ ["alefhamzabelowarabic"]=1573,
+ ["alefhamzabelowfinalarabic"]=65160,
+ ["alefhebrew"]=1488,
+ ["aleflamedhebrew"]=64335,
+ ["alefmaddaabovearabic"]=1570,
+ ["alefmaddaabovefinalarabic"]=65154,
+ ["alefmaksuraarabic"]=1609,
+ ["alefmaksurafinalarabic"]=65264,
+ ["alefmaksurainitialarabic"]=65267,
+ ["alefmaksuramedialarabic"]=65268,
+ ["alefpatahhebrew"]=64302,
+ ["alefqamatshebrew"]=64303,
+ ["aleph"]=8501,
+ ["allequal"]=8780,
+ ["alpha"]=945,
+ ["alphatonos"]=940,
+ ["amacron"]=257,
+ ["amonospace"]=65345,
+ ["ampersand"]=38,
+ ["ampersandmonospace"]=65286,
+ ["amsquare"]=13250,
+ ["anbopomofo"]=12578,
+ ["angbopomofo"]=12580,
+ ["angkhankhuthai"]=3674,
+ ["angle"]=8736,
+ ["anglebracketleft"]=12296,
+ ["anglebracketleftvertical"]=65087,
+ ["anglebracketright"]=12297,
+ ["anglebracketrightvertical"]=65088,
+ ["angleleft"]=9001,
+ ["angleright"]=9002,
+ ["angstrom"]=8491,
+ ["anoteleia"]=903,
+ ["anudattadeva"]=2386,
+ ["anusvarabengali"]=2434,
+ ["anusvaradeva"]=2306,
+ ["anusvaragujarati"]=2690,
+ ["aogonek"]=261,
+ ["apaatosquare"]=13056,
+ ["aparen"]=9372,
+ ["apostrophearmenian"]=1370,
+ ["apostrophemod"]=700,
+ ["apple"]=63743,
+ ["approaches"]=8784,
+ ["approxequal"]=8776,
+ ["approxequalorimage"]=8786,
+ ["approximatelyequal"]=8773,
+ ["araeaekorean"]=12686,
+ ["araeakorean"]=12685,
+ ["arc"]=8978,
+ ["arighthalfring"]=7834,
+ ["aring"]=229,
+ ["aringacute"]=507,
+ ["aringbelow"]=7681,
+ ["arrowboth"]=8596,
+ ["arrowdashdown"]=8675,
+ ["arrowdashleft"]=8672,
+ ["arrowdashright"]=8674,
+ ["arrowdashup"]=8673,
+ ["arrowdblboth"]=8660,
+ ["arrowdbldown"]=8659,
+ ["arrowdblleft"]=8656,
+ ["arrowdblright"]=8658,
+ ["arrowdblup"]=8657,
+ ["arrowdown"]=8595,
+ ["arrowdownleft"]=8601,
+ ["arrowdownright"]=8600,
+ ["arrowdownwhite"]=8681,
+ ["arrowheaddownmod"]=709,
+ ["arrowheadleftmod"]=706,
+ ["arrowheadrightmod"]=707,
+ ["arrowheadupmod"]=708,
+ ["arrowleft"]=8592,
+ ["arrowleftdbl"]=8656,
+ ["arrowleftdblstroke"]=8653,
+ ["arrowleftoverright"]=8646,
+ ["arrowleftwhite"]=8678,
+ ["arrowright"]=8594,
+ ["arrowrightdblstroke"]=8655,
+ ["arrowrightheavy"]=10142,
+ ["arrowrightoverleft"]=8644,
+ ["arrowrightwhite"]=8680,
+ ["arrowtableft"]=8676,
+ ["arrowtabright"]=8677,
+ ["arrowup"]=8593,
+ ["arrowupdn"]=8597,
+ ["arrowupdnbse"]=8616,
+ ["arrowupdownbase"]=8616,
+ ["arrowupleft"]=8598,
+ ["arrowupleftofdown"]=8645,
+ ["arrowupright"]=8599,
+ ["arrowupwhite"]=8679,
+ ["asciicircum"]=94,
+ ["asciicircummonospace"]=65342,
+ ["asciitilde"]=126,
+ ["asciitildemonospace"]=65374,
+ ["ascript"]=593,
+ ["ascriptturned"]=594,
+ ["asmallhiragana"]=12353,
+ ["asmallkatakana"]=12449,
+ ["asmallkatakanahalfwidth"]=65383,
+ ["asterisk"]=42,
+ ["asteriskaltonearabic"]=1645,
+ ["asteriskarabic"]=1645,
+ ["asteriskmath"]=8727,
+ ["asteriskmonospace"]=65290,
+ ["asterisksmall"]=65121,
+ ["asterism"]=8258,
+ ["asymptoticallyequal"]=8771,
+ ["at"]=64,
+ ["atilde"]=227,
+ ["atmonospace"]=65312,
+ ["atsmall"]=65131,
+ ["aturned"]=592,
+ ["aubengali"]=2452,
+ ["aubopomofo"]=12576,
+ ["audeva"]=2324,
+ ["augujarati"]=2708,
+ ["augurmukhi"]=2580,
+ ["aulengthmarkbengali"]=2519,
+ ["aumatragurmukhi"]=2636,
+ ["auvowelsignbengali"]=2508,
+ ["auvowelsigndeva"]=2380,
+ ["auvowelsigngujarati"]=2764,
+ ["avagrahadeva"]=2365,
+ ["aybarmenian"]=1377,
+ ["ayin"]=1506,
+ ["ayinaltonehebrew"]=64288,
+ ["ayinhebrew"]=1506,
+ ["b"]=98,
+ ["babengali"]=2476,
+ ["backslash"]=92,
+ ["backslashmonospace"]=65340,
+ ["badeva"]=2348,
+ ["bagujarati"]=2732,
+ ["bagurmukhi"]=2604,
+ ["bahiragana"]=12400,
+ ["bahtthai"]=3647,
+ ["bakatakana"]=12496,
+ ["bar"]=124,
+ ["barmonospace"]=65372,
+ ["bbopomofo"]=12549,
+ ["bcircle"]=9425,
+ ["bdotaccent"]=7683,
+ ["bdotbelow"]=7685,
+ ["beamedsixteenthnotes"]=9836,
+ ["because"]=8757,
+ ["becyrillic"]=1073,
+ ["beharabic"]=1576,
+ ["behfinalarabic"]=65168,
+ ["behinitialarabic"]=65169,
+ ["behiragana"]=12409,
+ ["behmedialarabic"]=65170,
+ ["behmeeminitialarabic"]=64671,
+ ["behmeemisolatedarabic"]=64520,
+ ["behnoonfinalarabic"]=64621,
+ ["bekatakana"]=12505,
+ ["benarmenian"]=1378,
+ ["bet"]=1489,
+ ["beta"]=946,
+ ["betasymbolgreek"]=976,
+ ["betdagesh"]=64305,
+ ["betdageshhebrew"]=64305,
+ ["bethebrew"]=1489,
+ ["betrafehebrew"]=64332,
+ ["bhabengali"]=2477,
+ ["bhadeva"]=2349,
+ ["bhagujarati"]=2733,
+ ["bhagurmukhi"]=2605,
+ ["bhook"]=595,
+ ["bihiragana"]=12403,
+ ["bikatakana"]=12499,
+ ["bilabialclick"]=664,
+ ["bindigurmukhi"]=2562,
+ ["birusquare"]=13105,
+ ["blackcircle"]=9679,
+ ["blackdiamond"]=9670,
+ ["blackdownpointingtriangle"]=9660,
+ ["blackleftpointingpointer"]=9668,
+ ["blackleftpointingtriangle"]=9664,
+ ["blacklenticularbracketleft"]=12304,
+ ["blacklenticularbracketleftvertical"]=65083,
+ ["blacklenticularbracketright"]=12305,
+ ["blacklenticularbracketrightvertical"]=65084,
+ ["blacklowerlefttriangle"]=9699,
+ ["blacklowerrighttriangle"]=9698,
+ ["blackrectangle"]=9644,
+ ["blackrightpointingpointer"]=9658,
+ ["blackrightpointingtriangle"]=9654,
+ ["blacksmallsquare"]=9642,
+ ["blacksmilingface"]=9787,
+ ["blacksquare"]=9632,
+ ["blackstar"]=9733,
+ ["blackupperlefttriangle"]=9700,
+ ["blackupperrighttriangle"]=9701,
+ ["blackuppointingsmalltriangle"]=9652,
+ ["blackuppointingtriangle"]=9650,
+ ["blank"]=9251,
+ ["blinebelow"]=7687,
+ ["block"]=9608,
+ ["bmonospace"]=65346,
+ ["bobaimaithai"]=3610,
+ ["bohiragana"]=12412,
+ ["bokatakana"]=12508,
+ ["bparen"]=9373,
+ ["bqsquare"]=13251,
+ ["braceleft"]=123,
+ ["braceleftmonospace"]=65371,
+ ["braceleftsmall"]=65115,
+ ["braceleftvertical"]=65079,
+ ["braceright"]=125,
+ ["bracerightmonospace"]=65373,
+ ["bracerightsmall"]=65116,
+ ["bracerightvertical"]=65080,
+ ["bracketleft"]=91,
+ ["bracketleftmonospace"]=65339,
+ ["bracketright"]=93,
+ ["bracketrightmonospace"]=65341,
+ ["breve"]=728,
+ ["brevebelowcmb"]=814,
+ ["brevecmb"]=774,
+ ["breveinvertedbelowcmb"]=815,
+ ["breveinvertedcmb"]=785,
+ ["breveinverteddoublecmb"]=865,
+ ["bridgebelowcmb"]=810,
+ ["bridgeinvertedbelowcmb"]=826,
+ ["brokenbar"]=166,
+ ["bstroke"]=384,
+ ["btopbar"]=387,
+ ["buhiragana"]=12406,
+ ["bukatakana"]=12502,
+ ["bullet"]=8226,
+ ["bulletinverse"]=9688,
+ ["bulletoperator"]=8729,
+ ["bullseye"]=9678,
+ ["c"]=99,
+ ["caarmenian"]=1390,
+ ["cabengali"]=2458,
+ ["cacute"]=263,
+ ["cadeva"]=2330,
+ ["cagujarati"]=2714,
+ ["cagurmukhi"]=2586,
+ ["calsquare"]=13192,
+ ["candrabindubengali"]=2433,
+ ["candrabinducmb"]=784,
+ ["candrabindudeva"]=2305,
+ ["candrabindugujarati"]=2689,
+ ["capslock"]=8682,
+ ["careof"]=8453,
+ ["caron"]=711,
+ ["caronbelowcmb"]=812,
+ ["caroncmb"]=780,
+ ["carriagereturn"]=8629,
+ ["cbopomofo"]=12568,
+ ["ccaron"]=269,
+ ["ccedilla"]=231,
+ ["ccedillaacute"]=7689,
+ ["ccircle"]=9426,
+ ["ccircumflex"]=265,
+ ["ccurl"]=597,
+ ["cdot"]=267,
+ ["cdotaccent"]=267,
+ ["cdsquare"]=13253,
+ ["cedilla"]=184,
+ ["cedillacmb"]=807,
+ ["cent"]=162,
+ ["centigrade"]=8451,
+ ["centmonospace"]=65504,
+ ["chaarmenian"]=1401,
+ ["chabengali"]=2459,
+ ["chadeva"]=2331,
+ ["chagujarati"]=2715,
+ ["chagurmukhi"]=2587,
+ ["chbopomofo"]=12564,
+ ["cheabkhasiancyrillic"]=1213,
+ ["checkmark"]=10003,
+ ["checyrillic"]=1095,
+ ["chedescenderabkhasiancyrillic"]=1215,
+ ["chedescendercyrillic"]=1207,
+ ["chedieresiscyrillic"]=1269,
+ ["cheharmenian"]=1395,
+ ["chekhakassiancyrillic"]=1228,
+ ["cheverticalstrokecyrillic"]=1209,
+ ["chi"]=967,
+ ["chieuchacirclekorean"]=12919,
+ ["chieuchaparenkorean"]=12823,
+ ["chieuchcirclekorean"]=12905,
+ ["chieuchkorean"]=12618,
+ ["chieuchparenkorean"]=12809,
+ ["chochangthai"]=3594,
+ ["chochanthai"]=3592,
+ ["chochingthai"]=3593,
+ ["chochoethai"]=3596,
+ ["chook"]=392,
+ ["cieucacirclekorean"]=12918,
+ ["cieucaparenkorean"]=12822,
+ ["cieuccirclekorean"]=12904,
+ ["cieuckorean"]=12616,
+ ["cieucparenkorean"]=12808,
+ ["cieucuparenkorean"]=12828,
+ ["circle"]=9675,
+ ["circlemultiply"]=8855,
+ ["circleot"]=8857,
+ ["circleplus"]=8853,
+ ["circlepostalmark"]=12342,
+ ["circlewithlefthalfblack"]=9680,
+ ["circlewithrighthalfblack"]=9681,
+ ["circumflex"]=710,
+ ["circumflexbelowcmb"]=813,
+ ["circumflexcmb"]=770,
+ ["clear"]=8999,
+ ["clickalveolar"]=450,
+ ["clickdental"]=448,
+ ["clicklateral"]=449,
+ ["clickretroflex"]=451,
+ ["club"]=9827,
+ ["clubsuitblack"]=9827,
+ ["clubsuitwhite"]=9831,
+ ["cmcubedsquare"]=13220,
+ ["cmonospace"]=65347,
+ ["cmsquaredsquare"]=13216,
+ ["coarmenian"]=1409,
+ ["colon"]=58,
+ ["colonmonetary"]=8353,
+ ["colonmonospace"]=65306,
+ ["colonsign"]=8353,
+ ["colonsmall"]=65109,
+ ["colontriangularhalfmod"]=721,
+ ["colontriangularmod"]=720,
+ ["comma"]=44,
+ ["commaabovecmb"]=787,
+ ["commaaboverightcmb"]=789,
+ ["commaarabic"]=1548,
+ ["commaarmenian"]=1373,
+ ["commamonospace"]=65292,
+ ["commareversedabovecmb"]=788,
+ ["commareversedmod"]=701,
+ ["commasmall"]=65104,
+ ["commaturnedabovecmb"]=786,
+ ["commaturnedmod"]=699,
+ ["compass"]=9788,
+ ["congruent"]=8773,
+ ["contourintegral"]=8750,
+ ["control"]=8963,
+ ["controlACK"]=6,
+ ["controlBEL"]=7,
+ ["controlBS"]=8,
+ ["controlCAN"]=24,
+ ["controlCR"]=13,
+ ["controlDC1"]=17,
+ ["controlDC2"]=18,
+ ["controlDC3"]=19,
+ ["controlDC4"]=20,
+ ["controlDEL"]=127,
+ ["controlDLE"]=16,
+ ["controlEM"]=25,
+ ["controlENQ"]=5,
+ ["controlEOT"]=4,
+ ["controlESC"]=27,
+ ["controlETB"]=23,
+ ["controlETX"]=3,
+ ["controlFF"]=12,
+ ["controlFS"]=28,
+ ["controlGS"]=29,
+ ["controlHT"]=9,
+ ["controlLF"]=10,
+ ["controlNAK"]=21,
+ ["controlRS"]=30,
+ ["controlSI"]=15,
+ ["controlSO"]=14,
+ ["controlSOT"]=2,
+ ["controlSTX"]=1,
+ ["controlSUB"]=26,
+ ["controlSYN"]=22,
+ ["controlUS"]=31,
+ ["controlVT"]=11,
+ ["copyright"]=169,
+ ["cornerbracketleft"]=12300,
+ ["cornerbracketlefthalfwidth"]=65378,
+ ["cornerbracketleftvertical"]=65089,
+ ["cornerbracketright"]=12301,
+ ["cornerbracketrighthalfwidth"]=65379,
+ ["cornerbracketrightvertical"]=65090,
+ ["corporationsquare"]=13183,
+ ["cosquare"]=13255,
+ ["coverkgsquare"]=13254,
+ ["cparen"]=9374,
+ ["cruzeiro"]=8354,
+ ["cstretched"]=663,
+ ["curlyand"]=8911,
+ ["curlyor"]=8910,
+ ["currency"]=164,
+ ["d"]=100,
+ ["daarmenian"]=1380,
+ ["dabengali"]=2470,
+ ["dadarabic"]=1590,
+ ["dadeva"]=2342,
+ ["dadfinalarabic"]=65214,
+ ["dadinitialarabic"]=65215,
+ ["dadmedialarabic"]=65216,
+ ["dagesh"]=1468,
+ ["dageshhebrew"]=1468,
+ ["dagger"]=8224,
+ ["daggerdbl"]=8225,
+ ["dagujarati"]=2726,
+ ["dagurmukhi"]=2598,
+ ["dahiragana"]=12384,
+ ["dakatakana"]=12480,
+ ["dalarabic"]=1583,
+ ["dalet"]=1491,
+ ["daletdagesh"]=64307,
+ ["daletdageshhebrew"]=64307,
+ ["dalethatafpatah"]=1491,
+ ["dalethatafpatahhebrew"]=1491,
+ ["dalethatafsegol"]=1491,
+ ["dalethatafsegolhebrew"]=1491,
+ ["dalethebrew"]=1491,
+ ["dalethiriq"]=1491,
+ ["dalethiriqhebrew"]=1491,
+ ["daletholam"]=1491,
+ ["daletholamhebrew"]=1491,
+ ["daletpatah"]=1491,
+ ["daletpatahhebrew"]=1491,
+ ["daletqamats"]=1491,
+ ["daletqamatshebrew"]=1491,
+ ["daletqubuts"]=1491,
+ ["daletqubutshebrew"]=1491,
+ ["daletsegol"]=1491,
+ ["daletsegolhebrew"]=1491,
+ ["daletsheva"]=1491,
+ ["daletshevahebrew"]=1491,
+ ["dalettsere"]=1491,
+ ["dalettserehebrew"]=1491,
+ ["dalfinalarabic"]=65194,
+ ["dammaarabic"]=1615,
+ ["dammalowarabic"]=1615,
+ ["dammatanaltonearabic"]=1612,
+ ["dammatanarabic"]=1612,
+ ["danda"]=2404,
+ ["dargahebrew"]=1447,
+ ["dargalefthebrew"]=1447,
+ ["dasiapneumatacyrilliccmb"]=1157,
+ ["dblanglebracketleft"]=12298,
+ ["dblanglebracketleftvertical"]=65085,
+ ["dblanglebracketright"]=12299,
+ ["dblanglebracketrightvertical"]=65086,
+ ["dblarchinvertedbelowcmb"]=811,
+ ["dblarrowleft"]=8660,
+ ["dblarrowright"]=8658,
+ ["dbldanda"]=2405,
+ ["dblgravecmb"]=783,
+ ["dblintegral"]=8748,
+ ["dbllowline"]=8215,
+ ["dbllowlinecmb"]=819,
+ ["dbloverlinecmb"]=831,
+ ["dblprimemod"]=698,
+ ["dblverticalbar"]=8214,
+ ["dblverticallineabovecmb"]=782,
+ ["dbopomofo"]=12553,
+ ["dbsquare"]=13256,
+ ["dcaron"]=271,
+ ["dcedilla"]=7697,
+ ["dcircle"]=9427,
+ ["dcircumflexbelow"]=7699,
+ ["dcroat"]=273,
+ ["ddabengali"]=2465,
+ ["ddadeva"]=2337,
+ ["ddagujarati"]=2721,
+ ["ddagurmukhi"]=2593,
+ ["ddalarabic"]=1672,
+ ["ddalfinalarabic"]=64393,
+ ["dddhadeva"]=2396,
+ ["ddhabengali"]=2466,
+ ["ddhadeva"]=2338,
+ ["ddhagujarati"]=2722,
+ ["ddhagurmukhi"]=2594,
+ ["ddotaccent"]=7691,
+ ["ddotbelow"]=7693,
+ ["decimalseparatorarabic"]=1643,
+ ["decimalseparatorpersian"]=1643,
+ ["decyrillic"]=1076,
+ ["degree"]=176,
+ ["dehihebrew"]=1453,
+ ["dehiragana"]=12391,
+ ["deicoptic"]=1007,
+ ["dekatakana"]=12487,
+ ["deleteleft"]=9003,
+ ["deleteright"]=8998,
+ ["delta"]=948,
+ ["deltaturned"]=397,
+ ["denominatorminusonenumeratorbengali"]=2552,
+ ["dezh"]=676,
+ ["dhabengali"]=2471,
+ ["dhadeva"]=2343,
+ ["dhagujarati"]=2727,
+ ["dhagurmukhi"]=2599,
+ ["dhook"]=599,
+ ["dialytikatonos"]=901,
+ ["dialytikatonoscmb"]=836,
+ ["diamond"]=9830,
+ ["diamondsuitwhite"]=9826,
+ ["dieresis"]=168,
+ ["dieresisbelowcmb"]=804,
+ ["dieresiscmb"]=776,
+ ["dieresistonos"]=901,
+ ["dihiragana"]=12386,
+ ["dikatakana"]=12482,
+ ["dittomark"]=12291,
+ ["divide"]=247,
+ ["divides"]=8739,
+ ["divisionslash"]=8725,
+ ["djecyrillic"]=1106,
+ ["dkshade"]=9619,
+ ["dlinebelow"]=7695,
+ ["dlsquare"]=13207,
+ ["dmacron"]=273,
+ ["dmonospace"]=65348,
+ ["dnblock"]=9604,
+ ["dochadathai"]=3598,
+ ["dodekthai"]=3604,
+ ["dohiragana"]=12393,
+ ["dokatakana"]=12489,
+ ["dollar"]=36,
+ ["dollarmonospace"]=65284,
+ ["dollarsmall"]=65129,
+ ["dong"]=8363,
+ ["dorusquare"]=13094,
+ ["dotaccent"]=729,
+ ["dotaccentcmb"]=775,
+ ["dotbelowcmb"]=803,
+ ["dotbelowcomb"]=803,
+ ["dotkatakana"]=12539,
+ ["dotlessi"]=305,
+ ["dotlessjstrokehook"]=644,
+ ["dotmath"]=8901,
+ ["dottedcircle"]=9676,
+ ["doubleyodpatah"]=64287,
+ ["doubleyodpatahhebrew"]=64287,
+ ["downtackbelowcmb"]=798,
+ ["downtackmod"]=725,
+ ["dparen"]=9375,
+ ["dtail"]=598,
+ ["dtopbar"]=396,
+ ["duhiragana"]=12389,
+ ["dukatakana"]=12485,
+ ["dz"]=499,
+ ["dzaltone"]=675,
+ ["dzcaron"]=454,
+ ["dzcurl"]=677,
+ ["dzeabkhasiancyrillic"]=1249,
+ ["dzecyrillic"]=1109,
+ ["dzhecyrillic"]=1119,
+ ["e"]=101,
+ ["eacute"]=233,
+ ["earth"]=9793,
+ ["ebengali"]=2447,
+ ["ebopomofo"]=12572,
+ ["ebreve"]=277,
+ ["ecandradeva"]=2317,
+ ["ecandragujarati"]=2701,
+ ["ecandravowelsigndeva"]=2373,
+ ["ecandravowelsigngujarati"]=2757,
+ ["ecaron"]=283,
+ ["ecedillabreve"]=7709,
+ ["echarmenian"]=1381,
+ ["echyiwnarmenian"]=1415,
+ ["ecircle"]=9428,
+ ["ecircumflex"]=234,
+ ["ecircumflexacute"]=7871,
+ ["ecircumflexbelow"]=7705,
+ ["ecircumflexdotbelow"]=7879,
+ ["ecircumflexgrave"]=7873,
+ ["ecircumflexhookabove"]=7875,
+ ["ecircumflextilde"]=7877,
+ ["ecyrillic"]=1108,
+ ["edblgrave"]=517,
+ ["edeva"]=2319,
+ ["edieresis"]=235,
+ ["edot"]=279,
+ ["edotaccent"]=279,
+ ["edotbelow"]=7865,
+ ["eegurmukhi"]=2575,
+ ["eematragurmukhi"]=2631,
+ ["efcyrillic"]=1092,
+ ["egrave"]=232,
+ ["egujarati"]=2703,
+ ["eharmenian"]=1383,
+ ["ehbopomofo"]=12573,
+ ["ehiragana"]=12360,
+ ["ehookabove"]=7867,
+ ["eibopomofo"]=12575,
+ ["eight"]=56,
+ ["eightarabic"]=1640,
+ ["eightbengali"]=2542,
+ ["eightcircle"]=9319,
+ ["eightcircleinversesansserif"]=10129,
+ ["eightdeva"]=2414,
+ ["eighteencircle"]=9329,
+ ["eighteenparen"]=9349,
+ ["eighteenperiod"]=9369,
+ ["eightgujarati"]=2798,
+ ["eightgurmukhi"]=2670,
+ ["eighthackarabic"]=1640,
+ ["eighthangzhou"]=12328,
+ ["eighthnotebeamed"]=9835,
+ ["eightideographicparen"]=12839,
+ ["eightinferior"]=8328,
+ ["eightmonospace"]=65304,
+ ["eightparen"]=9339,
+ ["eightperiod"]=9359,
+ ["eightpersian"]=1784,
+ ["eightroman"]=8567,
+ ["eightsuperior"]=8312,
+ ["eightthai"]=3672,
+ ["einvertedbreve"]=519,
+ ["eiotifiedcyrillic"]=1125,
+ ["ekatakana"]=12456,
+ ["ekatakanahalfwidth"]=65396,
+ ["ekonkargurmukhi"]=2676,
+ ["ekorean"]=12628,
+ ["elcyrillic"]=1083,
+ ["element"]=8712,
+ ["elevencircle"]=9322,
+ ["elevenparen"]=9342,
+ ["elevenperiod"]=9362,
+ ["elevenroman"]=8570,
+ ["ellipsis"]=8230,
+ ["ellipsisvertical"]=8942,
+ ["emacron"]=275,
+ ["emacronacute"]=7703,
+ ["emacrongrave"]=7701,
+ ["emcyrillic"]=1084,
+ ["emdash"]=8212,
+ ["emdashvertical"]=65073,
+ ["emonospace"]=65349,
+ ["emphasismarkarmenian"]=1371,
+ ["emptyset"]=8709,
+ ["enbopomofo"]=12579,
+ ["encyrillic"]=1085,
+ ["endash"]=8211,
+ ["endashvertical"]=65074,
+ ["endescendercyrillic"]=1187,
+ ["eng"]=331,
+ ["engbopomofo"]=12581,
+ ["enghecyrillic"]=1189,
+ ["enhookcyrillic"]=1224,
+ ["enspace"]=8194,
+ ["eogonek"]=281,
+ ["eokorean"]=12627,
+ ["eopen"]=603,
+ ["eopenclosed"]=666,
+ ["eopenreversed"]=604,
+ ["eopenreversedclosed"]=606,
+ ["eopenreversedhook"]=605,
+ ["eparen"]=9376,
+ ["epsilon"]=949,
+ ["epsilontonos"]=941,
+ ["equal"]=61,
+ ["equalmonospace"]=65309,
+ ["equalsmall"]=65126,
+ ["equalsuperior"]=8316,
+ ["equivalence"]=8801,
+ ["erbopomofo"]=12582,
+ ["ercyrillic"]=1088,
+ ["ereversed"]=600,
+ ["ereversedcyrillic"]=1101,
+ ["escyrillic"]=1089,
+ ["esdescendercyrillic"]=1195,
+ ["esh"]=643,
+ ["eshcurl"]=646,
+ ["eshortdeva"]=2318,
+ ["eshortvowelsigndeva"]=2374,
+ ["eshreversedloop"]=426,
+ ["eshsquatreversed"]=645,
+ ["esmallhiragana"]=12359,
+ ["esmallkatakana"]=12455,
+ ["esmallkatakanahalfwidth"]=65386,
+ ["estimated"]=8494,
+ ["eta"]=951,
+ ["etarmenian"]=1384,
+ ["etatonos"]=942,
+ ["eth"]=240,
+ ["etilde"]=7869,
+ ["etildebelow"]=7707,
+ ["etnahtafoukhhebrew"]=1425,
+ ["etnahtafoukhlefthebrew"]=1425,
+ ["etnahtahebrew"]=1425,
+ ["etnahtalefthebrew"]=1425,
+ ["eturned"]=477,
+ ["eukorean"]=12641,
+ ["euro"]=8364,
+ ["evowelsignbengali"]=2503,
+ ["evowelsigndeva"]=2375,
+ ["evowelsigngujarati"]=2759,
+ ["exclam"]=33,
+ ["exclamarmenian"]=1372,
+ ["exclamdbl"]=8252,
+ ["exclamdown"]=161,
+ ["exclammonospace"]=65281,
+ ["existential"]=8707,
+ ["ezh"]=658,
+ ["ezhcaron"]=495,
+ ["ezhcurl"]=659,
+ ["ezhreversed"]=441,
+ ["ezhtail"]=442,
+ ["f"]=102,
+ ["fadeva"]=2398,
+ ["fagurmukhi"]=2654,
+ ["fahrenheit"]=8457,
+ ["fathaarabic"]=1614,
+ ["fathalowarabic"]=1614,
+ ["fathatanarabic"]=1611,
+ ["fbopomofo"]=12552,
+ ["fcircle"]=9429,
+ ["fdotaccent"]=7711,
+ ["feharabic"]=1601,
+ ["feharmenian"]=1414,
+ ["fehfinalarabic"]=65234,
+ ["fehinitialarabic"]=65235,
+ ["fehmedialarabic"]=65236,
+ ["feicoptic"]=997,
+ ["female"]=9792,
+ ["ff"]=64256,
+ ["ffi"]=64259,
+ ["ffl"]=64260,
+ ["fi"]=64257,
+ ["fifteencircle"]=9326,
+ ["fifteenparen"]=9346,
+ ["fifteenperiod"]=9366,
+ ["figuredash"]=8210,
+ ["filledbox"]=9632,
+ ["filledrect"]=9644,
+ ["finalkaf"]=1498,
+ ["finalkafdagesh"]=64314,
+ ["finalkafdageshhebrew"]=64314,
+ ["finalkafhebrew"]=1498,
+ ["finalkafqamats"]=1498,
+ ["finalkafqamatshebrew"]=1498,
+ ["finalkafsheva"]=1498,
+ ["finalkafshevahebrew"]=1498,
+ ["finalmem"]=1501,
+ ["finalmemhebrew"]=1501,
+ ["finalnun"]=1503,
+ ["finalnunhebrew"]=1503,
+ ["finalpe"]=1507,
+ ["finalpehebrew"]=1507,
+ ["finaltsadi"]=1509,
+ ["finaltsadihebrew"]=1509,
+ ["firsttonechinese"]=713,
+ ["fisheye"]=9673,
+ ["fitacyrillic"]=1139,
+ ["five"]=53,
+ ["fivearabic"]=1637,
+ ["fivebengali"]=2539,
+ ["fivecircle"]=9316,
+ ["fivecircleinversesansserif"]=10126,
+ ["fivedeva"]=2411,
+ ["fiveeighths"]=8541,
+ ["fivegujarati"]=2795,
+ ["fivegurmukhi"]=2667,
+ ["fivehackarabic"]=1637,
+ ["fivehangzhou"]=12325,
+ ["fiveideographicparen"]=12836,
+ ["fiveinferior"]=8325,
+ ["fivemonospace"]=65301,
+ ["fiveparen"]=9336,
+ ["fiveperiod"]=9356,
+ ["fivepersian"]=1781,
+ ["fiveroman"]=8564,
+ ["fivesuperior"]=8309,
+ ["fivethai"]=3669,
+ ["fl"]=64258,
+ ["florin"]=402,
+ ["fmonospace"]=65350,
+ ["fmsquare"]=13209,
+ ["fofanthai"]=3615,
+ ["fofathai"]=3613,
+ ["fongmanthai"]=3663,
+ ["forall"]=8704,
+ ["four"]=52,
+ ["fourarabic"]=1636,
+ ["fourbengali"]=2538,
+ ["fourcircle"]=9315,
+ ["fourcircleinversesansserif"]=10125,
+ ["fourdeva"]=2410,
+ ["fourgujarati"]=2794,
+ ["fourgurmukhi"]=2666,
+ ["fourhackarabic"]=1636,
+ ["fourhangzhou"]=12324,
+ ["fourideographicparen"]=12835,
+ ["fourinferior"]=8324,
+ ["fourmonospace"]=65300,
+ ["fournumeratorbengali"]=2551,
+ ["fourparen"]=9335,
+ ["fourperiod"]=9355,
+ ["fourpersian"]=1780,
+ ["fourroman"]=8563,
+ ["foursuperior"]=8308,
+ ["fourteencircle"]=9325,
+ ["fourteenparen"]=9345,
+ ["fourteenperiod"]=9365,
+ ["fourthai"]=3668,
+ ["fourthtonechinese"]=715,
+ ["fparen"]=9377,
+ ["fraction"]=8260,
+ ["franc"]=8355,
+ ["g"]=103,
+ ["gabengali"]=2455,
+ ["gacute"]=501,
+ ["gadeva"]=2327,
+ ["gafarabic"]=1711,
+ ["gaffinalarabic"]=64403,
+ ["gafinitialarabic"]=64404,
+ ["gafmedialarabic"]=64405,
+ ["gagujarati"]=2711,
+ ["gagurmukhi"]=2583,
+ ["gahiragana"]=12364,
+ ["gakatakana"]=12460,
+ ["gamma"]=947,
+ ["gammalatinsmall"]=611,
+ ["gammasuperior"]=736,
+ ["gangiacoptic"]=1003,
+ ["gbopomofo"]=12557,
+ ["gbreve"]=287,
+ ["gcaron"]=487,
+ ["gcedilla"]=291,
+ ["gcircle"]=9430,
+ ["gcircumflex"]=285,
+ ["gcommaaccent"]=291,
+ ["gdot"]=289,
+ ["gdotaccent"]=289,
+ ["gecyrillic"]=1075,
+ ["gehiragana"]=12370,
+ ["gekatakana"]=12466,
+ ["geometricallyequal"]=8785,
+ ["gereshaccenthebrew"]=1436,
+ ["gereshhebrew"]=1523,
+ ["gereshmuqdamhebrew"]=1437,
+ ["germandbls"]=223,
+ ["gershayimaccenthebrew"]=1438,
+ ["gershayimhebrew"]=1524,
+ ["getamark"]=12307,
+ ["ghabengali"]=2456,
+ ["ghadarmenian"]=1394,
+ ["ghadeva"]=2328,
+ ["ghagujarati"]=2712,
+ ["ghagurmukhi"]=2584,
+ ["ghainarabic"]=1594,
+ ["ghainfinalarabic"]=65230,
+ ["ghaininitialarabic"]=65231,
+ ["ghainmedialarabic"]=65232,
+ ["ghemiddlehookcyrillic"]=1173,
+ ["ghestrokecyrillic"]=1171,
+ ["gheupturncyrillic"]=1169,
+ ["ghhadeva"]=2394,
+ ["ghhagurmukhi"]=2650,
+ ["ghook"]=608,
+ ["ghzsquare"]=13203,
+ ["gihiragana"]=12366,
+ ["gikatakana"]=12462,
+ ["gimarmenian"]=1379,
+ ["gimel"]=1490,
+ ["gimeldagesh"]=64306,
+ ["gimeldageshhebrew"]=64306,
+ ["gimelhebrew"]=1490,
+ ["gjecyrillic"]=1107,
+ ["glottalinvertedstroke"]=446,
+ ["glottalstop"]=660,
+ ["glottalstopinverted"]=662,
+ ["glottalstopmod"]=704,
+ ["glottalstopreversed"]=661,
+ ["glottalstopreversedmod"]=705,
+ ["glottalstopreversedsuperior"]=740,
+ ["glottalstopstroke"]=673,
+ ["glottalstopstrokereversed"]=674,
+ ["gmacron"]=7713,
+ ["gmonospace"]=65351,
+ ["gohiragana"]=12372,
+ ["gokatakana"]=12468,
+ ["gparen"]=9378,
+ ["gpasquare"]=13228,
+ ["gradient"]=8711,
+ ["grave"]=96,
+ ["gravebelowcmb"]=790,
+ ["gravecmb"]=768,
+ ["gravecomb"]=768,
+ ["gravedeva"]=2387,
+ ["gravelowmod"]=718,
+ ["gravemonospace"]=65344,
+ ["gravetonecmb"]=832,
+ ["greater"]=62,
+ ["greaterequal"]=8805,
+ ["greaterequalorless"]=8923,
+ ["greatermonospace"]=65310,
+ ["greaterorequivalent"]=8819,
+ ["greaterorless"]=8823,
+ ["greateroverequal"]=8807,
+ ["greatersmall"]=65125,
+ ["gscript"]=609,
+ ["gstroke"]=485,
+ ["guhiragana"]=12368,
+ ["guillemotleft"]=171,
+ ["guillemotright"]=187,
+ ["guilsinglleft"]=8249,
+ ["guilsinglright"]=8250,
+ ["gukatakana"]=12464,
+ ["guramusquare"]=13080,
+ ["gysquare"]=13257,
+ ["h"]=104,
+ ["haabkhasiancyrillic"]=1193,
+ ["haaltonearabic"]=1729,
+ ["habengali"]=2489,
+ ["hadescendercyrillic"]=1203,
+ ["hadeva"]=2361,
+ ["hagujarati"]=2745,
+ ["hagurmukhi"]=2617,
+ ["haharabic"]=1581,
+ ["hahfinalarabic"]=65186,
+ ["hahinitialarabic"]=65187,
+ ["hahiragana"]=12399,
+ ["hahmedialarabic"]=65188,
+ ["haitusquare"]=13098,
+ ["hakatakana"]=12495,
+ ["hakatakanahalfwidth"]=65418,
+ ["halantgurmukhi"]=2637,
+ ["hamzaarabic"]=1569,
+ ["hamzadammaarabic"]=1569,
+ ["hamzadammatanarabic"]=1569,
+ ["hamzafathaarabic"]=1569,
+ ["hamzafathatanarabic"]=1569,
+ ["hamzalowarabic"]=1569,
+ ["hamzalowkasraarabic"]=1569,
+ ["hamzalowkasratanarabic"]=1569,
+ ["hamzasukunarabic"]=1569,
+ ["hangulfiller"]=12644,
+ ["hardsigncyrillic"]=1098,
+ ["harpoonleftbarbup"]=8636,
+ ["harpoonrightbarbup"]=8640,
+ ["hasquare"]=13258,
+ ["hatafpatah"]=1458,
+ ["hatafpatah16"]=1458,
+ ["hatafpatah23"]=1458,
+ ["hatafpatah2f"]=1458,
+ ["hatafpatahhebrew"]=1458,
+ ["hatafpatahnarrowhebrew"]=1458,
+ ["hatafpatahquarterhebrew"]=1458,
+ ["hatafpatahwidehebrew"]=1458,
+ ["hatafqamats"]=1459,
+ ["hatafqamats1b"]=1459,
+ ["hatafqamats28"]=1459,
+ ["hatafqamats34"]=1459,
+ ["hatafqamatshebrew"]=1459,
+ ["hatafqamatsnarrowhebrew"]=1459,
+ ["hatafqamatsquarterhebrew"]=1459,
+ ["hatafqamatswidehebrew"]=1459,
+ ["hatafsegol"]=1457,
+ ["hatafsegol17"]=1457,
+ ["hatafsegol24"]=1457,
+ ["hatafsegol30"]=1457,
+ ["hatafsegolhebrew"]=1457,
+ ["hatafsegolnarrowhebrew"]=1457,
+ ["hatafsegolquarterhebrew"]=1457,
+ ["hatafsegolwidehebrew"]=1457,
+ ["hbar"]=295,
+ ["hbopomofo"]=12559,
+ ["hbrevebelow"]=7723,
+ ["hcedilla"]=7721,
+ ["hcircle"]=9431,
+ ["hcircumflex"]=293,
+ ["hdieresis"]=7719,
+ ["hdotaccent"]=7715,
+ ["hdotbelow"]=7717,
+ ["he"]=1492,
+ ["heart"]=9829,
+ ["heartsuitblack"]=9829,
+ ["heartsuitwhite"]=9825,
+ ["hedagesh"]=64308,
+ ["hedageshhebrew"]=64308,
+ ["hehaltonearabic"]=1729,
+ ["heharabic"]=1607,
+ ["hehebrew"]=1492,
+ ["hehfinalaltonearabic"]=64423,
+ ["hehfinalalttwoarabic"]=65258,
+ ["hehfinalarabic"]=65258,
+ ["hehhamzaabovefinalarabic"]=64421,
+ ["hehhamzaaboveisolatedarabic"]=64420,
+ ["hehinitialaltonearabic"]=64424,
+ ["hehinitialarabic"]=65259,
+ ["hehiragana"]=12408,
+ ["hehmedialaltonearabic"]=64425,
+ ["hehmedialarabic"]=65260,
+ ["heiseierasquare"]=13179,
+ ["hekatakana"]=12504,
+ ["hekatakanahalfwidth"]=65421,
+ ["hekutaarusquare"]=13110,
+ ["henghook"]=615,
+ ["herutusquare"]=13113,
+ ["het"]=1495,
+ ["hethebrew"]=1495,
+ ["hhook"]=614,
+ ["hhooksuperior"]=689,
+ ["hieuhacirclekorean"]=12923,
+ ["hieuhaparenkorean"]=12827,
+ ["hieuhcirclekorean"]=12909,
+ ["hieuhkorean"]=12622,
+ ["hieuhparenkorean"]=12813,
+ ["hihiragana"]=12402,
+ ["hikatakana"]=12498,
+ ["hikatakanahalfwidth"]=65419,
+ ["hiriq"]=1460,
+ ["hiriq14"]=1460,
+ ["hiriq21"]=1460,
+ ["hiriq2d"]=1460,
+ ["hiriqhebrew"]=1460,
+ ["hiriqnarrowhebrew"]=1460,
+ ["hiriqquarterhebrew"]=1460,
+ ["hiriqwidehebrew"]=1460,
+ ["hlinebelow"]=7830,
+ ["hmonospace"]=65352,
+ ["hoarmenian"]=1392,
+ ["hohipthai"]=3627,
+ ["hohiragana"]=12411,
+ ["hokatakana"]=12507,
+ ["hokatakanahalfwidth"]=65422,
+ ["holam"]=1465,
+ ["holam19"]=1465,
+ ["holam26"]=1465,
+ ["holam32"]=1465,
+ ["holamhebrew"]=1465,
+ ["holamnarrowhebrew"]=1465,
+ ["holamquarterhebrew"]=1465,
+ ["holamwidehebrew"]=1465,
+ ["honokhukthai"]=3630,
+ ["hookabovecomb"]=777,
+ ["hookcmb"]=777,
+ ["hookpalatalizedbelowcmb"]=801,
+ ["hookretroflexbelowcmb"]=802,
+ ["hoonsquare"]=13122,
+ ["horicoptic"]=1001,
+ ["horizontalbar"]=8213,
+ ["horncmb"]=795,
+ ["hotsprings"]=9832,
+ ["house"]=8962,
+ ["hparen"]=9379,
+ ["hsuperior"]=688,
+ ["hturned"]=613,
+ ["huhiragana"]=12405,
+ ["huiitosquare"]=13107,
+ ["hukatakana"]=12501,
+ ["hukatakanahalfwidth"]=65420,
+ ["hungarumlaut"]=733,
+ ["hungarumlautcmb"]=779,
+ ["hv"]=405,
+ ["hyphen"]=45,
+ ["hyphenmonospace"]=65293,
+ ["hyphensmall"]=65123,
+ ["hyphentwo"]=8208,
+ ["i"]=105,
+ ["iacute"]=237,
+ ["iacyrillic"]=1103,
+ ["ibengali"]=2439,
+ ["ibopomofo"]=12583,
+ ["ibreve"]=301,
+ ["icaron"]=464,
+ ["icircle"]=9432,
+ ["icircumflex"]=238,
+ ["icyrillic"]=1110,
+ ["idblgrave"]=521,
+ ["ideographearthcircle"]=12943,
+ ["ideographfirecircle"]=12939,
+ ["ideographicallianceparen"]=12863,
+ ["ideographiccallparen"]=12858,
+ ["ideographiccentrecircle"]=12965,
+ ["ideographicclose"]=12294,
+ ["ideographiccomma"]=12289,
+ ["ideographiccommaleft"]=65380,
+ ["ideographiccongratulationparen"]=12855,
+ ["ideographiccorrectcircle"]=12963,
+ ["ideographicearthparen"]=12847,
+ ["ideographicenterpriseparen"]=12861,
+ ["ideographicexcellentcircle"]=12957,
+ ["ideographicfestivalparen"]=12864,
+ ["ideographicfinancialcircle"]=12950,
+ ["ideographicfinancialparen"]=12854,
+ ["ideographicfireparen"]=12843,
+ ["ideographichaveparen"]=12850,
+ ["ideographichighcircle"]=12964,
+ ["ideographiciterationmark"]=12293,
+ ["ideographiclaborcircle"]=12952,
+ ["ideographiclaborparen"]=12856,
+ ["ideographicleftcircle"]=12967,
+ ["ideographiclowcircle"]=12966,
+ ["ideographicmedicinecircle"]=12969,
+ ["ideographicmetalparen"]=12846,
+ ["ideographicmoonparen"]=12842,
+ ["ideographicnameparen"]=12852,
+ ["ideographicperiod"]=12290,
+ ["ideographicprintcircle"]=12958,
+ ["ideographicreachparen"]=12867,
+ ["ideographicrepresentparen"]=12857,
+ ["ideographicresourceparen"]=12862,
+ ["ideographicrightcircle"]=12968,
+ ["ideographicsecretcircle"]=12953,
+ ["ideographicselfparen"]=12866,
+ ["ideographicsocietyparen"]=12851,
+ ["ideographicspace"]=12288,
+ ["ideographicspecialparen"]=12853,
+ ["ideographicstockparen"]=12849,
+ ["ideographicstudyparen"]=12859,
+ ["ideographicsunparen"]=12848,
+ ["ideographicsuperviseparen"]=12860,
+ ["ideographicwaterparen"]=12844,
+ ["ideographicwoodparen"]=12845,
+ ["ideographiczero"]=12295,
+ ["ideographmetalcircle"]=12942,
+ ["ideographmooncircle"]=12938,
+ ["ideographnamecircle"]=12948,
+ ["ideographsuncircle"]=12944,
+ ["ideographwatercircle"]=12940,
+ ["ideographwoodcircle"]=12941,
+ ["ideva"]=2311,
+ ["idieresis"]=239,
+ ["idieresisacute"]=7727,
+ ["idieresiscyrillic"]=1253,
+ ["idotbelow"]=7883,
+ ["iebrevecyrillic"]=1239,
+ ["iecyrillic"]=1077,
+ ["ieungacirclekorean"]=12917,
+ ["ieungaparenkorean"]=12821,
+ ["ieungcirclekorean"]=12903,
+ ["ieungkorean"]=12615,
+ ["ieungparenkorean"]=12807,
+ ["igrave"]=236,
+ ["igujarati"]=2695,
+ ["igurmukhi"]=2567,
+ ["ihiragana"]=12356,
+ ["ihookabove"]=7881,
+ ["iibengali"]=2440,
+ ["iicyrillic"]=1080,
+ ["iideva"]=2312,
+ ["iigujarati"]=2696,
+ ["iigurmukhi"]=2568,
+ ["iimatragurmukhi"]=2624,
+ ["iinvertedbreve"]=523,
+ ["iishortcyrillic"]=1081,
+ ["iivowelsignbengali"]=2496,
+ ["iivowelsigndeva"]=2368,
+ ["iivowelsigngujarati"]=2752,
+ ["ij"]=307,
+ ["ikatakana"]=12452,
+ ["ikatakanahalfwidth"]=65394,
+ ["ikorean"]=12643,
+ ["ilde"]=732,
+ ["iluyhebrew"]=1452,
+ ["imacron"]=299,
+ ["imacroncyrillic"]=1251,
+ ["imageorapproximatelyequal"]=8787,
+ ["imatragurmukhi"]=2623,
+ ["imonospace"]=65353,
+ ["increment"]=8710,
+ ["infinity"]=8734,
+ ["iniarmenian"]=1387,
+ ["integral"]=8747,
+ ["integralbottom"]=8993,
+ ["integralbt"]=8993,
+ ["integraltop"]=8992,
+ ["integraltp"]=8992,
+ ["intersection"]=8745,
+ ["intisquare"]=13061,
+ ["invbullet"]=9688,
+ ["invcircle"]=9689,
+ ["invsmileface"]=9787,
+ ["iocyrillic"]=1105,
+ ["iogonek"]=303,
+ ["iota"]=953,
+ ["iotadieresis"]=970,
+ ["iotadieresistonos"]=912,
+ ["iotalatin"]=617,
+ ["iotatonos"]=943,
+ ["iparen"]=9380,
+ ["irigurmukhi"]=2674,
+ ["ismallhiragana"]=12355,
+ ["ismallkatakana"]=12451,
+ ["ismallkatakanahalfwidth"]=65384,
+ ["issharbengali"]=2554,
+ ["istroke"]=616,
+ ["iterationhiragana"]=12445,
+ ["iterationkatakana"]=12541,
+ ["itilde"]=297,
+ ["itildebelow"]=7725,
+ ["iubopomofo"]=12585,
+ ["iucyrillic"]=1102,
+ ["ivowelsignbengali"]=2495,
+ ["ivowelsigndeva"]=2367,
+ ["ivowelsigngujarati"]=2751,
+ ["izhitsacyrillic"]=1141,
+ ["izhitsadblgravecyrillic"]=1143,
+ ["j"]=106,
+ ["jaarmenian"]=1393,
+ ["jabengali"]=2460,
+ ["jadeva"]=2332,
+ ["jagujarati"]=2716,
+ ["jagurmukhi"]=2588,
+ ["jbopomofo"]=12560,
+ ["jcaron"]=496,
+ ["jcircle"]=9433,
+ ["jcircumflex"]=309,
+ ["jcrossedtail"]=669,
+ ["jdotlessstroke"]=607,
+ ["jecyrillic"]=1112,
+ ["jeemarabic"]=1580,
+ ["jeemfinalarabic"]=65182,
+ ["jeeminitialarabic"]=65183,
+ ["jeemmedialarabic"]=65184,
+ ["jeharabic"]=1688,
+ ["jehfinalarabic"]=64395,
+ ["jhabengali"]=2461,
+ ["jhadeva"]=2333,
+ ["jhagujarati"]=2717,
+ ["jhagurmukhi"]=2589,
+ ["jheharmenian"]=1403,
+ ["jis"]=12292,
+ ["jmonospace"]=65354,
+ ["jparen"]=9381,
+ ["jsuperior"]=690,
+ ["k"]=107,
+ ["kabashkircyrillic"]=1185,
+ ["kabengali"]=2453,
+ ["kacute"]=7729,
+ ["kacyrillic"]=1082,
+ ["kadescendercyrillic"]=1179,
+ ["kadeva"]=2325,
+ ["kaf"]=1499,
+ ["kafarabic"]=1603,
+ ["kafdagesh"]=64315,
+ ["kafdageshhebrew"]=64315,
+ ["kaffinalarabic"]=65242,
+ ["kafhebrew"]=1499,
+ ["kafinitialarabic"]=65243,
+ ["kafmedialarabic"]=65244,
+ ["kafrafehebrew"]=64333,
+ ["kagujarati"]=2709,
+ ["kagurmukhi"]=2581,
+ ["kahiragana"]=12363,
+ ["kahookcyrillic"]=1220,
+ ["kakatakana"]=12459,
+ ["kakatakanahalfwidth"]=65398,
+ ["kappa"]=954,
+ ["kappasymbolgreek"]=1008,
+ ["kapyeounmieumkorean"]=12657,
+ ["kapyeounphieuphkorean"]=12676,
+ ["kapyeounpieupkorean"]=12664,
+ ["kapyeounssangpieupkorean"]=12665,
+ ["karoriisquare"]=13069,
+ ["kashidaautoarabic"]=1600,
+ ["kashidaautonosidebearingarabic"]=1600,
+ ["kasmallkatakana"]=12533,
+ ["kasquare"]=13188,
+ ["kasraarabic"]=1616,
+ ["kasratanarabic"]=1613,
+ ["kastrokecyrillic"]=1183,
+ ["katahiraprolongmarkhalfwidth"]=65392,
+ ["kaverticalstrokecyrillic"]=1181,
+ ["kbopomofo"]=12558,
+ ["kcalsquare"]=13193,
+ ["kcaron"]=489,
+ ["kcedilla"]=311,
+ ["kcircle"]=9434,
+ ["kcommaaccent"]=311,
+ ["kdotbelow"]=7731,
+ ["keharmenian"]=1412,
+ ["kehiragana"]=12369,
+ ["kekatakana"]=12465,
+ ["kekatakanahalfwidth"]=65401,
+ ["kenarmenian"]=1391,
+ ["kesmallkatakana"]=12534,
+ ["kgreenlandic"]=312,
+ ["khabengali"]=2454,
+ ["khacyrillic"]=1093,
+ ["khadeva"]=2326,
+ ["khagujarati"]=2710,
+ ["khagurmukhi"]=2582,
+ ["khaharabic"]=1582,
+ ["khahfinalarabic"]=65190,
+ ["khahinitialarabic"]=65191,
+ ["khahmedialarabic"]=65192,
+ ["kheicoptic"]=999,
+ ["khhadeva"]=2393,
+ ["khhagurmukhi"]=2649,
+ ["khieukhacirclekorean"]=12920,
+ ["khieukhaparenkorean"]=12824,
+ ["khieukhcirclekorean"]=12906,
+ ["khieukhkorean"]=12619,
+ ["khieukhparenkorean"]=12810,
+ ["khokhaithai"]=3586,
+ ["khokhonthai"]=3589,
+ ["khokhuatthai"]=3587,
+ ["khokhwaithai"]=3588,
+ ["khomutthai"]=3675,
+ ["khook"]=409,
+ ["khorakhangthai"]=3590,
+ ["khzsquare"]=13201,
+ ["kihiragana"]=12365,
+ ["kikatakana"]=12461,
+ ["kikatakanahalfwidth"]=65399,
+ ["kiroguramusquare"]=13077,
+ ["kiromeetorusquare"]=13078,
+ ["kirosquare"]=13076,
+ ["kiyeokacirclekorean"]=12910,
+ ["kiyeokaparenkorean"]=12814,
+ ["kiyeokcirclekorean"]=12896,
+ ["kiyeokkorean"]=12593,
+ ["kiyeokparenkorean"]=12800,
+ ["kiyeoksioskorean"]=12595,
+ ["kjecyrillic"]=1116,
+ ["klinebelow"]=7733,
+ ["klsquare"]=13208,
+ ["kmcubedsquare"]=13222,
+ ["kmonospace"]=65355,
+ ["kmsquaredsquare"]=13218,
+ ["kohiragana"]=12371,
+ ["kohmsquare"]=13248,
+ ["kokaithai"]=3585,
+ ["kokatakana"]=12467,
+ ["kokatakanahalfwidth"]=65402,
+ ["kooposquare"]=13086,
+ ["koppacyrillic"]=1153,
+ ["koreanstandardsymbol"]=12927,
+ ["koroniscmb"]=835,
+ ["kparen"]=9382,
+ ["kpasquare"]=13226,
+ ["ksicyrillic"]=1135,
+ ["ktsquare"]=13263,
+ ["kturned"]=670,
+ ["kuhiragana"]=12367,
+ ["kukatakana"]=12463,
+ ["kukatakanahalfwidth"]=65400,
+ ["kvsquare"]=13240,
+ ["kwsquare"]=13246,
+ ["l"]=108,
+ ["labengali"]=2482,
+ ["lacute"]=314,
+ ["ladeva"]=2354,
+ ["lagujarati"]=2738,
+ ["lagurmukhi"]=2610,
+ ["lakkhangyaothai"]=3653,
+ ["lamaleffinalarabic"]=65276,
+ ["lamalefhamzaabovefinalarabic"]=65272,
+ ["lamalefhamzaaboveisolatedarabic"]=65271,
+ ["lamalefhamzabelowfinalarabic"]=65274,
+ ["lamalefhamzabelowisolatedarabic"]=65273,
+ ["lamalefisolatedarabic"]=65275,
+ ["lamalefmaddaabovefinalarabic"]=65270,
+ ["lamalefmaddaaboveisolatedarabic"]=65269,
+ ["lamarabic"]=1604,
+ ["lambda"]=955,
+ ["lambdastroke"]=411,
+ ["lamed"]=1500,
+ ["lameddagesh"]=64316,
+ ["lameddageshhebrew"]=64316,
+ ["lamedhebrew"]=1500,
+ ["lamedholam"]=1500,
+ ["lamedholamdagesh"]=1500,
+ ["lamedholamdageshhebrew"]=1500,
+ ["lamedholamhebrew"]=1500,
+ ["lamfinalarabic"]=65246,
+ ["lamhahinitialarabic"]=64714,
+ ["laminitialarabic"]=65247,
+ ["lamjeeminitialarabic"]=64713,
+ ["lamkhahinitialarabic"]=64715,
+ ["lamlamhehisolatedarabic"]=65010,
+ ["lammedialarabic"]=65248,
+ ["lammeemhahinitialarabic"]=64904,
+ ["lammeeminitialarabic"]=64716,
+ ["lammeemjeeminitialarabic"]=65247,
+ ["lammeemkhahinitialarabic"]=65247,
+ ["largecircle"]=9711,
+ ["lbar"]=410,
+ ["lbelt"]=620,
+ ["lbopomofo"]=12556,
+ ["lcaron"]=318,
+ ["lcedilla"]=316,
+ ["lcircle"]=9435,
+ ["lcircumflexbelow"]=7741,
+ ["lcommaaccent"]=316,
+ ["ldot"]=320,
+ ["ldotaccent"]=320,
+ ["ldotbelow"]=7735,
+ ["ldotbelowmacron"]=7737,
+ ["leftangleabovecmb"]=794,
+ ["lefttackbelowcmb"]=792,
+ ["less"]=60,
+ ["lessequal"]=8804,
+ ["lessequalorgreater"]=8922,
+ ["lessmonospace"]=65308,
+ ["lessorequivalent"]=8818,
+ ["lessorgreater"]=8822,
+ ["lessoverequal"]=8806,
+ ["lesssmall"]=65124,
+ ["lezh"]=622,
+ ["lfblock"]=9612,
+ ["lhookretroflex"]=621,
+ ["lira"]=8356,
+ ["liwnarmenian"]=1388,
+ ["lj"]=457,
+ ["ljecyrillic"]=1113,
+ ["lladeva"]=2355,
+ ["llagujarati"]=2739,
+ ["llinebelow"]=7739,
+ ["llladeva"]=2356,
+ ["llvocalicbengali"]=2529,
+ ["llvocalicdeva"]=2401,
+ ["llvocalicvowelsignbengali"]=2531,
+ ["llvocalicvowelsigndeva"]=2403,
+ ["lmiddletilde"]=619,
+ ["lmonospace"]=65356,
+ ["lmsquare"]=13264,
+ ["lochulathai"]=3628,
+ ["logicaland"]=8743,
+ ["logicalnot"]=172,
+ ["logicalnotreversed"]=8976,
+ ["logicalor"]=8744,
+ ["lolingthai"]=3621,
+ ["longs"]=383,
+ ["lowlinecenterline"]=65102,
+ ["lowlinecmb"]=818,
+ ["lowlinedashed"]=65101,
+ ["lozenge"]=9674,
+ ["lparen"]=9383,
+ ["lslash"]=322,
+ ["lsquare"]=8467,
+ ["ltshade"]=9617,
+ ["luthai"]=3622,
+ ["lvocalicbengali"]=2444,
+ ["lvocalicdeva"]=2316,
+ ["lvocalicvowelsignbengali"]=2530,
+ ["lvocalicvowelsigndeva"]=2402,
+ ["lxsquare"]=13267,
+ ["m"]=109,
+ ["mabengali"]=2478,
+ ["macron"]=175,
+ ["macronbelowcmb"]=817,
+ ["macroncmb"]=772,
+ ["macronlowmod"]=717,
+ ["macronmonospace"]=65507,
+ ["macute"]=7743,
+ ["madeva"]=2350,
+ ["magujarati"]=2734,
+ ["magurmukhi"]=2606,
+ ["mahapakhhebrew"]=1444,
+ ["mahapakhlefthebrew"]=1444,
+ ["mahiragana"]=12414,
+ ["maichattawathai"]=3659,
+ ["maiekthai"]=3656,
+ ["maihanakatthai"]=3633,
+ ["maitaikhuthai"]=3655,
+ ["maithothai"]=3657,
+ ["maitrithai"]=3658,
+ ["maiyamokthai"]=3654,
+ ["makatakana"]=12510,
+ ["makatakanahalfwidth"]=65423,
+ ["male"]=9794,
+ ["mansyonsquare"]=13127,
+ ["maqafhebrew"]=1470,
+ ["mars"]=9794,
+ ["masoracirclehebrew"]=1455,
+ ["masquare"]=13187,
+ ["mbopomofo"]=12551,
+ ["mbsquare"]=13268,
+ ["mcircle"]=9436,
+ ["mcubedsquare"]=13221,
+ ["mdotaccent"]=7745,
+ ["mdotbelow"]=7747,
+ ["meemarabic"]=1605,
+ ["meemfinalarabic"]=65250,
+ ["meeminitialarabic"]=65251,
+ ["meemmedialarabic"]=65252,
+ ["meemmeeminitialarabic"]=64721,
+ ["meemmeemisolatedarabic"]=64584,
+ ["meetorusquare"]=13133,
+ ["mehiragana"]=12417,
+ ["meizierasquare"]=13182,
+ ["mekatakana"]=12513,
+ ["mekatakanahalfwidth"]=65426,
+ ["mem"]=1502,
+ ["memdagesh"]=64318,
+ ["memdageshhebrew"]=64318,
+ ["memhebrew"]=1502,
+ ["menarmenian"]=1396,
+ ["merkhahebrew"]=1445,
+ ["merkhakefulahebrew"]=1446,
+ ["merkhakefulalefthebrew"]=1446,
+ ["merkhalefthebrew"]=1445,
+ ["mhook"]=625,
+ ["mhzsquare"]=13202,
+ ["middledotkatakanahalfwidth"]=65381,
+ ["middot"]=183,
+ ["mieumacirclekorean"]=12914,
+ ["mieumaparenkorean"]=12818,
+ ["mieumcirclekorean"]=12900,
+ ["mieumkorean"]=12609,
+ ["mieumpansioskorean"]=12656,
+ ["mieumparenkorean"]=12804,
+ ["mieumpieupkorean"]=12654,
+ ["mieumsioskorean"]=12655,
+ ["mihiragana"]=12415,
+ ["mikatakana"]=12511,
+ ["mikatakanahalfwidth"]=65424,
+ ["minus"]=8722,
+ ["minusbelowcmb"]=800,
+ ["minuscircle"]=8854,
+ ["minusmod"]=727,
+ ["minusplus"]=8723,
+ ["minute"]=8242,
+ ["miribaarusquare"]=13130,
+ ["mirisquare"]=13129,
+ ["mlonglegturned"]=624,
+ ["mlsquare"]=13206,
+ ["mmcubedsquare"]=13219,
+ ["mmonospace"]=65357,
+ ["mmsquaredsquare"]=13215,
+ ["mohiragana"]=12418,
+ ["mohmsquare"]=13249,
+ ["mokatakana"]=12514,
+ ["mokatakanahalfwidth"]=65427,
+ ["molsquare"]=13270,
+ ["momathai"]=3617,
+ ["moverssquare"]=13223,
+ ["moverssquaredsquare"]=13224,
+ ["mparen"]=9384,
+ ["mpasquare"]=13227,
+ ["mssquare"]=13235,
+ ["mturned"]=623,
+ ["mu"]=181,
+ ["mu1"]=181,
+ ["muasquare"]=13186,
+ ["muchgreater"]=8811,
+ ["muchless"]=8810,
+ ["mufsquare"]=13196,
+ ["mugreek"]=956,
+ ["mugsquare"]=13197,
+ ["muhiragana"]=12416,
+ ["mukatakana"]=12512,
+ ["mukatakanahalfwidth"]=65425,
+ ["mulsquare"]=13205,
+ ["multiply"]=215,
+ ["mumsquare"]=13211,
+ ["munahhebrew"]=1443,
+ ["munahlefthebrew"]=1443,
+ ["musicalnote"]=9834,
+ ["musicalnotedbl"]=9835,
+ ["musicflatsign"]=9837,
+ ["musicsharpsign"]=9839,
+ ["mussquare"]=13234,
+ ["muvsquare"]=13238,
+ ["muwsquare"]=13244,
+ ["mvmegasquare"]=13241,
+ ["mvsquare"]=13239,
+ ["mwmegasquare"]=13247,
+ ["mwsquare"]=13245,
+ ["n"]=110,
+ ["nabengali"]=2472,
+ ["nabla"]=8711,
+ ["nacute"]=324,
+ ["nadeva"]=2344,
+ ["nagujarati"]=2728,
+ ["nagurmukhi"]=2600,
+ ["nahiragana"]=12394,
+ ["nakatakana"]=12490,
+ ["nakatakanahalfwidth"]=65413,
+ ["napostrophe"]=329,
+ ["nasquare"]=13185,
+ ["nbopomofo"]=12555,
+ ["nbspace"]=160,
+ ["ncaron"]=328,
+ ["ncedilla"]=326,
+ ["ncircle"]=9437,
+ ["ncircumflexbelow"]=7755,
+ ["ncommaaccent"]=326,
+ ["ndotaccent"]=7749,
+ ["ndotbelow"]=7751,
+ ["nehiragana"]=12397,
+ ["nekatakana"]=12493,
+ ["nekatakanahalfwidth"]=65416,
+ ["newsheqelsign"]=8362,
+ ["nfsquare"]=13195,
+ ["ngabengali"]=2457,
+ ["ngadeva"]=2329,
+ ["ngagujarati"]=2713,
+ ["ngagurmukhi"]=2585,
+ ["ngonguthai"]=3591,
+ ["nhiragana"]=12435,
+ ["nhookleft"]=626,
+ ["nhookretroflex"]=627,
+ ["nieunacirclekorean"]=12911,
+ ["nieunaparenkorean"]=12815,
+ ["nieuncieuckorean"]=12597,
+ ["nieuncirclekorean"]=12897,
+ ["nieunhieuhkorean"]=12598,
+ ["nieunkorean"]=12596,
+ ["nieunpansioskorean"]=12648,
+ ["nieunparenkorean"]=12801,
+ ["nieunsioskorean"]=12647,
+ ["nieuntikeutkorean"]=12646,
+ ["nihiragana"]=12395,
+ ["nikatakana"]=12491,
+ ["nikatakanahalfwidth"]=65414,
+ ["nikhahitthai"]=3661,
+ ["nine"]=57,
+ ["ninearabic"]=1641,
+ ["ninebengali"]=2543,
+ ["ninecircle"]=9320,
+ ["ninecircleinversesansserif"]=10130,
+ ["ninedeva"]=2415,
+ ["ninegujarati"]=2799,
+ ["ninegurmukhi"]=2671,
+ ["ninehackarabic"]=1641,
+ ["ninehangzhou"]=12329,
+ ["nineideographicparen"]=12840,
+ ["nineinferior"]=8329,
+ ["ninemonospace"]=65305,
+ ["nineparen"]=9340,
+ ["nineperiod"]=9360,
+ ["ninepersian"]=1785,
+ ["nineroman"]=8568,
+ ["ninesuperior"]=8313,
+ ["nineteencircle"]=9330,
+ ["nineteenparen"]=9350,
+ ["nineteenperiod"]=9370,
+ ["ninethai"]=3673,
+ ["nj"]=460,
+ ["njecyrillic"]=1114,
+ ["nkatakana"]=12531,
+ ["nkatakanahalfwidth"]=65437,
+ ["nlegrightlong"]=414,
+ ["nlinebelow"]=7753,
+ ["nmonospace"]=65358,
+ ["nmsquare"]=13210,
+ ["nnabengali"]=2467,
+ ["nnadeva"]=2339,
+ ["nnagujarati"]=2723,
+ ["nnagurmukhi"]=2595,
+ ["nnnadeva"]=2345,
+ ["nohiragana"]=12398,
+ ["nokatakana"]=12494,
+ ["nokatakanahalfwidth"]=65417,
+ ["nonbreakingspace"]=160,
+ ["nonenthai"]=3603,
+ ["nonuthai"]=3609,
+ ["noonarabic"]=1606,
+ ["noonfinalarabic"]=65254,
+ ["noonghunnaarabic"]=1722,
+ ["noonghunnafinalarabic"]=64415,
+ ["noonhehinitialarabic"]=65255,
+ ["nooninitialarabic"]=65255,
+ ["noonjeeminitialarabic"]=64722,
+ ["noonjeemisolatedarabic"]=64587,
+ ["noonmedialarabic"]=65256,
+ ["noonmeeminitialarabic"]=64725,
+ ["noonmeemisolatedarabic"]=64590,
+ ["noonnoonfinalarabic"]=64653,
+ ["notcontains"]=8716,
+ ["notelement"]=8713,
+ ["notelementof"]=8713,
+ ["notequal"]=8800,
+ ["notgreater"]=8815,
+ ["notgreaternorequal"]=8817,
+ ["notgreaternorless"]=8825,
+ ["notidentical"]=8802,
+ ["notless"]=8814,
+ ["notlessnorequal"]=8816,
+ ["notparallel"]=8742,
+ ["notprecedes"]=8832,
+ ["notsubset"]=8836,
+ ["notsucceeds"]=8833,
+ ["notsuperset"]=8837,
+ ["nowarmenian"]=1398,
+ ["nparen"]=9385,
+ ["nssquare"]=13233,
+ ["nsuperior"]=8319,
+ ["ntilde"]=241,
+ ["nu"]=957,
+ ["nuhiragana"]=12396,
+ ["nukatakana"]=12492,
+ ["nukatakanahalfwidth"]=65415,
+ ["nuktabengali"]=2492,
+ ["nuktadeva"]=2364,
+ ["nuktagujarati"]=2748,
+ ["nuktagurmukhi"]=2620,
+ ["numbersign"]=35,
+ ["numbersignmonospace"]=65283,
+ ["numbersignsmall"]=65119,
+ ["numeralsigngreek"]=884,
+ ["numeralsignlowergreek"]=885,
+ ["numero"]=8470,
+ ["nun"]=1504,
+ ["nundagesh"]=64320,
+ ["nundageshhebrew"]=64320,
+ ["nunhebrew"]=1504,
+ ["nvsquare"]=13237,
+ ["nwsquare"]=13243,
+ ["nyabengali"]=2462,
+ ["nyadeva"]=2334,
+ ["nyagujarati"]=2718,
+ ["nyagurmukhi"]=2590,
+ ["o"]=111,
+ ["oacute"]=243,
+ ["oangthai"]=3629,
+ ["obarred"]=629,
+ ["obarredcyrillic"]=1257,
+ ["obarreddieresiscyrillic"]=1259,
+ ["obengali"]=2451,
+ ["obopomofo"]=12571,
+ ["obreve"]=335,
+ ["ocandradeva"]=2321,
+ ["ocandragujarati"]=2705,
+ ["ocandravowelsigndeva"]=2377,
+ ["ocandravowelsigngujarati"]=2761,
+ ["ocaron"]=466,
+ ["ocircle"]=9438,
+ ["ocircumflex"]=244,
+ ["ocircumflexacute"]=7889,
+ ["ocircumflexdotbelow"]=7897,
+ ["ocircumflexgrave"]=7891,
+ ["ocircumflexhookabove"]=7893,
+ ["ocircumflextilde"]=7895,
+ ["ocyrillic"]=1086,
+ ["odblacute"]=337,
+ ["odblgrave"]=525,
+ ["odeva"]=2323,
+ ["odieresis"]=246,
+ ["odieresiscyrillic"]=1255,
+ ["odotbelow"]=7885,
+ ["oe"]=339,
+ ["oekorean"]=12634,
+ ["ogonek"]=731,
+ ["ogonekcmb"]=808,
+ ["ograve"]=242,
+ ["ogujarati"]=2707,
+ ["oharmenian"]=1413,
+ ["ohiragana"]=12362,
+ ["ohookabove"]=7887,
+ ["ohorn"]=417,
+ ["ohornacute"]=7899,
+ ["ohorndotbelow"]=7907,
+ ["ohorngrave"]=7901,
+ ["ohornhookabove"]=7903,
+ ["ohorntilde"]=7905,
+ ["ohungarumlaut"]=337,
+ ["oi"]=419,
+ ["oinvertedbreve"]=527,
+ ["okatakana"]=12458,
+ ["okatakanahalfwidth"]=65397,
+ ["okorean"]=12631,
+ ["olehebrew"]=1451,
+ ["omacron"]=333,
+ ["omacronacute"]=7763,
+ ["omacrongrave"]=7761,
+ ["omdeva"]=2384,
+ ["omega"]=969,
+ ["omega1"]=982,
+ ["omegacyrillic"]=1121,
+ ["omegalatinclosed"]=631,
+ ["omegaroundcyrillic"]=1147,
+ ["omegatitlocyrillic"]=1149,
+ ["omegatonos"]=974,
+ ["omgujarati"]=2768,
+ ["omicron"]=959,
+ ["omicrontonos"]=972,
+ ["omonospace"]=65359,
+ ["one"]=49,
+ ["onearabic"]=1633,
+ ["onebengali"]=2535,
+ ["onecircle"]=9312,
+ ["onecircleinversesansserif"]=10122,
+ ["onedeva"]=2407,
+ ["onedotenleader"]=8228,
+ ["oneeighth"]=8539,
+ ["onegujarati"]=2791,
+ ["onegurmukhi"]=2663,
+ ["onehackarabic"]=1633,
+ ["onehalf"]=189,
+ ["onehangzhou"]=12321,
+ ["oneideographicparen"]=12832,
+ ["oneinferior"]=8321,
+ ["onemonospace"]=65297,
+ ["onenumeratorbengali"]=2548,
+ ["oneparen"]=9332,
+ ["oneperiod"]=9352,
+ ["onepersian"]=1777,
+ ["onequarter"]=188,
+ ["oneroman"]=8560,
+ ["onesuperior"]=185,
+ ["onethai"]=3665,
+ ["onethird"]=8531,
+ ["oogonek"]=491,
+ ["oogonekmacron"]=493,
+ ["oogurmukhi"]=2579,
+ ["oomatragurmukhi"]=2635,
+ ["oopen"]=596,
+ ["oparen"]=9386,
+ ["openbullet"]=9702,
+ ["option"]=8997,
+ ["ordfeminine"]=170,
+ ["ordmasculine"]=186,
+ ["orthogonal"]=8735,
+ ["oshortdeva"]=2322,
+ ["oshortvowelsigndeva"]=2378,
+ ["oslash"]=248,
+ ["oslashacute"]=511,
+ ["osmallhiragana"]=12361,
+ ["osmallkatakana"]=12457,
+ ["osmallkatakanahalfwidth"]=65387,
+ ["ostrokeacute"]=511,
+ ["otcyrillic"]=1151,
+ ["otilde"]=245,
+ ["otildeacute"]=7757,
+ ["otildedieresis"]=7759,
+ ["oubopomofo"]=12577,
+ ["overline"]=8254,
+ ["overlinecenterline"]=65098,
+ ["overlinecmb"]=773,
+ ["overlinedashed"]=65097,
+ ["overlinedblwavy"]=65100,
+ ["overlinewavy"]=65099,
+ ["overscore"]=175,
+ ["ovowelsignbengali"]=2507,
+ ["ovowelsigndeva"]=2379,
+ ["ovowelsigngujarati"]=2763,
+ ["p"]=112,
+ ["paampssquare"]=13184,
+ ["paasentosquare"]=13099,
+ ["pabengali"]=2474,
+ ["pacute"]=7765,
+ ["padeva"]=2346,
+ ["pagedown"]=8671,
+ ["pageup"]=8670,
+ ["pagujarati"]=2730,
+ ["pagurmukhi"]=2602,
+ ["pahiragana"]=12401,
+ ["paiyannoithai"]=3631,
+ ["pakatakana"]=12497,
+ ["palatalizationcyrilliccmb"]=1156,
+ ["palochkacyrillic"]=1216,
+ ["pansioskorean"]=12671,
+ ["paragraph"]=182,
+ ["parallel"]=8741,
+ ["parenleft"]=40,
+ ["parenleftaltonearabic"]=64830,
+ ["parenleftinferior"]=8333,
+ ["parenleftmonospace"]=65288,
+ ["parenleftsmall"]=65113,
+ ["parenleftsuperior"]=8317,
+ ["parenleftvertical"]=65077,
+ ["parenright"]=41,
+ ["parenrightaltonearabic"]=64831,
+ ["parenrightinferior"]=8334,
+ ["parenrightmonospace"]=65289,
+ ["parenrightsmall"]=65114,
+ ["parenrightsuperior"]=8318,
+ ["parenrightvertical"]=65078,
+ ["partialdiff"]=8706,
+ ["paseqhebrew"]=1472,
+ ["pashtahebrew"]=1433,
+ ["pasquare"]=13225,
+ ["patah"]=1463,
+ ["patah11"]=1463,
+ ["patah1d"]=1463,
+ ["patah2a"]=1463,
+ ["patahhebrew"]=1463,
+ ["patahnarrowhebrew"]=1463,
+ ["patahquarterhebrew"]=1463,
+ ["patahwidehebrew"]=1463,
+ ["pazerhebrew"]=1441,
+ ["pbopomofo"]=12550,
+ ["pcircle"]=9439,
+ ["pdotaccent"]=7767,
+ ["pe"]=1508,
+ ["pecyrillic"]=1087,
+ ["pedagesh"]=64324,
+ ["pedageshhebrew"]=64324,
+ ["peezisquare"]=13115,
+ ["pefinaldageshhebrew"]=64323,
+ ["peharabic"]=1662,
+ ["peharmenian"]=1402,
+ ["pehebrew"]=1508,
+ ["pehfinalarabic"]=64343,
+ ["pehinitialarabic"]=64344,
+ ["pehiragana"]=12410,
+ ["pehmedialarabic"]=64345,
+ ["pekatakana"]=12506,
+ ["pemiddlehookcyrillic"]=1191,
+ ["perafehebrew"]=64334,
+ ["percent"]=37,
+ ["percentarabic"]=1642,
+ ["percentmonospace"]=65285,
+ ["percentsmall"]=65130,
+ ["period"]=46,
+ ["periodarmenian"]=1417,
+ ["periodcentered"]=183,
+ ["periodhalfwidth"]=65377,
+ ["periodmonospace"]=65294,
+ ["periodsmall"]=65106,
+ ["perispomenigreekcmb"]=834,
+ ["perpendicular"]=8869,
+ ["perthousand"]=8240,
+ ["peseta"]=8359,
+ ["pfsquare"]=13194,
+ ["phabengali"]=2475,
+ ["phadeva"]=2347,
+ ["phagujarati"]=2731,
+ ["phagurmukhi"]=2603,
+ ["phi"]=966,
+ ["phi1"]=981,
+ ["phieuphacirclekorean"]=12922,
+ ["phieuphaparenkorean"]=12826,
+ ["phieuphcirclekorean"]=12908,
+ ["phieuphkorean"]=12621,
+ ["phieuphparenkorean"]=12812,
+ ["philatin"]=632,
+ ["phinthuthai"]=3642,
+ ["phisymbolgreek"]=981,
+ ["phook"]=421,
+ ["phophanthai"]=3614,
+ ["phophungthai"]=3612,
+ ["phosamphaothai"]=3616,
+ ["pi"]=960,
+ ["pieupacirclekorean"]=12915,
+ ["pieupaparenkorean"]=12819,
+ ["pieupcieuckorean"]=12662,
+ ["pieupcirclekorean"]=12901,
+ ["pieupkiyeokkorean"]=12658,
+ ["pieupkorean"]=12610,
+ ["pieupparenkorean"]=12805,
+ ["pieupsioskiyeokkorean"]=12660,
+ ["pieupsioskorean"]=12612,
+ ["pieupsiostikeutkorean"]=12661,
+ ["pieupthieuthkorean"]=12663,
+ ["pieuptikeutkorean"]=12659,
+ ["pihiragana"]=12404,
+ ["pikatakana"]=12500,
+ ["pisymbolgreek"]=982,
+ ["piwrarmenian"]=1411,
+ ["plus"]=43,
+ ["plusbelowcmb"]=799,
+ ["pluscircle"]=8853,
+ ["plusminus"]=177,
+ ["plusmod"]=726,
+ ["plusmonospace"]=65291,
+ ["plussmall"]=65122,
+ ["plussuperior"]=8314,
+ ["pmonospace"]=65360,
+ ["pmsquare"]=13272,
+ ["pohiragana"]=12413,
+ ["pointingindexdownwhite"]=9759,
+ ["pointingindexleftwhite"]=9756,
+ ["pointingindexrightwhite"]=9758,
+ ["pointingindexupwhite"]=9757,
+ ["pokatakana"]=12509,
+ ["poplathai"]=3611,
+ ["postalmark"]=12306,
+ ["postalmarkface"]=12320,
+ ["pparen"]=9387,
+ ["precedes"]=8826,
+ ["prescription"]=8478,
+ ["primemod"]=697,
+ ["primereversed"]=8245,
+ ["product"]=8719,
+ ["projective"]=8965,
+ ["prolongedkana"]=12540,
+ ["propellor"]=8984,
+ ["propersubset"]=8834,
+ ["propersuperset"]=8835,
+ ["proportion"]=8759,
+ ["proportional"]=8733,
+ ["psi"]=968,
+ ["psicyrillic"]=1137,
+ ["psilipneumatacyrilliccmb"]=1158,
+ ["pssquare"]=13232,
+ ["puhiragana"]=12407,
+ ["pukatakana"]=12503,
+ ["pvsquare"]=13236,
+ ["pwsquare"]=13242,
+ ["q"]=113,
+ ["qadeva"]=2392,
+ ["qadmahebrew"]=1448,
+ ["qafarabic"]=1602,
+ ["qaffinalarabic"]=65238,
+ ["qafinitialarabic"]=65239,
+ ["qafmedialarabic"]=65240,
+ ["qamats"]=1464,
+ ["qamats10"]=1464,
+ ["qamats1a"]=1464,
+ ["qamats1c"]=1464,
+ ["qamats27"]=1464,
+ ["qamats29"]=1464,
+ ["qamats33"]=1464,
+ ["qamatsde"]=1464,
+ ["qamatshebrew"]=1464,
+ ["qamatsnarrowhebrew"]=1464,
+ ["qamatsqatanhebrew"]=1464,
+ ["qamatsqatannarrowhebrew"]=1464,
+ ["qamatsqatanquarterhebrew"]=1464,
+ ["qamatsqatanwidehebrew"]=1464,
+ ["qamatsquarterhebrew"]=1464,
+ ["qamatswidehebrew"]=1464,
+ ["qarneyparahebrew"]=1439,
+ ["qbopomofo"]=12561,
+ ["qcircle"]=9440,
+ ["qhook"]=672,
+ ["qmonospace"]=65361,
+ ["qof"]=1511,
+ ["qofdagesh"]=64327,
+ ["qofdageshhebrew"]=64327,
+ ["qofhatafpatah"]=1511,
+ ["qofhatafpatahhebrew"]=1511,
+ ["qofhatafsegol"]=1511,
+ ["qofhatafsegolhebrew"]=1511,
+ ["qofhebrew"]=1511,
+ ["qofhiriq"]=1511,
+ ["qofhiriqhebrew"]=1511,
+ ["qofholam"]=1511,
+ ["qofholamhebrew"]=1511,
+ ["qofpatah"]=1511,
+ ["qofpatahhebrew"]=1511,
+ ["qofqamats"]=1511,
+ ["qofqamatshebrew"]=1511,
+ ["qofqubuts"]=1511,
+ ["qofqubutshebrew"]=1511,
+ ["qofsegol"]=1511,
+ ["qofsegolhebrew"]=1511,
+ ["qofsheva"]=1511,
+ ["qofshevahebrew"]=1511,
+ ["qoftsere"]=1511,
+ ["qoftserehebrew"]=1511,
+ ["qparen"]=9388,
+ ["quarternote"]=9833,
+ ["qubuts"]=1467,
+ ["qubuts18"]=1467,
+ ["qubuts25"]=1467,
+ ["qubuts31"]=1467,
+ ["qubutshebrew"]=1467,
+ ["qubutsnarrowhebrew"]=1467,
+ ["qubutsquarterhebrew"]=1467,
+ ["qubutswidehebrew"]=1467,
+ ["question"]=63,
+ ["questionarabic"]=1567,
+ ["questionarmenian"]=1374,
+ ["questiondown"]=191,
+ ["questiongreek"]=894,
+ ["questionmonospace"]=65311,
+ ["quotedbl"]=34,
+ ["quotedblbase"]=8222,
+ ["quotedblleft"]=8220,
+ ["quotedblmonospace"]=65282,
+ ["quotedblprime"]=12318,
+ ["quotedblprimereversed"]=12317,
+ ["quotedblright"]=8221,
+ ["quoteleft"]=8216,
+ ["quoteleftreversed"]=8219,
+ ["quotereversed"]=8219,
+ ["quoteright"]=8217,
+ ["quoterightn"]=329,
+ ["quotesinglbase"]=8218,
+ ["quotesingle"]=39,
+ ["quotesinglemonospace"]=65287,
+ ["r"]=114,
+ ["raarmenian"]=1404,
+ ["rabengali"]=2480,
+ ["racute"]=341,
+ ["radeva"]=2352,
+ ["radical"]=8730,
+ ["radoverssquare"]=13230,
+ ["radoverssquaredsquare"]=13231,
+ ["radsquare"]=13229,
+ ["rafe"]=1471,
+ ["rafehebrew"]=1471,
+ ["ragujarati"]=2736,
+ ["ragurmukhi"]=2608,
+ ["rahiragana"]=12425,
+ ["rakatakana"]=12521,
+ ["rakatakanahalfwidth"]=65431,
+ ["ralowerdiagonalbengali"]=2545,
+ ["ramiddlediagonalbengali"]=2544,
+ ["ramshorn"]=612,
+ ["ratio"]=8758,
+ ["rbopomofo"]=12566,
+ ["rcaron"]=345,
+ ["rcedilla"]=343,
+ ["rcircle"]=9441,
+ ["rcommaaccent"]=343,
+ ["rdblgrave"]=529,
+ ["rdotaccent"]=7769,
+ ["rdotbelow"]=7771,
+ ["rdotbelowmacron"]=7773,
+ ["referencemark"]=8251,
+ ["reflexsubset"]=8838,
+ ["reflexsuperset"]=8839,
+ ["registered"]=174,
+ ["reharabic"]=1585,
+ ["reharmenian"]=1408,
+ ["rehfinalarabic"]=65198,
+ ["rehiragana"]=12428,
+ ["rehyehaleflamarabic"]=1585,
+ ["rekatakana"]=12524,
+ ["rekatakanahalfwidth"]=65434,
+ ["resh"]=1512,
+ ["reshdageshhebrew"]=64328,
+ ["reshhatafpatah"]=1512,
+ ["reshhatafpatahhebrew"]=1512,
+ ["reshhatafsegol"]=1512,
+ ["reshhatafsegolhebrew"]=1512,
+ ["reshhebrew"]=1512,
+ ["reshhiriq"]=1512,
+ ["reshhiriqhebrew"]=1512,
+ ["reshholam"]=1512,
+ ["reshholamhebrew"]=1512,
+ ["reshpatah"]=1512,
+ ["reshpatahhebrew"]=1512,
+ ["reshqamats"]=1512,
+ ["reshqamatshebrew"]=1512,
+ ["reshqubuts"]=1512,
+ ["reshqubutshebrew"]=1512,
+ ["reshsegol"]=1512,
+ ["reshsegolhebrew"]=1512,
+ ["reshsheva"]=1512,
+ ["reshshevahebrew"]=1512,
+ ["reshtsere"]=1512,
+ ["reshtserehebrew"]=1512,
+ ["reversedtilde"]=8765,
+ ["reviahebrew"]=1431,
+ ["reviamugrashhebrew"]=1431,
+ ["revlogicalnot"]=8976,
+ ["rfishhook"]=638,
+ ["rfishhookreversed"]=639,
+ ["rhabengali"]=2525,
+ ["rhadeva"]=2397,
+ ["rho"]=961,
+ ["rhook"]=637,
+ ["rhookturned"]=635,
+ ["rhookturnedsuperior"]=693,
+ ["rhosymbolgreek"]=1009,
+ ["rhotichookmod"]=734,
+ ["rieulacirclekorean"]=12913,
+ ["rieulaparenkorean"]=12817,
+ ["rieulcirclekorean"]=12899,
+ ["rieulhieuhkorean"]=12608,
+ ["rieulkiyeokkorean"]=12602,
+ ["rieulkiyeoksioskorean"]=12649,
+ ["rieulkorean"]=12601,
+ ["rieulmieumkorean"]=12603,
+ ["rieulpansioskorean"]=12652,
+ ["rieulparenkorean"]=12803,
+ ["rieulphieuphkorean"]=12607,
+ ["rieulpieupkorean"]=12604,
+ ["rieulpieupsioskorean"]=12651,
+ ["rieulsioskorean"]=12605,
+ ["rieulthieuthkorean"]=12606,
+ ["rieultikeutkorean"]=12650,
+ ["rieulyeorinhieuhkorean"]=12653,
+ ["rightangle"]=8735,
+ ["righttackbelowcmb"]=793,
+ ["righttriangle"]=8895,
+ ["rihiragana"]=12426,
+ ["rikatakana"]=12522,
+ ["rikatakanahalfwidth"]=65432,
+ ["ring"]=730,
+ ["ringbelowcmb"]=805,
+ ["ringcmb"]=778,
+ ["ringhalfleft"]=703,
+ ["ringhalfleftarmenian"]=1369,
+ ["ringhalfleftbelowcmb"]=796,
+ ["ringhalfleftcentered"]=723,
+ ["ringhalfright"]=702,
+ ["ringhalfrightbelowcmb"]=825,
+ ["ringhalfrightcentered"]=722,
+ ["rinvertedbreve"]=531,
+ ["rittorusquare"]=13137,
+ ["rlinebelow"]=7775,
+ ["rlongleg"]=636,
+ ["rlonglegturned"]=634,
+ ["rmonospace"]=65362,
+ ["rohiragana"]=12429,
+ ["rokatakana"]=12525,
+ ["rokatakanahalfwidth"]=65435,
+ ["roruathai"]=3619,
+ ["rparen"]=9389,
+ ["rrabengali"]=2524,
+ ["rradeva"]=2353,
+ ["rragurmukhi"]=2652,
+ ["rreharabic"]=1681,
+ ["rrehfinalarabic"]=64397,
+ ["rrvocalicbengali"]=2528,
+ ["rrvocalicdeva"]=2400,
+ ["rrvocalicgujarati"]=2784,
+ ["rrvocalicvowelsignbengali"]=2500,
+ ["rrvocalicvowelsigndeva"]=2372,
+ ["rrvocalicvowelsigngujarati"]=2756,
+ ["rtblock"]=9616,
+ ["rturned"]=633,
+ ["rturnedsuperior"]=692,
+ ["ruhiragana"]=12427,
+ ["rukatakana"]=12523,
+ ["rukatakanahalfwidth"]=65433,
+ ["rupeemarkbengali"]=2546,
+ ["rupeesignbengali"]=2547,
+ ["ruthai"]=3620,
+ ["rvocalicbengali"]=2443,
+ ["rvocalicdeva"]=2315,
+ ["rvocalicgujarati"]=2699,
+ ["rvocalicvowelsignbengali"]=2499,
+ ["rvocalicvowelsigndeva"]=2371,
+ ["rvocalicvowelsigngujarati"]=2755,
+ ["s"]=115,
+ ["sabengali"]=2488,
+ ["sacute"]=347,
+ ["sacutedotaccent"]=7781,
+ ["sadarabic"]=1589,
+ ["sadeva"]=2360,
+ ["sadfinalarabic"]=65210,
+ ["sadinitialarabic"]=65211,
+ ["sadmedialarabic"]=65212,
+ ["sagujarati"]=2744,
+ ["sagurmukhi"]=2616,
+ ["sahiragana"]=12373,
+ ["sakatakana"]=12469,
+ ["sakatakanahalfwidth"]=65403,
+ ["sallallahoualayhewasallamarabic"]=65018,
+ ["samekh"]=1505,
+ ["samekhdagesh"]=64321,
+ ["samekhdageshhebrew"]=64321,
+ ["samekhhebrew"]=1505,
+ ["saraaathai"]=3634,
+ ["saraaethai"]=3649,
+ ["saraaimaimalaithai"]=3652,
+ ["saraaimaimuanthai"]=3651,
+ ["saraamthai"]=3635,
+ ["saraathai"]=3632,
+ ["saraethai"]=3648,
+ ["saraiithai"]=3637,
+ ["saraithai"]=3636,
+ ["saraothai"]=3650,
+ ["saraueethai"]=3639,
+ ["sarauethai"]=3638,
+ ["sarauthai"]=3640,
+ ["sarauuthai"]=3641,
+ ["sbopomofo"]=12569,
+ ["scaron"]=353,
+ ["scarondotaccent"]=7783,
+ ["scedilla"]=351,
+ ["schwa"]=601,
+ ["schwacyrillic"]=1241,
+ ["schwadieresiscyrillic"]=1243,
+ ["schwahook"]=602,
+ ["scircle"]=9442,
+ ["scircumflex"]=349,
+ ["scommaaccent"]=537,
+ ["sdotaccent"]=7777,
+ ["sdotbelow"]=7779,
+ ["sdotbelowdotaccent"]=7785,
+ ["seagullbelowcmb"]=828,
+ ["second"]=8243,
+ ["secondtonechinese"]=714,
+ ["section"]=167,
+ ["seenarabic"]=1587,
+ ["seenfinalarabic"]=65202,
+ ["seeninitialarabic"]=65203,
+ ["seenmedialarabic"]=65204,
+ ["segol"]=1462,
+ ["segol13"]=1462,
+ ["segol1f"]=1462,
+ ["segol2c"]=1462,
+ ["segolhebrew"]=1462,
+ ["segolnarrowhebrew"]=1462,
+ ["segolquarterhebrew"]=1462,
+ ["segoltahebrew"]=1426,
+ ["segolwidehebrew"]=1462,
+ ["seharmenian"]=1405,
+ ["sehiragana"]=12379,
+ ["sekatakana"]=12475,
+ ["sekatakanahalfwidth"]=65406,
+ ["semicolon"]=59,
+ ["semicolonarabic"]=1563,
+ ["semicolonmonospace"]=65307,
+ ["semicolonsmall"]=65108,
+ ["semivoicedmarkkana"]=12444,
+ ["semivoicedmarkkanahalfwidth"]=65439,
+ ["sentisquare"]=13090,
+ ["sentosquare"]=13091,
+ ["seven"]=55,
+ ["sevenarabic"]=1639,
+ ["sevenbengali"]=2541,
+ ["sevencircle"]=9318,
+ ["sevencircleinversesansserif"]=10128,
+ ["sevendeva"]=2413,
+ ["seveneighths"]=8542,
+ ["sevengujarati"]=2797,
+ ["sevengurmukhi"]=2669,
+ ["sevenhackarabic"]=1639,
+ ["sevenhangzhou"]=12327,
+ ["sevenideographicparen"]=12838,
+ ["seveninferior"]=8327,
+ ["sevenmonospace"]=65303,
+ ["sevenparen"]=9338,
+ ["sevenperiod"]=9358,
+ ["sevenpersian"]=1783,
+ ["sevenroman"]=8566,
+ ["sevensuperior"]=8311,
+ ["seventeencircle"]=9328,
+ ["seventeenparen"]=9348,
+ ["seventeenperiod"]=9368,
+ ["seventhai"]=3671,
+ ["sfthyphen"]=173,
+ ["shaarmenian"]=1399,
+ ["shabengali"]=2486,
+ ["shacyrillic"]=1096,
+ ["shaddaarabic"]=1617,
+ ["shaddadammaarabic"]=64609,
+ ["shaddadammatanarabic"]=64606,
+ ["shaddafathaarabic"]=64608,
+ ["shaddafathatanarabic"]=1617,
+ ["shaddakasraarabic"]=64610,
+ ["shaddakasratanarabic"]=64607,
+ ["shade"]=9618,
+ ["shadedark"]=9619,
+ ["shadelight"]=9617,
+ ["shademedium"]=9618,
+ ["shadeva"]=2358,
+ ["shagujarati"]=2742,
+ ["shagurmukhi"]=2614,
+ ["shalshelethebrew"]=1427,
+ ["shbopomofo"]=12565,
+ ["shchacyrillic"]=1097,
+ ["sheenarabic"]=1588,
+ ["sheenfinalarabic"]=65206,
+ ["sheeninitialarabic"]=65207,
+ ["sheenmedialarabic"]=65208,
+ ["sheicoptic"]=995,
+ ["sheqel"]=8362,
+ ["sheqelhebrew"]=8362,
+ ["sheva"]=1456,
+ ["sheva115"]=1456,
+ ["sheva15"]=1456,
+ ["sheva22"]=1456,
+ ["sheva2e"]=1456,
+ ["shevahebrew"]=1456,
+ ["shevanarrowhebrew"]=1456,
+ ["shevaquarterhebrew"]=1456,
+ ["shevawidehebrew"]=1456,
+ ["shhacyrillic"]=1211,
+ ["shimacoptic"]=1005,
+ ["shin"]=1513,
+ ["shindagesh"]=64329,
+ ["shindageshhebrew"]=64329,
+ ["shindageshshindot"]=64300,
+ ["shindageshshindothebrew"]=64300,
+ ["shindageshsindot"]=64301,
+ ["shindageshsindothebrew"]=64301,
+ ["shindothebrew"]=1473,
+ ["shinhebrew"]=1513,
+ ["shinshindot"]=64298,
+ ["shinshindothebrew"]=64298,
+ ["shinsindot"]=64299,
+ ["shinsindothebrew"]=64299,
+ ["shook"]=642,
+ ["sigma"]=963,
+ ["sigma1"]=962,
+ ["sigmafinal"]=962,
+ ["sigmalunatesymbolgreek"]=1010,
+ ["sihiragana"]=12375,
+ ["sikatakana"]=12471,
+ ["sikatakanahalfwidth"]=65404,
+ ["siluqhebrew"]=1469,
+ ["siluqlefthebrew"]=1469,
+ ["similar"]=8764,
+ ["sindothebrew"]=1474,
+ ["siosacirclekorean"]=12916,
+ ["siosaparenkorean"]=12820,
+ ["sioscieuckorean"]=12670,
+ ["sioscirclekorean"]=12902,
+ ["sioskiyeokkorean"]=12666,
+ ["sioskorean"]=12613,
+ ["siosnieunkorean"]=12667,
+ ["siosparenkorean"]=12806,
+ ["siospieupkorean"]=12669,
+ ["siostikeutkorean"]=12668,
+ ["six"]=54,
+ ["sixarabic"]=1638,
+ ["sixbengali"]=2540,
+ ["sixcircle"]=9317,
+ ["sixcircleinversesansserif"]=10127,
+ ["sixdeva"]=2412,
+ ["sixgujarati"]=2796,
+ ["sixgurmukhi"]=2668,
+ ["sixhackarabic"]=1638,
+ ["sixhangzhou"]=12326,
+ ["sixideographicparen"]=12837,
+ ["sixinferior"]=8326,
+ ["sixmonospace"]=65302,
+ ["sixparen"]=9337,
+ ["sixperiod"]=9357,
+ ["sixpersian"]=1782,
+ ["sixroman"]=8565,
+ ["sixsuperior"]=8310,
+ ["sixteencircle"]=9327,
+ ["sixteencurrencydenominatorbengali"]=2553,
+ ["sixteenparen"]=9347,
+ ["sixteenperiod"]=9367,
+ ["sixthai"]=3670,
+ ["slash"]=47,
+ ["slashmonospace"]=65295,
+ ["slong"]=383,
+ ["slongdotaccent"]=7835,
+ ["smileface"]=9786,
+ ["smonospace"]=65363,
+ ["sofpasuqhebrew"]=1475,
+ ["softhyphen"]=173,
+ ["softsigncyrillic"]=1100,
+ ["sohiragana"]=12381,
+ ["sokatakana"]=12477,
+ ["sokatakanahalfwidth"]=65407,
+ ["soliduslongoverlaycmb"]=824,
+ ["solidusshortoverlaycmb"]=823,
+ ["sorusithai"]=3625,
+ ["sosalathai"]=3624,
+ ["sosothai"]=3595,
+ ["sosuathai"]=3626,
+ ["space"]=32,
+ ["spacehackarabic"]=32,
+ ["spade"]=9824,
+ ["spadesuitblack"]=9824,
+ ["spadesuitwhite"]=9828,
+ ["sparen"]=9390,
+ ["squarebelowcmb"]=827,
+ ["squarecc"]=13252,
+ ["squarecm"]=13213,
+ ["squarediagonalcrosshatchfill"]=9641,
+ ["squarehorizontalfill"]=9636,
+ ["squarekg"]=13199,
+ ["squarekm"]=13214,
+ ["squarekmcapital"]=13262,
+ ["squareln"]=13265,
+ ["squarelog"]=13266,
+ ["squaremg"]=13198,
+ ["squaremil"]=13269,
+ ["squaremm"]=13212,
+ ["squaremsquared"]=13217,
+ ["squareorthogonalcrosshatchfill"]=9638,
+ ["squareupperlefttolowerrightfill"]=9639,
+ ["squareupperrighttolowerleftfill"]=9640,
+ ["squareverticalfill"]=9637,
+ ["squarewhitewithsmallblack"]=9635,
+ ["srsquare"]=13275,
+ ["ssabengali"]=2487,
+ ["ssadeva"]=2359,
+ ["ssagujarati"]=2743,
+ ["ssangcieuckorean"]=12617,
+ ["ssanghieuhkorean"]=12677,
+ ["ssangieungkorean"]=12672,
+ ["ssangkiyeokkorean"]=12594,
+ ["ssangnieunkorean"]=12645,
+ ["ssangpieupkorean"]=12611,
+ ["ssangsioskorean"]=12614,
+ ["ssangtikeutkorean"]=12600,
+ ["sterling"]=163,
+ ["sterlingmonospace"]=65505,
+ ["strokelongoverlaycmb"]=822,
+ ["strokeshortoverlaycmb"]=821,
+ ["subset"]=8834,
+ ["subsetnotequal"]=8842,
+ ["subsetorequal"]=8838,
+ ["succeeds"]=8827,
+ ["suchthat"]=8715,
+ ["suhiragana"]=12377,
+ ["sukatakana"]=12473,
+ ["sukatakanahalfwidth"]=65405,
+ ["sukunarabic"]=1618,
+ ["summation"]=8721,
+ ["sun"]=9788,
+ ["superset"]=8835,
+ ["supersetnotequal"]=8843,
+ ["supersetorequal"]=8839,
+ ["svsquare"]=13276,
+ ["syouwaerasquare"]=13180,
+ ["t"]=116,
+ ["tabengali"]=2468,
+ ["tackdown"]=8868,
+ ["tackleft"]=8867,
+ ["tadeva"]=2340,
+ ["tagujarati"]=2724,
+ ["tagurmukhi"]=2596,
+ ["taharabic"]=1591,
+ ["tahfinalarabic"]=65218,
+ ["tahinitialarabic"]=65219,
+ ["tahiragana"]=12383,
+ ["tahmedialarabic"]=65220,
+ ["taisyouerasquare"]=13181,
+ ["takatakana"]=12479,
+ ["takatakanahalfwidth"]=65408,
+ ["tatweelarabic"]=1600,
+ ["tau"]=964,
+ ["tav"]=1514,
+ ["tavdages"]=64330,
+ ["tavdagesh"]=64330,
+ ["tavdageshhebrew"]=64330,
+ ["tavhebrew"]=1514,
+ ["tbar"]=359,
+ ["tbopomofo"]=12554,
+ ["tcaron"]=357,
+ ["tccurl"]=680,
+ ["tcedilla"]=355,
+ ["tcheharabic"]=1670,
+ ["tchehfinalarabic"]=64379,
+ ["tchehinitialarabic"]=64380,
+ ["tchehmedialarabic"]=64381,
+ ["tchehmeeminitialarabic"]=64380,
+ ["tcircle"]=9443,
+ ["tcircumflexbelow"]=7793,
+ ["tcommaaccent"]=355,
+ ["tdieresis"]=7831,
+ ["tdotaccent"]=7787,
+ ["tdotbelow"]=7789,
+ ["tecyrillic"]=1090,
+ ["tedescendercyrillic"]=1197,
+ ["teharabic"]=1578,
+ ["tehfinalarabic"]=65174,
+ ["tehhahinitialarabic"]=64674,
+ ["tehhahisolatedarabic"]=64524,
+ ["tehinitialarabic"]=65175,
+ ["tehiragana"]=12390,
+ ["tehjeeminitialarabic"]=64673,
+ ["tehjeemisolatedarabic"]=64523,
+ ["tehmarbutaarabic"]=1577,
+ ["tehmarbutafinalarabic"]=65172,
+ ["tehmedialarabic"]=65176,
+ ["tehmeeminitialarabic"]=64676,
+ ["tehmeemisolatedarabic"]=64526,
+ ["tehnoonfinalarabic"]=64627,
+ ["tekatakana"]=12486,
+ ["tekatakanahalfwidth"]=65411,
+ ["telephone"]=8481,
+ ["telephoneblack"]=9742,
+ ["telishagedolahebrew"]=1440,
+ ["telishaqetanahebrew"]=1449,
+ ["tencircle"]=9321,
+ ["tenideographicparen"]=12841,
+ ["tenparen"]=9341,
+ ["tenperiod"]=9361,
+ ["tenroman"]=8569,
+ ["tesh"]=679,
+ ["tet"]=1496,
+ ["tetdagesh"]=64312,
+ ["tetdageshhebrew"]=64312,
+ ["tethebrew"]=1496,
+ ["tetsecyrillic"]=1205,
+ ["tevirhebrew"]=1435,
+ ["tevirlefthebrew"]=1435,
+ ["thabengali"]=2469,
+ ["thadeva"]=2341,
+ ["thagujarati"]=2725,
+ ["thagurmukhi"]=2597,
+ ["thalarabic"]=1584,
+ ["thalfinalarabic"]=65196,
+ ["thanthakhatthai"]=3660,
+ ["theharabic"]=1579,
+ ["thehfinalarabic"]=65178,
+ ["thehinitialarabic"]=65179,
+ ["thehmedialarabic"]=65180,
+ ["thereexists"]=8707,
+ ["therefore"]=8756,
+ ["theta"]=952,
+ ["theta1"]=977,
+ ["thetasymbolgreek"]=977,
+ ["thieuthacirclekorean"]=12921,
+ ["thieuthaparenkorean"]=12825,
+ ["thieuthcirclekorean"]=12907,
+ ["thieuthkorean"]=12620,
+ ["thieuthparenkorean"]=12811,
+ ["thirteencircle"]=9324,
+ ["thirteenparen"]=9344,
+ ["thirteenperiod"]=9364,
+ ["thonangmonthothai"]=3601,
+ ["thook"]=429,
+ ["thophuthaothai"]=3602,
+ ["thorn"]=254,
+ ["thothahanthai"]=3607,
+ ["thothanthai"]=3600,
+ ["thothongthai"]=3608,
+ ["thothungthai"]=3606,
+ ["thousandcyrillic"]=1154,
+ ["thousandsseparatorarabic"]=1644,
+ ["thousandsseparatorpersian"]=1644,
+ ["three"]=51,
+ ["threearabic"]=1635,
+ ["threebengali"]=2537,
+ ["threecircle"]=9314,
+ ["threecircleinversesansserif"]=10124,
+ ["threedeva"]=2409,
+ ["threeeighths"]=8540,
+ ["threegujarati"]=2793,
+ ["threegurmukhi"]=2665,
+ ["threehackarabic"]=1635,
+ ["threehangzhou"]=12323,
+ ["threeideographicparen"]=12834,
+ ["threeinferior"]=8323,
+ ["threemonospace"]=65299,
+ ["threenumeratorbengali"]=2550,
+ ["threeparen"]=9334,
+ ["threeperiod"]=9354,
+ ["threepersian"]=1779,
+ ["threequarters"]=190,
+ ["threeroman"]=8562,
+ ["threesuperior"]=179,
+ ["threethai"]=3667,
+ ["thzsquare"]=13204,
+ ["tihiragana"]=12385,
+ ["tikatakana"]=12481,
+ ["tikatakanahalfwidth"]=65409,
+ ["tikeutacirclekorean"]=12912,
+ ["tikeutaparenkorean"]=12816,
+ ["tikeutcirclekorean"]=12898,
+ ["tikeutkorean"]=12599,
+ ["tikeutparenkorean"]=12802,
+ ["tilde"]=732,
+ ["tildebelowcmb"]=816,
+ ["tildecmb"]=771,
+ ["tildecomb"]=771,
+ ["tildedoublecmb"]=864,
+ ["tildeoperator"]=8764,
+ ["tildeoverlaycmb"]=820,
+ ["tildeverticalcmb"]=830,
+ ["timescircle"]=8855,
+ ["tipehahebrew"]=1430,
+ ["tipehalefthebrew"]=1430,
+ ["tippigurmukhi"]=2672,
+ ["titlocyrilliccmb"]=1155,
+ ["tiwnarmenian"]=1407,
+ ["tlinebelow"]=7791,
+ ["tmonospace"]=65364,
+ ["toarmenian"]=1385,
+ ["tohiragana"]=12392,
+ ["tokatakana"]=12488,
+ ["tokatakanahalfwidth"]=65412,
+ ["tonebarextrahighmod"]=741,
+ ["tonebarextralowmod"]=745,
+ ["tonebarhighmod"]=742,
+ ["tonebarlowmod"]=744,
+ ["tonebarmidmod"]=743,
+ ["tonefive"]=445,
+ ["tonesix"]=389,
+ ["tonetwo"]=424,
+ ["tonos"]=900,
+ ["tonsquare"]=13095,
+ ["topatakthai"]=3599,
+ ["tortoiseshellbracketleft"]=12308,
+ ["tortoiseshellbracketleftsmall"]=65117,
+ ["tortoiseshellbracketleftvertical"]=65081,
+ ["tortoiseshellbracketright"]=12309,
+ ["tortoiseshellbracketrightsmall"]=65118,
+ ["tortoiseshellbracketrightvertical"]=65082,
+ ["totaothai"]=3605,
+ ["tpalatalhook"]=427,
+ ["tparen"]=9391,
+ ["trademark"]=8482,
+ ["tretroflexhook"]=648,
+ ["triagdn"]=9660,
+ ["triaglf"]=9668,
+ ["triagrt"]=9658,
+ ["triagup"]=9650,
+ ["ts"]=678,
+ ["tsadi"]=1510,
+ ["tsadidagesh"]=64326,
+ ["tsadidageshhebrew"]=64326,
+ ["tsadihebrew"]=1510,
+ ["tsecyrillic"]=1094,
+ ["tsere"]=1461,
+ ["tsere12"]=1461,
+ ["tsere1e"]=1461,
+ ["tsere2b"]=1461,
+ ["tserehebrew"]=1461,
+ ["tserenarrowhebrew"]=1461,
+ ["tserequarterhebrew"]=1461,
+ ["tserewidehebrew"]=1461,
+ ["tshecyrillic"]=1115,
+ ["ttabengali"]=2463,
+ ["ttadeva"]=2335,
+ ["ttagujarati"]=2719,
+ ["ttagurmukhi"]=2591,
+ ["tteharabic"]=1657,
+ ["ttehfinalarabic"]=64359,
+ ["ttehinitialarabic"]=64360,
+ ["ttehmedialarabic"]=64361,
+ ["tthabengali"]=2464,
+ ["tthadeva"]=2336,
+ ["tthagujarati"]=2720,
+ ["tthagurmukhi"]=2592,
+ ["tturned"]=647,
+ ["tuhiragana"]=12388,
+ ["tukatakana"]=12484,
+ ["tukatakanahalfwidth"]=65410,
+ ["tusmallhiragana"]=12387,
+ ["tusmallkatakana"]=12483,
+ ["tusmallkatakanahalfwidth"]=65391,
+ ["twelvecircle"]=9323,
+ ["twelveparen"]=9343,
+ ["twelveperiod"]=9363,
+ ["twelveroman"]=8571,
+ ["twentycircle"]=9331,
+ ["twentyparen"]=9351,
+ ["twentyperiod"]=9371,
+ ["two"]=50,
+ ["twoarabic"]=1634,
+ ["twobengali"]=2536,
+ ["twocircle"]=9313,
+ ["twocircleinversesansserif"]=10123,
+ ["twodeva"]=2408,
+ ["twodotenleader"]=8229,
+ ["twodotleader"]=8229,
+ ["twodotleadervertical"]=65072,
+ ["twogujarati"]=2792,
+ ["twogurmukhi"]=2664,
+ ["twohackarabic"]=1634,
+ ["twohangzhou"]=12322,
+ ["twoideographicparen"]=12833,
+ ["twoinferior"]=8322,
+ ["twomonospace"]=65298,
+ ["twonumeratorbengali"]=2549,
+ ["twoparen"]=9333,
+ ["twoperiod"]=9353,
+ ["twopersian"]=1778,
+ ["tworoman"]=8561,
+ ["twostroke"]=443,
+ ["twosuperior"]=178,
+ ["twothai"]=3666,
+ ["twothirds"]=8532,
+ ["u"]=117,
+ ["uacute"]=250,
+ ["ubar"]=649,
+ ["ubengali"]=2441,
+ ["ubopomofo"]=12584,
+ ["ubreve"]=365,
+ ["ucaron"]=468,
+ ["ucircle"]=9444,
+ ["ucircumflex"]=251,
+ ["ucircumflexbelow"]=7799,
+ ["ucyrillic"]=1091,
+ ["udattadeva"]=2385,
+ ["udblacute"]=369,
+ ["udblgrave"]=533,
+ ["udeva"]=2313,
+ ["udieresis"]=252,
+ ["udieresisacute"]=472,
+ ["udieresisbelow"]=7795,
+ ["udieresiscaron"]=474,
+ ["udieresiscyrillic"]=1265,
+ ["udieresisgrave"]=476,
+ ["udieresismacron"]=470,
+ ["udotbelow"]=7909,
+ ["ugrave"]=249,
+ ["ugujarati"]=2697,
+ ["ugurmukhi"]=2569,
+ ["uhiragana"]=12358,
+ ["uhookabove"]=7911,
+ ["uhorn"]=432,
+ ["uhornacute"]=7913,
+ ["uhorndotbelow"]=7921,
+ ["uhorngrave"]=7915,
+ ["uhornhookabove"]=7917,
+ ["uhorntilde"]=7919,
+ ["uhungarumlaut"]=369,
+ ["uhungarumlautcyrillic"]=1267,
+ ["uinvertedbreve"]=535,
+ ["ukatakana"]=12454,
+ ["ukatakanahalfwidth"]=65395,
+ ["ukcyrillic"]=1145,
+ ["ukorean"]=12636,
+ ["umacron"]=363,
+ ["umacroncyrillic"]=1263,
+ ["umacrondieresis"]=7803,
+ ["umatragurmukhi"]=2625,
+ ["umonospace"]=65365,
+ ["underscore"]=95,
+ ["underscoredbl"]=8215,
+ ["underscoremonospace"]=65343,
+ ["underscorevertical"]=65075,
+ ["underscorewavy"]=65103,
+ ["union"]=8746,
+ ["universal"]=8704,
+ ["uogonek"]=371,
+ ["uparen"]=9392,
+ ["upblock"]=9600,
+ ["upperdothebrew"]=1476,
+ ["upsilon"]=965,
+ ["upsilondieresis"]=971,
+ ["upsilondieresistonos"]=944,
+ ["upsilonlatin"]=650,
+ ["upsilontonos"]=973,
+ ["uptackbelowcmb"]=797,
+ ["uptackmod"]=724,
+ ["uragurmukhi"]=2675,
+ ["uring"]=367,
+ ["ushortcyrillic"]=1118,
+ ["usmallhiragana"]=12357,
+ ["usmallkatakana"]=12453,
+ ["usmallkatakanahalfwidth"]=65385,
+ ["ustraightcyrillic"]=1199,
+ ["ustraightstrokecyrillic"]=1201,
+ ["utilde"]=361,
+ ["utildeacute"]=7801,
+ ["utildebelow"]=7797,
+ ["uubengali"]=2442,
+ ["uudeva"]=2314,
+ ["uugujarati"]=2698,
+ ["uugurmukhi"]=2570,
+ ["uumatragurmukhi"]=2626,
+ ["uuvowelsignbengali"]=2498,
+ ["uuvowelsigndeva"]=2370,
+ ["uuvowelsigngujarati"]=2754,
+ ["uvowelsignbengali"]=2497,
+ ["uvowelsigndeva"]=2369,
+ ["uvowelsigngujarati"]=2753,
+ ["v"]=118,
+ ["vadeva"]=2357,
+ ["vagujarati"]=2741,
+ ["vagurmukhi"]=2613,
+ ["vakatakana"]=12535,
+ ["vav"]=1493,
+ ["vavdagesh"]=64309,
+ ["vavdagesh65"]=64309,
+ ["vavdageshhebrew"]=64309,
+ ["vavhebrew"]=1493,
+ ["vavholam"]=64331,
+ ["vavholamhebrew"]=64331,
+ ["vavvavhebrew"]=1520,
+ ["vavyodhebrew"]=1521,
+ ["vcircle"]=9445,
+ ["vdotbelow"]=7807,
+ ["vecyrillic"]=1074,
+ ["veharabic"]=1700,
+ ["vehfinalarabic"]=64363,
+ ["vehinitialarabic"]=64364,
+ ["vehmedialarabic"]=64365,
+ ["vekatakana"]=12537,
+ ["venus"]=9792,
+ ["verticalbar"]=124,
+ ["verticallineabovecmb"]=781,
+ ["verticallinebelowcmb"]=809,
+ ["verticallinelowmod"]=716,
+ ["verticallinemod"]=712,
+ ["vewarmenian"]=1406,
+ ["vhook"]=651,
+ ["vikatakana"]=12536,
+ ["viramabengali"]=2509,
+ ["viramadeva"]=2381,
+ ["viramagujarati"]=2765,
+ ["visargabengali"]=2435,
+ ["visargadeva"]=2307,
+ ["visargagujarati"]=2691,
+ ["vmonospace"]=65366,
+ ["voarmenian"]=1400,
+ ["voicediterationhiragana"]=12446,
+ ["voicediterationkatakana"]=12542,
+ ["voicedmarkkana"]=12443,
+ ["voicedmarkkanahalfwidth"]=65438,
+ ["vokatakana"]=12538,
+ ["vparen"]=9393,
+ ["vtilde"]=7805,
+ ["vturned"]=652,
+ ["vuhiragana"]=12436,
+ ["vukatakana"]=12532,
+ ["w"]=119,
+ ["wacute"]=7811,
+ ["waekorean"]=12633,
+ ["wahiragana"]=12431,
+ ["wakatakana"]=12527,
+ ["wakatakanahalfwidth"]=65436,
+ ["wakorean"]=12632,
+ ["wasmallhiragana"]=12430,
+ ["wasmallkatakana"]=12526,
+ ["wattosquare"]=13143,
+ ["wavedash"]=12316,
+ ["wavyunderscorevertical"]=65076,
+ ["wawarabic"]=1608,
+ ["wawfinalarabic"]=65262,
+ ["wawhamzaabovearabic"]=1572,
+ ["wawhamzaabovefinalarabic"]=65158,
+ ["wbsquare"]=13277,
+ ["wcircle"]=9446,
+ ["wcircumflex"]=373,
+ ["wdieresis"]=7813,
+ ["wdotaccent"]=7815,
+ ["wdotbelow"]=7817,
+ ["wehiragana"]=12433,
+ ["weierstrass"]=8472,
+ ["wekatakana"]=12529,
+ ["wekorean"]=12638,
+ ["weokorean"]=12637,
+ ["wgrave"]=7809,
+ ["whitebullet"]=9702,
+ ["whitecircle"]=9675,
+ ["whitecircleinverse"]=9689,
+ ["whitecornerbracketleft"]=12302,
+ ["whitecornerbracketleftvertical"]=65091,
+ ["whitecornerbracketright"]=12303,
+ ["whitecornerbracketrightvertical"]=65092,
+ ["whitediamond"]=9671,
+ ["whitediamondcontainingblacksmalldiamond"]=9672,
+ ["whitedownpointingsmalltriangle"]=9663,
+ ["whitedownpointingtriangle"]=9661,
+ ["whiteleftpointingsmalltriangle"]=9667,
+ ["whiteleftpointingtriangle"]=9665,
+ ["whitelenticularbracketleft"]=12310,
+ ["whitelenticularbracketright"]=12311,
+ ["whiterightpointingsmalltriangle"]=9657,
+ ["whiterightpointingtriangle"]=9655,
+ ["whitesmallsquare"]=9643,
+ ["whitesmilingface"]=9786,
+ ["whitesquare"]=9633,
+ ["whitestar"]=9734,
+ ["whitetelephone"]=9743,
+ ["whitetortoiseshellbracketleft"]=12312,
+ ["whitetortoiseshellbracketright"]=12313,
+ ["whiteuppointingsmalltriangle"]=9653,
+ ["whiteuppointingtriangle"]=9651,
+ ["wihiragana"]=12432,
+ ["wikatakana"]=12528,
+ ["wikorean"]=12639,
+ ["wmonospace"]=65367,
+ ["wohiragana"]=12434,
+ ["wokatakana"]=12530,
+ ["wokatakanahalfwidth"]=65382,
+ ["won"]=8361,
+ ["wonmonospace"]=65510,
+ ["wowaenthai"]=3623,
+ ["wparen"]=9394,
+ ["wring"]=7832,
+ ["wsuperior"]=695,
+ ["wturned"]=653,
+ ["wynn"]=447,
+ ["x"]=120,
+ ["xabovecmb"]=829,
+ ["xbopomofo"]=12562,
+ ["xcircle"]=9447,
+ ["xdieresis"]=7821,
+ ["xdotaccent"]=7819,
+ ["xeharmenian"]=1389,
+ ["xi"]=958,
+ ["xmonospace"]=65368,
+ ["xparen"]=9395,
+ ["xsuperior"]=739,
+ ["y"]=121,
+ ["yaadosquare"]=13134,
+ ["yabengali"]=2479,
+ ["yacute"]=253,
+ ["yadeva"]=2351,
+ ["yaekorean"]=12626,
+ ["yagujarati"]=2735,
+ ["yagurmukhi"]=2607,
+ ["yahiragana"]=12420,
+ ["yakatakana"]=12516,
+ ["yakatakanahalfwidth"]=65428,
+ ["yakorean"]=12625,
+ ["yamakkanthai"]=3662,
+ ["yasmallhiragana"]=12419,
+ ["yasmallkatakana"]=12515,
+ ["yasmallkatakanahalfwidth"]=65388,
+ ["yatcyrillic"]=1123,
+ ["ycircle"]=9448,
+ ["ycircumflex"]=375,
+ ["ydieresis"]=255,
+ ["ydotaccent"]=7823,
+ ["ydotbelow"]=7925,
+ ["yeharabic"]=1610,
+ ["yehbarreearabic"]=1746,
+ ["yehbarreefinalarabic"]=64431,
+ ["yehfinalarabic"]=65266,
+ ["yehhamzaabovearabic"]=1574,
+ ["yehhamzaabovefinalarabic"]=65162,
+ ["yehhamzaaboveinitialarabic"]=65163,
+ ["yehhamzaabovemedialarabic"]=65164,
+ ["yehinitialarabic"]=65267,
+ ["yehmedialarabic"]=65268,
+ ["yehmeeminitialarabic"]=64733,
+ ["yehmeemisolatedarabic"]=64600,
+ ["yehnoonfinalarabic"]=64660,
+ ["yehthreedotsbelowarabic"]=1745,
+ ["yekorean"]=12630,
+ ["yen"]=165,
+ ["yenmonospace"]=65509,
+ ["yeokorean"]=12629,
+ ["yeorinhieuhkorean"]=12678,
+ ["yerahbenyomohebrew"]=1450,
+ ["yerahbenyomolefthebrew"]=1450,
+ ["yericyrillic"]=1099,
+ ["yerudieresiscyrillic"]=1273,
+ ["yesieungkorean"]=12673,
+ ["yesieungpansioskorean"]=12675,
+ ["yesieungsioskorean"]=12674,
+ ["yetivhebrew"]=1434,
+ ["ygrave"]=7923,
+ ["yhook"]=436,
+ ["yhookabove"]=7927,
+ ["yiarmenian"]=1397,
+ ["yicyrillic"]=1111,
+ ["yikorean"]=12642,
+ ["yinyang"]=9775,
+ ["yiwnarmenian"]=1410,
+ ["ymonospace"]=65369,
+ ["yod"]=1497,
+ ["yoddagesh"]=64313,
+ ["yoddageshhebrew"]=64313,
+ ["yodhebrew"]=1497,
+ ["yodyodhebrew"]=1522,
+ ["yodyodpatahhebrew"]=64287,
+ ["yohiragana"]=12424,
+ ["yoikorean"]=12681,
+ ["yokatakana"]=12520,
+ ["yokatakanahalfwidth"]=65430,
+ ["yokorean"]=12635,
+ ["yosmallhiragana"]=12423,
+ ["yosmallkatakana"]=12519,
+ ["yosmallkatakanahalfwidth"]=65390,
+ ["yotgreek"]=1011,
+ ["yoyaekorean"]=12680,
+ ["yoyakorean"]=12679,
+ ["yoyakthai"]=3618,
+ ["yoyingthai"]=3597,
+ ["yparen"]=9396,
+ ["ypogegrammeni"]=890,
+ ["ypogegrammenigreekcmb"]=837,
+ ["yr"]=422,
+ ["yring"]=7833,
+ ["ysuperior"]=696,
+ ["ytilde"]=7929,
+ ["yturned"]=654,
+ ["yuhiragana"]=12422,
+ ["yuikorean"]=12684,
+ ["yukatakana"]=12518,
+ ["yukatakanahalfwidth"]=65429,
+ ["yukorean"]=12640,
+ ["yusbigcyrillic"]=1131,
+ ["yusbigiotifiedcyrillic"]=1133,
+ ["yuslittlecyrillic"]=1127,
+ ["yuslittleiotifiedcyrillic"]=1129,
+ ["yusmallhiragana"]=12421,
+ ["yusmallkatakana"]=12517,
+ ["yusmallkatakanahalfwidth"]=65389,
+ ["yuyekorean"]=12683,
+ ["yuyeokorean"]=12682,
+ ["yyabengali"]=2527,
+ ["yyadeva"]=2399,
+ ["z"]=122,
+ ["zaarmenian"]=1382,
+ ["zacute"]=378,
+ ["zadeva"]=2395,
+ ["zagurmukhi"]=2651,
+ ["zaharabic"]=1592,
+ ["zahfinalarabic"]=65222,
+ ["zahinitialarabic"]=65223,
+ ["zahiragana"]=12374,
+ ["zahmedialarabic"]=65224,
+ ["zainarabic"]=1586,
+ ["zainfinalarabic"]=65200,
+ ["zakatakana"]=12470,
+ ["zaqefgadolhebrew"]=1429,
+ ["zaqefqatanhebrew"]=1428,
+ ["zarqahebrew"]=1432,
+ ["zayin"]=1494,
+ ["zayindagesh"]=64310,
+ ["zayindageshhebrew"]=64310,
+ ["zayinhebrew"]=1494,
+ ["zbopomofo"]=12567,
+ ["zcaron"]=382,
+ ["zcircle"]=9449,
+ ["zcircumflex"]=7825,
+ ["zcurl"]=657,
+ ["zdot"]=380,
+ ["zdotaccent"]=380,
+ ["zdotbelow"]=7827,
+ ["zecyrillic"]=1079,
+ ["zedescendercyrillic"]=1177,
+ ["zedieresiscyrillic"]=1247,
+ ["zehiragana"]=12380,
+ ["zekatakana"]=12476,
+ ["zero"]=48,
+ ["zeroarabic"]=1632,
+ ["zerobengali"]=2534,
+ ["zerodeva"]=2406,
+ ["zerogujarati"]=2790,
+ ["zerogurmukhi"]=2662,
+ ["zerohackarabic"]=1632,
+ ["zeroinferior"]=8320,
+ ["zeromonospace"]=65296,
+ ["zeropersian"]=1776,
+ ["zerosuperior"]=8304,
+ ["zerothai"]=3664,
+ ["zerowidthjoiner"]=65279,
+ ["zerowidthnonjoiner"]=8204,
+ ["zerowidthspace"]=8203,
+ ["zeta"]=950,
+ ["zhbopomofo"]=12563,
+ ["zhearmenian"]=1386,
+ ["zhebrevecyrillic"]=1218,
+ ["zhecyrillic"]=1078,
+ ["zhedescendercyrillic"]=1175,
+ ["zhedieresiscyrillic"]=1245,
+ ["zihiragana"]=12376,
+ ["zikatakana"]=12472,
+ ["zinorhebrew"]=1454,
+ ["zlinebelow"]=7829,
+ ["zmonospace"]=65370,
+ ["zohiragana"]=12382,
+ ["zokatakana"]=12478,
+ ["zparen"]=9397,
+ ["zretroflexhook"]=656,
+ ["zstroke"]=438,
+ ["zuhiragana"]=12378,
+ ["zukatakana"]=12474,
}
diff --git a/Master/texmf-dist/tex/context/base/font-agl.lua b/Master/texmf-dist/tex/context/base/font-agl.lua
index ca7fb61cbef..5ee34b0287c 100644
--- a/Master/texmf-dist/tex/context/base/font-agl.lua
+++ b/Master/texmf-dist/tex/context/base/font-agl.lua
@@ -15,6 +15,382 @@ local unicodes = allocate {
-- filled from char-def.lua
}
+local synonyms = {
+ Acyrillic = 0x0410,
+ Becyrillic = 0x0411,
+ Cdot = 0x010A,
+ Checyrillic = 0x0427,
+ Decyrillic = 0x0414,
+ Djecyrillic = 0x0402,
+ Dzecyrillic = 0x0405,
+ Dzhecyrillic = 0x040F,
+ Ecyrillic = 0x0404,
+ Edot = 0x0116,
+ Efcyrillic = 0x0424,
+ Elcyrillic = 0x041B,
+ Emcyrillic = 0x041C,
+ Encyrillic = 0x041D,
+ Ercyrillic = 0x0420,
+ Ereversedcyrillic = 0x042D,
+ Escyrillic = 0x0421,
+ Fitacyrillic = 0x0472,
+ Gcedilla = 0x0122,
+ Gdot = 0x0120,
+ Gecyrillic = 0x0413,
+ Gheupturncyrillic = 0x0490,
+ Gjecyrillic = 0x0403,
+ Hardsigncyrillic = 0x042A,
+ IAcyrillic = 0x042F,
+ IUcyrillic = 0x042E,
+ Icyrillic = 0x0406,
+ Idot = 0x0130,
+ Iecyrillic = 0x0415,
+ Iicyrillic = 0x0418,
+ Iishortcyrillic = 0x0419,
+ Iocyrillic = 0x0401,
+ Izhitsacyrillic = 0x0474,
+ Jecyrillic = 0x0408,
+ Kacyrillic = 0x041A,
+ Kcedilla = 0x0136,
+ Khacyrillic = 0x0425,
+ Kjecyrillic = 0x040C,
+ Lcedilla = 0x013B,
+ Ljecyrillic = 0x0409,
+ Ncedilla = 0x0145,
+ Njecyrillic = 0x040A,
+ Ocyrillic = 0x041E,
+ Odblacute = 0x0150,
+ Ohm = 0x2126,
+ Pecyrillic = 0x041F,
+ Rcedilla = 0x0156,
+ Shacyrillic = 0x0428,
+ Shchacyrillic = 0x0429,
+ Softsigncyrillic = 0x042C,
+ Tcedilla = 0x0162,
+ Tecyrillic = 0x0422,
+ Tsecyrillic = 0x0426,
+ Tshecyrillic = 0x040B,
+ Ucyrillic = 0x0423,
+ Udblacute = 0x0170,
+ Ushortcyrillic = 0x040E,
+ Vecyrillic = 0x0412,
+ Yatcyrillic = 0x0462,
+ Yericyrillic = 0x042B,
+ Yicyrillic = 0x0407,
+ Zdot = 0x017B,
+ Zecyrillic = 0x0417,
+ Zhecyrillic = 0x0416,
+ acutecmb = 0x0301,
+ acyrillic = 0x0430,
+ afii00208 = 0x2015,
+ afii08941 = 0x20A4,
+ afii57694 = 0xFB2A,
+ afii57695 = 0xFB2B,
+ afii57700 = 0xFB4B,
+ afii57705 = 0xFB1F,
+ afii57723 = 0xFB35,
+ alef = 0x05D0,
+ alefmaksurainitialarabic = 0xFEF3,
+ alefmaksuramedialarabic = 0xFEF4,
+ approximatelyequal = 0x2245,
+ asteriskaltonearabic = 0x066D,
+ ayin = 0x05E2,
+ bet = 0x05D1,
+ betdagesh = 0xFB31,
+ blackdownpointingtriangle = 0x25BC,
+ blackleftpointingpointer = 0x25C4,
+ blackrectangle = 0x25AC,
+ blackrightpointingpointer = 0x25BA,
+ blacksmilingface = 0x263B,
+ blacksquare = 0x25A0,
+ blackuppointingtriangle = 0x25B2,
+ bulletinverse = 0x25D8,
+ cdot = 0x010B,
+ compass = 0x263C,
+ dagesh = 0x05BC,
+ dalet = 0x05D3,
+ daletdagesh = 0xFB33,
+ dalethatafpatah = 0x05D3,
+ dalethatafpatahhebrew = 0x05D3,
+ dalethatafsegol = 0x05D3,
+ dalethatafsegolhebrew = 0x05D3,
+ dalethebrew = 0x05D3,
+ dalethiriq = 0x05D3,
+ dalethiriqhebrew = 0x05D3,
+ daletholam = 0x05D3,
+ daletholamhebrew = 0x05D3,
+ daletpatah = 0x05D3,
+ daletpatahhebrew = 0x05D3,
+ daletqamats = 0x05D3,
+ daletqamatshebrew = 0x05D3,
+ daletqubuts = 0x05D3,
+ daletqubutshebrew = 0x05D3,
+ daletsegol = 0x05D3,
+ daletsegolhebrew = 0x05D3,
+ daletsheva = 0x05D3,
+ daletshevahebrew = 0x05D3,
+ dalettsere = 0x05D3,
+ dammaarabic = 0x064F,
+ dammatanaltonearabic = 0x064C,
+ dargahebrew = 0x05A7,
+ dbllowline = 0x2017,
+ decimalseparatorarabic = 0x066B,
+ dialytikatonos = 0x0385,
+ dotbelowcmb = 0x0323,
+ doubleyodpatah = 0xFB1F,
+ doubleyodpatahhebrew = 0xFB1F,
+ edot = 0x0117,
+ eightarabic = 0x0668,
+ eighthnotebeamed = 0x266B,
+ etnahtafoukhhebrew = 0x0591,
+ etnahtafoukhlefthebrew = 0x0591,
+ etnahtahebrew = 0x0591,
+ fathaarabic = 0x064E,
+ finalkaf = 0x05DA,
+ finalkafdagesh = 0xFB3A,
+ finalkafhebrew = 0x05DA,
+ finalkafqamats = 0x05DA,
+ finalkafqamatshebrew = 0x05DA,
+ finalkafsheva = 0x05DA,
+ finalmem = 0x05DD,
+ finalnun = 0x05DF,
+ finalpe = 0x05E3,
+ finaltsadi = 0x05E5,
+ fivearabic = 0x0665,
+ forall = 0x2200,
+ fourarabic = 0x0664,
+ gcedilla = 0x0123,
+ gdot = 0x0121,
+ gimel = 0x05D2,
+ gimeldagesh = 0xFB32,
+ gravecmb = 0x0300,
+ haaltonearabic = 0x06C1,
+ hamzaarabic = 0x0621,
+ hamzadammaarabic = 0x0621,
+ hamzadammatanarabic = 0x0621,
+ hamzafathaarabic = 0x0621,
+ hamzafathatanarabic = 0x0621,
+ hamzalowarabic = 0x0621,
+ hamzalowkasraarabic = 0x0621,
+ hamzalowkasratanarabic = 0x0621,
+ hatafpatah = 0x05B2,
+ hatafpatah16 = 0x05B2,
+ hatafpatah23 = 0x05B2,
+ hatafpatah2f = 0x05B2,
+ hatafpatahhebrew = 0x05B2,
+ hatafpatahnarrowhebrew = 0x05B2,
+ hatafpatahquarterhebrew = 0x05B2,
+ hatafqamats = 0x05B3,
+ hatafqamats1b = 0x05B3,
+ hatafqamats28 = 0x05B3,
+ hatafqamats34 = 0x05B3,
+ hatafqamatshebrew = 0x05B3,
+ hatafqamatsnarrowhebrew = 0x05B3,
+ hatafqamatsquarterhebrew = 0x05B3,
+ hatafsegol = 0x05B1,
+ hatafsegol17 = 0x05B1,
+ hatafsegol24 = 0x05B1,
+ hatafsegol30 = 0x05B1,
+ hatafsegolhebrew = 0x05B1,
+ hatafsegolnarrowhebrew = 0x05B1,
+ hatafsegolquarterhebrew = 0x05B1,
+ he = 0x05D4,
+ hedagesh = 0xFB34,
+ hehfinalalttwoarabic = 0xFEEA,
+ het = 0x05D7,
+ hiriq = 0x05B4,
+ hiriq14 = 0x05B4,
+ hiriq21 = 0x05B4,
+ hiriq2d = 0x05B4,
+ hiriqhebrew = 0x05B4,
+ hiriqnarrowhebrew = 0x05B4,
+ hiriqquarterhebrew = 0x05B4,
+ holam = 0x05B9,
+ holam19 = 0x05B9,
+ holam26 = 0x05B9,
+ holam32 = 0x05B9,
+ holamhebrew = 0x05B9,
+ holamnarrowhebrew = 0x05B9,
+ holamquarterhebrew = 0x05B9,
+ ilde = 0x02DC,
+ integralbottom = 0x2321,
+ integraltop = 0x2320,
+ kaf = 0x05DB,
+ kafdagesh = 0xFB3B,
+ kashidaautoarabic = 0x0640,
+ kashidaautonosidebearingarabic = 0x0640,
+ kcedilla = 0x0137,
+ lamed = 0x05DC,
+ lameddagesh = 0xFB3C,
+ lamedhebrew = 0x05DC,
+ lamedholam = 0x05DC,
+ lamedholamdagesh = 0x05DC,
+ lamedholamdageshhebrew = 0x05DC,
+ laminitialarabic = 0xFEDF,
+ lammeemjeeminitialarabic = 0xFEDF,
+ lcedilla = 0x013C,
+ logicalnotreversed = 0x2310,
+ mahapakhhebrew = 0x05A4,
+ mem = 0x05DE,
+ memdagesh = 0xFB3E,
+ merkhahebrew = 0x05A5,
+ merkhakefulahebrew = 0x05A6,
+ middot = 0x00B7,
+ munahhebrew = 0x05A3,
+ nbspace = 0x00A0,
+ ncedilla = 0x0146,
+ newsheqelsign = 0x20AA,
+ ninearabic = 0x0669,
+ noonhehinitialarabic = 0xFEE7,
+ nun = 0x05E0,
+ nundagesh = 0xFB40,
+ odblacute = 0x0151,
+ onearabic = 0x0661,
+ overscore = 0x00AF,
+ patah = 0x05B7,
+ patah11 = 0x05B7,
+ patah1d = 0x05B7,
+ patah2a = 0x05B7,
+ patahhebrew = 0x05B7,
+ patahnarrowhebrew = 0x05B7,
+ patahquarterhebrew = 0x05B7,
+ pe = 0x05E4,
+ pedagesh = 0xFB44,
+ qamats = 0x05B8,
+ qamats10 = 0x05B8,
+ qamats1a = 0x05B8,
+ qamats1c = 0x05B8,
+ qamats27 = 0x05B8,
+ qamats29 = 0x05B8,
+ qamats33 = 0x05B8,
+ qamatsde = 0x05B8,
+ qamatshebrew = 0x05B8,
+ qamatsnarrowhebrew = 0x05B8,
+ qamatsqatanhebrew = 0x05B8,
+ qamatsqatannarrowhebrew = 0x05B8,
+ qamatsqatanquarterhebrew = 0x05B8,
+ qamatsqatanwidehebrew = 0x05B8,
+ qamatsquarterhebrew = 0x05B8,
+ qof = 0x05E7,
+ qofdagesh = 0xFB47,
+ qofhatafpatah = 0x05E7,
+ qofhatafpatahhebrew = 0x05E7,
+ qofhatafsegol = 0x05E7,
+ qofhatafsegolhebrew = 0x05E7,
+ qofhebrew = 0x05E7,
+ qofhiriq = 0x05E7,
+ qofhiriqhebrew = 0x05E7,
+ qofholam = 0x05E7,
+ qofholamhebrew = 0x05E7,
+ qofpatah = 0x05E7,
+ qofpatahhebrew = 0x05E7,
+ qofqamats = 0x05E7,
+ qofqamatshebrew = 0x05E7,
+ qofqubuts = 0x05E7,
+ qofqubutshebrew = 0x05E7,
+ qofsegol = 0x05E7,
+ qofsegolhebrew = 0x05E7,
+ qofsheva = 0x05E7,
+ qofshevahebrew = 0x05E7,
+ qoftsere = 0x05E7,
+ qubuts = 0x05BB,
+ qubuts18 = 0x05BB,
+ qubuts25 = 0x05BB,
+ qubuts31 = 0x05BB,
+ qubutshebrew = 0x05BB,
+ qubutsnarrowhebrew = 0x05BB,
+ qubutsquarterhebrew = 0x05BB,
+ quoteleftreversed = 0x201B,
+ rafe = 0x05BF,
+ rcedilla = 0x0157,
+ reharabic = 0x0631,
+ resh = 0x05E8,
+ reshhatafpatah = 0x05E8,
+ reshhatafpatahhebrew = 0x05E8,
+ reshhatafsegol = 0x05E8,
+ reshhatafsegolhebrew = 0x05E8,
+ reshhebrew = 0x05E8,
+ reshhiriq = 0x05E8,
+ reshhiriqhebrew = 0x05E8,
+ reshholam = 0x05E8,
+ reshholamhebrew = 0x05E8,
+ reshpatah = 0x05E8,
+ reshpatahhebrew = 0x05E8,
+ reshqamats = 0x05E8,
+ reshqamatshebrew = 0x05E8,
+ reshqubuts = 0x05E8,
+ reshqubutshebrew = 0x05E8,
+ reshsegol = 0x05E8,
+ reshsegolhebrew = 0x05E8,
+ reshsheva = 0x05E8,
+ reshshevahebrew = 0x05E8,
+ reshtsere = 0x05E8,
+ reviahebrew = 0x0597,
+ samekh = 0x05E1,
+ samekhdagesh = 0xFB41,
+ segol = 0x05B6,
+ segol13 = 0x05B6,
+ segol1f = 0x05B6,
+ segol2c = 0x05B6,
+ segolhebrew = 0x05B6,
+ segolnarrowhebrew = 0x05B6,
+ segolquarterhebrew = 0x05B6,
+ sevenarabic = 0x0667,
+ sfthyphen = 0x00AD,
+ shaddaarabic = 0x0651,
+ sheqel = 0x20AA,
+ sheva = 0x05B0,
+ sheva115 = 0x05B0,
+ sheva15 = 0x05B0,
+ sheva22 = 0x05B0,
+ sheva2e = 0x05B0,
+ shevahebrew = 0x05B0,
+ shevanarrowhebrew = 0x05B0,
+ shevaquarterhebrew = 0x05B0,
+ shin = 0x05E9,
+ shindagesh = 0xFB49,
+ shindageshshindot = 0xFB2C,
+ shindageshsindot = 0xFB2D,
+ shinshindot = 0xFB2A,
+ shinsindot = 0xFB2B,
+ siluqhebrew = 0x05BD,
+ sixarabic = 0x0666,
+ tav = 0x05EA,
+ tavdages = 0xFB4A,
+ tavdagesh = 0xFB4A,
+ tcedilla = 0x0163,
+ tchehinitialarabic = 0xFB7C,
+ tet = 0x05D8,
+ tetdagesh = 0xFB38,
+ tevirhebrew = 0x059B,
+ thousandsseparatorarabic = 0x066C,
+ threearabic = 0x0663,
+ tildecmb = 0x0303,
+ tipehahebrew = 0x0596,
+ tsadi = 0x05E6,
+ tsadidagesh = 0xFB46,
+ tsere = 0x05B5,
+ tsere12 = 0x05B5,
+ tsere1e = 0x05B5,
+ tsere2b = 0x05B5,
+ tserehebrew = 0x05B5,
+ tserenarrowhebrew = 0x05B5,
+ tserequarterhebrew = 0x05B5,
+ twoarabic = 0x0662,
+ udblacute = 0x0171,
+ vav = 0x05D5,
+ vavdagesh = 0xFB35,
+ vavdagesh65 = 0xFB35,
+ vavholam = 0xFB4B,
+ yerahbenyomohebrew = 0x05AA,
+ yod = 0x05D9,
+ yoddagesh = 0xFB39,
+ zayin = 0x05D6,
+ zayindagesh = 0xFB36,
+ zdot = 0x017C,
+ zeroarabic = 0x0660,
+}
+
local extras = allocate { -- private extensions
Dcroat = 0x0110,
Delta = 0x2206,
@@ -271,6 +647,13 @@ for a, u in next, extras do
end
end
+for s, u in next, synonyms do
+ unicodes[s] = u
+ if not names[u] then
+ names[u] = s
+ end
+end
+
-- We load this table only when needed. We could use a loading mechanism
-- return the table but there are no more vectors like this so why bother.
@@ -279,5 +662,6 @@ fonts.encodings = fonts.encodings or { }
fonts.encodings.agl = {
names = names, -- unicode -> name
unicodes = unicodes, -- name -> unicode
+ synonyms = synonyms, -- merged into the other two
extras = extras, -- merged into the other two
}
diff --git a/Master/texmf-dist/tex/context/base/font-chk.lua b/Master/texmf-dist/tex/context/base/font-chk.lua
index 9e7e31affaf..1b89366fd23 100644
--- a/Master/texmf-dist/tex/context/base/font-chk.lua
+++ b/Master/texmf-dist/tex/context/base/font-chk.lua
@@ -49,7 +49,7 @@ local action = false
-- to tfmdata.properties ?
-local function onetimemessage(font,char,message)
+local function onetimemessage(font,char,message) -- char == false returns table
local tfmdata = fontdata[font]
local shared = tfmdata.shared
local messages = shared.messages
@@ -62,7 +62,9 @@ local function onetimemessage(font,char,message)
category = { }
messages[message] = category
end
- if not category[char] then
+ if char == false then
+ return table.sortedkeys(category)
+ elseif not category[char] then
report_fonts("char %U in font %a with id %a: %s",char,tfmdata.properties.fullname,font,message)
category[char] = true
end
@@ -189,8 +191,15 @@ registerotffeature {
}
}
+fonts.loggers.add_placeholders = function(id) addmissingsymbols(fontdata[id or true]) end
fonts.loggers.category_to_placeholder = mapping
+function commands.getplaceholderchar(name)
+ local id = font.current()
+ addmissingsymbols(fontdata[id])
+ context(fonts.helpers.getprivatenode(fontdata[id],name))
+end
+
function checkers.missing(head)
local lastfont, characters, found = nil, nil, nil
for n in traverse_id(glyph_code,head) do -- faster than while loop so we delay removal
@@ -251,9 +260,48 @@ function checkers.missing(head)
return head, false
end
+local relevant = { "missing (will be deleted)", "missing (will be flagged)", "missing" }
+
+function checkers.getmissing(id)
+ if id then
+ local list = checkers.getmissing(font.current())
+ if list then
+ local _, list = next(checkers.getmissing(font.current()))
+ return list
+ else
+ return { }
+ end
+ else
+ local t = { }
+ for id, d in next, fontdata do
+ local shared = d.shared
+ local messages = shared.messages
+ if messages then
+ local tf = t[d.properties.filename] or { }
+ for i=1,#relevant do
+ local tm = messages[relevant[i]]
+ if tm then
+ tf = table.merged(tf,tm)
+ end
+ end
+ if next(tf) then
+ t[d.properties.filename] = tf
+ end
+ end
+ end
+ for k, v in next, t do
+ t[k] = table.sortedkeys(v)
+ end
+ return t
+ end
+end
+
+local tracked = false
+
trackers.register("fonts.missing", function(v)
if v then
enableaction("processors","fonts.checkers.missing")
+ tracked = true
else
disableaction("processors","fonts.checkers.missing")
end
@@ -265,15 +313,47 @@ end)
function commands.checkcharactersinfont()
enableaction("processors","fonts.checkers.missing")
+ tracked = true
end
function commands.removemissingcharacters()
enableaction("processors","fonts.checkers.missing")
action = "remove"
+ tracked = true
end
function commands.replacemissingcharacters()
enableaction("processors","fonts.checkers.missing")
action = "replace"
otffeatures.defaults.missing = true
+ tracked = true
end
+
+local report_characters = logs.reporter("fonts","characters")
+local report_character = logs.reporter("missing")
+
+local logsnewline = logs.newline
+local logspushtarget = logs.pushtarget
+local logspoptarget = logs.poptarget
+
+luatex.registerstopactions(function()
+ if tracked then
+ local collected = checkers.getmissing()
+ if next(collected) then
+ logspushtarget("logfile")
+ for filename, list in table.sortedhash(collected) do
+ logsnewline()
+ report_characters("start missing characters: %s",filename)
+ logsnewline()
+ for i=1,#list do
+ local u = list[i]
+ report_character("%U %c %s",u,u,chardata[u].description)
+ end
+ logsnewline()
+ report_characters("stop missing characters")
+ logsnewline()
+ end
+ logspoptarget()
+ end
+ end
+end)
diff --git a/Master/texmf-dist/tex/context/base/font-con.lua b/Master/texmf-dist/tex/context/base/font-con.lua
index 618bc8f2856..790d4877ac9 100644
--- a/Master/texmf-dist/tex/context/base/font-con.lua
+++ b/Master/texmf-dist/tex/context/base/font-con.lua
@@ -203,7 +203,7 @@ wasted day but an experience richer.</p>
-- we can get rid of the tfm instance when we have fast access to the
-- scaled character dimensions at the tex end, e.g. a fontobject.width
--- actually we already have soem of that now as virtual keys in glyphs
+-- actually we already have some of that now as virtual keys in glyphs
--
-- flushing the kern and ligature tables from memory saves a lot (only
-- base mode) but it complicates vf building where the new characters
diff --git a/Master/texmf-dist/tex/context/base/font-ctx.lua b/Master/texmf-dist/tex/context/base/font-ctx.lua
index c894660d5b2..2583c652062 100644
--- a/Master/texmf-dist/tex/context/base/font-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/font-ctx.lua
@@ -21,8 +21,9 @@ local sortedhash, sortedkeys, sequenced = table.sortedhash, table.sortedkeys, ta
local settings_to_hash, hash_to_string = utilities.parsers.settings_to_hash, utilities.parsers.hash_to_string
local formatcolumns = utilities.formatters.formatcolumns
local mergehashes = utilities.parsers.mergehashes
+local formatters = string.formatters
-local tostring, next, type, rawget = tostring, next, type, rawget
+local tostring, next, type, rawget, tonumber = tostring, next, type, rawget, tonumber
local utfchar, utfbyte = utf.char, utf.byte
local round = math.round
@@ -56,6 +57,7 @@ local helpers = fonts.helpers
local hashes = fonts.hashes
local currentfont = font.current
local texattribute = tex.attribute
+local texdimen = tex.dimen
local fontdata = hashes.identifiers
local characters = hashes.chardata
@@ -68,7 +70,9 @@ local lastmathids = hashes.lastmathids
local designsizefilename = fontgoodies.designsizes.filename
-local otffeatures = handlers.otf.features
+local otffeatures = otf.features
+local otftables = otf.tables
+
local registerotffeature = otffeatures.register
local baseprocessors = otffeatures.processors.base
local baseinitializers = otffeatures.initializers.base
@@ -110,8 +114,8 @@ end
-- this will move elsewhere ...
-utilities.strings.formatters.add(string.formatters,"font:name", [["'"..file.basename(%s.properties.name).."'"]])
-utilities.strings.formatters.add(string.formatters,"font:features",[["'"..table.sequenced(%s," ",true).."'"]])
+utilities.strings.formatters.add(formatters,"font:name", [["'"..file.basename(%s.properties.name).."'"]])
+utilities.strings.formatters.add(formatters,"font:features",[["'"..table.sequenced(%s," ",true).."'"]])
-- ... like font-sfm or so
@@ -159,7 +163,9 @@ local needsnodemode = {
gpos_mark2ligature = true,
}
-fonts.handlers.otf.tables.scripts.auto = "automatic fallback to latn when no dflt present"
+otftables.scripts.auto = "automatic fallback to latn when no dflt present"
+
+-- setmetatableindex(otffeatures.descriptions,otftables.features)
local privatefeatures = {
tlig = true,
@@ -1034,7 +1040,9 @@ function definers.define(specification)
--
-- we don't care about mathsize textsize goodies fallbacks
--
- if specification.cs == "" then
+ local cs = specification.cs
+ if cs == "" then
+ cs = nil
specification.cs = nil
specification.global = false
elseif specification.global == nil then
@@ -1045,16 +1053,18 @@ function definers.define(specification)
if not tfmdata then
return -1, nil
elseif type(tfmdata) == "number" then
- if specification.cs then
- tex.definefont(specification.global,specification.cs,tfmdata)
+ if cs then
+ tex.definefont(specification.global,cs,tfmdata)
+ csnames[tfmdata] = cs
end
return tfmdata, fontdata[tfmdata]
else
local id = font.define(tfmdata)
tfmdata.properties.id = id
definers.register(tfmdata,id)
- if specification.cs then
- tex.definefont(specification.global,specification.cs,id)
+ if cs then
+ tex.definefont(specification.global,cs,id)
+ csnames[id] = cs
end
constructors.cleanuptable(tfmdata)
constructors.finalize(tfmdata)
@@ -1064,6 +1074,41 @@ function definers.define(specification)
end
end
+-- local id, cs = fonts.definers.internal { }
+-- local id, cs = fonts.definers.internal { number = 2 }
+-- local id, cs = fonts.definers.internal { name = "dejavusans" }
+
+local n = 0
+
+function definers.internal(specification,cs)
+ specification = specification or { }
+ local name = specification.name
+ local size = specification.size and number.todimen(specification.size) or texdimen.bodyfontsize
+ local number = tonumber(specification.number)
+ local id = nil
+ if number then
+ id = number
+ elseif name and name ~= "" then
+ local cs = cs or specification.cs
+ if not cs then
+ n = n + 1 -- beware ... there can be many and they are often used once
+ -- cs = formatters["internal font %s"](n)
+ cs = "internal font " .. n
+ else
+ specification.cs = cs
+ end
+ id = definers.define {
+ name = name,
+ size = size,
+ cs = cs,
+ }
+ end
+ if not id then
+ id = currentfont()
+ end
+ return id, csnames[id]
+end
+
local enable_auto_r_scale = false
experiments.register("fonts.autorscale", function(v)
@@ -1121,7 +1166,7 @@ function definers.resolve(specification) -- overload function in font-con.lua
elseif not normal.goodies then
local g = normal.goodies
if g and g ~= "" then
- normal.goodies = format("%s,%s",g,goodies)
+ normal.goodies = formatters["%s,%s"](g,goodies)
else
normal.goodies = goodies
end
@@ -1341,16 +1386,16 @@ function commands.doifelsecurrentfonthasfeature(name) -- can be made faster with
commands.doifelse(f and (f.gpos[name] or f.gsub[name]))
end
-local p, f = 1, "%0.1fpt" -- normally this value is changed only once
+local p, f = 1, formatters["%0.1fpt"] -- normally this value is changed only once
local stripper = lpeg.patterns.stripzeros
function commands.nbfs(amount,precision)
if precision ~= p then
p = precision
- f = "%0." .. p .. "fpt"
+ f = formatters["%0." .. p .. "fpt"]
end
- context(lpegmatch(stripper,format(f,amount/65536)))
+ context(lpegmatch(stripper,f(amount/65536)))
end
function commands.featureattribute(tag)
@@ -1512,8 +1557,6 @@ end
local quads = hashes.quads
local xheights = hashes.xheights
-local currentfont = font.current
-local texdimen = tex.dimen
setmetatableindex(number.dimenfactors, function(t,k)
if k == "ex" then
diff --git a/Master/texmf-dist/tex/context/base/font-def.lua b/Master/texmf-dist/tex/context/base/font-def.lua
index cb056ff1bce..bee02e8dc49 100644
--- a/Master/texmf-dist/tex/context/base/font-def.lua
+++ b/Master/texmf-dist/tex/context/base/font-def.lua
@@ -174,7 +174,7 @@ function resolvers.file(specification)
specification.forced = suffix
specification.name = file.removesuffix(name)
else
- specification.name = name -- cna be resolved
+ specification.name = name -- can be resolved
end
end
diff --git a/Master/texmf-dist/tex/context/base/font-enc.lua b/Master/texmf-dist/tex/context/base/font-enc.lua
index a6f9250e758..5305f0736a6 100644
--- a/Master/texmf-dist/tex/context/base/font-enc.lua
+++ b/Master/texmf-dist/tex/context/base/font-enc.lua
@@ -107,7 +107,7 @@ function encodings.load(filename)
end
--[[ldx--
-<p>There is no unicode encoding but for practical purposed we define
+<p>There is no unicode encoding but for practical purposes we define
one.</p>
--ldx]]--
diff --git a/Master/texmf-dist/tex/context/base/font-gds.lua b/Master/texmf-dist/tex/context/base/font-gds.lua
index 91a5ea66c30..6332f40b043 100644
--- a/Master/texmf-dist/tex/context/base/font-gds.lua
+++ b/Master/texmf-dist/tex/context/base/font-gds.lua
@@ -604,6 +604,21 @@ end
fontgoodies.register("compositions", initialize)
+-- extra treatments (on top of defaults): \loadfontgoodies[mytreatments]
+
+local treatmentdata = fonts.treatments.data
+
+local function initialize(goodies)
+ local treatments = goodies.treatments
+ if treatments then
+ for name, data in next, treatments do
+ treatmentdata[name] = data -- always wins
+ end
+ end
+end
+
+fontgoodies.register("treatments", initialize)
+
local filenames = fontgoodies.filenames or allocate()
fontgoodies.filenames = filenames
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkvi b/Master/texmf-dist/tex/context/base/font-ini.mkvi
index 63b7863c8cc..5f7aaa92f52 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/font-ini.mkvi
@@ -2297,4 +2297,18 @@
\unexpanded\def\font_basics_predefined#1%
{\font_basics_predefine{\??predefinedfont#1}{#1}}
+%D Handy helper:
+
+\unexpanded\def\savedefinedfont[#1]%
+ {\bgroup
+ \definedfont[#1]%
+ \xdef\saveddefinedfontid {\number\fontid\font}%
+ \xdef\saveddefinedfontname{\fontname\font}%
+ \egroup}
+
+\def\saveddefinedfontid {\number\fontid\font}
+\def\saveddefinedfontname{\fontname\font}
+
+
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/font-lib.mkvi b/Master/texmf-dist/tex/context/base/font-lib.mkvi
index da930da7846..4bacef10b71 100644
--- a/Master/texmf-dist/tex/context/base/font-lib.mkvi
+++ b/Master/texmf-dist/tex/context/base/font-lib.mkvi
@@ -56,7 +56,8 @@
\registerctxluafile{font-vf} {1.001}
\registerctxluafile{font-enh}{1.001}
-\registerctxluafile{font-gds}{1.001} % currently only otf
+\registerctxluafile{font-trt}{1.001}
+\registerctxluafile{font-gds}{1.001}
\registerctxluafile{font-def}{1.001}
\registerctxluafile{font-ctx}{1.001} % after def as it overloads
diff --git a/Master/texmf-dist/tex/context/base/font-log.lua b/Master/texmf-dist/tex/context/base/font-log.lua
index 773108e443e..41da75378f9 100644
--- a/Master/texmf-dist/tex/context/base/font-log.lua
+++ b/Master/texmf-dist/tex/context/base/font-log.lua
@@ -67,14 +67,20 @@ end
statistics.register("loaded fonts", function()
if next(usedfonts) then
local t, n = { }, 0
+ local treatmentdata = fonts.treatments.data
for name, used in table.sortedhash(usedfonts) do
n = n + 1
+ local base = basename(name)
if complete then
- t[n] = used .. "->" .. basename(name)
+ t[n] = format("%s -> %s",used,base)
else
- t[n] = basename(name)
+ t[n] = base
+ end
+ local treatment = treatmentdata[base]
+ if treatment and treatment.comment then
+ t[n] = format("%s (%s)",t[n],treatment.comment)
end
end
- return n > 0 and format("%s files: %s",n,concat(t," ")) or "none"
+ return n > 0 and format("%s files: %s",n,concat(t,", ")) or "none"
end
end)
diff --git a/Master/texmf-dist/tex/context/base/font-map.lua b/Master/texmf-dist/tex/context/base/font-map.lua
index 29b9ecd35c3..b3c8da0f6c7 100644
--- a/Master/texmf-dist/tex/context/base/font-map.lua
+++ b/Master/texmf-dist/tex/context/base/font-map.lua
@@ -18,7 +18,7 @@ local trace_mapping = false trackers.register("fonts.mapping", function(v) trac
local report_fonts = logs.reporter("fonts","loading") -- not otf only
-local fonts = fonts
+local fonts = fonts or { }
local mappings = fonts.mappings or { }
fonts.mappings = mappings
@@ -41,8 +41,8 @@ local function loadlumtable(filename) -- will move to font goodies
end
local hex = R("AF","09")
-local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local hexsix = (hex^1) / function(s) return tonumber(s,16) end
+local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+local hexsix = (hex*hex*hex*hex*hex*hex) / function(s) return tonumber(s,16) end
local dec = (R("09")^1) / tonumber
local period = P(".")
local unicode = P("uni") * (hexfour * (period + P(-1)) * Cc(false) + Ct(hexfour^1) * Cc(true))
@@ -66,8 +66,8 @@ local function makenameparser(str)
end
end
--- local parser = mappings.makenameparser("Japan1")
--- local parser = mappings.makenameparser()
+-- local parser = makenameparser("Japan1")
+-- local parser = makenameparser()
-- local function test(str)
-- local b, a = lpegmatch(parser,str)
-- print((a and table.serialize(b)) or b)
@@ -77,20 +77,21 @@ end
-- test("uni1234")
-- test("uni1234.xx")
-- test("uni12349876")
+-- test("u123400987600")
-- test("index1234")
-- test("Japan1.123")
-local function tounicode16(unicode)
+local function tounicode16(unicode,name)
if unicode < 0x10000 then
return format("%04X",unicode)
elseif unicode < 0x1FFFFFFFFF then
return format("%04X%04X",floor(unicode/1024),unicode%1024+0xDC00)
else
- report_fonts("can't convert %a into tounicode",unicode)
+ report_fonts("can't convert %a in %a into tounicode",unicode,name)
end
end
-local function tounicode16sequence(unicodes)
+local function tounicode16sequence(unicodes,name)
local t = { }
for l=1,#unicodes do
local unicode = unicodes[l]
@@ -99,7 +100,7 @@ local function tounicode16sequence(unicodes)
elseif unicode < 0x1FFFFFFFFF then
t[l] = format("%04X%04X",floor(unicode/1024),unicode%1024+0xDC00)
else
- report_fonts ("can't convert %a into tounicode",unicode)
+ report_fonts ("can't convert %a in %a into tounicode",unicode,name)
end
end
return concat(t)
@@ -110,29 +111,43 @@ local function fromunicode16(str)
return tonumber(str,16)
else
local l, r = match(str,"(....)(....)")
- return (tonumber(l,16)- 0xD800)*0x400 + tonumber(r,16) - 0xDC00
+ return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
end
end
---~ This is quite a bit faster but at the cost of some memory but if we
---~ do this we will also use it elsewhere so let's not follow this route
---~ now. I might use this method in the plain variant (no caching there)
---~ but then I need a flag that distinguishes between code branches.
---~
---~ local cache = { }
---~
---~ function mappings.tounicode16(unicode)
---~ local s = cache[unicode]
---~ if not s then
---~ if unicode < 0x10000 then
---~ s = format("%04X",unicode)
---~ else
---~ s = format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
---~ end
---~ cache[unicode] = s
---~ end
---~ return s
---~ end
+-- Slightly slower:
+--
+-- local p = C(4) * (C(4)^-1) / function(l,r)
+-- if r then
+-- return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
+-- else
+-- return tonumber(l,16)
+-- end
+-- end
+--
+-- local function fromunicode16(str)
+-- return lpegmatch(p,str)
+-- end
+
+-- This is quite a bit faster but at the cost of some memory but if we
+-- do this we will also use it elsewhere so let's not follow this route
+-- now. I might use this method in the plain variant (no caching there)
+-- but then I need a flag that distinguishes between code branches.
+--
+-- local cache = { }
+--
+-- function mappings.tounicode16(unicode)
+-- local s = cache[unicode]
+-- if not s then
+-- if unicode < 0x10000 then
+-- s = format("%04X",unicode)
+-- else
+-- s = format("%04X%04X",unicode/0x400+0xD800,unicode%0x400+0xDC00)
+-- end
+-- cache[unicode] = s
+-- end
+-- return s
+-- end
mappings.loadlumtable = loadlumtable
mappings.makenameparser = makenameparser
@@ -140,15 +155,21 @@ mappings.tounicode16 = tounicode16
mappings.tounicode16sequence = tounicode16sequence
mappings.fromunicode16 = fromunicode16
-local separator = S("_.")
-local other = C((1 - separator)^1)
-local ligsplitter = Ct(other * (separator * other)^0)
+local ligseparator = P("_")
+local varseparator = P(".")
+local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator * C((1 - ligseparator - varseparator)^1))^0)
+
+-- local function test(name)
+-- local split = lpegmatch(namesplitter,name)
+-- print(string.formatters["%s: [% t]"](name,split))
+-- end
---~ print(table.serialize(lpegmatch(ligsplitter,"this")))
---~ print(table.serialize(lpegmatch(ligsplitter,"this.that")))
---~ print(table.serialize(lpegmatch(ligsplitter,"japan1.123")))
---~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more")))
---~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more.that")))
+-- test("i.f_")
+-- test("this")
+-- test("this.that")
+-- test("japan1.123")
+-- test("such_so_more")
+-- test("such_so_more.that")
function mappings.addtounicode(data,filename)
local resources = data.resources
@@ -195,7 +216,7 @@ function mappings.addtounicode(data,filename)
local unicode = lumunic and lumunic[name] or unicodevector[name]
if unicode then
originals[index] = unicode
- tounicode[index] = tounicode16(unicode)
+ tounicode[index] = tounicode16(unicode,name)
ns = ns + 1
end
-- cidmap heuristics, beware, there is no guarantee for a match unless
@@ -206,7 +227,7 @@ function mappings.addtounicode(data,filename)
unicode = cidcodes[foundindex] -- name to number
if unicode then
originals[index] = unicode
- tounicode[index] = tounicode16(unicode)
+ tounicode[index] = tounicode16(unicode,name)
ns = ns + 1
else
local reference = cidnames[foundindex] -- number to name
@@ -216,11 +237,11 @@ function mappings.addtounicode(data,filename)
unicode = cidcodes[foundindex]
if unicode then
originals[index] = unicode
- tounicode[index] = tounicode16(unicode)
+ tounicode[index] = tounicode16(unicode,name)
ns = ns + 1
end
end
- if not unicode then
+ if not unicode or unicode == "" then
local foundcodes, multiple = lpegmatch(uparser,reference)
if foundcodes then
originals[index] = foundcodes
@@ -229,7 +250,7 @@ function mappings.addtounicode(data,filename)
nl = nl + 1
unicode = true
else
- tounicode[index] = tounicode16(foundcodes)
+ tounicode[index] = tounicode16(foundcodes,name)
ns = ns + 1
unicode = foundcodes
end
@@ -239,13 +260,13 @@ function mappings.addtounicode(data,filename)
end
end
end
- -- a.whatever or a_b_c.whatever or a_b_c (no numbers)
- if not unicode then
- local split = lpegmatch(ligsplitter,name)
- local nplit = split and #split or 0
- if nplit >= 2 then
+ -- a.whatever or a_b_c.whatever or a_b_c (no numbers) a.b_
+ if not unicode or unicode == "" then
+ local split = lpegmatch(namesplitter,name)
+ local nsplit = split and #split or 0
+ if nsplit >= 2 then
local t, n = { }, 0
- for l=1,nplit do
+ for l=1,nsplit do
local base = split[l]
local u = unicodes[base] or unicodevector[base]
if not u then
@@ -262,7 +283,7 @@ function mappings.addtounicode(data,filename)
-- nothing
elseif n == 1 then
originals[index] = t[1]
- tounicode[index] = tounicode16(t[1])
+ tounicode[index] = tounicode16(t[1],name)
else
originals[index] = t
tounicode[index] = tounicode16sequence(t)
@@ -274,17 +295,17 @@ function mappings.addtounicode(data,filename)
end
end
-- last resort (we might need to catch private here as well)
- if not unicode then
+ if not unicode or unicode == "" then
local foundcodes, multiple = lpegmatch(uparser,name)
if foundcodes then
if multiple then
originals[index] = foundcodes
- tounicode[index] = tounicode16sequence(foundcodes)
+ tounicode[index] = tounicode16sequence(foundcodes,name)
nl = nl + 1
unicode = true
else
originals[index] = foundcodes
- tounicode[index] = tounicode16(foundcodes)
+ tounicode[index] = tounicode16(foundcodes,name)
ns = ns + 1
unicode = foundcodes
end
diff --git a/Master/texmf-dist/tex/context/base/font-mis.lua b/Master/texmf-dist/tex/context/base/font-mis.lua
index c22548ac51c..83df65341be 100644
--- a/Master/texmf-dist/tex/context/base/font-mis.lua
+++ b/Master/texmf-dist/tex/context/base/font-mis.lua
@@ -22,7 +22,7 @@ local handlers = fonts.handlers
handlers.otf = handlers.otf or { }
local otf = handlers.otf
-otf.version = otf.version or 2.742
+otf.version = otf.version or 2.743
otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true)
function otf.loadcached(filename,format,sub)
diff --git a/Master/texmf-dist/tex/context/base/font-otb.lua b/Master/texmf-dist/tex/context/base/font-otb.lua
index 6abe7c6f4e1..2a7b821eaef 100644
--- a/Master/texmf-dist/tex/context/base/font-otb.lua
+++ b/Master/texmf-dist/tex/context/base/font-otb.lua
@@ -617,8 +617,8 @@ local function featuresinitializer(tfmdata,value)
end
end
end
- if basepositions then
- for feature, data in next, basepositions do
+ if basepositionings then
+ for feature, data in next, basepositionings do
local value = features[feature]
if value then
local validlookups, lookuplist = collectlookups(rawdata,feature,script,language)
diff --git a/Master/texmf-dist/tex/context/base/font-otf.lua b/Master/texmf-dist/tex/context/base/font-otf.lua
index 8a6183180ea..c1f2f14fc6f 100644
--- a/Master/texmf-dist/tex/context/base/font-otf.lua
+++ b/Master/texmf-dist/tex/context/base/font-otf.lua
@@ -48,7 +48,7 @@ local otf = fonts.handlers.otf
otf.glists = { "gsub", "gpos" }
-otf.version = 2.742 -- beware: also sync font-mis.lua
+otf.version = 2.743 -- beware: also sync font-mis.lua
otf.cache = containers.define("fonts", "otf", otf.version, true)
local fontdata = fonts.hashes.identifiers
@@ -72,6 +72,7 @@ local usemetatables = false -- .4 slower on mk but 30 M less mem so we migh
local packdata = true
local syncspace = true
local forcenotdef = false
+local includesubfonts = false
local wildcard = "*"
local default = "dflt"
@@ -207,6 +208,7 @@ local valid_fields = table.tohash {
local ordered_enhancers = {
"prepare tables",
+
"prepare glyphs",
"prepare lookups",
@@ -232,8 +234,8 @@ local ordered_enhancers = {
"check metadata",
"check extra features", -- after metadata
+ "check encoding", -- moved
"add duplicates",
- "check encoding",
"cleanup tables",
}
@@ -603,8 +605,7 @@ local function somecopy(old) -- fast one
end
end
--- not setting hasitalics and class (when nil) during
--- table cronstruction can save some mem
+-- not setting hasitalics and class (when nil) during table cronstruction can save some mem
actions["prepare glyphs"] = function(data,filename,raw)
local rawglyphs = raw.glyphs
@@ -623,7 +624,7 @@ actions["prepare glyphs"] = function(data,filename,raw)
if rawsubfonts then
- metadata.subfonts = { }
+ metadata.subfonts = includesubfonts and { }
properties.cidinfo = rawcidinfo
if rawcidinfo.registry then
@@ -635,7 +636,9 @@ actions["prepare glyphs"] = function(data,filename,raw)
for cidindex=1,#rawsubfonts do
local subfont = rawsubfonts[cidindex]
local cidglyphs = subfont.glyphs
- metadata.subfonts[cidindex] = somecopy(subfont)
+ if includesubfonts then
+ metadata.subfonts[cidindex] = somecopy(subfont)
+ end
for index=0,subfont.glyphcnt-1 do -- we could take the previous glyphcnt instead of 0
local glyph = cidglyphs[index]
if glyph then
@@ -644,6 +647,10 @@ actions["prepare glyphs"] = function(data,filename,raw)
if not unicode or unicode == -1 or unicode >= criterium then
unicode = cidunicodes[index]
end
+ if unicode and descriptions[unicode] then
+ report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+ unicode = -1
+ end
if not unicode or unicode == -1 or unicode >= criterium then
if not name then
name = format("u%06X",private)
@@ -725,6 +732,8 @@ actions["prepare glyphs"] = function(data,filename,raw)
local u = a.unicode
local v = a.variant
if v then
+ -- tricky: no addition to d? needs checking but in practice such dups are either very simple
+ -- shapes or e.g cjk with not that many features
local vv = variants[v]
if vv then
vv[u] = unicode
@@ -762,6 +771,7 @@ actions["check encoding"] = function(data,filename,raw)
local properties = data.properties
local unicodes = resources.unicodes -- name to unicode
local indices = resources.indices -- index to unicodes
+ local duplicates = resources.duplicates
-- begin of messy (not needed when cidmap)
@@ -780,10 +790,36 @@ actions["check encoding"] = function(data,filename,raw)
for unicode, index in next, unicodetoindex do -- altuni already covers this
if unicode <= criterium and not descriptions[unicode] then
local parent = indices[index] -- why nil?
- if parent then
- report_otf("weird, unicode %U points to %U with index %H",unicode,parent,index)
- else
+ if not parent then
report_otf("weird, unicode %U points to nowhere with index %H",unicode,index)
+ else
+ local parentdescription = descriptions[parent]
+ if parentdescription then
+ local altuni = parentdescription.altuni
+ if not altuni then
+ altuni = { { unicode = parent } }
+ parentdescription.altuni = altuni
+ duplicates[parent] = { unicode }
+ else
+ local done = false
+ for i=1,#altuni do
+ if altuni[i].unicode == parent then
+ done = true
+ break
+ end
+ end
+ if not done then
+ -- let's assume simple cjk reuse
+ altuni[#altuni+1] = { unicode = parent }
+ table.insert(duplicates[parent],unicode)
+ end
+ end
+ if trace_loading then
+ report_otf("weird, unicode %U points to nowhere with index %H",unicode,index)
+ end
+ else
+ report_otf("weird, unicode %U points to %U with index %H",unicode,index)
+ end
end
end
end
@@ -798,7 +834,7 @@ actions["check encoding"] = function(data,filename,raw)
end
end
--- for the moment we assume that a fotn with lookups will not use
+-- for the moment we assume that a font with lookups will not use
-- altuni so we stick to kerns only
actions["add duplicates"] = function(data,filename,raw)
@@ -1251,9 +1287,11 @@ actions["reorganize lookups"] = function(data,filename,raw) -- we could check fo
if current then
for i=1,#current do
current[i] = current_class[current[i]] or { }
+ -- let's not be sparse
if lookups and not lookups[i] then
lookups[i] = "" -- (was: false) e.g. we can have two lookups and one replacement
end
+ -- end of fix
end
rule.current = t_hashed(current,t_h_cache)
end
@@ -1283,6 +1321,16 @@ actions["reorganize lookups"] = function(data,filename,raw) -- we could check fo
local current = coverage.current
if current then
current = t_uncover(splitter,t_u_cache,current)
+ -- let's not be sparse
+ local lookups = rule.lookups
+ if lookups then
+ for i=1,#current do
+ if not lookups[i] then
+ lookups[i] = "" -- fix sparse array
+ end
+ end
+ end
+ --
rule.current = t_hashed(current,t_h_cache)
end
local after = coverage.after
@@ -2017,7 +2065,7 @@ end
registerotffeature {
name = "mathsize",
- description = "apply mathsize as specified in the font",
+ description = "apply mathsize specified in the font",
initializers = {
base = checkmathsize,
node = checkmathsize,
diff --git a/Master/texmf-dist/tex/context/base/font-otn.lua b/Master/texmf-dist/tex/context/base/font-otn.lua
index 39a3f77dda0..5da0cf798f0 100644
--- a/Master/texmf-dist/tex/context/base/font-otn.lua
+++ b/Master/texmf-dist/tex/context/base/font-otn.lua
@@ -233,7 +233,7 @@ local fontdata = fonthashes.identifiers
local otffeatures = fonts.constructors.newfeatures("otf")
local registerotffeature = otffeatures.register
-local onetimemessage = fonts.loggers.onetimemessage
+local onetimemessage = fonts.loggers.onetimemessage or function() end
otf.defaultnodealternate = "none" -- first last
@@ -271,9 +271,9 @@ local function logwarning(...)
report_direct(...)
end
-local f_unicode = formatters["%U"]
-local f_uniname = formatters["%U (%s)"]
-local f_unilist = formatters["% t (% t)"]
+local f_unicode = formatters["%U"]
+local f_uniname = formatters["%U (%s)"]
+local f_unilist = formatters["% t (% t)"]
local function gref(n) -- currently the same as in font-otb
if type(n) == "number" then
@@ -393,6 +393,8 @@ local function getcomponentindex(start)
end
end
+-- eventually we will do positioning in an other way (needs addional w/h/d fields)
+
local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound) -- brr head
if start == stop and start.char == char then
start.char = char
@@ -424,6 +426,7 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
local componentindex = 0
local head = base
local current = base
+ -- first we loop over the glyphs in start .. stop
while start do
local char = start.char
if not marks[char] then
@@ -435,16 +438,20 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
end
head, current = insert_node_after(head,current,copy_node(start)) -- unlikely that mark has components
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char))
end
start = start.next
end
- local start = components
- while start and start.id == glyph_code do -- hm, is id test needed ?
+ -- we can have one accent as part of a lookup and another following
+ -- local start = components -- was wrong (component scanning was introduced when more complex ligs in devanagari was added)
+ local start = current.next
+ while start and start.id == glyph_code do
local char = start.char
if marks[char] then
start[a_ligacomp] = baseindex + (start[a_ligacomp] or componentindex)
if trace_marks then
- logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
+ logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
end
else
break
@@ -613,10 +620,10 @@ function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
if lig then
if trace_ligatures then
local stopchar = stop.char
- head, start = toligature(kind,lookupname,head, start,stop,lig,skipmark,discfound)
+ head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char))
else
- head, start = toligature(kind,lookupname,head, start,stop,lig,skipmark,discfound)
+ head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
end
return head, start, true
else
@@ -679,7 +686,7 @@ function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence
logwarning("%s, no matching anchors for mark %s and base %s",pref(kind,lookupname),gref(markchar),gref(basechar))
end
end
- else -- if trace_bugs then
+ elseif trace_bugs then
-- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
end
@@ -723,7 +730,7 @@ function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequ
local baseanchors = baseanchors['baselig']
if baseanchors then
local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
+ for anchor, ba in next, baseanchors do
if al[anchor] then
local ma = markanchors[anchor]
if ma then
@@ -735,6 +742,10 @@ function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequ
pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
end
return head, start, true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(kind,lookupname),gref(markchar),gref(basechar),index)
+ end
end
end
end
@@ -744,7 +755,7 @@ function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequ
end
end
end
- else -- if trace_bugs then
+ elseif trace_bugs then
-- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
end
@@ -799,7 +810,7 @@ function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence
end
end
end
- else -- if trace_bugs then
+ elseif trace_bugs then
-- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
end
@@ -851,7 +862,7 @@ function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence)
end
end
end
- else -- if trace_bugs then
+ elseif trace_bugs then
-- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar))
onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
@@ -1394,8 +1405,8 @@ end
function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
local markchar = start.char
if marks[markchar] then
---~ local alreadydone = markonce and start[a_markmark]
---~ if not alreadydone then
+ -- local alreadydone = markonce and start[a_markmark]
+ -- if not alreadydone then
-- local markanchors = descriptions[markchar].anchors markanchors = markanchors and markanchors.mark
local subtables = currentlookup.subtables
local lookupname = subtables[1]
@@ -1447,9 +1458,9 @@ function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext
elseif trace_bugs then
logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
end
---~ elseif trace_marks and trace_details then
---~ logprocess("%s, mark %s is already bound (n=%s), ignoring mark2mark",pref(kind,lookupname),gref(markchar),alreadydone)
---~ end
+ -- elseif trace_marks and trace_details then
+ -- logprocess("%s, mark %s is already bound (n=%s), ignoring mark2mark",pref(kind,lookupname),gref(markchar),alreadydone)
+ -- end
elseif trace_bugs then
logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
end
@@ -1502,7 +1513,7 @@ function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,l
end
end
end
- else -- if trace_bugs then
+ elseif trace_bugs then
-- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar))
onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
@@ -1896,7 +1907,6 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
else
-- is valid
- -- logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup and chainlookup.type or "?")
i = i + 1
end
if start then
@@ -2277,6 +2287,9 @@ for s=1,#datasets do
if ok then
success = true
break
+ elseif not start then
+ -- don't ask why ... shouldn't happen
+ break
end
end
else
diff --git a/Master/texmf-dist/tex/context/base/font-otp.lua b/Master/texmf-dist/tex/context/base/font-otp.lua
index c07d9ad4e70..217bb7535fa 100644
--- a/Master/texmf-dist/tex/context/base/font-otp.lua
+++ b/Master/texmf-dist/tex/context/base/font-otp.lua
@@ -354,6 +354,12 @@ local function packdata(data)
end
end
end
+ local altuni = description.altuni
+ if altuni then
+ for i=1,#altuni do
+ altuni[i] = pack_flat(altuni[i])
+ end
+ end
end
local lookups = data.lookups
if lookups then
@@ -366,8 +372,8 @@ local function packdata(data)
local r = rule.after if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
local r = rule.current if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
local r = rule.replacements if r then rule.replacements = pack_flat (r) end -- can have holes
- -- local r = rule.lookups if r then rule.lookups = pack_mixed (r) end -- can have false
local r = rule.lookups if r then rule.lookups = pack_indexed(r) end -- can have ""
+ -- local r = rule.lookups if r then rule.lookups = pack_flat(r) end -- can have holes (already taken care of some cases)
end
end
end
@@ -459,6 +465,10 @@ local function packdata(data)
mlookups[tag] = pack_normal(mlookup)
end
end
+ local altuni = description.altuni
+ if altuni then
+ description.altuni = pack_normal(altuni)
+ end
end
local lookups = data.lookups
if lookups then
@@ -656,6 +666,19 @@ local function unpackdata(data)
end
end
end
+ local altuni = description.altuni
+ if altuni then
+ local altuni = tables[altuni]
+ if altuni then
+ description.altuni = altuni
+ for i=1,#altuni do
+ local tv = tables[altuni[i]]
+ if tv then
+ altuni[i] = tv
+ end
+ end
+ end
+ end
end
local lookups = data.lookups
if lookups then
diff --git a/Master/texmf-dist/tex/context/base/font-ott.lua b/Master/texmf-dist/tex/context/base/font-ott.lua
index 8a5579c0212..e3aacd0d1bd 100644
--- a/Master/texmf-dist/tex/context/base/font-ott.lua
+++ b/Master/texmf-dist/tex/context/base/font-ott.lua
@@ -771,7 +771,7 @@ local function resolve(t,k)
end
end
end
- return "dflt"
+ return k -- "dflt"
end
setmetatableindex(features, resolve)
diff --git a/Master/texmf-dist/tex/context/base/font-otx.lua b/Master/texmf-dist/tex/context/base/font-otx.lua
index d276b8a1524..5c41ad66faf 100644
--- a/Master/texmf-dist/tex/context/base/font-otx.lua
+++ b/Master/texmf-dist/tex/context/base/font-otx.lua
@@ -81,8 +81,9 @@ local features = {
-- mark = s_mark,
}
-analyzers.states = states
-analyzers.features = features
+analyzers.states = states
+analyzers.features = features
+analyzers.useunicodemarks = false
-- todo: analyzers per script/lang, cross font, so we need an font id hash -> script
-- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace
@@ -99,7 +100,10 @@ function analyzers.setstate(head,font)
local char = current.char
local d = descriptions[char]
if d then
- if d.class == "mark" or (useunicodemarks and categories[char] == "mn") then
+ if d.class == "mark" then
+ done = true
+ current[a_state] = s_mark
+ elseif useunicodemarks and categories[char] == "mn" then
done = true
current[a_state] = s_mark
elseif n == 0 then
@@ -388,6 +392,6 @@ methods.syrc = methods.arab
methods.mand = methods.arab
methods.nko = methods.arab
--- directives.register("otf.analyze.useunicodemarks",function(v)
--- analyzers.useunicodemarks = v
--- end)
+directives.register("otf.analyze.useunicodemarks",function(v)
+ analyzers.useunicodemarks = v
+end)
diff --git a/Master/texmf-dist/tex/context/base/font-pre.mkiv b/Master/texmf-dist/tex/context/base/font-pre.mkiv
index 74c39722f8f..b03abed7d4c 100644
--- a/Master/texmf-dist/tex/context/base/font-pre.mkiv
+++ b/Master/texmf-dist/tex/context/base/font-pre.mkiv
@@ -87,8 +87,9 @@
\definefontfeature % might move
[simplearabic]
[mode=node,language=dflt,script=arab,
- init=yes,medi=yes,fina=yes,calt=yes,
- rlig=yes,curs=yes,mark=yes,mkmk=yes]
+ init=yes,medi=yes,fina=yes,
+ rlig=yes,calt=yes,
+ mark=yes,mkmk=yes,curs=yes]
\definefontfeature
[simplehebrew]
@@ -190,6 +191,10 @@
% \definefontfeature[mathscript] [math-script]
% \definefontfeature[mathscriptscript] [math-scriptscript]
+\definefontfeature
+ [missing]
+ [missing=yes]
+
%D We define some colors that are used in tracing (for instance \OPENTYPE\
%D features). We cannot yet inherit because no colors are predefined.
@@ -501,8 +506,11 @@
\definefontfeature[f:smallcaps][smcp=yes]
\definefontfeature[f:oldstyle] [onum=yes]
-\definealternativestyle [\v!smallcaps] [\doaddfeature{f:smallcaps}] [\doaddfeature{f:smallcaps}]
-\definealternativestyle [\v!oldstyle] [\doaddfeature{f:oldstyle}] [\doaddfeature{f:oldstyle}]
+\definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps]
+\definealternativestyle [\v!oldstyle] [\setoldstyle ] [\setoldstyle ]
+
+\unexpanded\def\setsmallcaps{\doaddfeature{f:smallcaps}}
+\unexpanded\def\setoldstyle {\doaddfeature{f:oldstyle}}
%D \macros
%D {tinyfont}
diff --git a/Master/texmf-dist/tex/context/base/font-syn.lua b/Master/texmf-dist/tex/context/base/font-syn.lua
index 81e27afd603..27176dade05 100644
--- a/Master/texmf-dist/tex/context/base/font-syn.lua
+++ b/Master/texmf-dist/tex/context/base/font-syn.lua
@@ -28,6 +28,7 @@ local nameonly = file.nameonly
local pathpart = file.pathpart
local filejoin = file.join
local is_qualified_path = file.is_qualified_path
+local exists = io.exists
local findfile = resolvers.findfile
local cleanpath = resolvers.cleanpath
@@ -719,17 +720,24 @@ local function analyzefiles(olddata)
local oldindices = olddata and olddata.indices or { }
local oldspecifications = olddata and olddata.specifications or { }
local oldrejected = olddata and olddata.rejected or { }
+ local treatmentdata = fonts.treatments.data
local function identify(completename,name,suffix,storedname)
local pathpart, basepart = splitbase(completename)
nofread = nofread + 1
- if done[name] then
+ local treatment = treatmentdata[completename] or treatmentdata[basepart]
+ if treatment and treatment.ignored then
+ if trace_names then
+ report_names("%s font %a is ignored, reason %a",suffix,completename,treatment.comment or "unknown")
+ end
+ nofskipped = nofskipped + 1
+ elseif done[name] then
-- already done (avoid otf afm clash)
if trace_names then
report_names("%s font %a already done",suffix,completename)
end
nofduplicates = nofduplicates + 1
nofskipped = nofskipped + 1
- elseif not io.exists(completename) then
+ elseif not exists(completename) then
-- weird error
if trace_names then
report_names("%s font %a does not really exist",suffix,completename)
diff --git a/Master/texmf-dist/tex/context/base/font-trt.lua b/Master/texmf-dist/tex/context/base/font-trt.lua
new file mode 100644
index 00000000000..6fc8028d128
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-trt.lua
@@ -0,0 +1,57 @@
+if not modules then modules = { } end modules ['font-trt'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local rawget, dofile, next = rawget, dofile, next
+
+--[[ldx--
+<p>We provide a simple treatment mechanism (mostly because I want to demonstrate
+something in a manual). It's one of the few places where an lfg file gets loaded
+outside the goodies manager.</p>
+--ldx]]--
+
+local treatments = utilities.storage.allocate()
+fonts.treatments = treatments
+local treatmentdata = { }
+treatments.data = treatmentdata
+treatments.filename = "treatments.lfg"
+
+-- function treatments.load(name)
+-- local filename = resolvers.findfile(name)
+-- if filename and filename ~= "" then
+-- local goodies = dofile(filename)
+-- if goodies then
+-- local treatments = goodies.treatments
+-- if treatments then
+-- for name, data in next, treatments do
+-- treatmentdata[name] = data -- always wins
+-- end
+-- end
+-- end
+-- end
+-- end
+
+table.setmetatableindex(treatmentdata,function(t,k)
+ local files = resolvers.findfiles(treatments.filename)
+ if files then
+ for i=1,#files do
+ local goodies = dofile(files[i])
+ if goodies then
+ local treatments = goodies.treatments
+ if treatments then
+ for name, data in next, treatments do
+ if not rawget(t,name) then
+ t[name] = data
+ end
+ end
+ end
+ end
+ end
+ end
+ table.setmetatableindex(treatmentdata,nil)
+ return treatmentdata[k]
+end)
diff --git a/Master/texmf-dist/tex/context/base/l-file.lua b/Master/texmf-dist/tex/context/base/l-file.lua
index 29416caf03b..a64ee86564c 100644
--- a/Master/texmf-dist/tex/context/base/l-file.lua
+++ b/Master/texmf-dist/tex/context/base/l-file.lua
@@ -62,7 +62,7 @@ elseif not lfs.isfile then
end
local insert, concat = table.insert, table.concat
-local match, find = string.match, string.find
+local match, find, gmatch = string.match, string.find, string.gmatch
local lpegmatch = lpeg.match
local getcurrentdir, attributes = lfs.currentdir, lfs.attributes
local checkedsplit = string.checkedsplit
@@ -115,11 +115,23 @@ local function suffixonly(name)
return name and lpegmatch(pattern,name) or ""
end
-file.pathpart = pathpart
-file.basename = basename
-file.nameonly = nameonly
-file.suffixonly = suffixonly
-file.suffix = suffixonly
+local pattern = (noslashes^0 * slashes)^0 * noperiod^1 * ((period * C(noperiod^1))^1) * -1 + Cc("")
+
+local function suffixesonly(name)
+ if name then
+ return lpegmatch(pattern,name)
+ else
+ return ""
+ end
+end
+
+file.pathpart = pathpart
+file.basename = basename
+file.nameonly = nameonly
+file.suffixonly = suffixonly
+file.suffix = suffixonly
+file.suffixesonly = suffixesonly
+file.suffixes = suffixesonly
file.dirname = pathpart -- obsolete
file.extname = suffixonly -- obsolete
@@ -153,7 +165,11 @@ function file.splitname(str,splitdrive)
end
function file.splitbase(str)
- return str and lpegmatch(pattern_d,str) -- returns path, base+suffix
+ if str then
+ return lpegmatch(pattern_d,str) -- returns path, base+suffix (path has / appended, might change at some point)
+ else
+ return "", str -- assume no path
+ end
end
---- stripslash = C((1 - P("/")^1*P(-1))^0)
@@ -568,3 +584,16 @@ end
-- return f(...)
-- end
-- end
+
+-- a goodie: a dumb version of mkdirs (not used in context itself, only
+-- in generic usage)
+
+function lfs.mkdirs(path)
+ local full = ""
+ for sub in gmatch(path,"(/*[^\\/]+)") do -- accepts leading c: and /
+ full = full .. sub
+ -- lfs.isdir("/foo") mistakenly returns true on windows so
+ -- so we don't test and just make as that one is not too picky
+ lfs.mkdir(full)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/l-gzip.lua b/Master/texmf-dist/tex/context/base/l-gzip.lua
new file mode 100644
index 00000000000..5100e47222c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-gzip.lua
@@ -0,0 +1,54 @@
+if not modules then modules = { } end modules ['l-gzip'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+if not gzip then
+
+ -- no fallback yet
+
+ return
+
+end
+
+local suffix, suffixes = file.suffix, file.suffixes
+
+function gzip.load(filename)
+ local f = io.open(filename,"rb")
+ if not f then
+ -- invalid file
+ elseif suffix(filename) == "gz" then
+ f:close()
+ local g = gzip.open(filename,"rb")
+ if g then
+ local str = g:read("*all")
+ g:close()
+ return str
+ end
+ else
+ local str = f:read("*all")
+ f:close()
+ return str
+ end
+end
+
+function gzip.save(filename,data)
+ if suffix(filename) ~= "gz" then
+ filename = filename .. ".gz"
+ end
+ local f = io.open(filename,"wb")
+ if f then
+ local s = zlib.compress(data or "",9,nil,15+16)
+ f:write(s)
+ f:close()
+ return #s
+ end
+end
+
+function gzip.suffix(filename)
+ local suffix, extra = suffixes(filename)
+ local gzipped = extra == "gz"
+ return suffix, gzipped
+end
diff --git a/Master/texmf-dist/tex/context/base/l-package.lua b/Master/texmf-dist/tex/context/base/l-package.lua
index 09e65f9c896..579fd3941c6 100644
--- a/Master/texmf-dist/tex/context/base/l-package.lua
+++ b/Master/texmf-dist/tex/context/base/l-package.lua
@@ -50,16 +50,18 @@ local function lualibfile(name)
return lpegmatch(pattern,name) or name
end
+local offset = luarocks and 1 or 0 -- todo: also check other extras
+
local helpers = package.helpers or {
cleanpath = cleanpath,
lualibfile = lualibfile,
trace = false,
report = function(...) print(format(...)) end,
builtin = {
- ["preload table"] = searchers[1], -- special case, built-in libs
- ["path specification"] = searchers[2],
- ["cpath specification"] = searchers[3],
- ["all in one fallback"] = searchers[4], -- special case, combined libs
+ ["preload table"] = searchers[1+offset], -- special case, built-in libs
+ ["path specification"] = searchers[2+offset],
+ ["cpath specification"] = searchers[3+offset],
+ ["all in one fallback"] = searchers[4+offset], -- special case, combined libs
},
methods = {
},
@@ -279,6 +281,9 @@ methods["not loaded"] = function(name)
end
local level = 0
+local used = { }
+
+helpers.traceused = false
function helpers.loaded(name)
local sequence = helpers.sequence
@@ -293,6 +298,9 @@ function helpers.loaded(name)
if helpers.trace then
helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name)
end
+ if helpers.traceused then
+ used[#used+1] = { level = level, name = name }
+ end
level = level - 1
return result, rest
end
@@ -302,6 +310,19 @@ function helpers.loaded(name)
return nil
end
+function helpers.showused()
+ local n = #used
+ if n > 0 then
+ helpers.report("%s libraries loaded:",n)
+ helpers.report()
+ for i=1,n do
+ local u = used[i]
+ helpers.report("%i %a",u.level,u.name)
+ end
+ helpers.report()
+ end
+end
+
function helpers.unload(name)
if helpers.trace then
if package.loaded[name] then
diff --git a/Master/texmf-dist/tex/context/base/l-pdfview.lua b/Master/texmf-dist/tex/context/base/l-pdfview.lua
index e42462a3d1d..6e0259299ce 100644
--- a/Master/texmf-dist/tex/context/base/l-pdfview.lua
+++ b/Master/texmf-dist/tex/context/base/l-pdfview.lua
@@ -19,30 +19,37 @@ pdfview = pdfview or { }
local opencalls, closecalls, allcalls, runner
+-- this might become template based
+
if os.type == "windows" then
opencalls = {
['default'] = "pdfopen --rxi --file",
['acrobat'] = "pdfopen --rxi --file",
['fullacrobat'] = "pdfopen --axi --file",
- ['okular'] = 'start "test" "c:/data/system/kde/bin/okular.exe" --unique' -- todo!
+ ['okular'] = 'start "test" "c:/data/system/kde/bin/okular.exe" --unique', -- todo!
+ ['sumatra'] = 'start "test" "c:/data/system/sumatrapdf/sumatrapdf.exe" -reuse-instance',
+ ['okular'] = 'start "test" "okular.exe" --unique',
+ ['sumatra'] = 'start "test" "sumatrapdf.exe" -reuse-instance -bg-color 0xCCCCCC',
}
closecalls= {
['default'] = "pdfclose --file",
['acrobat'] = "pdfclose --file",
['okular'] = false,
+ ['sumatra'] = false,
}
allcalls = {
['default'] = "pdfclose --all",
['acrobat'] = "pdfclose --all",
['okular'] = false,
+ ['sumatra'] = false,
}
- pdfview.method = "acrobat"
+ pdfview.method = "acrobat" -- no longer usefull due to green pop up line and clasing reader/full
+ pdfview.method = "sumatra"
- runner = function(...)
--- os.spawn(...)
- os.execute(...)
+ runner = function(cmd)
+ os.execute(cmd) -- .. " > /null"
end
else
@@ -62,8 +69,8 @@ else
pdfview.method = "okular"
- runner = function(...)
- os.spawn(...)
+ runner = function(cmd)
+ os.execute(cmd .. " 1>/dev/null 2>/dev/null &")
end
end
diff --git a/Master/texmf-dist/tex/context/base/l-table.lua b/Master/texmf-dist/tex/context/base/l-table.lua
index e57abe854c0..9a1b97fff78 100644
--- a/Master/texmf-dist/tex/context/base/l-table.lua
+++ b/Master/texmf-dist/tex/context/base/l-table.lua
@@ -120,7 +120,7 @@ local function sortedhash(t,cmp)
if t then
local s
if cmp then
- -- it would be nice if teh sort function would accept a third argument (or nicer, an optional first)
+ -- it would be nice if the sort function would accept a third argument (or nicer, an optional first)
s = sortedhashkeys(t,function(a,b) return cmp(t,a,b) end)
else
s = sortedkeys(t) -- the robust one
diff --git a/Master/texmf-dist/tex/context/base/lang-def.lua b/Master/texmf-dist/tex/context/base/lang-def.lua
index 6656d8ed978..c0c3981f7df 100644
--- a/Master/texmf-dist/tex/context/base/lang-def.lua
+++ b/Master/texmf-dist/tex/context/base/lang-def.lua
@@ -342,6 +342,15 @@ local specifications = allocate {
["variant"] = "sv",
},
{
+ ["description"] = "Thai",
+ ["script"] = "thai",
+ -- ["bibliographical"] = "",
+ -- ["terminological"] = "",
+ ["context"] = "th",
+ ["opentype"] = "tha",
+ -- ["variant"] = "",
+ },
+ {
["description"] = "Turkish",
["script"] = "latn",
["bibliographical"] = "tur",
diff --git a/Master/texmf-dist/tex/context/base/lang-def.mkiv b/Master/texmf-dist/tex/context/base/lang-def.mkiv
index d4e40dad1e7..9f84e90f01c 100644
--- a/Master/texmf-dist/tex/context/base/lang-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-def.mkiv
@@ -678,6 +678,26 @@
\installlanguage [\s!vietnamese] [\s!vi]
+% Thai (teaser for Mojca)
+
+\installlanguage
+ [\s!th]
+ [\c!spacing=\v!broad,
+ \c!leftsentence=\emdash,
+ \c!rightsentence=\emdash,
+ \c!leftsubsentence=\emdash,
+ \c!rightsubsentence=\emdash,
+ \c!leftquote=\upperleftsinglesixquote,
+ \c!rightquote=\upperrightsingleninequote,
+ \c!leftquotation=\upperleftdoublesixquote,
+ \c!rightquotation=\upperrightdoubleninequote,
+ \c!date={\v!month,\space,\v!day,{,\space},\v!year},
+ \s!patterns=\s!th,
+ \s!lefthyphenmin=2,
+ \s!righthyphenmin=3]
+
+\installlanguage [\s!thai] [\s!th]
+
%D Todo: generate this one from languages.data
\installlanguage[nld][\s!nl]
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.lua b/Master/texmf-dist/tex/context/base/lang-ini.lua
index 4ae7656d354..64221325338 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.lua
+++ b/Master/texmf-dist/tex/context/base/lang-ini.lua
@@ -91,6 +91,23 @@ end
-- patterns=en
-- patterns=en,de
+local function validdata(dataset,what,tag)
+ if dataset then
+ local data = dataset.data
+ if not data or data == "" then
+ return nil
+ elseif dataset.compression == "zlib" then
+ data = zlib.decompress(data)
+ if dataset.length and dataset.length ~= #data then
+ report_initialization("compression error in %a for language %a","patterns",what,tag)
+ end
+ return data
+ else
+ return data
+ end
+ end
+end
+
local function loaddefinitions(tag,specification)
statistics.starttiming(languages)
local data, instance = resolve(tag)
@@ -113,15 +130,21 @@ local function loaddefinitions(tag,specification)
dataused[definition] = definition
local filename = "lang-" .. definition .. ".lua"
local fullname = resolvers.findfile(filename) or ""
+ if fullname == "" then
+ fullname = resolvers.findfile(filename .. ".gz") or ""
+ end
if fullname ~= "" then
if trace_patterns then
report_initialization("loading definition %a for language %a from %a",definition,tag,fullname)
end
- local defs = dofile(fullname) -- use regular loader instead
+ local suffix, gzipped = gzip.suffix(fullname)
+ local defs = table.load(fullname,gzipped and gzip.load)
if defs then -- todo: version test
ok, nofloaded = true, nofloaded + 1
- instance:patterns (defs.patterns and defs.patterns .data or "")
- instance:hyphenation(defs.exceptions and defs.exceptions.data or "")
+ -- instance:patterns (defs.patterns and defs.patterns .data or "")
+ -- instance:hyphenation(defs.exceptions and defs.exceptions.data or "")
+ instance:patterns (validdata(defs.patterns, "patterns", tag) or "")
+ instance:hyphenation(validdata(defs.exceptions,"exceptions",tag) or "")
else
report_initialization("invalid definition %a for language %a in %a",definition,tag,filename)
end
@@ -329,13 +352,15 @@ languages.associate('fr','latn','fra')
statistics.register("loaded patterns", function()
local result = languages.logger.report()
if result ~= "none" then
- return result
+-- return result
+ return format("%s, load time: %s",result,statistics.elapsedtime(languages))
end
end)
-statistics.register("language load time", function()
- return statistics.elapsedseconds(languages, format(", nofpatterns: %s",nofloaded))
-end)
+-- statistics.register("language load time", function()
+-- -- often zero so we can merge that in the above
+-- return statistics.elapsedseconds(languages, format(", nofpatterns: %s",nofloaded))
+-- end)
-- interface
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkiv b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
index 3226c1255ce..1297fe23ebc 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
@@ -398,6 +398,9 @@
\lang_basics_synchronize_min_max
\to \everylanguage
+\unexpanded\def\unhyphenated
+ {\groupedcommand{\lefthyphenmin\maxdimen}\donothing}
+
% \appendtoks
% \setups[\languageparameter\c!setups]%
% \to \everylanguage
diff --git a/Master/texmf-dist/tex/context/base/luat-bas.mkiv b/Master/texmf-dist/tex/context/base/luat-bas.mkiv
index ddf90142423..a3891271619 100644
--- a/Master/texmf-dist/tex/context/base/luat-bas.mkiv
+++ b/Master/texmf-dist/tex/context/base/luat-bas.mkiv
@@ -26,6 +26,7 @@
\registerctxluafile{l-io} {1.001}
\registerctxluafile{l-os} {1.001}
\registerctxluafile{l-file} {1.001}
+\registerctxluafile{l-gzip} {1.001}
\registerctxluafile{l-md5} {1.001}
\registerctxluafile{l-dir} {1.001}
\registerctxluafile{l-unicode} {1.001}
diff --git a/Master/texmf-dist/tex/context/base/luat-cbk.lua b/Master/texmf-dist/tex/context/base/luat-cbk.lua
index f8c6926f075..5aa12005b78 100644
--- a/Master/texmf-dist/tex/context/base/luat-cbk.lua
+++ b/Master/texmf-dist/tex/context/base/luat-cbk.lua
@@ -194,11 +194,11 @@ if trace_calls then
end)
end
---~ -- somehow crashes later on
---~
---~ callbacks.freeze("find_.*_file","finding file")
---~ callbacks.freeze("read_.*_file","reading file")
---~ callbacks.freeze("open_.*_file","opening file")
+-- -- somehow crashes later on
+--
+-- callbacks.freeze("find_.*_file","finding file")
+-- callbacks.freeze("read_.*_file","reading file")
+-- callbacks.freeze("open_.*_file","opening file")
--[[ldx--
<p>The simple case is to remove the callback:</p>
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv b/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
index 8889d906ba4..d2d64aa8d52 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
@@ -74,8 +74,8 @@
\def\xmlremapname #1#2#3#4{\ctxlua{xml.remapname(lxml.id("#1"),"#2","#3","#4")}} % element
\def\xmlremapnamespace #1#2#3{\ctxlua{xml.renamespace(lxml.id("#1"),"#2","#3")}} % document
\def\xmlchecknamespace #1#2#3{\ctxlua{xml.checknamespace(lxml.id("#1"),"#2","#3")}} % element
-\def\xmlsetfunction #1#2#3{\ctxlxml{setaction("#1","#2",#3)}}
-\def\xmlsetsetup #1#2#3{\ctxlxml{setsetup("#1","#2","#3")}}
+\def\xmlsetfunction #1#2#3{\ctxlxml{setaction("#1",\!!bs#2\!!es,#3)}}
+\def\xmlsetsetup #1#2#3{\ctxlxml{setsetup("#1",\!!bs#2\!!es,"#3")}}
\def\xmlstrip #1#2{\ctxlxml{strip("#1","#2")}}
\def\xmlstripnolines #1#2{\ctxlxml{strip("#1","#2",true)}}
\def\xmlstripanywhere #1#2{\ctxlxml{strip("#1","#2",true,true)}}
diff --git a/Master/texmf-dist/tex/context/base/m-graph.mkiv b/Master/texmf-dist/tex/context/base/m-graph.mkiv
index 25933d9ebae..c15262cac71 100644
--- a/Master/texmf-dist/tex/context/base/m-graph.mkiv
+++ b/Master/texmf-dist/tex/context/base/m-graph.mkiv
@@ -67,7 +67,7 @@
if unknown context_grap: input "mp-grap.mpiv" ; fi ;
\stopMPdefinitions
-% For backwards compatibility (for the moment), also load the graph macros in
+% For backwards compatibility (for the moment), also load the graph macros in
% the standard MP instance (scaled integer):
\startMPdefinitions
diff --git a/Master/texmf-dist/tex/context/base/m-sql.mkiv b/Master/texmf-dist/tex/context/base/m-sql.mkiv
new file mode 100644
index 00000000000..60cbdd1be3b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-sql.mkiv
@@ -0,0 +1,17 @@
+%D \module
+%D [ file=m-sql,
+%D version=2012.07.12,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=SQL,
+%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{util-tpl}{}
+\registerctxluafile{util-sql}{}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/math-def.mkiv b/Master/texmf-dist/tex/context/base/math-def.mkiv
index cc2a8fae6c5..9201fc5404a 100644
--- a/Master/texmf-dist/tex/context/base/math-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-def.mkiv
@@ -270,13 +270,14 @@
\definemathcommand [colonsep] {\mkern-1.2mu}
\definemathcommand [doublecolonsep] {\mkern-0.9mu}
-%D Now we define all the colon relations .. needs checking with char-def.lua:
+%D Now we define all the colon relations .. needs checking with char-def.lua ...
+%d will move to a separate module.
\definemathcommand [centercolon] [rel] {\mathstylevcenteredhbox\colon}
\definemathcommand [colonminus] [rel] {\centercolon\colonsep\mathrel{-}}
-\definemathcommand [minuscolon] [rel] {\mathrel{-}\colonsep\centercolon}
-\definemathcommand [colonequals] [rel] {\centercolon\colonsep=}
-\definemathcommand [equalscolon] [rel] {=\centercolon\colonsep}
+\definemathcommand [minuscolon] [rel] {\mathrel{-}\colonsep\centercolon} % native char
+\definemathcommand [colonequals] [rel] {\centercolon\colonsep=} % native char
+\definemathcommand [equalscolon] [rel] {=\centercolon\colonsep} % native char
\definemathcommand [colonapprox] [rel] {\centercolon\colonsep\approx}
\definemathcommand [approxcolon] [rel] {\approx\centercolon\colonsep}
\definemathcommand [colonsim] [rel] {\centercolon\colonsep\sim}
@@ -285,7 +286,7 @@
\definemathcommand [coloncolon] [rel] {\centercolon\doublecolonsep\centercolon}
\definemathcommand [coloncolonminus] [rel] {\coloncolon\colonsep\mathrel{-}}
\definemathcommand [minuscoloncolon] [rel] {\mathrel{-}\colonsep\coloncolon}
-\definemathcommand [coloncolonequals] [rel] {\coloncolon\colonsep=}
+\definemathcommand [coloncolonequals] [rel] {\coloncolon\colonsep=} % native char
\definemathcommand [equalscoloncolon] [rel] {=\coloncolon\colonsep}
\definemathcommand [coloncolonapprox] [rel] {\coloncolon\colonsep\approx}
\definemathcommand [approxcoloncolon] [rel] {\approx\coloncolon\colonsep}
diff --git a/Master/texmf-dist/tex/context/base/math-ini.lua b/Master/texmf-dist/tex/context/base/math-ini.lua
index 530e685685e..7ba1d451463 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.lua
+++ b/Master/texmf-dist/tex/context/base/math-ini.lua
@@ -10,11 +10,15 @@ if not modules then modules = { } end modules ['math-ini'] = {
-- the "8000 hackery influences direct characters (utf) as indirect \char's
--
-- isn't characters.data loaded already ... shortcut it here
+--
+-- replace code 7 by 0 as we don't use it anyway (chars with code 7 will adapt to
+-- to the fam when set ... we use other means .. ok, we could use it for spacing but
+-- then we also have to set the other characters (only a subset done now)
-local formatters = string.formatters
+local formatters, find = string.formatters, string.find
local utfchar, utfbyte = utf.char, utf.byte
local setmathcode, setdelcode = tex.setmathcode, tex.setdelcode
-local texattribute = tex.attribute
+local settexattribute = tex.setattribute
local floor = math.floor
local context = context
@@ -22,25 +26,27 @@ local context = context
local contextsprint = context.sprint
local contextfprint = context.fprint -- a bit inefficient
-local allocate = utilities.storage.allocate
-
local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end)
local report_math = logs.reporter("mathematics","initializing")
-mathematics = mathematics or { }
-local mathematics = mathematics
+mathematics = mathematics or { }
+local mathematics = mathematics
mathematics.extrabase = 0xFE000 -- here we push some virtuals
mathematics.privatebase = 0xFF000 -- here we push the ex
-local chardata = characters.data
+local unsetvalue = attributes.unsetvalue
+local allocate = utilities.storage.allocate
+local chardata = characters.data
local families = allocate {
mr = 0,
mb = 1,
}
+--- to be checked .. afew defaults in char-def that should be alpha
+
local classes = allocate {
ord = 0, -- mathordcomm mathord
op = 1, -- mathopcomm mathop
@@ -197,10 +203,10 @@ local setmathsymbol = function(name,class,family,slot) -- hex is nicer for traci
elseif class == classes.under then
contextsprint(formatters[ [[\ugdef\%s{\Udelimiterunder "%X "%X }]] ](name,family,slot))
elseif class == open_class or class == close_class or class == middle_class then
- setdelcode(slot,{family,slot,0,0})
+ setdelcode("global",slot,{family,slot,0,0})
contextsprint(formatters[ [[\ugdef\%s{\Udelimiter "%X "%X "%X }]] ](name,class,family,slot))
elseif class == classes.delimiter then
- setdelcode(slot,{family,slot,0,0})
+ setdelcode("global",slot,{family,slot,0,0})
contextsprint(formatters[ [[\ugdef\%s{\Udelimiter 0 "%X "%X }]] ](name,family,slot))
elseif class == classes.radical then
contextsprint(formatters[ [[\ugdef\%s{\Uradical "%X "%X }]] ](name,family,slot))
@@ -485,10 +491,10 @@ end
--
-- function commands.taggedmathfunction(tag,label)
-- if label then
--- texattribute[a_mathcategory] = registercategory(1,tag,tag)
+-- settexattribute(a_mathcategory,registercategory(1,tag,tag))
-- context.mathlabeltext(tag)
-- else
--- texattribute[a_mathcategory] = 1
+-- settexattribute(a_mathcategory,1)
-- context(tag)
-- end
-- end
@@ -511,13 +517,31 @@ function commands.taggedmathfunction(tag,label,apply)
noffunctions = noffunctions + 1
functions[noffunctions] = tag
functions[tag] = noffunctions
- texattribute[a_mathcategory] = noffunctions + delta
+ settexattribute(a_mathcategory,noffunctions + delta)
else
- texattribute[a_mathcategory] = n + delta
+ settexattribute(a_mathcategory,n + delta)
end
context.mathlabeltext(tag)
else
- texattribute[a_mathcategory] = 1000 + delta
+ settexattribute(a_mathcategory,1000 + delta)
context(tag)
end
end
+
+--
+
+local list
+
+function commands.resetmathattributes()
+ if not list then
+ list = { }
+ for k, v in next, attributes.numbers do
+ if find(k,"^math") then
+ list[#list+1] = v
+ end
+ end
+ end
+ for i=1,#list do
+ settexattribute(list[i],unsetvalue)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkiv b/Master/texmf-dist/tex/context/base/math-ini.mkiv
index 72daa83415c..81ec339d658 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-ini.mkiv
@@ -71,6 +71,26 @@
\setnewconstant\defaultmathfamily \zerocount % 255
+\unexpanded\def\resetmathattributes{\ctxcommand{resetmathattributes()}}
+
+% \unexpanded\def\rawmathcharacter#1% slow but only for tracing
+% {\begingroup
+% \ifmmode
+% \resetmathattributes\Uchar#1%
+% \else
+% \startimath\resetmathattributes\Uchar#1\stopimath
+% \fi
+% \endgroup}
+
+\unexpanded\def\rawmathematics#1% slow but only for tracing
+ {\begingroup
+ \ifmmode
+ \resetmathattributes#1%
+ \else
+ \startimath\resetmathattributes#1\stopimath
+ \fi
+ \endgroup}
+
%D Some measures (maybe spac-mth):
% \def\mathskipsmall {\mskip\thinmuskip}
@@ -594,7 +614,7 @@
^\bgroup
\expandafter\math_prime_indeed_virtual % virtual mess (using funny signal)
\else
-% \expandafter\math_prime_indeed_normal % gets collapsed
+ % \expandafter\math_prime_indeed_normal % gets collapsed
\expandafter\math_prime_indeed_crapped % gets collapsed
\fi}
diff --git a/Master/texmf-dist/tex/context/base/math-map.lua b/Master/texmf-dist/tex/context/base/math-map.lua
index 9a8c8a69c2a..a0d7457d199 100644
--- a/Master/texmf-dist/tex/context/base/math-map.lua
+++ b/Master/texmf-dist/tex/context/base/math-map.lua
@@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['math-map'] = {
license = "see context related readme files"
}
+-- todo: make sparse .. if self
+
--[[ldx--
<p>Remapping mathematics alphabets.</p>
--ldx]]--
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkiv b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
index 00b1da032ab..6502047fbc0 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
@@ -110,7 +110,7 @@
\let\stopMPextensions\relax
-\unexpanded\def\startMPinitializations#1\stopMPinitializations % for all instances, when enables
+\unexpanded\def\startMPinitializations#1\stopMPinitializations % for all instances, when enabled
{\global\t_meta_initializations\expandafter{\the\t_meta_initializations#1}}
\let\stopMPinitializations\relax
@@ -190,6 +190,16 @@
%{\normalexpanded{\meta_analyze_graphicname_indeed[#1::::]}}
{\normalexpanded{\meta_analyze_graphicname_indeed[#1}::::]}
+\def\meta_show_properties_indeed
+ {\writestatus{metapost}{name: \currentMPgraphicname, instance: \currentMPinstance, format: \currentMPformat}}
+
+\let\meta_show_properties\donothing
+
+\installtextracker
+ {metapost.properties}
+ {\let\meta_show_properties\meta_show_properties_indeed}
+ {\let\meta_show_properties\donothing}
+
\unexpanded\def\meta_analyze_graphicname_indeed[#1::#2::#3]% instance ::
{\edef\currentMPgraphicname{#2}%
\ifx\currentMPgraphicname\empty
@@ -200,10 +210,12 @@
\else
\let\currentMPinstance\defaultMPinstance
\fi\fi
- \edef\currentMPformat{\MPinstanceparameter\s!format}}
+ \edef\currentMPformat{\MPinstanceparameter\s!format}%
+ \meta_show_properties}
-\def\currentMPinstance{\defaultMPinstance}
-\def\currentMPformat {\currentMPinstance}
+\def\currentMPgraphicname{\s!unknown}
+\def\currentMPinstance {\defaultMPinstance}
+\def\currentMPformat {\currentMPinstance}
\defineMPinstance[metafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes]
\defineMPinstance[extrafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes]
@@ -432,7 +444,7 @@
\startMPextensions
string contextversion;
- contextversion:="\contextversion";
+ contextversion:="\contextversion"; % expanded
\stopMPextensions
%D \macros
@@ -838,12 +850,12 @@
\def\MPdataMPOfile{\jobname-mpgraph.mpo}
\def\MPdataMPYfile{\jobname-mpgraph.mpy}
-\startMPextensions
+\startMPinitializations
boolean collapse_data; collapse_data:=true;
def data_mpd_file = "\MPdataMPDfile" enddef ;
def data_mpo_file = "\MPdataMPOfile" enddef ;
def data_mpy_file = "\MPdataMPYfile" enddef ;
-\stopMPextensions
+\stopMPinitializations
\unexpanded\def\getMPdata
{\let\MPdata\secondoftwoarguments
@@ -1175,11 +1187,13 @@
vardef ForegroundBox =
unitsquare xysized(HSize,VSize)
enddef ;
- vardef PageFraction =
- if \lastpage>1: (\realfolio-1)/(\lastpage-1) else: 1 fi
- enddef ;
+ PageFraction := 1 ;
\stopMPextensions
+\startMPinitializations
+ PageFraction := if \lastpage>1: (\realfolio-1)/(\lastpage-1) else: 1 fi ;
+\stopMPinitializations
+
%D And some more. These are not really needed since we
%D don't use the normal figure inclusion macros any longer.
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.lua b/Master/texmf-dist/tex/context/base/meta-pdf.lua
index 32e48902a1a..e51290e4214 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.lua
@@ -162,19 +162,19 @@ function mps.rlineto(x,y)
dx = msp[1]
dy = msp[2]
end
- m_stack_path[topofstack+1] = {dx,dy,"l"}
+ m_stack_path[topofstack+1] = { dx, dy, "l" }
end
function mps.translate(tx,ty)
- mpscode(f_translate(tx,ty)
+ mpscode(f_translate(tx,ty))
end
function mps.scale(sx,sy)
- m_stack_concat = {sx,0,0,sy,0,0}
+ m_stack_concat = { sx, 0, 0, sy, 0, 0 }
end
function mps.concat(sx, rx, ry, sy, tx, ty)
- m_stack_concat = {sx,rx,ry,sy,tx,ty}
+ m_stack_concat = { sx, rx, ry, sy, tx, ty }
end
function mps.setlinejoin(d)
diff --git a/Master/texmf-dist/tex/context/base/mlib-run.lua b/Master/texmf-dist/tex/context/base/mlib-run.lua
index 4ff16b18efe..1fc36dd80aa 100644
--- a/Master/texmf-dist/tex/context/base/mlib-run.lua
+++ b/Master/texmf-dist/tex/context/base/mlib-run.lua
@@ -116,15 +116,16 @@ local function i_finder(name,mode,ftype) -- fake message for mpost.map and metaf
return finder(specification,name,mode,ftype)
end
-local function o_finder(name, mode, ftype)
+local function o_finder(name,mode,ftype)
+ -- report_metapost("output file %a, mode %a, ftype %a",name,mode,ftype)
return name
end
local function finder(name, mode, ftype)
if mode == "w" then
- return o_finder(name, mode, ftype)
+ return o_finder(name,mode,ftype)
else
- return i_finder(name, mode, ftype)
+ return i_finder(name,mode,ftype)
end
end
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-sql.tex b/Master/texmf-dist/tex/context/base/mtx-context-sql.tex
new file mode 100644
index 00000000000..16613c2453a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mtx-context-sql.tex
@@ -0,0 +1,64 @@
+%D \module
+%D [ file=mtx-context-sql-tables,
+%D version=2012.10.19,
+%D title=\CONTEXT\ Extra Trickry,
+%D subtitle=SQL Tables,
+%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.
+
+% begin help
+%
+% usage: context --extra=sql --tables [options]
+%
+% --host : hostname (default: localhost)
+% --username : username (default: root)
+% --password : password
+% --database : database of which we want tables
+%
+% example: context --extra=sql --tables --host=localhost --username=root --password=*** --database=test
+%
+% end help
+
+\usemodule
+ [art-01,sql-tables]
+
+\setupbodyfont
+ [10pt]
+
+\setupheader
+ [state=high]
+
+\setuptabulate
+ [before={\blank[big,samepage]}]
+
+\starttext
+
+\startluacode
+
+ require("s-sql-tables")
+
+ local arguments = environment.arguments
+
+ local presets = arguments.presets
+ local preloaded = presets and table.load(presets) or { }
+
+ local presets = {
+ host = preloaded.host or arguments.host or "localhost",
+ username = preloaded.username or arguments.username or "root",
+ password = preloaded.password or arguments.password or "",
+ database = preloaded.database or arguments.database or "",
+ }
+
+
+ if arguments.tables then
+ moduledata.sql.tables.showdefined(presets)
+ end
+
+\stopluacode
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/mult-aux.mkiv b/Master/texmf-dist/tex/context/base/mult-aux.mkiv
index 43d34e08726..6c44a0ec9d0 100644
--- a/Master/texmf-dist/tex/context/base/mult-aux.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-aux.mkiv
@@ -245,9 +245,9 @@
\unexpanded\def\mult_interfaces_install_style_and_color_handler#1#2#3#4%
{\unexpanded\def#2##1##2% style color
- {\edef\currentstyleparameter{#1{##1}}% this name is public
- \edef\currentcolorparameter{#1{##2}}% this name is public
+ {\edef\currentstyleparameter{#1{##1}}% this name is public (can also set color e.g. in underline)
\ifx\currentstyleparameter\empty\else\dousecurrentstyleparameter\fi
+ \edef\currentcolorparameter{#1{##2}}% this name is public (so we do this after the style switch)
\ifx\currentcolorparameter\empty\else\dousecurrentcolorparameter\fi}%
\unexpanded\def#3##1% style
{\edef\currentstyleparameter{#1{##1}}% this name is public
diff --git a/Master/texmf-dist/tex/context/base/mult-def.mkiv b/Master/texmf-dist/tex/context/base/mult-def.mkiv
index ec33171da8c..cb165b055d8 100644
--- a/Master/texmf-dist/tex/context/base/mult-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-def.mkiv
@@ -71,6 +71,7 @@
\def\v!chemicals {chemicals}
\def\v!words {words}
\def\v!combination {combination}
+\def\v!norepeat {norepeat}
\def\s!lcgreek {lcgreek}
\def\s!ucgreek {ucgreek}
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.lua b/Master/texmf-dist/tex/context/base/mult-ini.lua
index 5571ee3b948..3b18738debf 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mult-ini.lua
@@ -307,3 +307,27 @@ function commands.showassignerror(namespace,key,value,line)
context.writestatus("setup",formatters["error in line %a, namespace %a, key %a"](line,namespace,key))
end
end
+
+-- a simple helper
+
+local settings_to_hash = utilities.parsers.settings_to_hash
+
+local makesparse = function(t)
+ for k, v in next, t do
+ if not v or v == "" then
+ t[k] = nil
+ end
+ end
+ return t
+end
+
+function interfaces.checkedspecification(specification)
+ local kind = type(specification)
+ if kind == "table" then
+ return makesparse(specification)
+ elseif kind == "string" and specification ~= "" then
+ return makesparse(settings_to_hash(specification))
+ else
+ return { }
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkiv b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
index 52f9255c8ec..09fc5daf0ae 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
@@ -203,7 +203,7 @@
\unexpanded\def\definesystemvariable#1{\expandafter\edef\csname\??prefix#1\endcsname{\@@prefix#1}}
\definesystemvariable{ms}
-
+
%D \macros
%D {selectinterface,
%D defaultinterface, currentinterface, currentresponses}
diff --git a/Master/texmf-dist/tex/context/base/mult-low.lua b/Master/texmf-dist/tex/context/base/mult-low.lua
index d5848e5c70f..47e31978bfe 100644
--- a/Master/texmf-dist/tex/context/base/mult-low.lua
+++ b/Master/texmf-dist/tex/context/base/mult-low.lua
@@ -140,6 +140,9 @@ return {
"newlanguage", "newfamily", "newfam", "newhelp", -- not used
--
"then",
+ "begcsname",
+ --
+ "strippedcsname",
--
"firstargumentfalse", "firstargumenttrue",
"secondargumentfalse", "secondargumenttrue",
@@ -232,11 +235,11 @@ return {
--
"wait", "writestatus", "define", "defineexpandable", "redefine",
--
- "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure",
+ "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured",
--
"installcorenamespace",
--
- "getvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue",
+ "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue",
"resetvalue", "undefinevalue", "ignorevalue",
"setuvalue", "setuevalue", "setugvalue", "setuxvalue",
--
@@ -264,7 +267,7 @@ return {
"gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments",
"gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals",
--
- "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs",
+ "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "dowith",
--
"newconstant", "setnewconstant", "newconditional", "settrue", "setfalse", "setconstant",
"newmacro", "setnewmacro", "newfraction",
diff --git a/Master/texmf-dist/tex/context/base/mult-sys.mkiv b/Master/texmf-dist/tex/context/base/mult-sys.mkiv
index c184d91b5c9..f0db9fa6708 100644
--- a/Master/texmf-dist/tex/context/base/mult-sys.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-sys.mkiv
@@ -81,6 +81,7 @@
\definesystemconstant {chinese} \definesystemconstant {cn}
\definesystemconstant {japanese} \definesystemconstant {ja}
\definesystemconstant {korean} \definesystemconstant {kr}
+\definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info
%D For proper \UNICODE\ support we need a few font related constants.
diff --git a/Master/texmf-dist/tex/context/base/node-inj.lua b/Master/texmf-dist/tex/context/base/node-inj.lua
index 3e1687426f4..697370cfb25 100644
--- a/Master/texmf-dist/tex/context/base/node-inj.lua
+++ b/Master/texmf-dist/tex/context/base/node-inj.lua
@@ -28,6 +28,7 @@ local injections = nodes.injections
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
+local kern_code = nodecodes.kern
local nodepool = nodes.pool
local newkern = nodepool.kern
@@ -147,7 +148,7 @@ local function trace(head)
local cb = n[a_cursbase]
local cc = n[a_curscurs]
local char = n.char
- report_injections("font %s, char %U, glyph %c",char,n.font,char)
+ report_injections("font %s, char %U, glyph %c",n.font,char,char)
if kp then
local k = kerns[kp]
if k[3] then
@@ -191,6 +192,25 @@ end
-- We can have a fast test on a font being processed, so we can check faster for marks etc
-- but I'll make a context variant anyway.
+local function show_result(head)
+ local current = head
+ local skipping = false
+ while current do
+ local id = current.id
+ if id == glyph_code then
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",current.char,current.width,current.xoffset,current.yoffset)
+ skipping = false
+ elseif id == kern_code then
+ report_injections("kern: %p",current.kern)
+ skipping = false
+ elseif not skipping then
+ report_injections()
+ skipping = true
+ end
+ current = current.next
+ end
+end
+
function injections.handler(head,where,keep)
local has_marks, has_cursives, has_kerns = next(marks), next(cursives), next(kerns)
if has_marks or has_cursives then
@@ -335,32 +355,42 @@ function injections.handler(head,where,keep)
local d = mrks[index]
if d then
local rlmode = d[3]
- if rlmode and rlmode >= 0 then
- -- new per 2010-10-06, width adapted per 2010-02-03
- -- we used to negate the width of marks because in tfm
- -- that makes sense but we no longer do that so as a
- -- consequence the sign of p.width was changed
- local k = wx[p]
- if k then
- -- brill roman: A\char"0300 (but ugly anyway)
- n.xoffset = p.xoffset - p.width + d[1] - k[2] -- was + p.width
+ --
+ local k = wx[p]
+ if k then
+ local x = k[2]
+ local w = k[4]
+ if w then
+ if rlmode and rlmode >= 0 then
+ -- kern(x) glyph(p) kern(w-x) mark(n)
+ n.xoffset = p.xoffset - p.width + d[1] - (w-x)
+ else
+ -- kern(w-x) glyph(p) kern(x) mark(n)
+ n.xoffset = p.xoffset - d[1] - x
+ end
else
- -- lucida: U\char"032F (default+mark)
- n.xoffset = p.xoffset - p.width + d[1] -- 01-05-2011
+ if rlmode and rlmode >= 0 then
+ -- okay for husayni
+ n.xoffset = p.xoffset - p.width + d[1]
+ else
+ -- needs checking: is x ok here?
+ n.xoffset = p.xoffset - d[1] - x
+ end
end
else
- local k = wx[p]
- if k then
- n.xoffset = p.xoffset - d[1] - k[2]
+ if rlmode and rlmode >= 0 then
+ n.xoffset = p.xoffset - p.width + d[1]
else
n.xoffset = p.xoffset - d[1]
end
end
+ -- --
if mk[p] then
n.yoffset = p.yoffset + d[2]
else
n.yoffset = n.yoffset + p.yoffset + d[2]
end
+ --
if nofmarks == 1 then
break
else
@@ -381,23 +411,24 @@ function injections.handler(head,where,keep)
if next(wx) then
for n, k in next, wx do
-- only w can be nil (kernclasses), can be sped up when w == nil
- local x, w = k[2] or 0, k[4]
+ local x = k[2]
+ local w = k[4]
if w then
local rl = k[1] -- r2l = k[6]
local wx = w - x
if rl < 0 then -- KE: don't use r2l here
if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
+ insert_node_before(head,n,newkern(wx)) -- type 0/2
end
if x ~= 0 then
- insert_node_after (head,n,newkern(x))
+ insert_node_after (head,n,newkern(x)) -- type 0/2
end
else
if x ~= 0 then
- insert_node_before(head,n,newkern(x))
+ insert_node_before(head,n,newkern(x)) -- type 0/2
end
if wx ~= 0 then
- insert_node_after(head,n,newkern(wx))
+ insert_node_after (head,n,newkern(wx)) -- type 0/2
end
end
elseif x ~= 0 then
@@ -405,7 +436,7 @@ function injections.handler(head,where,keep)
-- uses kernclasses between glyphs so we're probably safe (KE has a
-- problematic font where marks interfere with rl < 0 in the previous
-- case)
- insert_node_before(head,n,newkern(x))
+ insert_node_before(head,n,newkern(x)) -- a real font kern, type 0
end
end
end
@@ -414,9 +445,9 @@ function injections.handler(head,where,keep)
if k ~= 0 then
local rln = rl[n]
if rln and rln < 0 then
- insert_node_before(head,n,newkern(-k))
+ insert_node_before(head,n,newkern(-k)) -- type 0/2
else
- insert_node_before(head,n,newkern(k))
+ insert_node_before(head,n,newkern(k)) -- type 0/2
end
end
end
@@ -424,6 +455,9 @@ function injections.handler(head,where,keep)
if not keep then
kerns = { }
end
+ -- if trace_injections then
+ -- show_result(head)
+ -- end
return head, true
elseif not keep then
kerns, cursives, marks = { }, { }, { }
@@ -474,6 +508,9 @@ function injections.handler(head,where,keep)
if not keep then
kerns = { }
end
+ -- if trace_injections then
+ -- show_result(head)
+ -- end
return head, true
else
-- no tracing needed
diff --git a/Master/texmf-dist/tex/context/base/node-rul.lua b/Master/texmf-dist/tex/context/base/node-rul.lua
index 09300964ed3..953beb18666 100644
--- a/Master/texmf-dist/tex/context/base/node-rul.lua
+++ b/Master/texmf-dist/tex/context/base/node-rul.lua
@@ -236,7 +236,6 @@ end
local a_viewerlayer = attributes.private("viewerlayer")
local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but acceptable for this purpose
--- check for f and l
if f.id ~= glyph_code then
-- saveguard ... we need to deal with rules and so (math)
return head
@@ -259,9 +258,9 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
local method, offset, continue, dy, order, max = d.method, d.offset, d.continue, d.dy, d.order, d.max
local rulethickness, unit = d.rulethickness, d.unit
local ma, ca, ta = d.ma, d.ca, d.ta
- local colorspace = (ma > 0 and ma) or f[a_colorspace] or 1
- local color = (ca > 0 and ca) or f[a_color]
- local transparency = (ta > 0 and ta) or f[a_transparency]
+ local colorspace = ma > 0 and ma or f[a_colorspace] or 1
+ local color = ca > 0 and ca or f[a_color]
+ local transparency = ta > 0 and ta or f[a_transparency]
local foreground = order == variables.foreground
local e = dimenfactor(unit,fontdata[f.font]) -- what if no glyph node
@@ -283,14 +282,11 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
end
if method == 0 then -- center
offset = 2*offset
--- m = (offset+(level-1)*dy+rulethickness)*e/2
m = (offset+(level-1)*dy)*e/2 + rulethickness/2
else
m = 0
end
for i=1,level do
--- local ht = (offset+(i-1)*dy+rulethickness)*e - m
--- local dp = -(offset+(i-1)*dy-rulethickness)*e + m
local ht = (offset+(i-1)*dy)*e + rulethickness - m
local dp = -(offset+(i-1)*dy)*e + rulethickness + m
local r = new_rule(w,ht,dp)
diff --git a/Master/texmf-dist/tex/context/base/node-rul.mkiv b/Master/texmf-dist/tex/context/base/node-rul.mkiv
index 54a43a006a8..640cc54fe6a 100644
--- a/Master/texmf-dist/tex/context/base/node-rul.mkiv
+++ b/Master/texmf-dist/tex/context/base/node-rul.mkiv
@@ -12,6 +12,7 @@
%C details.
% todo: ex and and em traveling with attribute
+% todo: this will move to typo-rul + ctxcommands
\writestatus{loading}{ConTeXt Core Macros / Bars}
@@ -153,6 +154,9 @@
\unexpanded\def\stopbar
{\endgroup}
+\unexpanded\def\setbar[#1]%
+ {\node_rules_set{#1}}
+
% ungrouped
\newcount\c_node_rules_nesting % todo: same as colors
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.mkiv b/Master/texmf-dist/tex/context/base/pack-rul.mkiv
index 7b040a40038..f2b332b14c8 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.mkiv
+++ b/Master/texmf-dist/tex/context/base/pack-rul.mkiv
@@ -567,7 +567,7 @@
{\anch_mark_region_box\b_framed_normal}
\def\pack_framed_add_background
- {\setbox\b_framed_normal\hbox % was vbox
+ {\setbox\b_framed_normal\hbox % was vbox % see also *1*
{%\pack_framed_forgetall % can be relaxed
\boxmaxdepth\maxdimen
\framedbackgroundoffset\d_framed_backgroundoffset
@@ -1510,20 +1510,43 @@
% \framed[width=2cm,align=middle,location=middle] {location\\equals\\middle}
% B}
-\installframedlocator \v!hanging % best with strut=no
+% \installframedlocator \v!hanging % best with strut=no
+% {}
+% {\dp\b_framed_normal\ht\b_framed_normal
+% \ht\b_framed_normal\zeropoint}
+%
+% \installframedlocator \v!depth
+% {}
+% {\ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax
+% \dp\b_framed_normal\strutdp
+% \box\b_framed_normal}
+%
+% \installframedlocator \v!height
+% {}
+% {\dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax
+% \ht\b_framed_normal\strutht
+% \box\b_framed_normal}
+
+\installframedlocator \v!hanging % best with strut=no *1* / see mail to list by SB
{}
- {\dp\b_framed_normal\ht\b_framed_normal
- \ht\b_framed_normal\zeropoint}
+ {\scratchdimen\ht\b_framed_normal
+ \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}%
+ \dp\b_framed_normal\scratchdimen
+ \ht\b_framed_normal\zeropoint
+ \box\b_framed_normal}
-\installframedlocator \v!depth
+\installframedlocator \v!depth % *1*
{}
- {\ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax
+ {\setbox\b_framed_normal\hbox{\lower\strutdp\box\b_framed_normal}%
+ \ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax
\dp\b_framed_normal\strutdp
\box\b_framed_normal}
-\installframedlocator \v!height
+\installframedlocator \v!height % *1*
{}
- {\dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax
+ {\scratchdimen\dimexpr \ht\b_framed_normal - \strutht \relax
+ \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}%
+ \dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax
\ht\b_framed_normal\strutht
\box\b_framed_normal}
diff --git a/Master/texmf-dist/tex/context/base/page-lay.mkiv b/Master/texmf-dist/tex/context/base/page-lay.mkiv
index bbe60eec5e2..c0d897522e8 100644
--- a/Master/texmf-dist/tex/context/base/page-lay.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-lay.mkiv
@@ -1417,8 +1417,9 @@
\definepapersize [S5] [\c!width=500pt,\c!height=375pt]
\definepapersize [S6] [\c!width=600pt,\c!height=450pt]
\definepapersize [S8] [\c!width=800pt,\c!height=600pt]
-\definepapersize [SW] [\c!width=800pt,\c!height=450pt]
-\definepapersize [SM] [\c!width=720pt,\c!height=450pt]
+\definepapersize [SL] [\c!width=640pt,\c!height=400pt] % low
+\definepapersize [SM] [\c!width=720pt,\c!height=450pt] % medium
+\definepapersize [SW] [\c!width=800pt,\c!height=450pt] % wide
\definepapersize [HD] [\c!width=1920pt,\c!height=1080pt]
\definepapersize [HD+] [\c!width=1920pt,\c!height=1200pt]
diff --git a/Master/texmf-dist/tex/context/base/page-mix.lua b/Master/texmf-dist/tex/context/base/page-mix.lua
index c2cd74b99cc..cf009478736 100644
--- a/Master/texmf-dist/tex/context/base/page-mix.lua
+++ b/Master/texmf-dist/tex/context/base/page-mix.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['page-mix'] = {
+if not modules then modules = { } end modules ["page-mix"] = {
version = 1.001,
comment = "companion to page-mix.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -122,9 +122,11 @@ local function appendinserts(ri,inserts)
end
local function discardtopglue(current,discarded)
+ local size = 0
while current do
local id = current.id
if id == glue_code then
+ size = size + current.spec.width
discarded[#discarded+1] = current
current = current.next
elseif id == penalty_code then
@@ -134,6 +136,7 @@ local function discardtopglue(current,discarded)
while current do
local id = current.id
if id == glue_code then
+ size = size + current.spec.width
discarded[#discarded+1] = current
current = current.next
else
@@ -148,7 +151,7 @@ local function discardtopglue(current,discarded)
break
end
end
- return current
+ return current, size
end
local function stripbottomglue(results,discarded)
@@ -160,7 +163,9 @@ local function stripbottomglue(results,discarded)
local prev = t.prev
if not prev then
break
- elseif t.id == penalty_code then
+ end
+ local id = t.id
+ if id == penalty_code then
if t.penalty == forcedbreak then
break
else
@@ -168,9 +173,13 @@ local function stripbottomglue(results,discarded)
r.tail = prev
t = prev
end
- elseif t.id == glue_code then
+ elseif id == glue_code then
discarded[#discarded+1] = t
- r.height = r.height - t.spec.width
+ local width = t.spec.width
+ if trace_state then
+ report_state("columns %s, discarded bottom glue %p",i,width)
+ end
+ r.height = r.height - width
r.tail = prev
t = prev
else
@@ -205,6 +214,7 @@ local function setsplit(specification) -- a rather large function
local originalwidth = specification.originalwidth or list.width
local originalheight = specification.originalheight or list.height
local current = head
+ local skipped = 0
local height = 0
local depth = 0
local skip = 0
@@ -243,17 +253,18 @@ local function setsplit(specification) -- a rather large function
delta = 0,
}
end
- local column = 1
- local result = results[column]
+ local column = 1
+ local line = 0
+ local result = results[column]
local lasthead = nil
- local rest = nil
+ local rest = nil
local function gotonext()
if head == lasthead then
if trace_state then
report_state("empty column %s, needs more work",column)
end
rest = current
- return false
+ return false, 0
else
lasthead = head
result.head = head
@@ -265,74 +276,69 @@ local function setsplit(specification) -- a rather large function
result.height = height
result.depth = depth
end
- head = current
- height = 0
- depth = 0
- skip = 0
+ head = current
+ height = 0
+ depth = 0
if column == nofcolumns then
column = 0 -- nicer in trace
rest = head
-- lasthead = head
- return false
+ return false, 0
else
+ local skipped
column = column + 1
result = results[column]
- current = discardtopglue(current,discarded)
+ current, skipped = discardtopglue(current,discarded)
head = current
-- lasthead = head
- return true
+ return true, skipped
end
end
- local function checked(advance)
- local total = skip + height + depth + advance
- local delta = total - target
- if trace_detail then
- local currentcolumn = column
- local state
- if delta > threshold then
- result.delta = delta
- if gotonext() then
- state = "next"
- else
- state = "quit"
- end
+ local function checked(advance,where)
+ local total = skip + height + depth + advance
+ local delta = total - target
+ local state = "same"
+ local okay = false
+ local skipped = 0
+ local curcol = column
+ if delta > threshold then
+ result.delta = delta
+ okay, skipped = gotonext()
+ if okay then
+ state = "next"
else
- state = "same"
- end
- if trace_detail then
- report_state("check > column %s, advance %p, total %p, target %p => %a (height %p, depth %p, skip %p)",
- currentcolumn,advance,total,target,state,height,depth,skip)
- end
- return state
- else
- if delta > threshold then
- result.delta = delta
- if gotonext() then
- return "next"
- else
- return "quit"
- end
- else
- return "same"
+ state = "quit"
end
end
+ if trace_detail then
+ report_state("%-7s > column %s, delta %p, threshold %p, advance %p, total %p, target %p, discarded %p => %a (height %p, depth %p, skip %p)",
+ where,curcol,delta,threshold,advance,total,target,state,skipped,height,depth,skip)
+ end
+ return state, skipped
+ end
+ current, skipped = discardtopglue(current,discarded)
+ if trace_detail and skipped ~= 0 then
+ report_state("check > column 1, discarded %p",skipped)
end
- current = discardtopglue(current,discarded)
head = current
while current do
local id = current.id
local nxt = current.next
+local lastcolumn = column
if id == hlist_code or id == vlist_code then
+ line = line + 1
local nxtid = nxt and nxt.id
local inserts, currentskips, nextskips, inserttotal = nil, 0, 0, 0
local advance = current.height -- + current.depth
if nxt and (nxtid == insert_code or nxtid == mark_code) then
nxt, inserts, localskips, insertskips, inserttotal = collectinserts(result,nxt,nxtid)
end
- local state = checked(advance+inserttotal+currentskips)
+ local state, skipped = checked(advance+inserttotal+currentskips,"line")
if trace_state then
- report_state('line > column %s, advance %p, insert %p, height %p, state %a',
- column,advance,inserttotal,height,state)
+ report_state("%-7s > column %s, state %a, line %s, advance %p, insert %p, height %p","line",column,state,line,advance,inserttotal,height)
+ if skipped ~= 0 then
+ report_state("%-7s > column %s, discarded %p","line",column,skipped)
+ end
end
if state == "quit" then
break
@@ -352,10 +358,12 @@ local function setsplit(specification) -- a rather large function
elseif id == glue_code then
local advance = current.spec.width
if advance ~= 0 then
- local state = checked(advance)
+ local state, skipped = checked(advance,"glue")
if trace_state then
- report_state('glue > column %s, advance %p, height %p, state %a',
- column,advance,height,state)
+ report_state("%-7s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height)
+ if skipped ~= 0 then
+ report_state("%-7s > column %s, discarded %p","glue",column,skipped)
+ end
end
if state == "quit" then
break
@@ -367,10 +375,12 @@ local function setsplit(specification) -- a rather large function
elseif id == kern_code then
local advance = current.kern
if advance ~= 0 then
- local state = checked(advance)
+ local state, skipped = checked(advance,"kern")
if trace_state then
- report_state('kern > column %s, advance %p, height %p, state %a',
- column,advance,height,state)
+ report_state("%-7s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height)
+ if skipped ~= 0 then
+ report_state("%-7s > column %s, discarded %p","kern",column,skipped)
+ end
end
if state == "quit" then
break
@@ -384,13 +394,20 @@ local function setsplit(specification) -- a rather large function
if penalty == 0 then
-- don't bother
elseif penalty == forcedbreak then
- if gotonext() then
+ local okay, skipped = gotonext()
+ if okay then
if trace_state then
report_state("cycle: %s, forced column break (same page)",cycle)
+ if skipped ~= 0 then
+ report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ end
end
else
if trace_state then
report_state("cycle: %s, forced column break (next page)",cycle)
+ if skipped ~= 0 then
+ report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ end
end
break
end
@@ -400,7 +417,9 @@ local function setsplit(specification) -- a rather large function
-- club and widow and such i.e. resulting penalties (if we care)
end
end
+if lastcolumn == column then
nxt = current.next -- can have changed
+end
if nxt then
current = nxt
elseif head == lasthead then
@@ -554,15 +573,6 @@ function mixedcolumns.getsplit(result,n)
return new_glue(result.originalwidth)
end
- if trace_state then
- local id = h.id
- if id == hlist_code then
- report_state("flush, column %s, top line: %s",n,nodes.toutf(h.list))
- else
- report_state("flush, column %s, head node: %s",n,nodecodes[id])
- end
- end
-
h.prev = nil -- move up
local strutht = result.strutht
local strutdp = result.strutdp
@@ -573,19 +583,44 @@ function mixedcolumns.getsplit(result,n)
-- local v = vpack(h,"exactly",height)
- v.width = result.originalwidth
if result.alternative == v_global then -- option
result.height = result.maxheight
end
- v.height = lineheight * math.ceil(result.height/lineheight) - strutdp
- v.depth = strutdp
+
+ local ht = 0
+ local dp = 0
+ local wd = result.originalwidth
+
+ local grid = result.grid
+
+ if grid then
+ ht = lineheight * math.ceil(result.height/lineheight) - strutdp
+ dp = strutdp
+ else
+ ht = result.height
+ dp = result.depth
+ end
+
+ v.width = wd
+ v.height = ht
+ v.depth = dp
+
+ if trace_state then
+ local id = h.id
+ if id == hlist_code then
+ report_state("flush, column %s, grid %a, width %p, height %p, depth %p, %s: %s",n,grid,wd,ht,dp,"top line",nodes.toutf(h.list))
+ else
+ report_state("flush, column %s, grid %a, width %p, height %p, depth %p, %s: %s",n,grid,wd,ht,dp,"head node",nodecodes[id])
+ end
+ end
for c, list in next, r.inserts do
- -- tex.setbox("global",c,vpack(nodes.concat(list)))
- -- tex.setbox(c,vpack(nodes.concat(list)))
+ -- tex.setbox("global",c,vpack(nodes.concat(list)))
+ -- tex.setbox(c,vpack(nodes.concat(list)))
texbox[c] = vpack(nodes.concat(list))
r.inserts[c] = nil
end
+
return v
end
diff --git a/Master/texmf-dist/tex/context/base/page-mix.mkiv b/Master/texmf-dist/tex/context/base/page-mix.mkiv
index a4a9bab0987..abdcced1f0d 100644
--- a/Master/texmf-dist/tex/context/base/page-mix.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-mix.mkiv
@@ -41,7 +41,7 @@
%D started out in \MKII. One of the complications of a routine is that it needs
%D to align nicely when mixed in a single column layout. Instead of using all
%D kind of shift juggling in this mechanism we simply switch to grid mode
-%D locally. After all, columns don't look nice when not on a grid. As the grid
+%D locally. After all, columns don't look nice when not on a. As the grid
%D snapper in \MKIV\ is more advanced not that much extra code is needed.
%D We use the command handler but the parent settings are not to be changed.
@@ -257,7 +257,7 @@
\def\page_mix_enable_grid_snapping
{\edef\p_grid{\mixedcolumnsparameter\c!grid}%
\ifx\p_grid\empty
- % maybe listen to main grid setting
+ % just follow the default grid settings
\else
\gridsnappingtrue
\setsystemmode\v!grid
@@ -513,6 +513,7 @@
threshold = \number\d_page_mix_threshold,
balance = "#1",
alternative = "\mixedcolumnsparameter\c!alternative",
+ grid = \ifgridsnapping true\else false\fi,
}}%
\deadcycles\zerocount}
diff --git a/Master/texmf-dist/tex/context/base/phys-dim.mkiv b/Master/texmf-dist/tex/context/base/phys-dim.mkiv
index 4efaa65a8a9..3de6b23449d 100644
--- a/Master/texmf-dist/tex/context/base/phys-dim.mkiv
+++ b/Master/texmf-dist/tex/context/base/phys-dim.mkiv
@@ -159,6 +159,21 @@
\expandafter\high
\fi}
+% we could use a symbolset but how many symbols are there ?
+
+% \definesymbol[units][times][\times]
+% \definesymbol[units][times][\cdots]
+
+% \def\digitstimessymbol{\symbol[units][times]}
+
+% \definesymbol[units][times][\times]
+% \definesymbol[units][times][\cdots]
+% \definesymbol[units][times][\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\emwidth\fi]
+
+\def\digitstimessymbol{\times}
+% \def\digitstimessymbol{\cdot}
+% \def\digitstimessymbol{\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\emwidth\fi}
+
\unexpanded\def\digitszeropadding {\hphantom{0}}
\unexpanded\def\digitsnegative {\phys_digits_normalized{0}{\phys_digits_raised{\textminus}}}
\unexpanded\def\digitspositive {\phys_digits_normalized{0}{\phys_digits_raised{\textplus}}}
@@ -170,9 +185,9 @@
\unexpanded\def\digitsseparatorspace{\hphantom{.}}
\unexpanded\def\digitssignspace {\hphantom{\digitsminus}}
\unexpanded\def\digitshighspace {\hphantom{\digitspositive}}
-\unexpanded\def\digitspower #1{\times10\phys_digits_raised{#1}}
-\unexpanded\def\digitspowerplus #1{\times10\phys_digits_raised{\digitsplus#1}}
-\unexpanded\def\digitspowerminus #1{\times10\phys_digits_raised{\digitsminus#1}}
+\unexpanded\def\digitspower #1{\digitstimessymbol10\phys_digits_raised{#1}}
+\unexpanded\def\digitspowerplus #1{\digitstimessymbol10\phys_digits_raised{\digitsplus#1}}
+\unexpanded\def\digitspowerminus #1{\digitstimessymbol10\phys_digits_raised{\digitsminus#1}}
\unexpanded\def\digitsdigit #1{#1}
\unexpanded\def\normaldigitscommasymbol {,}
@@ -518,15 +533,24 @@
″\else\phys_units_text_doubleprime\fi\else\phys_units_text_doubleprime
\fi}
-\unexpanded\def\checkedtextcelsius
- {\iffontchar\font"2103\relax\iffontchar\font"2109\relax
- ℉\else\phys_units_text_celsius\fi\else\phys_units_text_celsius
- \fi}
-
-\unexpanded\def\checkedtextfahrenheit
- {\iffontchar\font"2109\relax\iffontchar\font"2103\relax
- ℉\else\phys_units_text_fahrenheit\fi\else\phys_units_text_fahrenheit
- \fi}
+% \unexpanded\def\checkedtextcelsius
+% {\ifmmode
+% \phys_units_text_celsius
+% \else\iffontchar\font"2103\relax
+% ℃\else\phys_units_text_celsius
+% \fi\fi}
+%
+% \unexpanded\def\checkedtextfahrenheit
+% {\ifmmode
+% \phys_units_text_fahrenheit
+% \else\iffontchar\font"2109\relax
+% ℉\else\phys_units_text_fahrenheit
+% \fi\fi}
+%
+% % but, as users don't like this ...
+
+\let\checkedtextcelsius \phys_units_text_celsius
+\let\checkedtextfahrenheit\phys_units_text_fahrenheit
\setelementnature[unit] [mixed]
\setelementnature[quantity][mixed]
diff --git a/Master/texmf-dist/tex/context/base/s-art-01.mkiv b/Master/texmf-dist/tex/context/base/s-art-01.mkiv
index 046c35cc1e4..e2584a35784 100644
--- a/Master/texmf-dist/tex/context/base/s-art-01.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-art-01.mkiv
@@ -1,18 +1,36 @@
+\unprotect
+
\startmodule[art-01]
-% \showframe
+\definemeasure [article:margin] [\paperheight/15]
+\definemeasure [overview:margin] [\paperheight/30]
-\unprotect
+\definelayout
+ [article]
+ [\c!topspace=\measure{article:margin},
+ \c!bottomspace=\measure{article:margin},
+ \c!backspace=\measure{article:margin},
+ \c!header=\measure{overview:margin},
+ \c!footer=0pt,
+ \c!width=\v!middle,
+ \c!height=\v!middle]
-\setuplayout
- [\c!topspace=2cm,
- \c!bottomspace=2.5cm,
+
+\definelayout
+ [overview]
+ [\c!topspace=\measure{overview:margin},
+ \c!bottomspace=\measure{overview:margin},
+ \c!backspace=\measure{overview:margin},
+ \c!header=\measure{overview:margin},
+ \c!footer=0pt,
\c!width=\v!middle,
- \c!height=\v!middle,
- \c!footer=0pt]
+ \c!height=\v!middle]
+
+\setuplayout
+ [article]
\setupbodyfont
- [dejavu]
+ [dejavu,10pt] % 12pt is just to large and we use this for all kind of demos
\setupwhitespace
[\v!big]
@@ -37,7 +55,7 @@
\c!after=]
\setuplist
- [\c!interaction=\v!all]
+ [\c!interaction=\v!all]
\protect
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv
index 0edb19120f9..9b6211c2b57 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv
@@ -11,6 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% sort of obsolete
+
\startluacode
local fontdata = fonts.hashes.identifiers
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-11.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-11.mkiv
deleted file mode 100644
index a91e069ea64..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-11.mkiv
+++ /dev/null
@@ -1,73 +0,0 @@
-%D \module
-%D [ file=s-fnt-11,
-%D version=2006.02.01, % or so
-%D title=\CONTEXT\ Style File,
-%D subtitle=Listing Installed Fonts,
-%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 code usd to be in the kernel but since it's hardly used
-%D it's now a module.
-%D
-%D \starttyping
-%D \showinstalledfonts[officinasans.*][all]
-%D \showinstalledfonts[officinaserif.*][all]
-%D \showinstalledfonts[officina.*itc.*][all]
-%D
-%D \showinstalledfonts[officina.*itc.*][all,new]
-%D \stoptyping
-
-\startluacode
-function fonts.names.table(pattern,reload,all)
- local t = fonts.names.list(pattern,reload)
- if t then
- local NC, NR, HL = context.NC, context.NR, context.HL
- context.start()
- context.nonknuthmode()
- context.starttabulate { "|T|T|T|T|T|" }
- NC(false,hashname)
- NC(false,type)
- NC(false,fontname)
- NC(false,filename)
- NC() NR() HL()
- for v,tv in table.sortedpairs(t) do
- local kind, name, file = tv[1], tv[2], tv[3]
- if all or v == string.lower(name) then
- if kind and name and file then
- NC(false,v)
- NC(false,kind)
- NC(false,name)
- NC(false,file)
- NC() NR()
- else
- logs.report("font table", "skipping %s", v)
- end
- end
- end
- context.stoptabulate()
- context.stop()
- end
-end
-\stopluacode
-
-\unprotect
-
-\def\showinstalledfonts
- {\dodoubleempty\doshowinstalledfonts}
-
-\def\doshowinstalledfonts[#1][#2]%
- {\bgroup
- \def\pattern{#1}%
- \def\all{false}%
- \def\reload{false}%
- \doifnothing\pattern{\def\pattern{.*}}%
- \processallactionsinset[#2][\v!new=>\def\reload{true},\v!all=>\def\all{true}]%
- \ctxlua{fonts.names.table("#1",\reload,\all)}%
- \egroup}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-23.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-23.mkiv
deleted file mode 100644
index 17fc5463d86..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-23.mkiv
+++ /dev/null
@@ -1,290 +0,0 @@
-%D \module
-%D [ file=s-fnt-23,
-%D version=2009.03.04,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Tracing Feature Application (3),
-%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.
-
-\startluacode
- moduledata.fonts = moduledata.fonts or { }
-
- local fontdata = fonts.hashes.identifiers
-
- local last_data = nil -- still relevant
- local format = string.format
-
- function moduledata.fonts.show_shape(n)
- local tfmdata = fontdata[font.current()]
- -- local _, tfmdata = fonts.definers.define { name = fontname, size = fontsize }
- last_data = tfmdata
- local charnum = tonumber(n)
- if not charnum then
- -- charnum = tfmdata.unicodes[n]
- charnum = fonts.helpers.nametoslot(n)
- end
- local c = tfmdata.characters[charnum]
- local d = tfmdata.descriptions[charnum]
- local parameters = tfmdata.parameters
- if d then
- local factor = (parameters.size/parameters.units)*((7200/7227)/65536)
- local llx, lly, urx, ury = unpack(d.boundingbox)
- llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor
- local width, italic = (d.width or 0)*factor, (d.italic or 0)*factor
- local top_accent, bot_accent = (d.top_accent or 0)*factor, (d.bot_accent or 0)*factor
- local anchors, math = d.anchors, d.math
- context.startMPcode()
- context("pickup pencircle scaled .25bp ; ")
- context('picture p ; p := image(draw textext.drt("\\gray\\char%s");); draw p ;',charnum)
- context('draw (%s,%s)--(%s,%s)--(%s,%s)--(%s,%s)--cycle withcolor green ;',llx,lly,urx,lly,urx,ury,llx,ury)
- context('draw (%s,%s)--(%s,%s) withcolor green ;',llx,0,urx,0)
- context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;')
- context("defaultscale := 0.05 ; ")
- -- inefficient but non critical
- local function slant_1(v,dx,dy,txt,xsign,ysign,loc,labloc)
- if #v > 0 then
- local l = { }
- for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
- if h and k then
- l[#l+1] = format("((%s,%s) shifted (%s,%s))",xsign*k*factor,ysign*h*factor,dx,dy)
- end
- end
- context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1])
- context("draw laddered (%s) withcolor .5white ;",table.concat(l,".."))
- context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l])
- for k, v in ipairs(l) do
- context("draw %s withcolor blue withpen pencircle scaled 1bp;",v)
- end
- end
- end
- local function slant_2(v,dx,dy,txt,xsign,ysign,loc,labloc)
- if #v > 0 then
- local l = { }
- for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
- if h and k then
- l[#l+1] = format("((%s,%s) shifted (%s,%s))",xsign*k*factor,ysign*h*factor,dx,dy)
- end
- end
- if loc == "top" then
- context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[#l])
- else
- context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1])
- end
- for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
- if h and k then
- context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[kk])
- end
- end
- end
- end
- if math then
- local kerns = math.kerns
- if kerns then
- for _, slant in ipairs { slant_1, slant_2 } do
- for k,v in pairs(kerns) do
- if k == "top_right" then
- slant(v,width+italic,0,k,1,1,"top","ulft")
- elseif k == "bottom_right" then
- slant(v,width,0,k,1,1,"bot","lrt")
- elseif k == "top_left" then
- slant(v,0,0,k,-1,1,"top","ulft")
- elseif k == "bottom_left" then
- slant(v,0,0,k,-1,1,"bot","lrt")
- end
- end
- end
- end
- end
- local function show(x,y,txt)
- local xx, yy = x*factor, y*factor
- context("draw (%s,%s) withcolor blue withpen pencircle scaled 1bp;",xx,yy)
- context('label.top("\\type{%s}",(%s,%s-2bp)) ;',txt,xx,yy)
- context('label.bot("(%s,%s)",(%s,%s+2bp)) ;',x,y,xx,yy)
- end
- if anchors then
- local a = anchors.baselig
- if a then
- for k, v in pairs(a) do
- for kk, vv in ipairs(v) do
- show(vv[1],vv[2],k .. ":" .. kk)
- end
- end
- end
- local a = anchors.mark
- if a then
- for k, v in pairs(a) do
- show(v[1],v[2],k)
- end
- end
- local a = anchors.basechar
- if a then
- for k, v in pairs(a) do
- show(v[1],v[2],k)
- end
- end
- local ba = anchors.centry
- if a then
- for k, v in pairs(a) do
- show(v[1],v[2],k)
- end
- end
- local a = anchors.cexit
- if a then
- for k, v in pairs(a) do
- show(v[1],v[2],k)
- end
- end
- end
- if italic ~= 0 then
- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury)
- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury)
- context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,ury)
- context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,ury)
- context('label.rt("%s",(%s-2bp,%s-1bp));',d.italic,width+italic,ury)
- end
- if top_accent ~= 0 then
- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,ury)
- context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,ury)
- context('label.top("%s",(%s,%s-1bp));',d.top_accent,top_accent,ury)
- end
- if bot_accent ~= 0 then
- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,lly)
- context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,ury)
- context('label.bot("%s",(%s,%s+1bp));',d.bot_accent,bot_accent,lly)
- end
- context('draw origin withcolor red withpen pencircle scaled 1bp;')
- context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
- context("currentpicture := currentpicture scaled 8 ;")
- context.stopMPcode()
- elseif c then
- local factor = (7200/7227)/65536
- context.startMPcode()
- context("pickup pencircle scaled .25bp ; ")
- context('picture p ; p := image(draw textext.drt("\\gray\\char%s");); draw p ;',charnum)
- context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;')
- context("defaultscale := 0.05 ; ")
- local italic, top_accent, bot_accent = (c.italic or 0)*factor, (c.top_accent or 0)*factor, (c.bot_accent or 0)*factor
- local width, height, depth = (c.width or 0)*factor, (c.height or 0)*factor, (c.depth or 0)*factor
- local ury = height
- if italic ~= 0 then
- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury)
- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury)
- context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,height)
- context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,height)
- context('label.rt("%6.3f bp",(%s-2bp,%s-1bp));',italic,width+italic,height)
- end
- if top_accent ~= 0 then
- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,height)
- context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,height)
- context('label.top("%6.3f bp",(%s,%s-1bp));',top_accent,top_accent,height)
- end
- if bot_accent ~= 0 then
- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,height)
- context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,height)
- context('label.bot("%6.3f bp",(%s,%s+1bp));',bot_accent,bot_accent,height)
- end
- context('draw origin withcolor red withpen pencircle scaled 1bp;')
- context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
- context("currentpicture := currentpicture scaled 8 ;")
- context.stopMPcode()
- else
- context("no such shape: %s",n)
- end
- end
-
- function moduledata.fonts.show_all_shapes()
- local tfmdata = fontdata[font.current()]
- -- local _, tfmdata = fonts.definers.define { name = fontname, size = fontsize }
- last_data = tfmdata
- local unicodes, descriptions = tfmdata.unicodes, tfmdata.descriptions
- for unicode, description in fonts.iterators.descriptions(tfmdata) do
- local name = description.name
- context.StartShowGlyphShape(unicode)
- moduledata.fonts.show_shape(unicode)
- context.StopShowGlyphShape()
- end
- end
-
- function moduledata.fonts.show_shape_field(unicode,name)
- local tfmdata = last_data or fontdata[font.current()]
- -- local _, tfmdata = fonts.definers.define { name = fontname, size = fontsize }
- local d = tfmdata.descriptions[unicode]
- if d then
- if name == "unicode" then
- context("U+%04X",unicode)
- else
- d = d[name]
- if d then
- context(d)
- end
- end
- end
- end
-\stopluacode
-
-% we can move all to lua (cld)
-
-\def\GetGlyphField#1#2%
- {\ctxlua{moduledata.fonts.show_shape_field(#1,"#2")}}
-
-\def\StartShowGlyphShape#1%
- {\startTEXpage
- \nonknuthmode % default anyway
- \def\GlyphUnicode{#1}}
-
-\def\StopShowGlyphShape
- {\par
- \midaligned{\tttf\setstrut\strut\GetGlyphField\GlyphUnicode{unicode}: \GetGlyphField\GlyphUnicode{name}}%
- \stopTEXpage}
-
-\def\ShowGlyphShape#1#2#3% name size glyph
- {\begingroup
- \definedfont[#1 at #2]%
- \obeyMPboxdepth
- \ctxlua{moduledata.fonts.show_shape("#3")}%
- \endgroup}
-
-\def\ShowAllGlyphShapes#1#2% name size
- {\begingroup
- \nonknuthmode % default anyway
- \definedfont[#1 at #2]%
- \ctxlua{moduledata.fonts.show_all_shapes()}%
- \endgroup}
-
-\setupcolors
- [state=start]
-
-\continueifinputfile{s-fnt-23.mkiv}
-
-\starttext
-
-% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x62A} \stopTEXpage
-% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x2004} \stopTEXpage
-% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
-% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
-
-% \ShowAllGlyphShapes{simplenaskhi}{100bp}
-% \ShowAllGlyphShapes{xits}{100bp}
-
-\switchtobodyfont[cambria,10pt]
-
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math} {40bp}{0x00066}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math} {40bp}{0x1D453}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math} {40bp}{0x1D43F}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D444}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D447}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x02112}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D432}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D43D}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D44A}\stopTEXpage
-\startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D45D}\stopTEXpage
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-26.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-26.mkiv
deleted file mode 100644
index 904091f0671..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-26.mkiv
+++ /dev/null
@@ -1,82 +0,0 @@
-%D \module
-%D [ file=s-fnt-26,
-%D version=2009.10.26,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Goodies Tables,
-%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.
-
-\startluacode
-
- function document.show_goodies_stylistics(name)
- local goodies = fonts.goodies.load(name)
- local stylistics = goodies and goodies.stylistics
- if stylistics then
- local col, row, type = context.NC, context.NR, context.type
- context.starttabulate { "|l|pl|" }
- col() context("feature") col() context("meaning") col() row()
- for feature, meaning in table.sortedpairs(stylistics) do
- col() type(feature) col() type(meaning) col() row()
- end
- context.stoptabulate()
- end
- end
-
- function document.show_goodies_featuresets(name)
- local goodies = fonts.goodies.load(name)
- local featuresets = goodies and goodies.featuresets
- if featuresets then
- local col, row, type = context.NC, context.NR, context.type
- context.starttabulate { "|l|pl|" }
- col() context("featureset") col() context("definitions") col() row()
- for featureset, definitions in table.sortedpairs(featuresets) do
- col() type(featureset) col()
- for k, v in table.sortedpairs(definitions) do
- type(string.format("%s=%s",k,tostring(v)))
- context.quad()
- end
- col() row()
- end
- context.stoptabulate()
- end
- end
-
- function document.show_goodies_colorschemes(name)
- local goodies = fonts.goodies.load(name)
- local colorschemes = goodies and goodies.colorschemes
- if colorschemes then
- local col, row, type = context.NC, context.NR, context.type
- context.starttabulate { "|l|pl|" }
- col() context("colorscheme") col() context("numbers") col() row()
- for colorscheme, numbers in table.sortedpairs(colorschemes) do
- col() type(colorscheme) col()
- for i=1,#numbers do
- type(i)
- context.quad()
- end
- col() row()
- end
- context.stoptabulate()
- end
- end
-
-\stopluacode
-
-\def\showgoodiesstylistics #1{\ctxlua{document.show_goodies_stylistics ("#1")}}
-\def\showgoodiesfeaturesets #1{\ctxlua{document.show_goodies_featuresets ("#1")}}
-\def\showgoodiescolorschemes#1{\ctxlua{document.show_goodies_colorschemes("#1")}}
-
-\continueifinputfile{s-fnt-26.mkiv}
-
-\starttext
-
- \showgoodiesstylistics {husayni}
- \showgoodiesfeaturesets {husayni}
- \showgoodiescolorschemes{husayni}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-28.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-28.mkiv
deleted file mode 100644
index 778a4c39000..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-28.mkiv
+++ /dev/null
@@ -1,46 +0,0 @@
-%D \module
-%D [ file=s-fnt-28,
-%D version=2010.09.22,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Tracing Names,
-%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.
-
-\startluacode
- function fonts.tracers.files(goodyfile)
- local goodies = fonts.goodies.load(goodyfile)
- if goodies then
- local files = goodies.files
- if files and files.list then
- for filename, specification in table.sortedpairs(files.list) do
- context.start()
- context.dontleavehmode()
- context.definedfont{ filename .. "*default" }
- context("%s-%s-%s-%s-%s",
- specification.name or files.name,
- specification.weight or "normal",
- specification.style or "normal",
- specification.width or "normal",
- specification.variant or "normal")
- context.par()
- context.stop()
- end
- end
- end
- end
-\stopluacode
-
-\continueifinputfile{s-fnt-28.mkiv}
-
-\starttext
-
- \loadfontgoodies[antykwapoltawskiego]
-
- \ctxlua{fonts.tracers.files("antykwapoltawskiego")}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-29.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-29.mkiv
deleted file mode 100644
index f9e0a165879..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-29.mkiv
+++ /dev/null
@@ -1,71 +0,0 @@
-%D \module
-%D [ file=s-fnt-29,
-%D version=2010.09.27,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Tracing Shapes,
-%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.
-
-\startluacode
-
- local fontdata = fonts.hashes.identifiers
-
- function fonts.tracers.shapes() -- todo: ranges
- local NC, NR = context.NC, context.NR
- local char = context.char
- local chrs = fontdata[font.current()].characters
- -- local desc = fontdata[font.current()].descriptions
- context.starttabulate { "|l|c|c|c|c|l|" }
- context.FL()
- NC() context("unicode")
- NC() context("glyph")
- NC() context("shape")
- NC() context("lower")
- NC() context("upper")
- -- NC() context("name")
- NC() context("description")
- NC() NR()
- context.TL()
- for k, v in next, characters.data do
- if chrs[k] then
- NC() context("0x%05X",k)
- NC() char(k)
- NC() char(v.shcode)
- NC() char(v.lccode or k)
- NC() char(v.uccode or k)
- -- NC() context(desc[k].name)
- NC() context(v.description)
- NC() NR()
- end
- end
- context.stoptabulate()
- end
-
-\stopluacode
-
-\continueifinputfile{s-fnt-29.mkiv}
-
-\setupbodyfont[dejavu,tt,9pt]
-
-\setuplayout
- [backspace=1cm,
- topspace=1cm,
- footer=1cm,
- header=0cm,
- height=middle,
- width=middle]
-
-\setupfootertexts
- []
- [\fontname\font\quad\pagenumber]
-
-\starttext
-
- \ctxlua{fonts.tracers.shapes()}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-30.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-30.mkiv
deleted file mode 100644
index 1de27aed378..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-30.mkiv
+++ /dev/null
@@ -1,54 +0,0 @@
-%D \module
-%D [ file=s-fnt-30,
-%D version=2006.05.10, % abou tthen, quite old already
-%D title=\CONTEXT\ Style File,
-%D subtitle=Showing Character Data,
-%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.
-
-% begin info
-%
-% title : show character data
-%
-% comment : show some info about characters in the character database
-% status : experimental, used for luatex testing
-%
-% end info
-
-\startluacode
-function document.show_character_data(n)
- local n = characters.number(n)
- local d = characters.data[n]
- local NC, NR = context.NC, context.NR
- if d then
- local function entry(label,name)
- NC() context(label)
- NC() context(d[name])
- NC() NR()
- end
- context.starttabulate { "|Tl|Tl|]" }
- entry("unicode index" , "unicodeslot")
- entry("context name" , "contextname")
- entry("adobe name" , "adobename")
- entry("category" , "category")
- entry("description" , "description")
- entry("uppercase code", "uccode")
- entry("lowercase code", "lccode")
- entry("specials" , "specials")
- context.stoptabulate()
- end
-end
-\stopluacode
-
-\def\ShowCharacterData#1%
- {\ctxlua{document.show_character_data(#1)}}
-
-% \ShowCharacterData{123}
-% \ShowCharacterData{0x7B}
-
-% \dostepwiserecurse{`A}{`Z}{1}{\ShowCharacterData{#1}}
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-31.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-31.mkiv
deleted file mode 100644
index 24f7f2d7e50..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-31.mkiv
+++ /dev/null
@@ -1,180 +0,0 @@
-%D \module
-%D [ file=s-fnt-31,
-%D version=2011.01.02, % about
-%D title=\CONTEXT\ Style File,
-%D subtitle=Comparing Fonts,
-%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.
-
-% begin info
-%
-% title : compare glyphs in fonts
-%
-% comment : show glyphs in several fonts alongside in order to to compare coverage
-% status : experimental, used for luatex testing
-%
-% end info
-
-\startluacode
-
-local format, upper, find = string.format, string.upper, string.find
-local chardata = characters.data
-
-function fonts.tracers.coverage(fontfiles,pattern) -- todo: patterns
-
- local present, names = { }, { }
- local pattern = pattern and upper(pattern)
-
- for i=1,#fontfiles do
- local fontname = format("testfont-%s",i)
- local fontfile = fontfiles[i]
- local fontsize = tex.dimen.bodyfontsize
- local id, fontdata = fonts.definers.define {
- name = fontfile,
- size = fontsize,
- cs = fontname,
- }
- for k, v in next, fontdata.characters do
- present[k] = true
- end
- names[i] = fontname
- end
-
- local t = { }
-
- context.starttabulate {"|Tr" .. string.rep("|l",#names) .. "|" }
- for i=1,#fontfiles do
- local file = fontfiles[i]
- t[#t+1] = i .. "=" .. file
- context.NC()
- context(i)
- context.NC()
- context.type(file)
- context.NC()
- context.NR()
- end
- context.stoptabulate()
-
- context.setupfootertexts {
- table.concat(t," ")
- }
-
- context.starttabulate {"|Tl" .. string.rep("|c",#names) .. "|Tl|" }
- context.NC()
- context.type("unicode")
- context.NC()
- for i=1,#names do
- context.type(i)
- context.NC()
- end
- context.type("description")
- context.NC()
- context.NR()
- context.HL()
- for k, v in table.sortedpairs(present) do
- local description = chardata[k].description
- if not pattern or (pattern == k) or (description and find(description,pattern)) then
- context.NC()
- context(format("%05X",k))
- context.NC()
- for i=1,#names do
- context.getvalue(names[i])
- context.char(k)
- context.NC()
- end
- context(description)
- context.NC()
- context.NR()
- end
- end
- context.stoptabulate()
-
-end
-
-\stopluacode
-
-\continueifinputfile{s-fnt-31.mkiv}
-
-\setupbodyfont[10pt]
-
-\setupfootertexts
- [style=\ttx]
-
-\setuplayout
- [backspace=1cm,
- topspace=1cm,
- footer=1cm,
- header=0cm,
- height=middle,
- width=middle]
-
-\starttext
-
-% \startluacode
-% fonts.tracers.coverage {
-% "pirat.ttf",
-% }
-% \stopluacode
-
-% \startluacode
-% fonts.tracers.coverage {
-% -- "cambria.ttf",
-% "lbr.afm",
-% "LucidaBrightRegular.ttf",
-% "lbi.afm",
-% "LucidaBrightItalic.ttf",
-% "lbd.afm",
-% "LucidaBrightDemiBold.ttf",
-% "lbdi.afm",
-% "LucidaBrightDemiItalic.ttf",
-% }
-% \stopluacode
-
-% \startluacode
-% fonts.tracers.coverage ( {
-% "LucidaBrightRegular.ttf",
-% "cambria.ttf",
-% "iwona-regular.otf",
-% "texgyrepagella-regular.otf",
-% "texgyretermes-regular.otf",
-% "texgyrebonum-regular.otf",
-% "antpolt-regular.otf",
-% }, "OGONEK")
-% \stopluacode
-
-% \loadfontgoodies[lucida-math]
-% \loadfontgoodies[lm-math]
-
-% \startluacode
-% fonts.tracers.coverage {
-% "LucidaBrightRegular.ttf",
-% "LucidaBrightOne@lucida-math",
-% "cambria.ttc(Cambria Math)",
-% "xits-math.otf",
-% "LMMath10-Regular@lmroman10-math",
-% }
-% \stopluacode
-
-% \loadfontgoodies[px-math]
-% \loadfontgoodies[lm-math]
-
-\startluacode
- fonts.tracers.coverage {
- "cambria.ttc(Cambria Math)",
- "xits-math.otf",
- "stixmath-regular.otf",
- -- "lmmath-regular",
- -- "LMMath10-Regular@lmroman10-math",
- -- "pxmath@px-math",
- -- "lucida-math.otf",
- -- "lucida-math-demi.otf",
- -- "LinLibertine_Re-4.7.5.otf",
- }
-\stopluacode
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-32.mkiv b/Master/texmf-dist/tex/context/base/s-fnt-32.mkiv
deleted file mode 100644
index 20a939a9771..00000000000
--- a/Master/texmf-dist/tex/context/base/s-fnt-32.mkiv
+++ /dev/null
@@ -1,60 +0,0 @@
-%D \module
-%D [ file=s-fnt-31,
-%D version=2011.05.12,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Unicode Math Scripts,
-%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.
-
-\startluacode
- function fonts.tracers.mathscripts()
- context.starttabulate { "|cT|c|cT|c|c|l|" }
- for k, v in table.sortedpairs(table.merged(characters.superscripts,characters.subscripts)) do
- local ck = utf.char(k)
- local cv = utf.char(v)
- local ss = characters.superscripts[k] and "^" or "_"
- context.NC() context("U+%05X",k)
- context.NC() context(ck)
- context.NC() context("U+%05X",v)
- context.NC() context(cv)
- context.NC() context("$x%s = x%s%s$",ck,ss,cv)
- context.NC() context(string.lower(characters.data[k].description))
- context.NC() context.NR()
- end
- context.stoptabulate()
- end
-\stopluacode
-
-\continueifinputfile{s-fnt-32.mkiv}
-
-\setupbodyfont[dejavu,10pt]
-
-% \enabletrackers[math.normalizing]
-% \setupbackend[export=yes]
-
-\setuplayout
- [backspace=1cm,
- topspace=1cm,
- footer=1cm,
- header=0cm,
- height=middle,
- width=middle]
-
-\starttext
-
-\startbuffer
-$e=mc²$ ${}²$ $²$ $x²ᶞ$ $x⁽²⁺²⁼²⁺²⁾$ $x²⁺²⁼²⁺²$ $x₅²$ $x²₅²$
-\stopbuffer
-
-\typebuffer \getbuffer
-
-\startluacode
- fonts.tracers.mathscripts()
-\stopluacode
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-coverage.lua b/Master/texmf-dist/tex/context/base/s-fonts-coverage.lua
new file mode 100644
index 00000000000..db47e57c43f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-coverage.lua
@@ -0,0 +1,113 @@
+if not modules then modules = { } end modules ['s-fonts-coverage'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-coverage.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.coverage = moduledata.fonts.coverage or { }
+
+local upper, format = string.upper, string.format
+local lpegmatch = lpeg.match
+local concat = table.concat
+
+local context = context
+local NC, NR, HL = context.NC, context.NR, context.HL
+local char, bold, getvalue = context.char, context.bold, context.getvalue
+
+local chardata = characters.data
+
+function moduledata.fonts.coverage.showcomparison(specification)
+
+ specification = interfaces.checkedspecification(specification)
+
+ local fontfiles = utilities.parsers.settings_to_array(specification.list or "")
+ local pattern = upper(specification.pattern or "")
+
+ local present = { }
+ local names = { }
+ local files = { }
+
+ if not pattern then
+ -- skip
+ elseif pattern == "" then
+ pattern = nil
+ elseif tonumber(pattern) then
+ pattern = tonumber(pattern)
+ else
+ pattern = lpeg.oneof(utilities.parsers.settings_to_array(pattern))
+ pattern = (1-pattern)^0 * pattern
+ end
+
+ for i=1,#fontfiles do
+ local fontname = format("testfont-%s",i)
+ local fontfile = fontfiles[i]
+ local fontsize = tex.dimen.bodyfontsize
+ local id, fontdata = fonts.definers.define {
+ name = fontfile,
+ size = fontsize,
+ cs = fontname,
+ }
+ if id and fontdata then
+ for k, v in next, fontdata.characters do
+ present[k] = true
+ end
+ names[#names+1] = fontname
+ files[#files+1] = fontfile
+ end
+ end
+
+ local t = { }
+
+ context.starttabulate { "|Tr" .. string.rep("|l",#names) .. "|" }
+ for i=1,#files do
+ local file = files[i]
+ t[#t+1] = i .. "=" .. file
+ NC()
+ context(i)
+ NC()
+ context(file)
+ NC()
+ NR()
+ end
+ context.stoptabulate()
+
+ context.setupfootertexts {
+ table.concat(t," ")
+ }
+
+ context.starttabulate { "|Tl" .. string.rep("|c",#names) .. "|Tl|" }
+ NC()
+ bold("unicode")
+ NC()
+ for i=1,#names do
+ bold(i)
+ NC()
+ end
+ bold("description")
+ NC()
+ NR()
+ HL()
+ for k, v in table.sortedpairs(present) do
+ if k > 0 then
+ local description = chardata[k].description
+ if not pattern or (pattern == k) or (description and lpegmatch(pattern,description)) then
+ NC()
+ context("%05X",k)
+ NC()
+ for i=1,#names do
+ getvalue(names[i])
+ char(k)
+ NC()
+ end
+ context(description)
+ NC()
+ NR()
+ end
+ end
+ end
+ context.stoptabulate()
+
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv
new file mode 100644
index 00000000000..c09d943bcca
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv
@@ -0,0 +1,131 @@
+%D \module
+%D [ file=s-fonts-coverage, % s-fnt-31
+%D version=2011.01.02,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Fonts Coverage,
+%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.
+
+% begin info
+%
+% title : compare glyphs in fonts
+%
+% comment : show glyphs in several fonts alongside in order to to compare coverage
+% status : experimental, used for luatex testing
+%
+% end info
+
+\startmodule[fonts-coverage]
+
+\registerctxluafile{s-fonts-coverage}{}
+
+\installmodulecommandluasingle \showfontcomparison {moduledata.fonts.coverage.showcomparison}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-coverage.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showfontcomparison
+ [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf},
+ pattern=ogonek]
+
+ \page
+
+ % $e=mc²$ ${}²$ $²$ $x²ᶞ$ $x⁽²⁺²⁼²⁺²⁾$ $x²⁺²⁼²⁺²$ $x₅²$ $x²₅²$
+
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = {
+ % "texgyrepagella-math.otf",
+ % "texgyretermes-math.otf",
+ % "texgyrebonum-math.otf",
+ % }
+ % }
+ % \stopluacode
+
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = "pirat.ttf",
+ % }
+ % \stopluacode
+
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = {
+ % "lucidabrightot.otf",
+ % "cambria.ttf",
+ % "iwona-regular.otf",
+ % "texgyrepagella-regular.otf",
+ % "texgyretermes-regular.otf",
+ % "texgyrebonum-regular.otf",
+ % "antpolt-regular.otf",
+ % },
+ % pattern = "OGONEK"
+ % }
+ % \stopluacode
+
+ % \loadfontgoodies[lucida-math]
+ % \loadfontgoodies[lm-math]
+ %
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = {
+ % "LucidaBrightRegular.ttf",
+ % "LucidaBrightOne@lucida-math",
+ % "cambria.ttc(Cambria Math)",
+ % "xits-math.otf",
+ % "LMMath10-Regular@lmroman10-math",
+ % },
+ % }
+ % \stopluacode
+
+ % \loadfontgoodies[px-math]
+ % \loadfontgoodies[lm-math]
+ %
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = {
+ % "cambria.ttc(Cambria Math)",
+ % "xits-math.otf",
+ % -- "stixmath-regular.otf",
+ % "latinmodern-math.otf",
+ % -- "lucidabrightmathot.otf",
+ % -- "lucidabrightmathot-demi.otf",
+ % "texgyrepagella-math.otf",
+ % "texgyretermes-math.otf",
+ % "texgyrebonum-math.otf",
+ % -- "LMMath10-Regular@lmroman10-math",
+ % -- "pxmath@px-math",
+ % -- "txmath@tx-math",
+ % },
+ % }
+ % \stopluacode
+
+ % \startluacode
+ % moduledata.fonts.coverage.showcomparison {
+ % list = {
+ % "dejavuserif.ttf",
+ % "dejavusans.ttf",
+ % "dejavusansmono.ttf",
+ % "lucidabrightot.otf",
+ % "cambria.ttf",
+ % "iwona-regular.otf",
+ % "texgyrepagella-regular.otf",
+ % "texgyretermes-regular.otf",
+ % "texgyrebonum-regular.otf",
+ % "antpolt-regular.otf",
+ % },
+ % pattern = "CELSIUS,FAHRENHEIT"
+ % }
+ % \stopluacode
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-features.lua b/Master/texmf-dist/tex/context/base/s-fonts-features.lua
new file mode 100644
index 00000000000..0a7cf8b132c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-features.lua
@@ -0,0 +1,161 @@
+if not modules then modules = { } end modules ['s-fonts-features'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-features.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.features = moduledata.fonts.features or { }
+
+-- for the moment only otf
+
+local sortedhash = table.sortedhash
+
+local NC, NR, bold = context.NC, context.NR, context.bold
+
+function moduledata.fonts.features.showused(specification)
+
+ specification = interfaces.checkedspecification(specification)
+
+ -- local list = utilities.parsers.settings_to_set(specification.list or "all")
+
+ context.starttabulate { "|T|T|T|T|T|" }
+
+ context.HL()
+
+ NC() bold("feature")
+ NC()
+ NC() bold("description")
+ NC() bold("value")
+ NC() bold("internal")
+ NC() NR()
+
+ context.HL()
+
+ local usedfeatures = fonts.handlers.otf.statistics.usedfeatures
+ local features = fonts.handlers.otf.tables.features
+ local descriptions = fonts.handlers.otf.features.descriptions
+
+ for feature, keys in sortedhash(usedfeatures) do
+ -- if list.all or (list.otf and rawget(features,feature)) or (list.extra and rawget(descriptions,feature)) then
+ local done = false
+ for k, v in sortedhash(keys) do
+ if done then
+ NC()
+ NC()
+ NC()
+ elseif rawget(descriptions,feature) then
+ NC() context(feature)
+ NC() context("+") -- extra
+ NC() context(descriptions[feature])
+ done = true
+ elseif rawget(features,feature) then
+ NC() context(feature)
+ NC() -- otf
+ NC() context(features[feature])
+ done = true
+ else
+ NC() context(feature)
+ NC() context("-") -- unknown
+ NC()
+ done = true
+ end
+ NC() context(k)
+ NC() context(tostring(v))
+ NC() NR()
+ end
+ -- end
+ end
+
+ context.HL()
+
+ context.stoptabulate()
+
+end
+
+local function collectkerns(tfmdata,feature)
+ local combinations = { }
+ local resources = tfmdata.resources
+ local characters = tfmdata.characters
+ local sequences = resources.sequences
+ local lookuphash = resources.lookuphash
+ local feature = feature or "kern"
+ if sequences then
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ if sequence.features and sequence.features[feature] then
+ local lookuplist = sequence.subtables
+ if lookuplist then
+ for l=1,#lookuplist do
+ local lookupname = lookuplist[l]
+ local lookupdata = lookuphash[lookupname]
+ for unicode, data in next, lookupdata do
+ local kerns = combinations[unicode]
+ if not kerns then
+ kerns = { }
+ combinations[unicode] = kerns
+ end
+ for otherunicode, kern in next, data do
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return combinations
+end
+
+local showkernpair = context.showkernpair
+
+function moduledata.fonts.features.showbasekerns(specification)
+ -- assumes that the font is loaded in base mode
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:features:font>")
+ local tfmdata = fonts.hashes.identifiers[id]
+ local done = false
+ for unicode, character in sortedhash(tfmdata.characters) do
+ local kerns = character.kerns
+ if kerns then
+ context.par()
+ for othercode, kern in sortedhash(kerns) do
+ showkernpair(unicode,kern,othercode)
+ end
+ context.par()
+ done = true
+ end
+ end
+ if not done then
+ context("no kern pairs found")
+ context.par()
+ end
+end
+
+function moduledata.fonts.features.showallkerns(specification)
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:features:font>")
+ local tfmdata = fonts.hashes.identifiers[id]
+ local allkerns = collectkerns(tfmdata)
+ local characters = tfmdata.characters
+ if next(allkerns) then
+ for first, pairs in sortedhash(allkerns) do
+ context.par()
+ for second, kern in sortedhash(pairs) do
+ -- local kerns = characters[first].kerns
+ -- if not kerns and pairs[second] then
+ -- -- weird
+ -- end
+ showkernpair(first,kern,second,0)
+ end
+ context.par()
+ end
+ else
+ context("no kern pairs found")
+ context.par()
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-features.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-features.mkiv
new file mode 100644
index 00000000000..8982f734747
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-features.mkiv
@@ -0,0 +1,82 @@
+%D \module
+%D [ file=s-fonts-features, % was s-fnt-41, s-fnt-27
+%D version=2012.11.27, % 2010.02.22
+%D title=\CONTEXT\ Style File,
+%D subtitle=Features,
+%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[s-fonts-features]
+
+\registerctxluafile{s-fonts-features}{}
+
+\installmodulecommandluasingle \showusedfeatures {moduledata.fonts.features.showused}
+\installmodulecommandluasingle \showallkerns {moduledata.fonts.features.showallkerns}
+\installmodulecommandluasingle \showbasekerns {moduledata.fonts.features.showbasekerns}
+
+\def\kernpairheight{\strutheight}
+\def\kernpairdepth {\strutdepth}
+\def\kernpairwidth {\onepoint}
+
+\unexpanded\def\showkernpair#1#2#3% first second kern
+ {\dontleavehmode
+ \hbox \bgroup
+ \scratchdimen#2\scaledpoint
+ \kern\fontcharwd\font#1\relax
+ \ifdim\scratchdimen>\zeropoint
+ \bgroup
+ \darkgreen
+ \vrule width \scratchdimen height \kernpairheight depth \kernpairdepth
+ \egroup
+ \kern-\scratchdimen
+ \else\ifdim\scratchdimen<\zeropoint
+ \kern\scratchdimen
+ \bgroup
+ \darkred
+ \vrule width -\scratchdimen height \kernpairheight depth \kernpairdepth
+ \egroup
+ \else
+ \kern-.5\dimexpr\kernpairwidth\relax
+ \bgroup
+ \darkblue
+ \vrule width \kernpairwidth height \kernpairheight depth \kernpairdepth
+ \egroup
+ \kern-.5\dimexpr\kernpairwidth\relax
+ \fi\fi
+ \kern-\fontcharwd\font#1\relax
+ \char#1\relax
+ \char#3\relax
+ \egroup
+ \space}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-features.mkiv}
+
+\usemodule
+ [art-01]
+
+\starttext
+
+ \showusedfeatures \page
+
+ \definefontfeature[default-base][default][mode=base]
+
+ \start
+ \definedfont[Serif*default-base]
+ \showbasekerns
+ \page
+ \stop
+
+ \start
+ \bf
+ \showallkerns
+ \page
+ \stop
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-goodies.lua b/Master/texmf-dist/tex/context/base/s-fonts-goodies.lua
new file mode 100644
index 00000000000..381fc45eabf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-goodies.lua
@@ -0,0 +1,117 @@
+if not modules then modules = { } end modules['s-fonts-goodies'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-goodies.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.goodies = moduledata.fonts.goodies or { }
+
+local NC, NR, HL = context.NC, context.NR, context.HL
+
+local function initialized(specification)
+ specification = interfaces.checkedspecification(specification)
+ local name = specification.name
+ if name then
+ local goodies = fonts.goodies.load(name)
+ if goodies then
+ return specification, goodies
+ end
+ end
+end
+
+function moduledata.fonts.goodies.showstylistics(specification)
+ local specification, goodies = initialized(specification)
+ if goodies then
+ local stylistics = goodies.stylistics
+ if stylistics then
+ context.starttabulate { "|Tl|Tpl|" }
+ HL()
+ NC() context.bold("feature")
+ NC() context.bold("meaning")
+ NC() NR()
+ HL()
+ for feature, meaning in table.sortedpairs(stylistics) do
+ NC() context(feature)
+ NC() context(string.lower(meaning))
+ NC() NR()
+ end
+ HL()
+ context.stoptabulate()
+ end
+ end
+end
+
+function moduledata.fonts.goodies.showfeaturesets(specification)
+ local specification, goodies = initialized(specification)
+ if goodies then
+ local featuresets = goodies.featuresets
+ if featuresets then
+ context.starttabulate { "|Tl|Tpl|" }
+ HL()
+ NC() context.bold("featureset")
+ NC() context.bold("definitions")
+ NC() NR()
+ HL()
+ for featureset, definitions in table.sortedpairs(featuresets) do
+ NC() context.type(featureset) NC()
+ for k, v in table.sortedpairs(definitions) do
+ context("%s=%S",k,v)
+ context.quad()
+ end
+ NC() NR()
+ end
+ HL()
+ context.stoptabulate()
+ end
+ end
+end
+
+function moduledata.fonts.goodies.showcolorschemes(specification)
+ local specification, goodies = initialized(specification)
+ if goodies then
+ local colorschemes = goodies.colorschemes
+ if colorschemes then
+ context.starttabulate { "|Tl|Tpl|" }
+ HL()
+ NC() context.bold("colorscheme")
+ NC() context.bold("numbers")
+ NC() NR()
+ HL()
+ for colorscheme, numbers in table.sortedpairs(colorschemes) do
+ NC() context.type(colorscheme) NC()
+ for i=1,#numbers do
+ context(i)
+ context.quad()
+ end
+ NC() NR()
+ end
+ HL()
+ context.stoptabulate()
+ end
+ end
+end
+
+function moduledata.fonts.goodies.showfiles(specification)
+ local specification, goodies = initialized(specification)
+ if goodies then
+ local files = goodies.files
+ if files and files.list then
+ for filename, specification in table.sortedpairs(files.list) do
+ context.start()
+ context.dontleavehmode()
+ context.definedfont{ filename .. "*default" }
+ context("%s-%s-%s-%s-%s",
+ specification.name or files.name,
+ specification.weight or "normal",
+ specification.style or "normal",
+ specification.width or "normal",
+ specification.variant or "normal")
+ context.par()
+ context.stop()
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv
new file mode 100644
index 00000000000..f070818251b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv
@@ -0,0 +1,37 @@
+%D \module
+%D [ file=s-fonts-goodies, % s-fnt-26, s-fnt-28
+%D version=2009.10.26,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Goodies Tables,
+%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 More tables will follow here as we have many more goodies by now.
+
+\startmodule[s-fonts-goodies]
+
+\registerctxluafile{s-fonts-goodies}{}
+
+\installmodulecommandluasingle \showfontgoodiesstylistics {moduledata.fonts.goodies.showstylistics}
+\installmodulecommandluasingle \showfontgoodiesfeaturesets {moduledata.fonts.goodies.showfeaturesets}
+\installmodulecommandluasingle \showfontgoodiescolorschemes {moduledata.fonts.goodies.showcolorschemes}
+\installmodulecommandluasingle \showfontgoodiesfiles {moduledata.fonts.goodies.showfiles}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-goodies.mkiv}
+
+\starttext
+
+ \showfontgoodiesstylistics [name=husayni] \page
+ \showfontgoodiesfeaturesets [name=husayni] \page
+ \showfontgoodiescolorschemes[name=husayni] \page
+
+ \showfontgoodiesfiles [name=antykwapoltawskiego] \page
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-missing.lua b/Master/texmf-dist/tex/context/base/s-fonts-missing.lua
new file mode 100644
index 00000000000..829fed45f9e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-missing.lua
@@ -0,0 +1,101 @@
+if not modules then modules = { } end modules ['s-fonts-missing'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-missing.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.missing = moduledata.fonts.missing or { }
+
+local function legend(id)
+ local c = fonts.hashes.identifiers[id]
+ local privates = c.properties.privates
+ if privates then
+ local categories = table.swapped(fonts.loggers.category_to_placeholder)
+ -- context.starttabulate { "|l|c|c|l|" }
+ context.starttabulate { "|l|c|l|" }
+ context.HL()
+ context.NC()
+ context.bold("name")
+ context.NC()
+ context.bold("symbol")
+ context.NC()
+ -- context.bold("node")
+ -- context.NC()
+ context.bold("category")
+ context.NC()
+ context.NR()
+ context.HL()
+ for k, v in table.sortedhash(privates) do
+ local tag = characters.categorytags[categories[k]]
+ if tag and tag ~= "" then
+ context.NC()
+ context(k)
+ context.NC()
+ context.dontleavehmode()
+ context.char(v)
+ context.NC()
+ -- context.dontleavehmode()
+ -- commands.getprivatechar(k)
+ -- context.NC()
+ context(string.lower(tag))
+ context.NC()
+ context.NR()
+ end
+ end
+ context.HL()
+ context.stoptabulate()
+ end
+end
+
+function moduledata.fonts.missing.showlegend(specification)
+ specification = interfaces.checkedspecification(specification)
+ context.begingroup()
+ context.definedfont { "Mono*missing" } -- otherwise no privates added
+ context(function() legend(specification.id or font.current()) end)
+ context.endgroup()
+end
+
+local function missings()
+ local collected = fonts.checkers.getmissing()
+ for filename, list in table.sortedhash(collected) do
+ if #list > 0 then
+ context.starttabulate { "|l|l|" }
+ context.NC()
+ context.bold("filename")
+ context.NC()
+ context(file.basename(filename))
+ context.NC()
+ context.NR()
+ context.NC()
+ context.bold("missing")
+ context.NC()
+ context(#list)
+ context.NC()
+ context.NR()
+ context.stoptabulate()
+ context.starttabulate { "|l|c|l|" }
+ for i=1,#list do
+ local u = list[i]
+ context.NC()
+ context("%U",u)
+ context.NC()
+ context.char(u)
+ context.NC()
+ context(characters.data[u].description)
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+ end
+ end
+end
+
+function moduledata.fonts.missing.showcharacters(specification)
+ context.begingroup()
+ context.definedfont { "Mono*missing" } -- otherwise no privates added
+ context(function() missings() end)
+ context.endgroup()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv
index ef45383a01a..6acef819ed7 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv
@@ -11,59 +11,32 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\startluacode
-
- moduledata.fonts = moduledata.fonts or { }
- moduledata.fonts.tracers = moduledata.fonts.tracers or { }
- moduledata.fonts.tracers.missing = moduledata.fonts.tracers.missing or { }
-
- function moduledata.fonts.tracers.missing.legend()
- local c = fonts.hashes.identifiers[font.current()]
- local p = c.properties.privates
- if p then
- context.starttabulate { "|Tl|c|c|" }
- context.NC()
- context.bold("name")
- context.NC()
- context.bold("character")
- context.NC()
- context.bold("node")
- context.NC()
- context.NR()
- for k, v in table.sortedhash(p) do
- context.NC()
- context(k)
- context.NC()
- context.dontleavehmode()
- context.char(v)
- context.NC()
- context.dontleavehmode()
- commands.getprivatechar(k)
- context.NC()
- context.NR()
- end
- context.stoptabulate()
- end
- end
+\startmodule[s-fonts-missing]
-\stopluacode
+\registerctxluafile{s-fonts-missing}{}
-\def\ModuleFontsTracersMissingLegend
- {\ctxlua{moduledata.fonts.tracers.missing.legend()}}
+\installmodulecommandluasingle \showmissingcharacterslegend {moduledata.fonts.missing.showlegend}
+\installmodulecommandluasingle \showmissingcharacters {moduledata.fonts.missing.showcharacters}
+
+\stopmodule
\continueifinputfile{s-fonts-missing.mkiv}
-\enabletrackers[fonts.missing=replace] % the sooner, the more efficient
+% the sooner, the more efficient, see log for details
-% \usemodule[art-01]
+\enabletrackers[fonts.missing=replace]
% \definefontfeature[default][default][missing=yes] % automatically when enabled
\starttext
- \ModuleFontsTracersMissingLegend
+ \page legend: \blank
+
+ \showmissingcharacterslegend
- ½ ⅓ ¼ ⅕ ⅙ ⅛
+ \page sample: \blank
+
+ ½ ⅓ ¼ ⅕ ⅙ ⅛ {\bf ½ ⅓ ¼ ⅕ ⅙ ⅛} \blank
\startluacode
for i=1,1000 do
@@ -75,5 +48,9 @@
end
\stopluacode
+ \page characters: \blank
+
+ \showmissingcharacters
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-shapes.lua b/Master/texmf-dist/tex/context/base/s-fonts-shapes.lua
new file mode 100644
index 00000000000..b387c11ddd7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-shapes.lua
@@ -0,0 +1,328 @@
+if not modules then modules = { } end modules['s-fonts-shapes'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-shapes.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.shapes = moduledata.fonts.shapes or { }
+
+local fontdata = fonts.hashes.identifiers
+
+local context = context
+local NC, NR = context.NC, context.NR
+local space, dontleavehmode, glyph, getvalue = context.space, context.dontleavehmode, context.glyph, context.getvalue
+local formatters = string.formatters
+
+function moduledata.fonts.shapes.showlist(specification) -- todo: ranges
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
+ local chrs = fontdata[id].characters
+ function char(k)
+ dontleavehmode()
+ glyph(id,k)
+ end
+ local function special(v)
+ local specials = v.specials
+ if specials and #specials > 1 then
+ context("%s:",specials[1])
+ for i=2,#specials do
+ space()
+ char(specials[i])
+ end
+ end
+ end
+ context.begingroup()
+ context.tt()
+ context.starttabulate { "|l|c|c|c|c|l|l|" }
+ context.FL()
+ NC() context.bold("unicode")
+ NC() context.bold("glyph")
+ NC() context.bold("shape")
+ NC() context.bold("lower")
+ NC() context.bold("upper")
+ NC() context.bold("specials")
+ NC() context.bold("description")
+ NC() NR()
+ context.TL()
+ for k, v in next, characters.data do
+ if chrs[k] then
+ NC() context("0x%05X",k)
+ NC() char(k) -- getvalue(cs) context.char(k)
+ NC() char(v.shcode)
+ NC() char(v.lccode or k)
+ NC() char(v.uccode or k)
+ NC() special(v)
+ NC() context.tx(v.description)
+ NC() NR()
+ end
+ end
+ context.stoptabulate()
+ context.endgroup()
+end
+
+function moduledata.fonts.shapes.showlist(specification) -- todo: ranges
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
+ local chrs = fontdata[id].characters
+ function char(k)
+ dontleavehmode()
+ glyph(id,k)
+ end
+ local function special(v)
+ local specials = v.specials
+ if specials and #specials > 1 then
+ context("%s:",specials[1])
+ for i=2,#specials do
+ space()
+ char(specials[i])
+ end
+ end
+ end
+ context.begingroup()
+ context.tt()
+ context.starttabulate { "|l|c|c|c|c|l|l|" }
+ context.FL()
+ NC() context.bold("unicode")
+ NC() context.bold("glyph")
+ NC() context.bold("shape")
+ NC() context.bold("lower")
+ NC() context.bold("upper")
+ NC() context.bold("specials")
+ NC() context.bold("description")
+ NC() NR()
+ context.TL()
+ for k, v in next, characters.data do
+ if chrs[k] then
+ NC() context("0x%05X",k)
+ NC() char(k)
+ NC() char(v.shcode)
+ NC() char(v.lccode or k)
+ NC() char(v.uccode or k)
+ NC() special(v)
+ NC() context.tx(v.description)
+ NC() NR()
+ end
+ end
+ context.stoptabulate()
+ context.endgroup()
+end
+
+local descriptions = nil
+local characters = nil
+
+local function showglyphshape(specification)
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
+ local tfmdata = fontdata[id]
+ local charnum = tonumber(specification.character)
+ if not charnum then
+ charnum = fonts.helpers.nametoslot(n)
+ end
+ context.start()
+ context.dontleavehmode()
+ context.obeyMPboxdepth()
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local parameters = tfmdata.parameters
+ local c = characters[charnum]
+ local d = descriptions[charnum]
+ if d then
+ local factor = (parameters.size/parameters.units)*((7200/7227)/65536)
+ local llx, lly, urx, ury = unpack(d.boundingbox)
+ llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor
+ local width, italic = (d.width or 0)*factor, (d.italic or 0)*factor
+ local top_accent, bot_accent = (d.top_accent or 0)*factor, (d.bot_accent or 0)*factor
+ local anchors, math = d.anchors, d.math
+ context.startMPcode()
+ context("pickup pencircle scaled .25bp ;")
+ context('picture p ; p := image(draw textext.drt("\\getuvalue{%s}\\gray\\char%s");); draw p ;',cs,charnum)
+ context('draw (%s,%s)--(%s,%s)--(%s,%s)--(%s,%s)--cycle withcolor green ;',llx,lly,urx,lly,urx,ury,llx,ury)
+ context('draw (%s,%s)--(%s,%s) withcolor green ;',llx,0,urx,0)
+ context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;')
+ context("defaultscale := 0.05 ; ")
+ -- inefficient but non critical
+ local function slant_1(v,dx,dy,txt,xsign,ysign,loc,labloc)
+ if #v > 0 then
+ local l = { }
+ for kk, vv in ipairs(v) do
+ local h, k = vv.height, vv.kern
+ if h and k then
+ l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ end
+ end
+ context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1])
+ context("draw laddered (%s) withcolor .5white ;",table.concat(l,".."))
+ context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled .25) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l])
+ for k, v in ipairs(l) do
+ context("draw %s withcolor blue withpen pencircle scaled 1bp;",v)
+ end
+ end
+ end
+ local function slant_2(v,dx,dy,txt,xsign,ysign,loc,labloc)
+ if #v > 0 then
+ local l = { }
+ for kk, vv in ipairs(v) do
+ local h, k = vv.height, vv.kern
+ if h and k then
+ l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ end
+ end
+ if loc == "top" then
+ context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[#l])
+ else
+ context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1])
+ end
+ for kk, vv in ipairs(v) do
+ local h, k = vv.height, vv.kern
+ if h and k then
+ context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[kk])
+ end
+ end
+ end
+ end
+ if math then
+ local kerns = math.kerns
+ if kerns then
+ for _, slant in ipairs { slant_1, slant_2 } do
+ for k,v in pairs(kerns) do
+ if k == "top_right" then
+ slant(v,width+italic,0,k,1,1,"top","ulft")
+ elseif k == "bottom_right" then
+ slant(v,width,0,k,1,1,"bot","lrt")
+ elseif k == "top_left" then
+ slant(v,0,0,k,-1,1,"top","ulft")
+ elseif k == "bottom_left" then
+ slant(v,0,0,k,-1,1,"bot","lrt")
+ end
+ end
+ end
+ end
+ end
+ local function show(x,y,txt)
+ local xx, yy = x*factor, y*factor
+ context("draw (%s,%s) withcolor blue withpen pencircle scaled 1bp;",xx,yy)
+ context('label.top("\\type{%s}",(%s,%s-2bp)) ;',txt,xx,yy)
+ context('label.bot("(%s,%s)",(%s,%s+2bp)) ;',x,y,xx,yy)
+ end
+ if anchors then
+ local a = anchors.baselig
+ if a then
+ for k, v in pairs(a) do
+ for kk, vv in ipairs(v) do
+ show(vv[1],vv[2],k .. ":" .. kk)
+ end
+ end
+ end
+ local a = anchors.mark
+ if a then
+ for k, v in pairs(a) do
+ show(v[1],v[2],k)
+ end
+ end
+ local a = anchors.basechar
+ if a then
+ for k, v in pairs(a) do
+ show(v[1],v[2],k)
+ end
+ end
+ local ba = anchors.centry
+ if a then
+ for k, v in pairs(a) do
+ show(v[1],v[2],k)
+ end
+ end
+ local a = anchors.cexit
+ if a then
+ for k, v in pairs(a) do
+ show(v[1],v[2],k)
+ end
+ end
+ end
+ if italic ~= 0 then
+ context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury)
+ context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury)
+ context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,ury)
+ context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,ury)
+ context('label.rt("%s",(%s-2bp,%s-1bp));',d.italic,width+italic,ury)
+ end
+ if top_accent ~= 0 then
+ context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,ury)
+ context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,ury)
+ context('label.top("%s",(%s,%s-1bp));',d.top_accent,top_accent,ury)
+ end
+ if bot_accent ~= 0 then
+ context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,lly)
+ context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,ury)
+ context('label.bot("%s",(%s,%s+1bp));',d.bot_accent,bot_accent,lly)
+ end
+ context('draw origin withcolor red withpen pencircle scaled 1bp;')
+ context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
+ context("currentpicture := currentpicture scaled 8 ;")
+ context.stopMPcode()
+ -- elseif c then
+ -- lastdata, lastunicode = nil, nil
+ -- local factor = (7200/7227)/65536
+ -- context.startMPcode()
+ -- context("pickup pencircle scaled .25bp ; ")
+ -- context('picture p ; p := image(draw textext.drt("\\gray\\char%s");); draw p ;',charnum)
+ -- context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;')
+ -- context("defaultscale := 0.05 ; ")
+ -- local italic, top_accent, bot_accent = (c.italic or 0)*factor, (c.top_accent or 0)*factor, (c.bot_accent or 0)*factor
+ -- local width, height, depth = (c.width or 0)*factor, (c.height or 0)*factor, (c.depth or 0)*factor
+ -- local ury = height
+ -- if italic ~= 0 then
+ -- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width,ury,width,ury)
+ -- context('draw (%s,%s-1bp)--(%s,%s-0.5bp) withcolor blue;',width+italic,ury,width+italic,ury)
+ -- context('draw (%s,%s-1bp)--(%s,%s-1bp) withcolor blue;',width,ury,width+italic,height)
+ -- context('label.lft("\\type{%s}",(%s+2bp,%s-1bp));',"italic",width,height)
+ -- context('label.rt("%6.3f bp",(%s-2bp,%s-1bp));',italic,width+italic,height)
+ -- end
+ -- if top_accent ~= 0 then
+ -- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',top_accent,ury,top_accent,height)
+ -- context('label.bot("\\type{%s}",(%s,%s+1bp));',"top_accent",top_accent,height)
+ -- context('label.top("%6.3f bp",(%s,%s-1bp));',top_accent,top_accent,height)
+ -- end
+ -- if bot_accent ~= 0 then
+ -- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',bot_accent,lly,bot_accent,height)
+ -- context('label.top("\\type{%s}",(%s,%s-1bp));',"bot_accent",top_accent,height)
+ -- context('label.bot("%6.3f bp",(%s,%s+1bp));',bot_accent,bot_accent,height)
+ -- end
+ -- context('draw origin withcolor red withpen pencircle scaled 1bp;')
+ -- context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
+ -- context("currentpicture := currentpicture scaled 8 ;")
+ -- context.stopMPcode()
+ else
+ lastdata, lastunicode = nil, nil
+ context("no such shape: 0x%05X",charnum)
+ end
+ context.stop()
+end
+
+moduledata.fonts.shapes.showglyphshape = showglyphshape
+
+function moduledata.fonts.shapes.showallglypshapes(specification)
+ specification = interfaces.checkedspecification(specification)
+ local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
+ local descriptions = fontdata[id].descriptions
+ for unicode, description in fonts.iterators.descriptions(tfmdata) do
+ context.modulefontsstartshowglyphshape(unicode,description.name)
+ showglyphshape { number = id, character = unicode }
+ context.modulefontsstopshowglyphshape()
+ end
+end
+
+function moduledata.fonts.shapes.showlastglyphshapefield(unicode,name)
+ if not descriptions then
+ -- bad news
+ elseif name == "unicode" then
+ context("U+%05X",descriptions.unicode)
+ else
+ local d = descriptions[name]
+ if d then
+ context(d)
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv
new file mode 100644
index 00000000000..56e3d80a745
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv
@@ -0,0 +1,117 @@
+%D \module
+%D [ file=s-fonts-shapes, % s-fnt-29,
+%D version=2010.09.27,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Tracing Shapes,
+%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[s-fonts-shapes]
+
+\registerctxluafile{s-fonts-shapes}{}
+
+\installmodulecommandluasingle \showfontshapes {moduledata.fonts.shapes.showlist}
+\installmodulecommandluasingle \showglyphshape {moduledata.fonts.shapes.showglypshape}
+\installmodulecommandluatwo \showlastglyphshapefield {moduledata.fonts.shapes.showlastglyphshapefield}
+\installmodulecommandluasingle \showallglyphshapes {moduledata.fonts.shapes.showallglypshapes}
+
+\let\modulefontsstartshowglyphshape\relax
+\let\modulefontsstopshowglyphshape \relax
+
+\unprotect
+
+\startsetups module:showallglyphshapes:start
+
+ \def\modulefontsstartshowglyphshape##1##2{
+ \startTEXpage[\c!offset=\exheight]
+ \edef\lastshownglyphshapefieldunicode{##1}%
+ \edef\lastshownglyphshapefieldname {##2}%
+ \raggedcenter
+ }
+
+ \def\modulefontsstopshowglyphshape {
+ \par
+ \doifsomething {\lastshownglyphshapefieldunicode} {
+ \begingroup
+ \dontleavehmode
+ \tttf
+ \setstrut
+ \strut
+ 0x\uchexnumbers\lastshownglyphshapefieldunicode
+ :\space
+ \lastshownglyphshapefieldname
+ \par
+ \endgroup
+ }
+ \stopTEXpage
+ }
+
+\stopsetups
+
+\protect
+
+% downward compatibility:
+
+\unexpanded\def\ShowGlyphShape#1#2#3% name size glyph
+ {\ctxlua{moduledata.fonts.shapes.showglyphshape { name = "#1", size = "#2", character = "#3" } }}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-shapes.mkiv}
+
+\setupbodyfont[dejavu,9pt]
+
+\setuplayout
+ [backspace=1cm,
+ topspace=1cm,
+ footer=1cm,
+ header=0cm,
+ height=middle,
+ width=middle]
+
+\setupfootertexts
+ []
+ [\saveddefinedfontname\quad\pagenumber]
+
+\starttext
+
+ \savedefinedfont[Bold*default]
+
+ \showfontshapes[number=\saveddefinedfontid]
+
+ \page
+
+ \showfontshapes[name=BoldItalic*default]
+
+ \page
+
+ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x62A} \stopTEXpage
+ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x2004} \stopTEXpage
+ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
+ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
+
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage
+ \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
+
+ \page
+
+ % \showallglyphshapes[name=name:cambria-math,size=100bp]
+ % \showallglyphshapes[name=name:dejavuserif,size=100bp]
+
+\stoptext
+
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-system.lua b/Master/texmf-dist/tex/context/base/s-fonts-system.lua
new file mode 100644
index 00000000000..0c0ad4d863c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-system.lua
@@ -0,0 +1,68 @@
+if not modules then modules = { } end modules ['s-fonts-system'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-system.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- ["zapfinoforteltpro"]={
+-- ["designsize"]=0,
+-- ["familyname"]="zapfinoforteltpro",
+-- ["filename"]="zapfinoforteltpro.otf",
+-- ["fontname"]="zapfinoforteltpro",
+-- ["fontweight"]="regular",
+-- ["format"]="otf",
+-- ["fullname"]="zapfinoforteltpro",
+-- ["maxsize"]=0,
+-- ["minsize"]=0,
+-- ["modification"]=1105543074,
+-- ["modifiers"]="regular",
+-- ["rawname"]="ZapfinoForteLTPro",
+-- ["style"]="normal",
+-- ["subfamily"]="regular",
+-- ["variant"]="normal",
+-- ["weight"]="normal",
+-- ["width"]="normal",
+-- }
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.system = moduledata.fonts.system or { }
+
+local lower = string.lower
+
+local context = context
+local NC, NR, HL = context.NC, context.NR, context.HL
+local bold = context.bold
+
+function moduledata.fonts.system.showinstalled(specification)
+ specification = interfaces.checkedspecification(specification)
+ local pattern = lower(specification.pattern or "")
+ local list = fonts.names.list(pattern,false,true)
+ if list then
+ local files = { }
+ for k, v in next, list do
+ files[file.basename(string.lower(v.filename))] = v
+ end
+ context.starttabulate { "|Tl|Tl|Tl|Tl|Tl|Tl|" }
+ HL()
+ NC() bold("filename")
+ NC() bold("fontname")
+ NC() bold("subfamily")
+ NC() bold("variant")
+ NC() bold("weight")
+ NC() bold("width")
+ NC() NR()
+ HL()
+ for filename, data in table.sortedpairs(files) do
+ NC() context(filename)
+ NC() context(data.fontname)
+ NC() context(data.subfamily)
+ NC() context(data.variant)
+ NC() context(data.weight)
+ NC() context(data.width)
+ NC() NR()
+ end
+ context.stoptabulate()
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-system.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-system.mkiv
new file mode 100644
index 00000000000..6d9082a6bdc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-system.mkiv
@@ -0,0 +1,39 @@
+%D \module
+%D [ file=s-fonts0system, % s-fnt-11,
+%D version=2006.02.01, % or so
+%D title=\CONTEXT\ Style File,
+%D subtitle=Listing Installed Fonts,
+%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 code usd to be in the kernel but since it's hardly used
+%D it's now a module.
+%D
+%D \starttyping
+%D \showinstalledfonts[pattern={officinasans.*}]
+%D \showinstalledfonts[pattern={officinaserif.*}]
+%D \showinstalledfonts[pattern={officina.*itc.*}]
+%D \stoptyping
+
+\startmodule[fonts-system]
+
+\registerctxluafile{s-fonts-system}{}
+
+\installmodulecommandluasingle \showinstalledfonts {moduledata.fonts.system.showinstalled}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-system.mkiv}
+
+\usemodule[art-01] \setuplayout[overview] \setupbodyfont[7pt]
+
+\starttext
+
+ \showinstalledfonts
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-tables.lua b/Master/texmf-dist/tex/context/base/s-fonts-tables.lua
index 3cf1286a7e3..5c91d5ee72c 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-tables.lua
+++ b/Master/texmf-dist/tex/context/base/s-fonts-tables.lua
@@ -6,17 +6,16 @@ if not modules then modules = { } end modules ['s-fonts-tables'] = {
license = "see context related readme files"
}
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.tables = moduledata.fonts.tables or { }
+
local setmetatableindex = table.setmetatableindex
local sortedhash = table.sortedhash
local sortedkeys = table.sortedkeys
local format = string.format
local concat = table.concat
-moduledata.fonts = moduledata.fonts or { }
-moduledata.fonts.tracers = moduledata.fonts.tracers or { }
-moduledata.fonts.tracers.tables = moduledata.fonts.tracers.tables or { }
-
-local tabletracers = moduledata.fonts.tracers.tables
+local tabletracers = moduledata.fonts.tables
local digits = {
dflt = {
@@ -165,17 +164,17 @@ end
tabletracers.typeset = typeset
-function tabletracers.properties(nesting)
+function tabletracers.showproperties(nesting)
local tfmdata = fonts.hashes.identifiers[font.current()]
typeset(tfmdata.properties,fonts.constructors.keys.properties,nesting)
end
-function tabletracers.parameters(nesting)
+function tabletracers.showparameters(nesting)
local tfmdata = fonts.hashes.identifiers[font.current()]
typeset(tfmdata.parameters,fonts.constructors.keys.parameters,nesting)
end
-function tabletracers.positionalfeatures()
+function tabletracers.showpositionings()
local tfmdata = fonts.hashes.identifiers[font.current()]
local resources = tfmdata.resources
if resources then
@@ -187,11 +186,11 @@ function tabletracers.positionalfeatures()
for feature, scripts in sortedhash(gpos) do
for script, languages in sortedhash(scripts) do
context.NC()
- context(feature)
+ context(feature)
context.NC()
- context(script)
+ context(script)
context.NC()
- context(concat(sortedkeys(languages)," "))
+ context(concat(sortedkeys(languages)," "))
context.NC()
context.NR()
end
@@ -207,7 +206,7 @@ end
local dynamics = true
-function tabletracers.substitutionfeatures()
+function tabletracers.showsubstitutions()
local tfmdata = fonts.hashes.identifiers[font.current()]
local resources = tfmdata.resources
if resources then
@@ -282,34 +281,28 @@ function tabletracers.substitutionfeatures()
end
end
-function tabletracers.all(settings) -- not interfaced
+function tabletracers.showall(specification) -- not interfaced
- if type(settings) == "string" then
- settings = utilities.parsers.settings_to_hash(settings)
- end
+ specification = interfaces.checkedspecification(specification)
- local title = settings and settings.title or ""
-
- if title == "" then title = false end
-
- if title then
- context.starttitle { title = title }
+ if specification.title then
+ context.starttitle { title = specification.title }
end
context.startsubject { title = "Properties" }
- tabletracers.properties()
+ tabletracers.showproperties()
context.stopsubject()
context.startsubject { title = "Parameters" }
- tabletracers.parameters()
+ tabletracers.showparameters()
context.stopsubject()
- context.startsubject { title = "Positional features" }
- tabletracers.positionalfeatures()
+ context.startsubject { title = "Positioning features" }
+ tabletracers.showpositionings()
context.stopsubject()
context.startsubject { title = "Substitution features" }
- tabletracers.substitutionfeatures()
+ tabletracers.showsubstitutions()
context.stopsubject()
if title then
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv
index efe1500fb5b..98f9052ca37 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv
@@ -11,12 +11,19 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% todo: make a mtxrun --script --font <name> option
+% todo: make a mtxrun --script font <name> option
+
+\startmodule[s-fonts-tables]
\registerctxluafile{s-fonts-tables}{}
-\def\ModuleFontsTracersTablesAll[#1]%
- {\ctxlua{moduledata.fonts.tracers.tables.all("#1")}}
+\installmodulecommandluasingle \showfonttables {moduledata.fonts.tables.showall}
+\installmodulecommandluasingle \showfontproperties {moduledata.fonts.tables.showproperties}
+\installmodulecommandluasingle \showfontparameters {moduledata.fonts.tables.showparameters}
+\installmodulecommandluasingle \showfontpositionings {moduledata.fonts.tables.showpositionings}
+\installmodulecommandluasingle \showfontsubstitutions {moduledata.fonts.tables.showsubstitutions}
+
+\stopmodule
\continueifinputfile{s-fonts-tables.mkiv}
@@ -26,5 +33,5 @@
[cambria]
\starttext
- \ModuleFontsTracersTablesAll[title=Cambria]
+ \showfonttables[title=Cambria]
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-vectors.lua b/Master/texmf-dist/tex/context/base/s-fonts-vectors.lua
new file mode 100644
index 00000000000..1bac0ae8bad
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-vectors.lua
@@ -0,0 +1,104 @@
+if not modules then modules = { } end modules ['s-fonts-vectors'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-vectors.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.protrusions = moduledata.fonts.protrusions or { }
+moduledata.fonts.expansions = moduledata.fonts.expansions or { }
+
+local NC, NR = context.NC, context.NR
+
+local classes = fonts.protrusions.classes
+local vectors = fonts.protrusions.vectors
+
+function moduledata.fonts.protrusions.showvector(specification)
+ specification = interfaces.checkedspecification(specification)
+ local vector = vectors[specification.name or "?"]
+ if vector then
+ context.blank()
+ context.startcolumns { n = specification.columns or 3 }
+ context.starttabulate { "|T||cw(.5em)||" }
+ for unicode, values in table.sortedhash(vector) do
+ NC() context("%U",unicode)
+ NC() context("%.02f",values[1])
+ NC() context("%c",unicode)
+ NC() context("%.02f",values[2])
+ NC() NR()
+ end
+ context.stoptabulate()
+ context.stopcolumns()
+ context.blank()
+ end
+end
+
+function moduledata.fonts.protrusions.showclass(specification)
+ specification = interfaces.checkedspecification(specification)
+ local class = specification.name and classes[specification.name]
+ local classes = class and { class} or classes
+ context.starttabulate { "|l|l|r|r|r|" }
+ NC() context.bold("name")
+ NC() context.bold("vector")
+ NC() context.bold("factor")
+ NC() context.bold("left")
+ NC() context.bold("right")
+ NC() NR()
+ for name, class in table.sortedhash(classes) do
+ NC() context(name)
+ NC() context(class.vector)
+ NC() context("%.02f",class.factor)
+ NC() context("%.02f",class.left)
+ NC() context("%.02f",class.right)
+ NC() NR()
+ end
+ context.stoptabulate()
+end
+
+local classes = fonts.expansions.classes
+local vectors = fonts.expansions.vectors
+
+function moduledata.fonts.expansions.showvector(specification)
+ specification = interfaces.checkedspecification(specification)
+ local vector = vectors[specification.name or "?"]
+ if vector then
+ context.blank()
+ context.startcolumns { n = specification.columns or 3 }
+ context.starttabulate { "|T|cw(.5em)||" }
+ for unicode, value in table.sortedhash(vector) do
+ NC() context("%U",unicode)
+ NC() context("%c",unicode)
+ NC() context("%.02f",value)
+ NC() NR()
+ end
+ context.stoptabulate()
+ context.stopcolumns()
+ context.blank()
+ end
+end
+
+function moduledata.fonts.expansions.showclass(specification)
+ specification = interfaces.checkedspecification(specification)
+ local class = specification.name and classes[specification.name]
+ local classes = class and { class} or classes
+ context.starttabulate { "|l|l|r|r|r|" }
+ NC() context.bold("name")
+ NC() context.bold("vector")
+ NC() context.bold("step")
+ NC() context.bold("factor")
+ NC() context.bold("stretch")
+ NC() context.bold("shrink")
+ NC() NR()
+ for name, class in table.sortedhash(classes) do
+ NC() context(name)
+ NC() context(class.vector)
+ NC() context("%.02f",class.step)
+ NC() context("%.02f",class.factor)
+ NC() context("% 2i",class.stretch)
+ NC() context("% 2i",class.shrink)
+ NC() NR()
+ end
+ context.stoptabulate()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv b/Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv
new file mode 100644
index 00000000000..371a30cc569
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv
@@ -0,0 +1,72 @@
+%D \module
+%D [ file=s-fonts-vectors, % was s-fnt-51,
+%D version=2012.11.27,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Protrusion and Expansion,
+%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 code is used in the \MKIV\ fonts manual.
+
+\startmodule[s-fonts-vectors]
+
+\registerctxluafile{s-fonts-vectors}{}
+
+\installmodulecommandluasingle \showprotrusionclass {moduledata.fonts.protrusions.showclass}
+\installmodulecommandluasingle \showprotrusionvector {moduledata.fonts.protrusions.showvector}
+\installmodulecommandluasingle \showexpansionclass {moduledata.fonts.expansions.showclass}
+\installmodulecommandluasingle \showexpansionvector {moduledata.fonts.expansions.showvector}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-vectors.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \startsubject[title=protrusion]
+
+ \startsubsubject[title=class]
+ \showprotrusionclass
+ \stopsubsubject
+
+ \startsubsubject[title=vector pure]
+ \showprotrusionvector[name=pure]
+ \stopsubsubject
+
+ \startsubsubject[title=vector punctuation]
+ \showprotrusionvector[name=punctuation]
+ \stopsubsubject
+
+ \startsubsubject[title=vector alpha]
+ \showprotrusionvector[name=alpha]
+ \stopsubsubject
+
+ \startsubsubject[title=vector quality]
+ \showprotrusionvector[name=quality]
+ \stopsubsubject
+
+ \stopsubject
+
+ \page
+
+ \startsubject[title=expansion]
+
+ \startsubsubject[title=class]
+ \showprotrusionclass
+ \stopsubsubject
+
+ \startsubsubject[title=vector quality]
+ \showprotrusionvector[name=quality]
+ \stopsubsubject
+
+ \stopsubject
+
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/s-lan-03.mkiv b/Master/texmf-dist/tex/context/base/s-lan-03.mkiv
deleted file mode 100644
index a490261f47a..00000000000
--- a/Master/texmf-dist/tex/context/base/s-lan-03.mkiv
+++ /dev/null
@@ -1,40 +0,0 @@
-%D \module
-%D [ file=s-lan-03,
-%D version=2010.10.21,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Language Environment 3,
-%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.
-
-\startluacode
-languages.words.tracers = languages.words.tracers or { }
-
-function languages.words.tracers.showwords(filename)
- filename = filename or file.addsuffix(tex.jobname,"words")
- if lfs.isfile(filename) then
- local w = dofile(filename)
- if w then
- -- table.print(w)
- for cname, category in table.sortedpairs(w.categories) do
- for lname, language in table.sortedpairs(category.languages) do
- context.bold(string.format("category: %s, language: %s, total: %s, unique: %s:",
- cname, lname, language.total or 0, language.unique or 0)
- )
- for word, n in table.sortedpairs(language.list) do
- context(" %s (%s)",word,n)
- end
- context.par()
- end
- end
- end
- end
-end
-\stopluacode
-
-% \ctxlua{languages.words.tracers.showwords("words-003.words")}
-
diff --git a/Master/texmf-dist/tex/context/base/s-lan-04.mkiv b/Master/texmf-dist/tex/context/base/s-lan-04.mkiv
deleted file mode 100644
index c04be94667d..00000000000
--- a/Master/texmf-dist/tex/context/base/s-lan-04.mkiv
+++ /dev/null
@@ -1,153 +0,0 @@
-%D \module
-%D [ file=s-lan-04,
-%D version=2011.05.01,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Language Environment 4,
-%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 For Mojca.
-
-\startluacode
- local a_colormodel = attributes.private('colormodel')
-
- local nodecodes = nodes.nodecodes
- local nodepool = nodes.pool
- local disc = nodecodes.disc
- local glyph = nodecodes.glyph
- local quads = fonts.hashes.quads
- local newkern = nodepool.kern
- local newrule = nodepool.rule
- local newglue = nodepool.glue
-
- local get_attribute = node.has_attribute
-
- local tracers = nodes.tracers
- local colortracers = tracers and tracers.colors
- local setnodecolor = colortracers.set
-
- local function identify(head,marked)
- local current, prev = head, nil
- while current do
- local id = current.id
- local next = current.next
- if id == disc then
- if prev and next.id == glyph then -- catch other usage of disc
- marked[#marked+1] = prev
- end
- elseif id == glyph then
- prev = current
- end
- current = next
- end
- end
-
- local function strip(head,marked)
- for i=1,#marked do
- local prev = marked[i]
- nodes.remove(head,prev.next,true)
- end
- end
-
- local function mark(head,marked,what,how)
- for i=1,#marked do
- local prev = marked[i]
- local font = prev.font
- local quad = quads[font]
- head, prev = node.insert_after(head,prev,newkern(-quad/40))
- if what then
- local rule = newrule(quad/20,.75*quad,0)
- head, prev = node.insert_after(head,prev,rule)
- setnodecolor(rule,how,get_attribute(prev,a_colormodel))
- else
- local rule = newrule(quad/20,0,.5*quad)
- head, prev = node.insert_after(head,prev,rule)
- setnodecolor(rule,how,get_attribute(prev,a_colormodel))
- end
- head, prev = node.insert_after(head,prev,newkern(-quad/40))
- head, prev = node.insert_after(head,prev,newglue(0))
- end
- end
-
- local language_one, language_two, tag_one, tag_two
-
- function nodes.showhyphens(head)
- local marked_1, marked_2 = { }, { }
- if language_one then
- for n in node.traverse_id(glyph,head) do
- n.lang = language_one
- end
- lang.hyphenate(head,node.slide(head))
- identify(head,marked_1)
- strip(head,marked_1)
- end
- if language_two then
- for n in node.traverse_id(glyph,head) do
- n.lang = language_two
- end
- lang.hyphenate(head,node.slide(head))
- identify(head,marked_2)
- strip(head,marked_2)
- end
- if tag_one then
- mark(head,marked_1,true,"hyphenation:"..tag_one)
- end
- if tag_two then
- mark(head,marked_2,false,"hyphenation:"..tag_two)
- end
- return head, true
- end
-
- function languages.startcomparepatterns(list)
- local list = utilities.parsers.settings_to_array(list)
- tag_one = list[1]
- tag_two = list[2]
- language_one = tag_one and languages.getnumber(tag_one)
- language_two = tag_two and languages.getnumber(tag_two)
- -- nodes.tasks.appendaction("processors","words","nodes.showhyphens")
- nodes.tasks.appendaction("processors","before","nodes.showhyphens")
- nodes.tasks.enableaction("processors","nodes.showhyphens")
- end
-
- function languages.stopcomparepatterns()
- nodes.tasks.disableaction("processors","nodes.showhyphens")
- end
-
-\stopluacode
-
-\unprotect
-
-\def\startcomparepatterns[#1]%
- {\bgroup
- \language\zerocount
- \setupalign[\v!nothyphenated]%
- \ctxlua{languages.startcomparepatterns("#1")}}
-
-\def\stopcomparepatterns
- {\ctxlua{languages.stopcomparepatterns()}%
- \egroup}
-
-\protect
-
-\definecolor[hyphenation:en] [r=.8]
-\definecolor[hyphenation:de] [g=.8]
-\definecolor[hyphenation:nl] [b=.8]
-
-\continueifinputfile{s-lan-04.mkiv}
-
-\starttext
-
- \startcomparepatterns[en,de]
- \input tufte\par
- \stopcomparepatterns
-
- \startcomparepatterns[de,nl]
- \input tufte\par
- \stopcomparepatterns
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-lan-06.mkiv b/Master/texmf-dist/tex/context/base/s-lan-06.mkiv
deleted file mode 100644
index 43d59a2d131..00000000000
--- a/Master/texmf-dist/tex/context/base/s-lan-06.mkiv
+++ /dev/null
@@ -1,53 +0,0 @@
-%D \module
-%D [ file=s-lan-06,
-%D version=2013.03.22,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Language Environment 6,
-%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.
-
-\startluacode
-
-languages.tracers = languages.tracers or { }
-
-function languages.tracers.showfrequencies(language)
- local t = languages.frequencies.getdata(language or "en")
- context.starttabulate { "|lT|cw(2em)|r|" }
- context.NC()
- context.formatted.rlap("%s: %p",t.language,languages.frequencies.averagecharwidth(t.language))
- context.NC()
- context.NC()
- context.NR()
- context.HL()
- for k, v in table.sortedhash(t.frequencies) do
- context.NC()
- context("%U",k)
- context.NC()
- context("%c",k)
- context.NC()
- context("%0.3f",v)
- context.NC()
- context.NR()
- end
- context.stoptabulate()
-end
-
-\stopluacode
-
-\unexpanded\def\ShowLanguageFrequencies#1%
- {\ctxlua{languages.tracers.showfrequencies("#1")}}
-
-\continueifinputfile{s-lan-06.mkiv}
-
-\starttext
-
- \hsize65\averagecharwidth \input ward \par
-
- \ShowLanguageFrequencies\currentmainlanguage
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-languages-counters.lua b/Master/texmf-dist/tex/context/base/s-languages-counters.lua
new file mode 100644
index 00000000000..436e64a6405
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-counters.lua
@@ -0,0 +1,52 @@
+if not modules then modules = { } end modules ['s-languages-counters'] = {
+ version = 1.001,
+ comment = "companion to s-languages-counters.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.languages = moduledata.languages or { }
+moduledata.languages.counters = moduledata.languages.counters or { }
+
+local data = converters.verbose.data
+
+function moduledata.languages.counters.showverbose(specification)
+ specification = interfaces.checkedspecification(specification)
+ local list = utilities.parsers.settings_to_array(specification.language or "")
+ if #list == 0then
+ return
+ end
+ local used = { }
+ local words = { }
+ for i=1,#list do
+ local ai = list[i]
+ local di = data[ai]
+ if di and di.words then
+ used[#used+1] = ai
+ table.merge(words,di.words)
+ end
+ end
+ context.starttabulate { string.rep("|l",#used) .. "|r|" }
+ context.HL()
+ context.NC()
+ for i=1,#used do
+ context.bold(used[i])
+ context.NC()
+ end
+ context.bold("number")
+ context.NC()
+ context.NR()
+ context.HL()
+ for k, v in table.sortedhash(words) do
+ context.NC()
+ for i=1,#used do
+ context(data[used[i]].words[k] or "")
+ context.NC()
+ end
+ context(k)
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-languages-counters.mkiv b/Master/texmf-dist/tex/context/base/s-languages-counters.mkiv
new file mode 100644
index 00000000000..fa938d65a87
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-counters.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-languages-counters, % s-lan-05,
+%D version=2011.05.01, % older
+%D title=\CONTEXT\ Style File,
+%D subtitle=Language Counters,
+%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[languages-counters]
+
+\registerctxluafile{s-languages-counters}{}
+
+\installmodulecommandluasingle \showverbosecounters {moduledata.languages.counters.showverbose}
+
+\stopmodule
+
+\continueifinputfile{s-languages-counters.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showverbosecounters[language={en,es}]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-languages-frequencies.lua b/Master/texmf-dist/tex/context/base/s-languages-frequencies.lua
new file mode 100644
index 00000000000..16213a41271
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-frequencies.lua
@@ -0,0 +1,33 @@
+if not modules then modules = { } end modules ['s-languages-frequencies'] = {
+ version = 1.001,
+ comment = "companion to s-languages-frequencies.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.languages = moduledata.languages or { }
+moduledata.languages.frequencies = moduledata.languages.frequencies or { }
+
+function moduledata.languages.frequencies.showlist(specification)
+ specification = interfaces.checkedspecification(specification)
+ local t = languages.frequencies.getdata(specification.language or languages.current())
+ context.starttabulate { "|lT|cw(2em)|r|" }
+ context.NC()
+ context.formatted.rlap("%s: %p",t.language,languages.frequencies.averagecharwidth(t.language))
+ context.NC()
+ context.NC()
+ context.NR()
+ context.HL()
+ for k, v in table.sortedhash(t.frequencies) do
+ context.NC()
+ context("%U",k)
+ context.NC()
+ context("%c",k)
+ context.NC()
+ context("%0.3f",v)
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv b/Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv
new file mode 100644
index 00000000000..01a1f5682e2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv
@@ -0,0 +1,38 @@
+%D \module
+%D [ file=s-languages-frequencies, % s-lan-06,
+%D version=2013.03.22,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Language Frequencies,
+%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[languages-frequencies]
+
+\registerctxluafile{s-languages-frequencies}{}
+
+\installmodulecommandluasingle \showfrequencies {moduledata.languages.frequencies.showlist}
+
+\stopmodule
+
+\continueifinputfile{s-languages-frequencies.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \hsize65\averagecharwidth \the\hsize: \input ward \par
+
+ \showfrequencies \page
+
+ \mainlanguage[de]
+
+ \hsize65\averagecharwidth \the\hsize: \input ward \par
+
+ \showfrequencies \page
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua b/Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua
new file mode 100644
index 00000000000..660392f802b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua
@@ -0,0 +1,135 @@
+if not modules then modules = { } end modules ['s-languages-hyphenation'] = {
+ version = 1.001,
+ comment = "companion to s-languages-hyphenation.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.languages = moduledata.languages or { }
+moduledata.languages.hyphenation = moduledata.languages.hyphenation or { }
+
+local a_colormodel = attributes.private('colormodel')
+
+local nodecodes = nodes.nodecodes
+local nodepool = nodes.pool
+local disc = nodecodes.disc
+local glyph = nodecodes.glyph
+local emwidths = fonts.hashes.emwidths
+local exheights = fonts.hashes.exheights
+local newkern = nodepool.kern
+local newrule = nodepool.rule
+local newglue = nodepool.glue
+
+local insert_node_after = node.insert_after
+local traverse_by_id = node.traverse_id
+local hyphenate = lang.hyphenate
+local find_tail = node.slide
+local remove_node = nodes.remove
+
+local tracers = nodes.tracers
+local colortracers = tracers and tracers.colors
+local setnodecolor = colortracers.set
+
+local function identify(head,marked)
+ local current, prev = head, nil
+ while current do
+ local id = current.id
+ local next = current.next
+ if id == disc then
+ if prev and next.id == glyph then -- catch other usage of disc
+ marked[#marked+1] = prev
+ end
+ elseif id == glyph then
+ prev = current
+ end
+ current = next
+ end
+end
+
+local function strip(head,marked)
+ for i=1,#marked do
+ local prev = marked[i]
+ remove_node(head,prev.next,true)
+ end
+end
+
+local function mark(head,marked,w,h,d,how)
+ for i=1,#marked do
+ local prev = marked[i]
+ local font = prev.font
+ local em = emwidths[font]
+ local ex = exheights[font]
+ local width = w*em
+ local rule = newrule(width,h*ex,d*ex)
+ head, prev = insert_node_after(head,prev,newkern(-width/2))
+ head, prev = insert_node_after(head,prev,rule)
+ head, prev = insert_node_after(head,prev,newkern(-width/2))
+ head, prev = insert_node_after(head,prev,newglue(0))
+ setnodecolor(rule,how,prev[a_colormodel])
+ end
+end
+
+local langs, tags, noflanguages = { }, { }, 0
+
+local colorbytag = false
+
+function moduledata.languages.hyphenation.showhyphens(head)
+ if noflanguages > 0 then
+ local marked = { }
+ for i=1,noflanguages do
+ local m = { }
+ local l = langs[i]
+ marked[i] = m
+ for n in traverse_by_id(glyph,head) do
+ n.lang = l
+ end
+ hyphenate(head,find_tail(head))
+ identify(head,m)
+ strip(head,m)
+ end
+ for i=noflanguages,1,-1 do
+ local l = noflanguages - i + 1
+ mark(head,marked[i],1/16,l/2,l/4,"hyphenation:"..(colorbytag and tags[i] or i))
+ end
+ return head, true
+ else
+ return head, false
+ end
+end
+
+local savedlanguage
+
+function moduledata.languages.hyphenation.startcomparepatterns(list)
+ if list and list ~= "" then
+ tags = utilities.parsers.settings_to_array(list)
+ end
+ savedlanguage = tex.language
+ tex.language = 0
+ noflanguages = #tags
+ for i=1,noflanguages do
+ langs[i] = tags[i] and languages.getnumber(tags[i])
+ end
+ nodes.tasks.enableaction("processors","moduledata.languages.hyphenation.showhyphens")
+end
+
+function moduledata.languages.hyphenation.stopcomparepatterns()
+ noflanguages = 0
+ tex.language = savedlanguage or tex.language
+ nodes.tasks.disableaction("processors","moduledata.languages.hyphenation.showhyphens")
+end
+
+function moduledata.languages.hyphenation.showcomparelegend(list)
+ if list and list ~= "" then
+ tags = utilities.parsers.settings_to_array(list)
+ end
+ for i=1,#tags do
+ if i > 1 then
+ context.enspace()
+ end
+ context.color( { "hyphenation:"..(colorbytag and tags[i] or i) }, tags[i])
+ end
+end
+
+nodes.tasks.appendaction("processors","before","moduledata.languages.hyphenation.showhyphens")
+nodes.tasks.disableaction("processors","moduledata.languages.hyphenation.showhyphens")
diff --git a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv b/Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv
new file mode 100644
index 00000000000..769c3d05904
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv
@@ -0,0 +1,75 @@
+%D \module
+%D [ file=s-languages-hyphenation, % s-lan-04,
+%D version=2011.05.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Language Hyphenation,
+%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 For Mojca.
+
+\startmodule[languages-hyphenation]
+
+\registerctxluafile{s-languages-hyphenation}{}
+
+\unprotect
+
+\unexpanded\def\startcomparepatterns
+ {\dosingleempty\module_languages_hyphenation_start}
+
+\unexpanded\def\module_languages_hyphenation_start[#1]%
+ {\begingroup
+ \par
+ % \language\zerocount
+ \setupalign[\v!nothyphenated]%
+ \ctxlua{moduledata.languages.hyphenation.startcomparepatterns("#1")}}
+
+\unexpanded\def\stopcomparepatterns
+ {\par
+ \ctxlua{moduledata.languages.hyphenation.stopcomparepatterns()}%
+ \endgroup}
+
+\installmodulecommandluasingle \showcomparepatternslegend {moduledata.languages.hyphenation.showcomparelegend}
+
+\protect
+
+\definecolor[hyphenation:1] [r=.8]
+\definecolor[hyphenation:2] [g=.8]
+\definecolor[hyphenation:3] [b=.8]
+\definecolor[hyphenation:4] [r=.4,g=.4]
+
+\definecolor[hyphenation:en] [hyphenation:1]
+\definecolor[hyphenation:de] [hyphenation:2]
+\definecolor[hyphenation:nl] [hyphenation:3]
+\definecolor[hyphenation:fr] [hyphenation:4]
+
+\stopmodule
+
+\continueifinputfile{s-languages-hyphenation.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \startsubject{Normal text}
+ \input tufte
+ \stopsubject
+
+ \startsubject{Compare hyphenation points of \showcomparepatternslegend[en,de]}
+ \startcomparepatterns
+ \input tufte \quad (\showcomparepatternslegend)
+ \stopcomparepatterns
+ \stopsubject
+
+ \startsubject{Compare hyphenation points}
+ \startcomparepatterns[de,nl,en,fr]
+ \input tufte \quad (\showcomparepatternslegend)
+ \stopcomparepatterns
+ \stopsubject
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-languages-sorting.lua b/Master/texmf-dist/tex/context/base/s-languages-sorting.lua
new file mode 100644
index 00000000000..82a0827bbd2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-sorting.lua
@@ -0,0 +1,118 @@
+if not modules then modules = { } end modules ['s-languages-system'] = {
+ version = 1.001,
+ comment = "companion to s-languages-system.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.languages = moduledata.languages or { }
+moduledata.languages.sorting = moduledata.languages.sorting or { }
+
+local formatters = string.formatters
+local utfbyte, utfcharacters = utf.byte, utf.characters
+local sortedpairs = table.sortedpairs
+
+local definitions = sorters.definitions
+local constants = sorters.constants
+local replacementoffset = constants.replacementoffset
+
+local currentfont = font.current
+local fontchars = fonts.hashes.characters
+
+local c_darkblue = { "darkblue" }
+local c_darkred = { "darkred" }
+local f_chr = formatters["\\tttf%H"]
+
+local function chr(str,done)
+ if done then
+ context.space()
+ end
+ local c = fontchars[currentfont()]
+ for s in utfcharacters(str) do
+ local u = utfbyte(s)
+ if c[u] then
+ context(s)
+ elseif u > replacementoffset then
+ context.color(c_darkblue, f_chr(u))
+ else
+ context.color(c_darkred, f_chr(u))
+ end
+ end
+ return true
+end
+
+local function map(a,b,done)
+ if done then
+ context.space()
+ end
+ -- context.tttf()
+ chr(a)
+ context("=")
+ chr(b)
+ return true
+end
+
+local function nop()
+ -- context.tttf()
+ context("none")
+end
+
+local function key(data,field)
+ context.NC()
+ context(field)
+ context.NC()
+ context(data[field])
+ context.NC()
+ context.NR()
+end
+
+function moduledata.languages.sorting.showinstalled(tag)
+ if not tag or tag == "" or tag == interfaces.variables.all then
+ for tag, data in sortedpairs(definitions) do
+ moduledata.languages.sorting.showinstalled (tag)
+ end
+ else
+ sorters.update() -- syncs data
+ local data = definitions[tag]
+ if data then
+ context.starttabulate { "|lB|pl|" }
+ key(data,"language")
+ key(data,"parent")
+ key(data,"method")
+ context.NC()
+ context("replacements")
+ context.NC()
+ local replacements = data.replacements
+ if #replacements == 0 then
+ nop()
+ else
+ for i=1,#replacements do
+ local r = replacements[i]
+ map(r[1],r[2],i > 1)
+ end
+ end
+ context.NC()
+ context.NR()
+ context.NC()
+ context("order")
+ context.NC()
+ local orders = data.orders
+ for i=1,#orders do
+ chr(orders[i],i > 1)
+ end
+ context.NC()
+ context.NR()
+ context.NC()
+ context("entries")
+ context.NC()
+ local done = false
+ for k, e in sortedpairs(data.entries) do
+ done = map(k,e,done)
+ end
+ context.NC()
+ context.NR()
+ context.stoptabulate()
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv b/Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv
new file mode 100644
index 00000000000..67acda6f972
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-languages-sorting, % s-lan-02.mkiv
+%D version=2010.09.21,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Language Sorting,
+%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[languages-sorting]
+
+\registerctxluafile{s-languages-sorting}{}
+
+\installmodulecommandluasingle \showinstalledsorting {moduledata.languages.sorting.showinstalled}
+
+\stopmodule
+
+\continueifinputfile{s-languages-sorting.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showinstalledsorting
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-languages-system.lua b/Master/texmf-dist/tex/context/base/s-languages-system.lua
new file mode 100644
index 00000000000..5afc4d4036f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-system.lua
@@ -0,0 +1,35 @@
+if not modules then modules = { } end modules ['s-languages-system'] = {
+ version = 1.001,
+ comment = "companion to s-languages-system.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.languages = moduledata.languages or { }
+moduledata.languages.system = moduledata.languages.system or { }
+
+local NC, NR, HL = context.NC, context.NR, context.HL
+
+function moduledata.languages.system.showinstalled()
+ local numbers = languages.numbers
+ local registered = languages.registered
+ context.starttabulate { "|r|l|l|l|l|" }
+ NC() context("id")
+ NC() context("tag")
+ NC() context("synonyms")
+ NC() context("parent")
+ NC() context("loaded")
+ NC() NR() HL()
+ for i=1,#numbers do
+ local tag = numbers[i]
+ local data = registered[tag]
+ NC() context(data.number)
+ NC() context(tag)
+ NC() context("% t",table.sortedkeys(data.synonyms))
+ NC() context(data.parent)
+ NC() context("%+t",table.sortedkeys(data.used))
+ NC() NR()
+ end
+ context.stoptabulate()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-languages-system.mkiv b/Master/texmf-dist/tex/context/base/s-languages-system.mkiv
new file mode 100644
index 00000000000..36372037433
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-languages-system.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-languages-system, % moved from local s-lan-01
+%D version=2013.05.19,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Installed Languages,
+%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[languages-system]
+
+\registerctxluafile{s-languages-system}{}
+
+\installmodulecommandluasingle \showinstalledlanguages {moduledata.languages.system.showinstalled}
+
+\stopmodule
+
+\continueifinputfile{s-languages-system.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showinstalledlanguages
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-mat-11.mkiv b/Master/texmf-dist/tex/context/base/s-mat-11.mkiv
deleted file mode 100644
index 862872499dc..00000000000
--- a/Master/texmf-dist/tex/context/base/s-mat-11.mkiv
+++ /dev/null
@@ -1,104 +0,0 @@
-\usemodule[s][mat-10]
-
-% rendering
-
-\def\startmathfontlist
- {}
-
-\def\stopmathfontlist
- {}
-
-\def\startmathfontlistentry
- {\blank
- \begingroup}
-
-\def\stopmathfontlistentry
- {\endgroup
- \blank}
-
-\def\mathfontlistentryhexdectit#1#2#3%
- {#1: \char#2\enspace\ruledhbox{\char#2}\enspace#3\par
- \advance\leftskip 1em\relax}
-
-\def\mathfontlistentrywdhtdpic#1#2#3#4%
- {width: #1, height: #2, depth: #3, italic: #4\par}
-
-\def\mathfontlistentryresource#1%
- {virtual: #1\par}
-
-\def\startmathfontlistnext
- {next: }
-
-\def\mathfontlistnextentry#1#2#3%
- {\ifnum#1>1 \space=>\space\fi#2~\ruledhbox{\char#3}}
-
-\def\mathfontlistnextcycle#1%
- {\ifnum#1>1 \space=>\space\fi cycle}
-
-\def\stopmathfontlistnext
- {\par}
-
-\def\startmathfontlisthvariants
- {variants: }
-
-\def\mathfontlisthvariantsentry#1#2#3%
- {\ifnum#1>1 \space=>\space\fi#2~\ruledhbox{\char#3}}
-
-\def\stopmathfontlisthvariants
- {\par}
-
-\def\startmathfontlistvvariants{\startmathfontlisthvariants}
-\def\mathfontlistvvariantsentry{\mathfontlisthvariantsentry}
-\def\stopmathfontlistvvariants {\stopmathfontlisthvariants }
-
-\def\mathfontlistbetweennextandvariants
- {\space=>\space}
-
-\def\startmathfontlistentryclassspec
- {}
-
-\def\stopmathfontlistentryclassspec
- {}
-
-\def\mathfontlistentryclassname#1#2%
- {mathclass: #1, mathname: #2\par}
-
-\def\mathfontlistentrysymbol#1#2%
- {mathsymbol: #1~\ruledhbox{\char#2}\par}
-
-\def\startmathfontlookupvariants
- {lookupvariants: }
-
-\def\stopmathfontlookupvariants
- {\par}
-
-\def\mathfontlookupvariant#1#2#3#4%
- {\ifnum#1>1 ,\space\fi#2:~\char#3 (#4)}
-
-% done
-
-\continueifinputfile{s-mat-11.mkiv}
-
-\setuplayout
- [width=middle,
- height=middle,
- topspace=15mm,
- backspace=15mm,
- bottomspace=15mm,
- header=1cm,
- headerdistance=0.5cm,
- footer=0pt]
-
-\starttext
-% \setupbodyfont[cambria, 12pt] \showmathfontcharacters
-% \setupbodyfont[lmvirtual,12pt] \showmathfontcharacters
-% \setupbodyfont[pxvirtual,12pt] \showmathfontcharacters
-% \setupbodyfont[txvirtual,12pt] \showmathfontcharacters
- \setupbodyfont[palatino, 12pt] \showmathfontcharacters
-% \setupbodyfont[mathtimes,12pt] \showmathfontcharacters
-% \setupbodyfont[stix, 12pt] \showmathfontcharacters
-% \setupbodyfont[xits, 12pt] \showmathfontcharacters
-% \setupbodyfont[lucida, 12pt] \showmathfontcharacters
-% \setupbodyfont[lucidanova, 12pt] \showmathfontcharacters
-\stoptext
-
diff --git a/Master/texmf-dist/tex/context/base/s-mat-10.mkiv b/Master/texmf-dist/tex/context/base/s-math-characters.lua
index 3eaaf688bab..b0a79fcb6e5 100644
--- a/Master/texmf-dist/tex/context/base/s-mat-10.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-math-characters.lua
@@ -1,66 +1,16 @@
-%D \module
-%D [ file=s-mat-10.mkiv, % was: s-fnt-25
-%D version=2009.01.25,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Math Glyph Checking,
-%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.
+if not modules then modules = { } end modules['s-math-characters'] = {
+ version = 1.001,
+ comment = "companion to s-math-characters.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-%D This base module will be cleaned up and extended.
+-- This is one of the oldest cld files but I'm not going to clean it up.
-\unexpanded\def\enableshowmathfontvirtual
- {\ctxlua{fonts.constructors.autocleanup=false}}
+moduledata.math = moduledata.math or { }
+moduledata.math.characters = moduledata.math.characters or { }
-\unexpanded\def\showmathfontcharacters
- {\dodoubleempty\doshowmathfontcharacters}
-
-\def\doshowmathfontcharacters[#1][#2]%
- {\begingroup
- \dontcomplain
- \doifelsenothing{#1}
- {\definedfont[MathRoman*math-text]}
- {\definedfont[#1]}%
- \doifelsenothing{#2}
- {\ctxlua{document.showmathfont(font.current())}}
- {\def\dodoshowmathfontcharacters##1{\ctxlua{document.showmathfont(font.current(),##1)}}%
- \processcommalist[#2]\dodoshowmathfontcharacters}%
- \endgroup}
-
-% the interface might (and will) change
-
-\let\startmathfontlist \relax
-\let\stopmathfontlist \relax
-\let\mathfontlistreference \gobbleoneargument
-\let\startmathfontlistentry \relax
-\let\stopmathfontlistentry \relax
-\let\mathfontlistentryhexdectit \gobblethreearguments
-\let\mathfontlistentrywdhtdpic \gobblefourarguments
-\let\mathfontlistentryresource \gobbleoneargument
-\let\startmathfontlistnext \relax
-\let\mathfontlistnextentry \gobblethreearguments
-\let\mathfontlistnextcycle \gobbleonearguments
-\let\stopmathfontlistnext \relax
-\let\startmathfontlisthvariants \relax
-\let\mathfontlisthvariantsentry \gobblethreearguments
-\let\stopmathfontlisthvariants \relax
-\let\startmathfontlistvvariants \startmathfontlisthvariants
-\let\mathfontlistvvariantsentry \mathfontlisthvariantsentry
-\let\stopmathfontlistvvariants \stopmathfontlisthvariants
-\let\mathfontlistbetweennextandvariants\relax
-\let\startmathfontlistentryclassspec \relax
-\let\stopmathfontlistentryclassspec \relax
-\let\mathfontlistentryclassname \gobbletwoarguments
-\let\mathfontlistentrysymbol \gobbletwoarguments
-\let\startmathfontlookupvariants \relax
-\let\stopmathfontlookupvariants \relax
-\let\mathfontlookupvariant \gobblefourarguments
-
-\startluacode
local concat = table.concat
local lower = string.lower
local utfchar = utf.char
@@ -79,7 +29,16 @@ local upperlimit = 0xF0000
local f_unicode = string.formatters["%U"]
local f_slot = string.formatters["%s/%0X"]
-function document.showmathfont(id,slot)
+function moduledata.math.characters.showlist(specification)
+ specification = interfaces.checkedspecification(specification)
+ local id = specification.number -- or specification.id
+ local list = specification.list
+ if not id then
+ id = font.current()
+ end
+ if list == "" then
+ list = nil
+ end
local tfmdata = fontdata[id]
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
@@ -89,8 +48,10 @@ function document.showmathfont(id,slot)
local names = { }
local gaps = mathematics.gaps
local sorted = { }
- if slot then
- sorted = { slot }
+ if type(list) == "string" then
+ sorted = utilities.parsers.settings_to_array(list)
+ elseif type(list) == "table" then
+ sorted = list
elseif fillinthegaps then
sorted = table.keys(characters)
for k, v in next, gaps do
@@ -109,7 +70,7 @@ function document.showmathfont(id,slot)
names[k] = (name and file.basename(name)) or id
end
end
- context.startmathfontlist()
+ context.showmathcharactersstart()
for _, unicode in next, sorted do
if not limited or unicode < upperlimit then
local code = gaps[unicode] or unicode
@@ -127,10 +88,10 @@ function document.showmathfont(id,slot)
local mathspec = info.mathspec
local mathsymbol = info.mathsymbol
local description = info.description or no_description
- context.startmathfontlistentry()
- context.mathfontlistreference(f_unicode(unicode))
- context.mathfontlistentryhexdectit(f_unicode(code),code,lower(description))
- context.mathfontlistentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0))
+ context.showmathcharactersstartentry()
+ context.showmathcharactersreference(f_unicode(unicode))
+ context.showmathcharactersentryhexdectit(f_unicode(code),code,lower(description))
+ context.showmathcharactersentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0))
if virtual and commands then
local t = { }
for i=1,#commands do
@@ -141,36 +102,36 @@ function document.showmathfont(id,slot)
end
end
if #t > 0 then
- context.mathfontlistentryresource(concat(t,", "))
+ context.showmathcharactersentryresource(concat(t,", "))
end
end
if mathclass or mathspec then
- context.startmathfontlistentryclassspec()
+ context.showmathcharactersstartentryclassspec()
if mathclass then
- context.mathfontlistentryclassname(mathclass,info.mathname or "no name")
+ context.showmathcharactersentryclassname(mathclass,info.mathname or "no name")
end
if mathspec then
for i=1,#mathspec do
local mi = mathspec[i]
- context.mathfontlistentryclassname(mi.class,mi.name or "no name")
+ context.showmathcharactersentryclassname(mi.class,mi.name or "no name")
end
end
- context.stopmathfontlistentryclassspec()
+ context.showmathcharactersstopentryclassspec()
end
if mathsymbol then
- context.mathfontlistentrysymbol(f_unicode(mathsymbol),mathsymbol)
+ context.showmathcharactersentrysymbol(f_unicode(mathsymbol),mathsymbol)
end
if next_sizes then
local n, done = 0, { }
- context.startmathfontlistnext()
+ context.showmathcharactersstartnext()
while next_sizes do
n = n + 1
if done[next_sizes] then
- context.mathfontlistnextcycle(n)
+ context.showmathcharactersnextcycle(n)
break
else
done[next_sizes] = true
- context.mathfontlistnextentry(n,f_unicode(next_sizes),next_sizes)
+ context.showmathcharactersnextentry(n,f_unicode(next_sizes),next_sizes)
next_sizes = characters[next_sizes]
v_variants = next_sizes.vert_variants or v_variants
h_variants = next_sizes.horiz_variants or h_variants
@@ -179,25 +140,25 @@ function document.showmathfont(id,slot)
end
end
end
- context.stopmathfontlistnext()
+ context.showmathcharactersstopnext()
if h_variants or v_variants then
- context.mathfontlistbetweennextandvariants()
+ context.showmathcharactersbetweennextandvariants()
end
end
if h_variants then
- context.startmathfontlisthvariants()
+ context.showmathcharactersstarthvariants()
for i=1,#h_variants do -- we might go top-down in the original
local vi = h_variants[i]
- context.mathfontlisthvariantsentry(i,f_unicode(vi.glyph),vi.glyph)
+ context.showmathcharactershvariantsentry(i,f_unicode(vi.glyph),vi.glyph)
end
- context.stopmathfontlisthvariants()
+ context.showmathcharactersstophvariants()
elseif v_variants then
- context.startmathfontlistvvariants()
+ context.showmathcharactersstartvvariants()
for i=1,#v_variants do
local vi = v_variants[#v_variants-i+1]
- context.mathfontlistvvariantsentry(i,f_unicode(vi.glyph),vi.glyph)
+ context.showmathcharactersvvariantsentry(i,f_unicode(vi.glyph),vi.glyph)
end
- context.stopmathfontlistvvariants()
+ context.showmathcharactersstopvvariants()
end
if slookups or mlookups then
local variants = { }
@@ -229,20 +190,17 @@ function document.showmathfont(id,slot)
end
end
end
- context.startmathfontlookupvariants()
+ context.showmathcharactersstartlookupvariants()
local i = 0
for variant, lookuptype in table.sortedpairs(variants) do
i = i + 1
- context.mathfontlookupvariant(i,f_unicode(variant),variant,lookuptype)
+ context.showmathcharacterslookupvariant(i,f_unicode(variant),variant,lookuptype)
end
- context.stopmathfontlookupvariants()
+ context.showmathcharactersstoplookupvariants()
end
- context.stopmathfontlistentry()
+ context.showmathcharactersstopentry()
end
end
end
- context.stopmathfontlist()
+ context.showmathcharactersstop()
end
-\stopluacode
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/s-math-characters.mkiv b/Master/texmf-dist/tex/context/base/s-math-characters.mkiv
new file mode 100644
index 00000000000..1c415954453
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-math-characters.mkiv
@@ -0,0 +1,184 @@
+%D \module
+%D [ file=s-math-characters.mkiv, % was: s-fnt-25 and later s-mat-10
+%D version=2009.01.25,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Math Glyph Checking,
+%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[math-characters]
+
+\registerctxluafile{s-math-characters}{}
+
+% context --jit --global --bodyfont=cambria --result=math-characters-cambria s-math-characters.mkiv
+% context --jit --global --bodyfont=modern --result=math-characters-modern s-math-characters.mkiv
+
+\startsetups s-math-characters:reset
+
+ \let\showmathcharactersstart \relax
+ \let\showmathcharactersstop \relax
+ \let\showmathcharactersreference \gobbleoneargument
+ \let\showmathcharactersstartentry \relax
+ \let\showmathcharactersstopentry \relax
+ \let\showmathcharactersentryhexdectit \gobblethreearguments
+ \let\showmathcharactersentrywdhtdpic \gobblefourarguments
+ \let\showmathcharactersentryresource \gobbleoneargument
+ \let\showmathcharactersstartnext \relax
+ \let\showmathcharactersnextentry \gobblethreearguments
+ \let\showmathcharactersnextcycle \gobbleonearguments
+ \let\showmathcharactersstopnext \relax
+ \let\showmathcharactersstarthvariants \relax
+ \let\showmathcharactershvariantsentry \gobblethreearguments
+ \let\showmathcharactersstophvariants \relax
+ \let\showmathcharactersstartvvariants \showmathcharactersstarthvariants
+ \let\showmathcharactersvvariantsentry \showmathcharactershvariantsentry
+ \let\showmathcharactersstopvvariants \showmathcharactersstophvariants
+ \let\showmathcharactersbetweennextandvariants\relax
+ \let\showmathcharactersstartentryclassspec \relax
+ \let\showmathcharactersstopentryclassspec \relax
+ \let\showmathcharactersentryclassname \gobbletwoarguments
+ \let\showmathcharactersentrysymbol \gobbletwoarguments
+ \let\showmathcharactersstartlookupvariants \relax
+ \let\showmathcharacterslookupvariant \gobblefourarguments
+ \let\showmathcharactersstoplookupvariants \relax
+
+\stopsetups
+
+\directsetup{s-math-characters:reset}
+
+\startsetups s-math-characters:default
+
+ \directsetup{s-math-characters:reset}
+
+ \unexpanded\def\showmathcharactersstartentry {\blank\begingroup\raggedright}
+ \unexpanded\def\showmathcharactersstopentry {\endgroup\blank}
+
+ \def\showmathcharactersentryhexdectit##1##2##3%
+ {##1:\space{\char##2}\space\ruledhbox{\char##2}\space##3\par
+ \advance\leftskip\emwidth\relax}
+
+ \def\showmathcharactersentrywdhtdpic##1##2##3##4%
+ {width:\space##1,\space height:\space##2,\space depth:\space##3,\space italic:\space##4\par}
+
+ \def\showmathcharactersentryresource##1%
+ {virtual:\space##1\par}
+
+ \def\showmathcharactersstartnext
+ {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth
+ next:\space}
+
+ \def\showmathcharactersnextentry##1##2##3%
+ {\ifnum##1>\plusone \space=>\space\fi##2~\ruledhbox{\char##3}}
+
+ \def\showmathcharactersnextcycle##1%
+ {\ifnum##1>\plusone \space=>\space\fi cycle}
+
+ \def\showmathcharactersstopnext
+ {\par\endgroup}
+
+ \def\showmathcharactersstarthvariants
+ {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth
+ variants:\space}
+
+ \def\showmathcharactershvariantsentry##1##2##3%
+ {\ifnum##1>\plusone \space=>\space\fi##2~\ruledhbox{\char##3}}
+
+ \def\showmathcharactersstophvariants
+ {\par\endgroup}
+
+ \let\showmathcharactersstartvvariants\showmathcharactersstarthvariants
+ \let\showmathcharactersvvariantsentry\showmathcharactershvariantsentry
+ \let\showmathcharactersstopvvariants \showmathcharactersstophvariants
+
+ \def\showmathcharactersbetweennextandvariants
+ {}% \space=>\space}
+
+ \def\showmathcharactersentryclassname##1##2%
+ {mathclass:\space##1,\space mathname:\space##2\par}
+
+ \def\showmathcharactersentrysymbol##1##2%
+ {mathsymbol:\space##1~\ruledhbox{\char##2}\par}
+
+ \def\showmathcharactersstartlookupvariants
+ {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth
+ lookupvariants:\space}
+
+ \def\showmathcharacterslookupvariant##1##2##3##4%
+ {\ifnum##1>\plusone,\space\fi##2:~{\char##3}\space(##4)}
+
+ \def\showmathcharactersstoplookupvariants
+ {\par\endgroup}
+
+\stopsetups
+
+\unprotect
+
+\unexpanded\def\enableshowmathfontvirtual
+ {\ctxlua{fonts.constructors.autocleanup=false}}
+
+\unexpanded\def\showmathfontcharacters
+ {\dosingleempty\module_math_characters_show}
+
+\def\module_math_characters_show[#1]%
+ {\begingroup
+ \getdummyparameters[\c!bodyfont=,\c!list=,\c!alternative=default,#1]%
+ \directsetup{s-math-characters:\dummyparameter\c!alternative}%
+ \doifelsenothing{\dummyparameter\c!bodyfont}
+ {\definedfont[MathRoman*math-text]}
+ {\definedfont[\dummyparameter\c!bodyfont]}%
+ \dontcomplain
+ \ctxlua{moduledata.math.characters.showlist {
+ number = false,
+ list = "\dummyparameter\c!list",
+ }}%
+ \endgroup}
+
+\protect
+
+\stopmodule
+
+\continueifinputfile{s-math-characters.mkiv}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=15mm,
+ backspace=15mm,
+ bottomspace=15mm,
+ header=1cm,
+ headerdistance=0.5cm,
+ footer=0pt]
+
+\starttext
+
+ \doifelse {\getdocumentargument{bodyfont}} {} {
+
+ \setupbodyfont[cambria, 12pt]
+ % \setupbodyfont[modern, 12pt]
+ % \setupbodyfont[lmvirtual, 12pt]
+ % \setupbodyfont[pxvirtual, 12pt]
+ % \setupbodyfont[txvirtual, 12pt]
+ % \setupbodyfont[palatino, 10pt]
+ % \setupbodyfont[mathtimes, 12pt]
+ % \setupbodyfont[stix, 12pt]
+ % \setupbodyfont[xits, 12pt]
+ % \setupbodyfont[lucida, 12pt]
+ % \setupbodyfont[lucidanova,12pt]
+ % \setupbodyfont[pagella, 12pt]
+ % \setupbodyfont[bonum, 12pt]
+
+ } {
+
+ \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]}
+
+ }
+
+ \showmathfontcharacters
+
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/s-math-coverage.lua b/Master/texmf-dist/tex/context/base/s-math-coverage.lua
new file mode 100644
index 00000000000..258019c9d58
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-math-coverage.lua
@@ -0,0 +1,180 @@
+if not modules then modules = { } end modules ['s-math-coverage'] = {
+ version = 1.001,
+ comment = "companion to s-math-coverage.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.math = moduledata.math or { }
+moduledata.math.coverage = moduledata.math.coverage or { }
+
+local utfchar, utfbyte = utf.char, utf.byte
+local formatters, lower = string.formatters, string.lower
+local concat = table.concat
+
+local context = context
+local NC, NR, HL = context.NC, context.NR, context.HL
+local char, getglyph, bold = context.char, context.getglyph, context.bold
+
+local ucgreek = {
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395,
+ 0x0396, 0x0397, 0x0398, 0x0399, 0x039A,
+ 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5,
+ 0x03A6, 0x03A7, 0x03A8, 0x03A9
+}
+
+local lcgreek = {
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5,
+ 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA,
+ 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4,
+ 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9,
+ 0x03D1, 0x03D5, 0x03D6, 0x03F0, 0x03F1,
+ 0x03F4, 0x03F5
+}
+
+local ucletters = {
+ 0x00041, 0x00042, 0x00043, 0x00044, 0x00045,
+ 0x00046, 0x00047, 0x00048, 0x00049, 0x0004A,
+ 0x0004B, 0x0004C, 0x0004D, 0x0004E, 0x0004F,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054,
+ 0x00055, 0x00056, 0x00057, 0x00058, 0x00059,
+ 0x0005A,
+}
+
+local lcletters = {
+ 0x00061, 0x00062, 0x00063, 0x00064, 0x00065,
+ 0x00066, 0x00067, 0x00068, 0x00069, 0x0006A,
+ 0x0006B, 0x0006C, 0x0006D, 0x0006E, 0x0006F,
+ 0x00070, 0x00071, 0x00072, 0x00073, 0x00074,
+ 0x00075, 0x00076, 0x00077, 0x00078, 0x00079,
+ 0x0007A,
+}
+
+local digits = {
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034,
+ 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+}
+
+local styles = {
+ "regular", "sansserif", "monospaced", "fraktur", "script", "blackboard"
+}
+
+local alternatives = {
+ "normal", "bold", "italic", "bolditalic"
+}
+
+local alphabets = {
+ ucletters, lcletters, ucgreek, lcgreek, digits,
+}
+
+local getboth = mathematics.getboth
+local remapalphabets = mathematics.remapalphabets
+
+local chardata = characters.data
+local superscripts = characters.superscripts
+local subscripts = characters.subscripts
+
+function moduledata.math.coverage.showalphabets()
+ context.starttabulate { "|lT|l|Tl|" }
+ for i=1,#styles do
+ local style = styles[i]
+ for i=1,#alternatives do
+ local alternative = alternatives[i]
+ for i=1,#alphabets do
+ local alphabet = alphabets[i]
+ NC()
+ if i == 1 then
+ context("%s %s",style,alternative)
+ end
+ NC()
+ context.startimath()
+ context.setmathattribute(style,alternative)
+ for i=1,#alphabet do
+ local letter = alphabet[i]
+ local id = getboth(style,alternative)
+ local unicode = remapalphabets(letter,id)
+ if not unicode then
+ context.underbar(utfchar(letter))
+ elseif unicode == letter then
+ context(utfchar(unicode))
+ else
+ context(utfchar(unicode))
+ end
+ end
+ context.stopimath()
+ NC()
+ local first = alphabet[1]
+ local last = alphabet[#alphabet]
+ local id = getboth(style,alternative)
+ local f_unicode = remapalphabets(first,id) or utfbyte(first)
+ local l_unicode = remapalphabets(last,id) or utfbyte(last)
+ context("%05X - %05X",f_unicode,l_unicode)
+ NC()
+ NR()
+ end
+ end
+ end
+ context.stoptabulate()
+end
+
+function moduledata.math.coverage.showcharacters()
+ context.startcolumns()
+ context.setupalign { "nothyphenated" }
+ context.starttabulate { "|T|i2|Tpl|" }
+ for u, d in table.sortedpairs(chardata) do
+ local mathclass = d.mathclass
+ local mathspec = d.mathspec
+ if mathclass or mathspec then
+ NC()
+ context("%05X",u)
+ NC()
+ getglyph("MathRoman",u)
+ NC()
+ if mathspec then
+ local t = { }
+ for i=1,#mathspec do
+ t[mathspec[i].class] = true
+ end
+ t = table.sortedkeys(t)
+ context("% t",t)
+ else
+ context(mathclass)
+ end
+ NC()
+ NR()
+ end
+ end
+ context.stoptabulate()
+ context.stopcolumns()
+end
+
+-- This is a somewhat tricky table as we need to bypass the math machinery.
+
+function moduledata.math.coverage.showscripts()
+ context.starttabulate { "|cT|c|cT|c|c|c|l|" }
+ for k, v in table.sortedpairs(table.merged(superscripts,subscripts)) do
+ local ck = utfchar(k)
+ local cv = utfchar(v)
+ local ss = superscripts[k] and "^" or "_"
+ NC()
+ context("%05X",k)
+ NC()
+ context(ck)
+ NC()
+ context("%05X",v)
+ NC()
+ context(cv)
+ NC()
+ context.formatted.rawmathematics("x%s = x%s%s",ck,ss,cv)
+ NC()
+ context.formatted.mathematics("x%s = x%s%s",ck,ss,cv)
+ NC()
+ context(lower(chardata[k].description))
+ NC()
+ NR()
+ end
+ context.stoptabulate()
+end
diff --git a/Master/texmf-dist/tex/context/base/s-math-coverage.mkiv b/Master/texmf-dist/tex/context/base/s-math-coverage.mkiv
new file mode 100644
index 00000000000..d68ffe58751
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-math-coverage.mkiv
@@ -0,0 +1,34 @@
+%D \module
+%D [ file=s-math-coverage, % s-fnt-33, s-fnt-32
+%D version=2011.05.10, % and older
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Math Coverage,
+%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[math-coverage]
+
+\registerctxluafile{s-math-coverage}{}
+
+\installmodulecommandluasingle \showmathalphabets {moduledata.math.coverage.showalphabets}
+\installmodulecommandluasingle \showmathcharacters {moduledata.math.coverage.showcharacters}
+\installmodulecommandluasingle \showmathscripts {moduledata.math.coverage.showscripts}
+
+\stopmodule
+
+\continueifinputfile{s-math-coverage.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showmathalphabets \page
+ \showmathcharacters \page
+ \showmathscripts \page
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv b/Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv
new file mode 100644
index 00000000000..f9ff8547ae1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv
@@ -0,0 +1,145 @@
+%D \module
+%D [ file=s-math-extensibles.mkiv,
+%D version=2013.02.03,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Math Stackers Checking,
+%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 module provides a macro that will typeset a table of (horizontal)
+%D extensibles including some tracing. You can set up the \type {demo}
+%D stacker category to tweak things.
+%D
+%D \starttyping
+%D \showmathextensibles[alternative=a|b]
+%D \stoptyping
+
+\startmodule[math-extensibles]
+
+\unprotect
+
+\definemathstackers
+ [demo]
+ [math]
+ [\c!offset=\v!max]
+
+\installcorenamespace{modulemathextensibles}
+\installcorenamespace{modulemathextensiblesalternative}
+
+\installdirectsetuphandler \??modulemathextensibles {modulemathextensibles}
+
+\setupmodulemathextensibles
+ [\c!alternative=\v!a]
+
+\unexpanded\def\showmathextensibles
+ {\dosingleempty\module_math_extensibles_show_all}
+
+\def\module_math_extensibles_show_all[#1]%
+ {\begingroup
+ \setupcurrentmodulemathextensibles[#1]%
+ \expandnamespacevalue\??modulemathextensiblesalternative\c!alternative\v!a
+ \endgroup}
+
+\def\modulemathextensiblesalternativea#1#2#3%
+ {\NC U+#1
+ \NC \filledhboxm{\math{\char"#1}}
+ \NC \hbox{\math{\mathextensible[demo]{"#1}{top}{bottom}}}
+ \NC \hbox{\math{\mathextensible[demo]{"#1}{}{bottom}}}
+ \NC \hbox{\math{\mathextensible[demo]{"#1}{top}{}}}
+ \NC \nohyphens \veryraggedright #2
+ \NC\NR}
+
+\setvalue{\??modulemathextensiblesalternative\v!a}%
+ {\enabletrackers[math.stackers.texts]
+ \starttabulate[|Tl|l|l|l|l|Tp|]
+ \ctxlua { moduledata.math.extensibles.show {
+ command = "modulemathextensiblesalternativea",
+ } }
+ \stoptabulate
+ \disabletrackers[math.stackers.texts]}
+
+\def\modulemathextensiblesalternativeb#1#2#3%
+ {\NC U+#1
+ \NC \math{\char"#1}
+ \NC \nohyphens \veryraggedright #3
+ \NC \NR}
+
+\setvalue{\??modulemathextensiblesalternative\v!b}%
+ {\enabletrackers[math.stackers.texts]
+ \starttabulate[|Tl|l|Tp|]
+ \ctxlua { moduledata.math.extensibles.show {
+ command = "modulemathextensiblesalternativeb",
+ sparse = true,
+ } }
+ \stoptabulate
+ \disabletrackers[math.stackers.texts]}
+
+\startluacode
+ moduledata.math = moduledata.math or { }
+ moduledata.math.extensibles = moduledata.math.extensibles or { }
+
+ function moduledata.math.extensibles.show(settings)
+ local command = settings.command
+ local sparse = settings.sparse
+ for k, v in table.sortedhash(characters.data) do
+ local mathextensible = v.mathextensible
+ if mathextensible == "r" or mathextensible == "l" or mathextensible == "h" then
+ local names = { }
+ local mathname = v.mathname
+ if mathname then
+ names[#names+1] = v.mathclass .. ":" .. mathname
+ end
+ local mathspec = v.mathspec
+ if mathspec then
+ for i=1,#mathspec do
+ local v = mathspec[i]
+ names[#names+1] = v.class .. ":" .. v.name
+ end
+ end
+ local mathfiller = v.mathfiller
+ if mathfiller then
+ names[#names+1] = "filler:" .. mathfiller
+ end
+ if not sparse or #names > 0 then
+ context[command](string.format("%04X",k),v.description,table.concat(names," "))
+ end
+ end
+ end
+ end
+\stopluacode
+
+\protect
+
+\stopmodule
+
+\continueifinputfile{s-math-extensibles.mkiv}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ footer=0cm,
+ backspace=1.5cm,
+ topspace=1.5cm]
+
+\setuphead[chapter][style=\bfc]
+\setuphead[section][style=\bfa]
+
+\starttext
+
+ \dowith {a,b} {
+
+ \page \title {Latin Modern} \showmathextensibles[alternative=#1]
+ \page \setupbodyfont[pagella] \title {Pagella} \showmathextensibles[alternative=#1]
+ \page \setupbodyfont[termes] \title {Termes} \showmathextensibles[alternative=#1]
+ \page \setupbodyfont[dejavu] \title {Xits} \showmathextensibles[alternative=#1]
+ \page \setupbodyfont[cambria] \title {Cambria} \showmathextensibles[alternative=#1]
+ \page \setupbodyfont[lucidaot] \title {Lucida} \showmathextensibles[alternative=#1]
+
+ }
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-mat-20.mkiv b/Master/texmf-dist/tex/context/base/s-math-parameters.lua
index 544612fec43..8e8c15a2d37 100644
--- a/Master/texmf-dist/tex/context/base/s-mat-20.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-math-parameters.lua
@@ -1,17 +1,13 @@
-%D \module
-%D [ file=s-mat-20.mkiv,
-%D version=2012.12.05,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Math Tracing Macros,
-%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.
+if not modules then modules = { } end modules ['s-math-coverage'] = {
+ version = 1.001,
+ comment = "companion to s-math-coverage.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-\startluacode
+moduledata.math = moduledata.math or { }
+moduledata.math.parameters = moduledata.math.parameters or { }
local tables = utilities.tables.definedtable("math","tracing","spacing","tables")
@@ -61,7 +57,7 @@ function tables.strippt(old)
return new
end
-function tables.showspacing()
+function moduledata.math.parameters.showspacing()
local styles = tables.styles
local styleaxis = tables.styleaxis
@@ -103,7 +99,7 @@ function tables.showspacing()
context.stoptabulate()
end
-function tables.showparameters()
+function moduledata.math.parameters.showparameters()
local styles = tables.styles
local parameters = tables.parameters
@@ -137,25 +133,3 @@ function tables.showparameters()
context.stoptabulate()
end
-
-\stopluacode
-
-\continueifinputfile{s-mat-20.mkiv}
-
-\setuplayout
- [width=middle,
- height=middle,
- backspace=1cm,
- topspace=1cm,
- footer=0pt,
- header=0pt]
-
-\setupbodyfont
- [dejavu,8pt]
-
-\starttext
-
- \ctxlua{math.tracing.spacing.tables.showspacing()}
- % \ctxlua{math.tracing.spacing.tables.showparameters()}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-math-parameters.mkiv b/Master/texmf-dist/tex/context/base/s-math-parameters.mkiv
new file mode 100644
index 00000000000..f2fde5d8384
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-math-parameters.mkiv
@@ -0,0 +1,41 @@
+%D \module
+%D [ file=s-math-parameters.mkiv,
+%D version=2012.12.05,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Math Parameters,
+%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[math-parameters]
+
+\registerctxluafile{s-math-parameters}{}
+
+\installmodulecommandluasingle \showmathspacing {moduledata.math.parameters.showspacing}
+\installmodulecommandluasingle \showmathparameters {moduledata.math.parameters.showparameters}
+
+\stopmodule
+
+\continueifinputfile{s-math-parameters.mkiv}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=1cm,
+ topspace=1cm,
+ footer=0pt,
+ header=0pt]
+
+\setupbodyfont
+ [dejavu,8pt]
+
+\starttext
+
+ \showmathspacing \page
+ \showmathparameters \page
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-mat-12.mkiv b/Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv
index deb28975cb3..a66d7fc6d0d 100644
--- a/Master/texmf-dist/tex/context/base/s-mat-12.mkiv
+++ b/Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv
@@ -1,9 +1,27 @@
-\usemodule[s][mat-10]
-
-% \enabletrackers[pages.timing]
-
-% todo: mode for screen
-% todo: variant for HD with one menu at the right (with include menu)
+%D \module
+%D [ file=s-math-parameters.mkiv, % was s-mat-12.mkiv
+%D version=2012.06.06, % whatever, probably a bit earlier
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Math Character Repertoire,
+%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.
+
+\usemodule[s][math-characters]
+
+% context --jit --global --bodyfont=lucidanova --result=math-repertoire-lucidanova s-math-repertoire.mkiv
+% context --jit --global --bodyfont=cambria --result=math-repertoire-cambria s-math-repertoire.mkiv
+% context --jit --global --bodyfont=xits --result=math-repertoire-xits s-math-repertoire.mkiv
+% context --jit --global --bodyfont=modern --result=math-repertoire-modern s-math-repertoire.mkiv
+% context --jit --global --bodyfont=pagella --result=math-repertoire-pagella s-math-repertoire.mkiv
+% context --jit --global --bodyfont=termes --result=math-repertoire-termes s-math-repertoire.mkiv
+% context --jit --global --bodyfont=bonum --result=math-repertoire-bonum s-math-repertoire.mkiv
+
+\startmodule[math-repertoire]
% layout
@@ -49,7 +67,9 @@
\setupbackgrounds
[text][text]
- [bottomframe=on,framecolor=textcolor,rulethickness=0.025ex]
+ [bottomframe=on,
+ framecolor=textcolor,
+ rulethickness=0.025ex]
\setupmakeup
[standard]
@@ -163,10 +183,10 @@
% helpers
-\def\mathfontlisttxt#1%
+\unexpanded\def\showmathcharacterstxt#1%
{{\tttf#1}}
-\def\mathfontlistchr#1#2%
+\unexpanded\def\showmathcharacterschr#1#2%
{\iffontchar\font#2\relax
\scale
[sx=#1,sy=#1]
@@ -190,40 +210,39 @@
\endgroup}%
\fi}
-\def\mathfontlistmth#1#2%
- {\setbox\scratchbox\hbox{\mathfontlistchr{#1}{#2}}%
+\unexpanded\def\showmathcharactersmth#1#2%
+ {\setbox\scratchbox\hbox{\showmathcharacterschr{#1}{#2}}%
\ht\scratchbox\strutht
\dp\scratchbox\strutdp
\box\scratchbox}
-\let\mathfontlistbodyfonts\empty
+\let\showmathcharactersbodyfonts\empty
-\def\mathfontlistbodyfontentry#1#2%
+\unexpanded\def\showmathcharactersbodyfontentry#1#2%
{\somedata
[align={none,middle},background=,height=5cm]
{\begingroup
\switchtobodyfont[#2,12pt]%
\definedfont[MathRoman*math-text]%
- \mathfontlistmth{10}{#1}%
+ \showmathcharactersmth{10}{#1}%
\endgroup
\vfilll
\doifmodeelse{crosslink}
- {\goto{\strut\textcolor\mathfontlisttxt{#2}}[#2::#1]}%
- {\strut\textcolor\mathfontlisttxt{#2}}}%
+ {\goto{\strut\textcolor\showmathcharacterstxt{#2}}[#2::#1]}%
+ {\strut\textcolor\showmathcharacterstxt{#2}}}%
\hskip1ex}
-\def\setmathfontlistbodyfonts#1%
- {\edef\mathfontlistbodyfonts{#1}%
- \def\dosetmathfontlistbodyfonts##1%
- {\setupbodyfont[##1,12pt]}%
- \processcommacommand[\mathfontlistbodyfonts]\dosetmathfontlistbodyfonts}
+\unexpanded\def\showmathcharacterssetbodyfonts#1%
+ {\edef\showmathcharactersbodyfonts{#1}%
+ \def\doshowmathcharacterssetbodyfonts##1{\setupbodyfont[##1,12pt]}%
+ \processcommacommand[\showmathcharactersbodyfonts]\doshowmathcharacterssetbodyfonts}
-\def\mathfontlistbodyfontschars#1%
- {\processcommacommand[\mathfontlistbodyfonts]{\mathfontlistbodyfontentry{#1}}}
+\unexpanded\def\showmathcharactersbodyfontschars#1%
+ {\processcommacommand[\showmathcharactersbodyfonts]{\showmathcharactersbodyfontentry{#1}}}
% main
-\def\startmathfontlist
+\unexpanded\def\showmathcharactersstart
{\starttext
\startstandardmakeup % we use baselinecolor so that we have a transparency on page 1
\setupalign[middle]
@@ -235,43 +254,43 @@
\vfil
\stopstandardmakeup}
-\def\stopmathfontlist
+\unexpanded\def\showmathcharactersstop
{\stoptext}
% entry
-\def\startmathfontlistentry
+\unexpanded\def\showmathcharactersstartentry
{\startstandardmakeup}
-\def\stopmathfontlistentry
+\unexpanded\def\showmathcharactersstopentry
{\tightlayer[page]
\stopstandardmakeup}
-\def\mathfontlistreference#1%
+\unexpanded\def\showmathcharactersreference#1%
{\setlayer[page]{\pagereference[#1]}}
-\def\mathfontlistentryhexdectit#1#2#3%
+\unexpanded\def\showmathcharactersentryhexdectit#1#2#3%
{\setlayer
[page]
[preset=middletop,voffset=5mm]
- {\somedata[height=1cm]{\mathfontlisttxt{#1}}}
+ {\somedata[height=1cm]{\showmathcharacterstxt{#1}}}
\setlayer
[page]
[preset=middle,y=2cm]
- {\mathfontlistmth{25}{#2}}
+ {\showmathcharactersmth{25}{#2}}
\setlayer
[page]
[preset=righttop,offset=5mm]
- {\somedata[height=1cm]{\mathfontlisttxt{#3}}}
- \doifsomething\mathfontlistbodyfonts
+ {\somedata[height=1cm]{\showmathcharacterstxt{#3}}}
+ \doifsomething\showmathcharactersbodyfonts
{\setlayer
[page]
[preset=middlebottom,voffset=5mm]
- {\mathfontlistbodyfontschars{#2}}}}
+ {\showmathcharactersbodyfontschars{#2}}}}
% dimensions
-\def\mathfontlistentrywdhtdpic#1#2#3#4%
+\unexpanded\def\showmathcharactersentrywdhtdpic#1#2#3#4%
{\setlayer
[page]
[preset=leftbottom,offset=5mm]
@@ -281,126 +300,151 @@
\strut depth \hfill \the\dimexpr#3sp\par
\strut italic\hfill \the\dimexpr#4sp}}}
-\def\mathfontlistentryresource#1%
+\unexpanded\def\showmathcharactersentryresource#1%
{} % {virtual: #1\par}
% next
-\def\startmathfontlistnext
+\unexpanded\def\showmathcharactersstartnext
{\setlayer
[page]
[preset=middleleft,hoffset=5mm]
\bgroup\vbox\bgroup}
-\def\stopmathfontlistnext
+\unexpanded\def\showmathcharactersstopnext
{\egroup\egroup}
-\def\mathfontlistnextentry#1#2#3%
+\unexpanded\def\showmathcharactersnextentry#1#2#3%
{\ifnum#1>1 \vskip1ex \fi
\dontleavehmode\somedata
[align=normal,width=4cm]
- {\strut\mathfontlisttxt{#2}\hfill\mathfontlistchr{2}{#3}}\par}
+ {\strut\showmathcharacterstxt{#2}\hfill\showmathcharacterschr{2}{#3}}\par}
-\def\mathfontlistnextcycle#1%
+\unexpanded\def\showmathcharactersnextcycle#1%
{\ifnum#1>1 \vskip1ex \fi
\dontleavehmode\somedata
[align=normal,width=4cm]
- {\strut\mathfontlisttxt{cycle}}\par}
+ {\strut\showmathcharacterstxt{cycle}}\par}
% variants
-\def\startmathfontlistvvariants
+\unexpanded\def\showmathcharactersstartvvariants
{\setlayer
[page]
[preset=lefttop,offset=5mm]
\bgroup\vbox\bgroup}
-\def\startmathfontlisthvariants
+\unexpanded\def\showmathcharactersstarthvariants
{\setlayer
[page]
[preset=lefttop,offset=5mm]
\bgroup\hbox\bgroup}
-\def\mathfontlistvvariantsentry#1#2#3%
+\unexpanded\def\showmathcharactersvvariantsentry#1#2#3%
{\ifnum#1>1 \vskip1ex \fi
\dontleavehmode\somedata
[align=middle,width=4cm]
- {\strut\mathfontlisttxt{#2}\hfilll\mathfontlistchr{2}{#3}}}
+ {\strut\showmathcharacterstxt{#2}\hfilll\showmathcharacterschr{2}{#3}}}
-\def\mathfontlisthvariantsentry#1#2#3%
+\unexpanded\def\showmathcharactershvariantsentry#1#2#3%
{\ifnum#1>1 \hskip1ex \else \dontleavehmode \fi
\somedata
[align={none,middle},height=2cm]
- {\strut\mathfontlisttxt{#2}\vfilll\mathfontlistchr{2}{#3}}}
+ {\strut\showmathcharacterstxt{#2}\vfilll\showmathcharacterschr{2}{#3}}}
-\def\stopmathfontlistvvariants
+\unexpanded\def\showmathcharactersstopvvariants
{\egroup\egroup}
-\def\stopmathfontlisthvariants
+\unexpanded\def\showmathcharactersstophvariants
{\egroup\egroup}
-\def\mathfontlistbetweennextandvariants
+\unexpanded\def\showmathcharactersbetweennextandvariants
{}
% classes
-\def\startmathfontlistentryclassspec
+\unexpanded\def\showmathcharactersstartentryclassspec
{\setlayer
[page]
[preset=rightbottom,offset=5mm]
\bgroup\somedata[align=normal,width=8cm]\bgroup}
-\def\stopmathfontlistentryclassspec
+\unexpanded\def\showmathcharactersstopentryclassspec
{\egroup\egroup}
-\def\mathfontlistentryclassname#1#2%
- {\strut{\mathfontlisttxt#1}\hfill\mathfontlisttxt{#2}\par}
+\unexpanded\def\showmathcharactersentryclassname#1#2%
+ {\strut{\showmathcharacterstxt#1}\hfill\showmathcharacterstxt{#2}\par}
% symbols
-\def\mathfontlistentrysymbol#1#2%
+\unexpanded\def\showmathcharactersentrysymbol#1#2%
{\setlayer
[page]
[preset=leftbottom,hoffset=5mm,voffset=50mm]
{\somedata
[align=normal,width=5cm]
- {\mathfontlisttxt{#1}\hfill\mathfontlistchr{4}{#2}}}}
+ {\showmathcharacterstxt{#1}\hfill\showmathcharacterschr{4}{#2}}}}
% alternates
-\def\startmathfontlookupvariants
+\unexpanded\def\showmathcharactersstartlookupvariants
{\setlayer
[page]
[preset=middleright,hoffset=5mm]
\bgroup\vbox\bgroup}
-\def\stopmathfontlookupvariants
+\unexpanded\def\showmathcharactersstoplookupvariants
{\egroup\egroup}
-\def\mathfontlookupvariant#1#2#3#4%
+\unexpanded\def\showmathcharacterslookupvariant#1#2#3#4%
{\ifnum#1>1 \vskip1ex \fi
\somedata
[align=normal,width=7cm]
- {\mathfontlisttxt{#4:} \mathfontlisttxt{#2}\hfill\mathfontlistchr{4}{#3}}}
+ {\showmathcharacterstxt{#4:} \showmathcharacterstxt{#2}\hfill\showmathcharacterschr{4}{#3}}}
+
+% main
+
+\unprotect
+
+\unexpanded\def\showmathfontrepertoire
+ {\dosingleempty\module_math_repertoire_show}
+
+\def\module_math_repertoire_show[#1]% % this is a one-run style so we can forget about an alternative
+ {\showmathfontcharacters[\c!alternative=,#1]} % just assume that the previous definitions are global
+
+\protect
-% done
+\stopmodule
-\continueifinputfile{s-mat-12.mkiv}
+\continueifinputfile{s-math-repertoire.mkiv}
-\setmathfontlistbodyfonts{lucidanova,cambria,xits,modern,pagella}
+\showmathcharacterssetbodyfonts{lucidanova,cambria,xits,modern,pagella,termes,bonum}
\starttext
-% \setupbodyfont[cambria, 12pt] \showmathfontcharacters
-% \setupbodyfont[modern, 12pt] \showmathfontcharacters
-% \setupbodyfont[lmvirtual,12pt] \showmathfontcharacters
-% \setupbodyfont[pxvirtual,12pt] \showmathfontcharacters
-% \setupbodyfont[txvirtual,12pt] \showmathfontcharacters
-% \setupbodyfont[palatino, 10pt] \showmathfontcharacters
-% \setupbodyfont[mathtimes,12pt] \showmathfontcharacters
-% \setupbodyfont[stix, 12pt] \showmathfontcharacters
-% \setupbodyfont[xits, 12pt] \showmathfontcharacters
-% \setupbodyfont[lucida, 12pt] \showmathfontcharacters
-% \setupbodyfont[lucidanova, 12pt] \showmathfontcharacters
- \setupbodyfont[pagella, 12pt] \showmathfontcharacters
+
+ \doifelse {\getdocumentargument{bodyfont}} {} {
+
+ \setupbodyfont[cambria, 12pt]
+ % \setupbodyfont[modern, 12pt]
+ % \setupbodyfont[lmvirtual, 12pt]
+ % \setupbodyfont[pxvirtual, 12pt]
+ % \setupbodyfont[txvirtual, 12pt]
+ % \setupbodyfont[palatino, 10pt]
+ % \setupbodyfont[mathtimes, 12pt]
+ % \setupbodyfont[stix, 12pt]
+ % \setupbodyfont[xits, 12pt]
+ % \setupbodyfont[lucida, 12pt]
+ % \setupbodyfont[lucidanova,12pt]
+ % \setupbodyfont[pagella, 12pt]
+ % \setupbodyfont[bonum, 12pt]
+
+ } {
+
+ \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]}
+
+ }
+
+ \showmathfontrepertoire
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv b/Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv
new file mode 100644
index 00000000000..375dd9949f2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv
@@ -0,0 +1,134 @@
+%D \module
+%D [ file=s-pages-statistics, % s-otr-01,
+%D version=2012.02.02,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Page Statistics,
+%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
+
+\defineframed
+ [otrstatistics]
+ [\c!offset=\bodyfontsize,
+ \c!background=\v!color,
+ \c!strut=\v!no,
+ \c!backgroundcolor=white,
+ \c!frame=\v!off,
+ \c!align=\v!middle]
+
+\definecombination
+ [otrstatistics]
+ [\c!nx=2,
+ \c!ny=2,
+ \c!location=\v!top]
+
+% expansion is neeed because tabulate sets some penalties
+
+\startsetups system:page:otr:statistics
+ \normalexpanded {
+ \startcombination[otrstatistics] {
+ \otrstatistics {
+ \starttabulate[|Tw(10em)|Trw(8em)|]
+ \NC \string\textwidth \NC \the\textwidth \NC \NR
+ \NC \string\textheight \NC \the\textheight \NC \NR
+ \NC \string\lineheight \NC \the\lineheight \NC \NR
+ \NC \string\strutheight \NC \strutheight \NC \NR
+ \NC \string\strutdepth \NC \strutdepth \NC \NR
+ % \NC \string\vsize \NC \the\vsize \NC \NR
+ \NC \string\topskip \NC \the\topskip \NC \NR
+ \stoptabulate
+ }
+ } {}
+ {
+ \otrstatistics {
+ \starttabulate[|Tw(10em)|Trw(8em)|]
+ \NC \string\pagegoal \NC \the\pagegoal \NC \NR
+ \NC \string\pagetotal \NC \the\pagetotal \NC \NR
+ \NC \string\pagedepth \NC \the\pagedepth \NC \NR
+ \NC \string\pageshrink \NC \the\pageshrink \NC \NR
+ \NC \string\pagestretch \NC \the\pagestretch \NC \NR
+ \NC \string\pagefilstretch \NC \the\pagefilstretch \NC \NR
+ \NC \string\pagefillstretch \NC \the\pagefillstretch \NC \NR
+ \NC \string\pagefilllstretch \NC \the\pagefilllstretch \NC \NR
+ \stoptabulate
+ }
+ } {}
+ {
+ \otrstatistics {
+ \starttabulate[|Tw(10em)|Trw(8em)|]
+ \NC \string\widowpenalty \NC \the\widowpenalty \NC \NR
+ \NC \string\clubpenalty \NC \the\clubpenalty \NC \NR
+ \NC \string\displaywidowpenalty \NC \the\displaywidowpenalty \NC \NR
+ \NC \string\brokenpenalty \NC \the\brokenpenalty \NC \NR
+ \NC \string\interlinepenalty \NC \the\interlinepenalty \NC \NR
+ \stoptabulate
+ }
+ } {}
+ {
+ \otrstatistics[\c!foregroundcolor=darkred] {
+ \starttabulate[|Tw(10em)|Trw(8em)|]
+ \NC page \NC \the\realpageno \NC \NR
+ \NC delta \NC \the\dimexpr\pagegoal-\pagetotal\relax \NC \NR
+ \stoptabulate
+ }
+ } {}
+ \stopcombination
+ }
+\stopsetups
+
+\defineoverlay
+ [system:page:otr:statistics]
+ [{\framed
+ [\c!offset=\bodyfontsize,
+ \c!background=\v!color,
+ \c!strut=\v!no,
+ %\c!frame=\v!off,
+ \c!framecolor=white,
+ \c!frameoffset=\onepoint,
+ \c!rulethickness=2\onepoint,
+ \c!backgroundcolor=darkblue,
+ \c!align=\v!middle]
+ {\forgetall
+ \insidefloattrue
+ \setups{system:page:otr:statistics}}}]
+
+\unexpanded\def\page_one_command_package_show_state_indeed
+ {\scratchheight\ht\b_page_one_contents
+ \scratchdepth \dp\b_page_one_contents
+ \setbox\b_page_one_contents\vbox\framed
+ [\c!offset=\v!overlay,
+ \c!framecolor=darkred,
+ \c!rulethickness=\onepoint,
+ \c!background={\v!foreground,system:page:otr:statistics}]
+ {\lower\scratchdepth\box\b_page_one_contents}%
+ \ht\b_page_one_contents\scratchheight
+ \dp\b_page_one_contents\scratchdepth}
+
+\let\page_one_command_package_show_state\relax
+
+\unexpanded\def\showpageproperties
+ {\let\page_one_command_package_show_state\page_one_command_package_show_state_indeed}
+
+\protect
+
+\continueifinputfile{s-pages-statistics.mkiv}
+
+\setupbodyfont[dejavu,11pt] \dontcomplain \showpageproperties
+
+\starttext
+
+\dorecurse {100} { \input tufte
+
+ \startitemize[packed,intro]
+ \startitem test \stopitem \startitem test \stopitem
+ \startitem test \stopitem \startitem test \stopitem
+ \stopitemize
+}
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-phy-01.mkiv b/Master/texmf-dist/tex/context/base/s-phy-01.mkiv
deleted file mode 100644
index dde3f9bbb32..00000000000
--- a/Master/texmf-dist/tex/context/base/s-phy-01.mkiv
+++ /dev/null
@@ -1,111 +0,0 @@
-%D \module
-%D [ file=s-phy-01,
-%D version=2011-11-24,
-%D title=\CONTEXT\ Modules,
-%D subtitle=Units Tables,
-%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
-
-% todo: better breaks of head line
-
-\startluacode
-moduledata.units = moduledata.units or { }
-
-local tables = physics.units.tables
-local units = tables.units
-local shortcuts = tables.shortcuts
-
-local HL = context.HL
-local NC = context.NC
-local NR = context.NR
-
-local function typeset(list,followup,name,category)
- if list then
- if followup then
- context.TB()
- end
- if category then
- HL()
- NC()
- context.rlap(category .. ":" .. name)
- NC()
- NC()
- NR()
- HL()
- end
- for k, v in table.sortedhash(list) do
- NC()
- context(k)
- NC()
- if isunit then
- context(v)
- else
- context.type(v)
- end
- NC()
- if name == "units" or name == "symbols" or name == "packaged" then
- context.unittext(v)
- elseif name == "prefixes" then
- context.prefixtext(v)
- elseif name == "operators" then
- context.operatortext(v)
- elseif name == "suffixes" then
- context.suffixtext(v)
- end
- NC()
- NR()
- end
- if category and name then
- HL()
- end
- end
-end
-
-function moduledata.units.show_table(name)
- context.starttabulate { "|lT|l|c|" }
- if name and name ~= "" then
- local first, second = string.match(name,"(.-):(.-)") -- [units|shortcuts]:[units|...]
- if first then
- typeset(tables[first] and tables[first][second],false)
- else
- typeset(units[name],false)
- typeset(shortcuts[name],true)
- end
- else
- local done = false
- for what, list in table.sortedhash(units) do
- typeset(list,done,what,"units")
- done = true
- end
- for what, list in table.sortedhash(shortcuts) do
- typeset(list,done,what,"shortcuts")
- done = true
- end
- end
- context.stoptabulate()
-end
-
-\stopluacode
-
-\unexpanded\def\ShowUnitsTable
- {\dosingleempty\Show_Units_Table}
-
-\def\Show_Units_Table[#1]%
- {\ctxlua{moduledata.units.show_table("#1")}}
-
-\protect
-
-\continueifinputfile{s-phy-01.mkiv}
-
-\usemodule[art-01]
-
-\starttext
- \ShowUnitsTable
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-physics-units.mkiv b/Master/texmf-dist/tex/context/base/s-physics-units.mkiv
new file mode 100644
index 00000000000..50adc801431
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-physics-units.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-physics-units, % s-phy-01,
+%D version=2011-11-24,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Physics 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.
+
+\startmodule[physics-units]
+
+\registerctxluafile{s-physics-units}{}
+
+\installmodulecommandluasingle \showunits {moduledata.physics.units.showlist}
+
+\stopmodule
+
+\continueifinputfile{s-physics-units.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showunits
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-present-tiles.mkiv b/Master/texmf-dist/tex/context/base/s-present-tiles.mkiv
new file mode 100644
index 00000000000..80ea5249f77
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-present-tiles.mkiv
@@ -0,0 +1,297 @@
+%D \module
+%D [ file=s-present-tiles, % was s-pre-41
+%D version=2013.03.24,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Tiles,
+%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 The Bacho\TeX\ 2013 style.
+
+\setupbodyfont[palatino,14.4pt]
+
+\setuppapersize[S6][S6]
+
+\definecolor[primarycolor] [.50(darkblue,darkgreen)]
+\definecolor[secondarycolor][.25(darkblue,darkyellow)]
+\definecolor[mixedcolor] [s=.35]
+
+\setupcolors
+ [textcolor=white]
+
+\setupalign
+ [flushleft,nothyphenated]
+
+\definemeasure[layoutunit][\dimexpr\paperheight/25]
+
+\setuplayout
+ [backspace=\measured{layoutunit},
+ topspace=\measured{layoutunit},
+ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt]
+
+\definelayout
+ [content]
+ [backspace=.5\measured{layoutunit},
+ topspace=.5\measured{layoutunit}]
+
+\definemeasure [topiclistwidth] [
+ (\textwidth+\backspace)/
+ \ifcase\numexpr\structurelistsize\relax 1 % 0
+ \or1\or1\or1\or2\or1\or3\or3\or3\or3 % 1 - 9
+ \or3\or3\or3\or3\or3\or3\or4 % 10 - 16
+ \or4\or4\or4\or4\or % 17 - 20
+ \else5 % 21 - 25
+ \fi
+ -\backspace
+]
+
+\definemeasure [topiclistheight] [
+ (\textheight+\topspace)/
+ \ifcase\numexpr\structurelistsize\relax 1 % 0
+ \or1\or2\or3\or2\or5\or2\or3\or3\or3 % 1 - 9
+ \or4\or4\or4\or4\or4\or4\or4 % 10 - 16
+ \or5\or5\or5\or5\or5 % 17 - 20
+ \else5 % 21 - 25
+ \fi
+ -\topspace
+]
+
+\definemeasure [topiclistfont] [\measured{topiclistwidth}/10]
+\definemeasure [titlepagefont] [2\measured{layoutunit}]
+
+\defineframed
+ [topiclistentry]
+ [width=\measure{topiclistwidth},
+ height=\measure{topiclistheight},
+ background=color,
+ frame=off,
+ foregroundstyle={\definedfont[Bold at \measure{topiclistfont}]},
+ backgroundcolor=primarycolor,
+ foregroundcolor=white]
+
+\setupwhitespace
+ [big]
+
+\setupblank
+ [big]
+
+\setupinteraction
+ [state=start,
+ color=,
+ contrastcolor=,
+ click=off]
+
+\definemakeup
+ [topic]
+ [standard]
+ [top=,bottom=]
+
+\definemakeup
+ [content]
+ [standard]
+ [top=,bottom=]
+
+\startsetups[topic:start]
+ \starttopicmakeup
+\stopsetups
+
+\startsetups[topic:stop]
+ \vfill
+ \stoptopicmakeup
+\stopsetups
+
+\predefinefont[MyTopicTitleFont][SerifBold*default at \measure{layoutunit}]
+
+\definehead
+ [topic]
+ [chapter]
+ [before=,
+ style=MyTopicTitleFont,
+ page=,
+ number=off,
+ interaction=list,
+ beforesection=\directsetup{topic:start},
+ aftersection=\directsetup{topic:stop}]
+
+\setuplist
+ [topic]
+ [alternative=topic,
+ interaction=all]
+
+\definelistalternative
+ [topic]
+ [alternative=horizontal,
+ renderingsetup=topic:list]
+
+\startsetups[topic:list]
+ \dontleavehmode
+ \startcurrentlistentrywrapper
+ \topiclistentry{\currentlistentrytitle}
+ \stopcurrentlistentrywrapper
+ \blankspace
+\stopsetups
+
+\defineoverlay[nextpage][\overlaybutton{nextpage}]
+\defineoverlay[prevpage][\overlaybutton{prevpage}]
+\defineoverlay[menupage][\overlaybutton{menupage}]
+\defineoverlay[homepage][\overlaybutton{homepage}]
+
+\setupbackgrounds
+ [text]
+ [backgroundoffset=.5\measured{layoutunit}]
+
+% begin of buttons
+
+\defineframed
+ [bb]
+ [width=\dimexpr\overlaywidth/10,
+ height=\dimexpr\overlayheight/10,
+ background=color,
+ foregroundstyle=\bfa,
+ frame=off]
+
+\defineframed[nb] [bb] [empty=yes]
+\defineframed[rb] [bb] [backgroundcolor=white,foregroundcolor=secondarycolor]
+\defineframed[db] [bb] [backgroundcolor=mixedcolor,foregroundcolor=white]
+
+\definepushbutton [prev]
+\definepushbutton [next]
+\definepushbutton [menu]
+\definepushbutton [home]
+
+\definepushsymbol [prev] [n] [\nb{prev}]
+\definepushsymbol [prev] [r] [\rb{prev}]
+\definepushsymbol [prev] [d] [\db{prev}]
+
+\definepushsymbol [next] [n] [\nb{next}]
+\definepushsymbol [next] [r] [\rb{next}]
+\definepushsymbol [next] [d] [\db{next}]
+
+\definepushsymbol [menu] [n] [\nb{menu}]
+\definepushsymbol [menu] [r] [\rb{menu}]
+\definepushsymbol [menu] [d] [\db{menu}]
+
+\definepushsymbol [home] [n] [\nb{home}]
+\definepushsymbol [home] [r] [\rb{home}]
+\definepushsymbol [home] [d] [\db{home}]
+
+\definelayer
+ [buttons]
+ [width=\dimexpr\textwidth+\measured{layoutunit}\relax,
+ height=\dimexpr\textheight+\measured{layoutunit}\relax] % a setups
+
+\startsetups [document:buttons]
+
+ \setlayer
+ [buttons]
+ [preset=leftbottom,offset=-.25\measured{layoutunit}]
+ {\pushbutton[prev][previouspage]}
+
+ \setlayer
+ [buttons]
+ [preset=rightbottom,offset=-.25\measured{layoutunit}]
+ {\pushbutton[next][nextpage]}
+
+ \setlayer
+ [buttons]
+ [preset=lefttop,offset=-.25\measured{layoutunit}]
+ {\pushbutton[home][homepage]}
+
+ \setlayer
+ [buttons]
+ [preset=righttop,offset=-.25\measured{layoutunit}]
+ {\pushbutton[menu][menupage]}
+
+\stopsetups
+
+\defineoverlay[setbuttons][\directsetup{document:buttons}]
+
+% end of buttons
+
+\startsetups [document:titlepage]
+
+ \definebodyfontenvironment
+ [\measure{titlepagefont}]
+
+ \setupbackgrounds
+ [page]
+ [background={color,menupage},
+ backgroundcolor=secondarycolor]
+
+ \setupbackgrounds
+ [text]
+ [background={color,menupage},
+ backgroundcolor=secondarycolor]
+
+ \starttopicmakeup[reference=homepage]
+
+ \switchtobodyfont[\measure{titlepagefont}]
+
+ \let\\=\crlf
+
+ \startalignment[flushleft]
+ \bf
+ \setupinterlinespace
+ \begstrut\getvariable{document}{title}\endstrut\par
+ \stopalignment
+
+ \vfill
+
+ \startalignment[flushright]
+ \bf
+ \setupinterlinespace
+ \begstrut\getvariable{document}{subtitle}\endstrut\par
+ \stopalignment
+
+ \stoptopicmakeup
+
+ \setupbackgrounds
+ [page]
+ [background={color,homepage},
+ backgroundcolor=secondarycolor]
+
+ \setupbackgrounds
+ [text]
+ [background={color,menupage},
+ backgroundcolor=secondarycolor]
+
+ \startcontentmakeup[reference=menupage]
+
+ \setupalign[tolerant,stretch,paragraph]
+ \flexiblebaselines
+ \placelist[topic][criterium=text]
+
+ \stopcontentmakeup
+
+ \setupbackgrounds
+ [page]
+ % [background={color,menupage},
+ [background={color,invoke},
+ backgroundcolor=primarycolor]
+
+ \setupbackgrounds
+ [text]
+ % [background={color,nextpage,setbuttons,buttons},
+ [background={color,setbuttons,buttons},
+ backgroundcolor=secondarycolor]
+
+\stopsetups
+
+\setupdocument
+ [before=\directsetup{document:titlepage}]
+
+\continueifinputfile{s-present-tiles.mkiv}
+
+\startdocument[title=Whatever We\\Want Here,subtitle=Whatever We\\Want There]
+
+ \dorecurse{12}{\starttopic[title=Topic #1]\input tufte \stoptopic}
+
+\stopdocument
diff --git a/Master/texmf-dist/tex/context/base/s-sql-tables.lua b/Master/texmf-dist/tex/context/base/s-sql-tables.lua
new file mode 100644
index 00000000000..43410354134
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-sql-tables.lua
@@ -0,0 +1,152 @@
+if not modules then modules = { } end modules ['s-languages-counters'] = {
+ version = 1.001,
+ comment = "companion to s-languages-counters.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+require("util-tpl")
+require("util-sql")
+require("util-sql-tracers")
+
+moduledata = moduledata or { }
+moduledata.sql = moduledata.sql or { }
+moduledata.sql.tables = moduledata.sql.tables or { }
+
+local context = context
+
+function moduledata.sql.showfields(specification) -- not that sql specific
+ local data = specification.data
+ if data and #data > 0 then
+ local keys = specification.order or table.sortedkeys(data[1])
+ local align = specification.align
+ local template = "|"
+ if type(align) == "table" then
+ for i=1,#keys do
+ template = template .. (align[keys[i]] or "c") .. "|"
+ end
+ else
+ template = template .. string.rep((align or "c").. "|",#keys)
+ end
+ context.starttabulate { template }
+ context.NC()
+ for i=1,#keys do
+ context(keys[i])
+ context.NC()
+ end
+ context.NR()
+ context.HL()
+ for i=specification.first or 1,specification.last or #data do
+ local d = data[i]
+ context.NC()
+ for i=1,#keys do
+ context(d[keys[i]])
+ context.NC()
+ end
+ context.NR()
+ end
+ context.stoptabulate()
+ end
+end
+
+function moduledata.sql.validpresets(presets)
+ local okay = true
+ if presets.database == "" then
+ context("No database given.")
+ context.blank()
+ okay = false
+ end
+ if presets.password == "" then
+ context("No password given")
+ context.blank()
+ okay = false
+ end
+ return okay
+end
+
+function moduledata.sql.tables.showdefined(presets) -- key=value string | { presets = "name" } | { presets }
+
+ if type(presets) == "string" then
+ local specification = interfaces.checkedspecification(presets)
+ if specification.presets then
+ presets = table.load(specification.presets) or { }
+ end
+ end
+
+ if type(presets.presets) == "string" then
+ presets = table.load(presets.presets) or { }
+ end
+
+ if not moduledata.sql.validpresets(presets) then
+ return
+ end
+
+ local sql_tables = utilities.sql.tracers.gettables(presets)
+
+ context.starttitle { title = presets.database }
+
+ for name, fields in table.sortedhash(sql_tables) do
+
+ context.startsubject { title = name }
+
+ context.starttabulate { format = "|l|l|l|l|l|p|" }
+ context.FL()
+ context.NC() context.bold("field")
+ context.NC() context.bold("type")
+ context.NC() context.bold("default")
+ context.NC() context.bold("null")
+ context.NC() context.bold("key")
+ context.NC() context.bold("extra")
+ context.NC() context.NR()
+ context.TL()
+ for i=1,#fields do
+ local field = fields[i]
+ context.NC() context(field.field)
+ context.NC() context(field.type)
+ context.NC() context(field.default)
+ context.NC() context(field.null)
+ context.NC() context(field.key)
+ context.NC() context(field.extra)
+ context.NC() context.NR()
+ end
+ context.LL()
+ context.stoptabulate()
+
+ context.stopsubject()
+ end
+
+ context.stoptitle()
+
+end
+
+function moduledata.sql.tables.showconstants(list)
+
+ context.starttitle { title = "Constants" }
+
+ for name, fields in table.sortedhash(list) do
+
+ if type(fields) == "table" and #fields > 0 then
+
+ context.startsubject { title = name }
+
+ context.starttabulate { format = "|l|l|" }
+ for i=0,#fields do
+ local field = fields[i]
+ if field then
+ context.NC() context(i)
+ context.NC() context(field)
+ context.NC() context.NR()
+ end
+ end
+ context.stoptabulate()
+
+ context.stopsubject()
+
+ end
+
+ end
+
+ context.stoptitle()
+
+end
diff --git a/Master/texmf-dist/tex/context/base/s-sql-tables.mkiv b/Master/texmf-dist/tex/context/base/s-sql-tables.mkiv
new file mode 100644
index 00000000000..6f507e8b595
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-sql-tables.mkiv
@@ -0,0 +1,24 @@
+%D \module
+%D [ file=s-sql-tables,
+%D version=2012.07.12,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=SQL,
+%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.
+
+% for the moment no helpers
+
+\startmodule[s-sql-tables]
+
+\registerctxluafile{s-sql-tables}{}
+
+\installmodulecommandluasingle \showdefinedsqltables {moduledata.sql.tables.showdefined}
+
+\stopmodule
+
+
diff --git a/Master/texmf-dist/tex/context/base/scrn-ini.mkvi b/Master/texmf-dist/tex/context/base/scrn-ini.mkvi
index 88b52868667..f5b29462436 100644
--- a/Master/texmf-dist/tex/context/base/scrn-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/scrn-ini.mkvi
@@ -192,9 +192,10 @@
% this comes before starttext
\appendtoks % not interfaced i.e. english
- \doifvariable{document}{metadata:author} {\setupinteraction [\c!author=\documentvariable{metadata:author}]}%
- \doifvariable{document}{metadata:title} {\setupinteraction [\c!title=\documentvariable{metadata:title}]}%
- \doifvariable{document}{metadata:subject}{\setupinteraction[\c!subject=\documentvariable{metadata:subject}]}%
+ \doifvariable{document}{metadata:author} {\setupinteraction [\c!author=\documentvariable{metadata:author}]}%
+ \doifvariable{document}{metadata:title} {\setupinteraction [\c!title=\documentvariable{metadata:title}]}%
+ \doifvariable{document}{metadata:subject} {\setupinteraction[\c!subject=\documentvariable{metadata:subject}]}%
+ \doifvariable{document}{metadata:keywords}{\setupinteraction[\c!keyword=\documentvariable{metadata:keywords}]}%
\to \everysetupdocument
\setupinteraction
diff --git a/Master/texmf-dist/tex/context/base/scrp-cjk.lua b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
index 487d5a2672c..f7167b45c0b 100644
--- a/Master/texmf-dist/tex/context/base/scrp-cjk.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
@@ -31,8 +31,8 @@ local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
local userskip_code = skipcodes.userskip
-local a_prestat = attributes.private('prestat')
-local a_preproc = attributes.private('preproc')
+local a_scriptstatus = attributes.private('scriptstatus')
+local a_scriptinjection = attributes.private('scriptinjection')
local categorytonumber = scripts.categorytonumber
local numbertocategory = scripts.numbertocategory
@@ -425,7 +425,7 @@ local function process(head,first,last)
while true do
local upcoming, id = first.next, first.id
if id == glyph_code then
- local a = first[a_prestat]
+ local a = first[a_scriptstatus]
local current = numbertocategory[a]
local action = injectors[previous]
if action then
@@ -434,7 +434,7 @@ local function process(head,first,last)
local font = first.font
if font ~= lastfont then
lastfont = font
- set_parameters(font,numbertodataset[first[a_preproc]])
+ set_parameters(font,numbertodataset[first[a_scriptinjection]])
end
action(head,first)
end
@@ -445,7 +445,7 @@ local function process(head,first,last)
if p and n then
local pid, nid = p.id, n.id
if pid == glyph_code and nid == glyph_code then
- local pa, na = p[a_prestat], n[a_prestat]
+ local pa, na = p[a_scriptstatus], n[a_scriptstatus]
local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na]
if not pcjk or not ncjk
or pcjk == "korean" or ncjk == "korean"
@@ -476,7 +476,7 @@ end
scripts.installmethod {
name = "hangul",
- process = process,
+ injector = process,
datasets = { -- todo: metatables
default = {
inter_char_shrink_factor = 0.50, -- of quad
@@ -646,7 +646,7 @@ local function process(head,first,last)
while true do
local upcoming, id = first.next, first.id
if id == glyph_code then
- local a = first[a_prestat]
+ local a = first[a_scriptstatus]
local current = numbertocategory[a]
local action = injectors[previous]
if action then
@@ -655,7 +655,7 @@ local function process(head,first,last)
local font = first.font
if font ~= lastfont then
lastfont = font
- set_parameters(font,numbertodataset[first[a_preproc]])
+ set_parameters(font,numbertodataset[first[a_scriptinjection]])
end
action(head,first)
end
@@ -666,7 +666,7 @@ local function process(head,first,last)
if p and n then
local pid, nid = p.id, n.id
if pid == glyph_code and nid == glyph_code then
- local pa, na = p[a_prestat], n[a_prestat]
+ local pa, na = p[a_scriptstatus], n[a_scriptstatus]
local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na]
if not pcjk or not ncjk
or pcjk == "korean" or ncjk == "korean"
@@ -698,7 +698,7 @@ end
scripts.installmethod {
name = "hanzi",
- process = process,
+ injector = process,
datasets = {
default = {
inter_char_shrink_factor = 0.50, -- of quad
@@ -868,7 +868,7 @@ local function process(head,first,last)
while true do
local upcoming, id = first.next, first.id
if id == glyph_code then
- local a = first[a_prestat]
+ local a = first[a_scriptstatus]
local current = numbertocategory[a]
local action = injectors[previous]
if action then
@@ -877,7 +877,7 @@ local function process(head,first,last)
local font = first.font
if font ~= lastfont then
lastfont = font
- set_parameters(font,numbertodataset[first[a_preproc]])
+ set_parameters(font,numbertodataset[first[a_scriptinjection]])
end
action(head,first)
end
@@ -893,7 +893,7 @@ local function process(head,first,last)
if p and n then
local pid, nid = p.id, n.id
if pid == glyph_code and nid == glyph_code then
- local pa, na = p[a_prestat], n[a_prestat]
+ local pa, na = p[a_scriptstatus], n[a_scriptstatus]
local pcjk, ncjk = pa and numbertocategory[pa], na and numbertocategory[na]
if not pcjk or not ncjk
or pcjk == "korean" or ncjk == "korean"
@@ -902,7 +902,7 @@ local function process(head,first,last)
or pcjk == "half_width_close" or ncjk == "half_width_open" then -- extra compared to korean
previous = "start"
else -- if head ~= first then
-if id == glue_code and first.subtype == userskip_code then -- also prestat check?
+if id == glue_code and first.subtype == userskip_code then -- also scriptstatus check?
-- for the moment no distinction possible between space and userskip
local w = first.spec.width
local s = spacedata[p.font]
@@ -935,7 +935,7 @@ end
scripts.installmethod {
name = "nihongo", -- what name to use?
- process = process,
+ injector = process,
datasets = {
default = {
inter_char_shrink_factor = 0.50, -- of quad
diff --git a/Master/texmf-dist/tex/context/base/scrp-eth.lua b/Master/texmf-dist/tex/context/base/scrp-eth.lua
index e1b8df43232..597afa1b558 100644
--- a/Master/texmf-dist/tex/context/base/scrp-eth.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-eth.lua
@@ -19,8 +19,8 @@ local new_penalty = nodepool.penalty
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
-local a_prestat = attributes.private('prestat')
-local a_preproc = attributes.private('preproc')
+local a_scriptstatus = attributes.private('scriptstatus')
+local a_scriptinjection = attributes.private('scriptinjection')
local categorytonumber = scripts.categorytonumber
local numbertocategory = scripts.numbertocategory
@@ -37,7 +37,7 @@ local inter_character_stretch_factor = 1
local inter_character_shrink_factor = 1
local function space_glue(current)
- local data = numbertodataset[current[a_preproc]]
+ local data = numbertodataset[current[a_scriptinjection]]
if data then
inter_character_space_factor = data.inter_character_space_factor or 1
inter_character_stretch_factor = data.inter_character_stretch_factor or 1
@@ -106,8 +106,8 @@ local function process(head,first,last)
while current do
local id = current.id
if id == glyph_code then
- local prestat = current[a_prestat]
- local category = numbertocategory[prestat]
+ local scriptstatus = current[a_scriptstatus]
+ local category = numbertocategory[scriptstatus]
if injector then
local action = injector[category]
if action then
@@ -129,7 +129,7 @@ end
scripts.installmethod {
name = "ethiopic",
- process = process,
+ injector = process,
datasets = {
default = {
inter_character_space_factor = 1,
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.lua b/Master/texmf-dist/tex/context/base/scrp-ini.lua
index c375e2ec3d7..18f86475ffc 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-ini.lua
@@ -29,14 +29,18 @@ local unsetvalue = attributes.unsetvalue
local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
-local a_preproc = attributes.private('preproc')
-local a_prestat = attributes.private('prestat')
+local a_scriptinjection = attributes.private('scriptinjection')
+local a_scriptsplitting = attributes.private('scriptsplitting')
+local a_scriptstatus = attributes.private('scriptstatus')
local fontdata = fonts.hashes.identifiers
local allocate = utilities.storage.allocate
local setnodecolor = nodes.tracers.colors.set
local setmetatableindex = table.setmetatableindex
+local enableaction = nodes.tasks.enableaction
+local disableaction = nodes.tasks.disableaction
+
scripts = scripts or { }
local scripts = scripts
@@ -46,6 +50,12 @@ local hash = scripts.hash
local handlers = allocate()
scripts.handlers = handlers
+local injectors = allocate()
+scripts.injectors = handlers
+
+local splitters = allocate()
+scripts.splitters = splitters
+
local hash = { -- we could put these presets in char-def.lua
--
-- half width opening parenthesis
@@ -198,15 +208,19 @@ local numbertohandler = allocate()
--~ storage.register("scripts/hash", hash, "scripts.hash")
scripts.numbertodataset = numbertodataset
+scripts.numbertohandler = numbertohandler
local defaults = {
inter_char_shrink_factor = 0,
+ inter_char_shrink_factor = 0,
inter_char_stretch_factor = 0,
inter_char_half_shrink_factor = 0,
inter_char_half_stretch_factor = 0,
inter_char_quarter_shrink_factor = 0,
inter_char_quarter_stretch_factor = 0,
inter_char_hangul_penalty = 0,
+
+ inter_word_stretch_factor = 0,
}
scripts.defaults = defaults -- so we can add more
@@ -283,13 +297,39 @@ function scripts.installdataset(specification) -- global overload
end
end
+local injectorenabled = false
+local splitterenabled = false
+
function scripts.set(name,method,preset)
local handler = handlers[method]
- texsetattribute(a_preproc,handler and handler.attributes[preset] or unsetvalue)
+ if handler then
+ if handler.injector then
+ if not injectorenabled then
+ enableaction("processors","scripts.injectors.handler")
+ injectorenabled = true
+ end
+ texsetattribute(a_scriptinjection,handler.attributes[preset] or unsetvalue)
+ end
+ if handler.splitter then
+ if not splitterenabled then
+ enableaction("processors","scripts.splitters.handler")
+ splitterenabled = true
+ end
+ texsetattribute(a_scriptsplitting,handler.attributes[preset] or unsetvalue)
+ end
+ if handler.initializer then
+ handler.initializer(handler)
+ handler.initializer = nil
+ end
+ else
+ texsetattribute(a_scriptinjection,unsetvalue)
+ texsetattribute(a_scriptsplitting,unsetvalue)
+ end
end
function scripts.reset()
- texsetattribute(handler.attributes[preset])
+ texsetattribute(a_scriptinjection,unsetvalue)
+ texsetattribute(a_scriptsplitting,unsetvalue)
end
-- the following tables will become a proper installer (move to cjk/eth)
@@ -345,7 +385,7 @@ scripts.numbertocategory = numbertocategory
local function colorize(start,stop)
for n in traverse_id(glyph_code,start) do
- local kind = numbertocategory[n[a_prestat]]
+ local kind = numbertocategory[n[a_scriptstatus]]
if kind then
local ac = scriptcolors[kind]
if ac then
@@ -376,7 +416,7 @@ end
-- we can have a fonts.hashes.originals
-function scripts.preprocess(head)
+function scripts.injectors.handler(head)
local start = first_glyph(head) -- we already have glyphs here (subtype 1)
if not start then
return head, false
@@ -386,7 +426,7 @@ function scripts.preprocess(head)
while start do
local id = start.id
if id == glyph_code then
- local a = start[a_preproc]
+ local a = start[a_scriptinjection]
if a then
if a ~= last_a then
if first then
@@ -405,7 +445,7 @@ function scripts.preprocess(head)
end
last_a = a
local handler = numbertohandler[a]
- normal_process = handler.process
+ normal_process = handler.injector
end
if normal_process then
local f = start.font
@@ -424,7 +464,7 @@ function scripts.preprocess(head)
end
local h = hash[c]
if h then
- start[a_prestat] = categorytonumber[h]
+ start[a_scriptstatus] = categorytonumber[h]
if not first then
first, last = start, start
else
@@ -502,6 +542,10 @@ function scripts.preprocess(head)
end
end
+function scripts.splitters.handler(head)
+ return head, false
+end
+
-- new plugin:
local registercontext = fonts.specifiers.registercontext
@@ -526,14 +570,14 @@ setmetatableindex(cache_nop,function(t,k) local v = { } t[k] = v return v end)
--
-- we can consider merging this in handlers.characters(head) at some point as there
-- already check for the dynamic attribute so it saves a pass, however, then we also
--- need to check for a_preproc there which nils the benefit
+-- need to check for a_scriptinjection there which nils the benefit
--
-- we can consider cheating: set all glyphs in a word as the first one but it's not
-- playing nice
function autofontfeature.handler(head)
for n in traverse_id(glyph_code,head) do
- -- if n[a_preproc] then
+ -- if n[a_scriptinjection] then
-- -- already tagged by script feature, maybe some day adapt
-- else
local char = n.char
@@ -553,7 +597,7 @@ function autofontfeature.handler(head)
end
if attr ~= 0 then
n[0] = attr
- -- maybe set preproc when associated
+ -- maybe set scriptinjection when associated
end
else
local slot = cache_nop[font]
@@ -567,7 +611,7 @@ function autofontfeature.handler(head)
end
if attr ~= 0 then
n[0] = attr
- -- maybe set preproc when associated
+ -- maybe set scriptinjection when associated
end
end
end
@@ -578,12 +622,12 @@ end
function autofontfeature.enable()
report_scripts("globally enabled")
- nodes.tasks.enableaction("processors","scripts.autofontfeature.handler")
+ enableaction("processors","scripts.autofontfeature.handler")
end
function autofontfeature.disable()
report_scripts("globally disabled")
- nodes.tasks.disableaction("processors","scripts.autofontfeature.handler")
+ disableaction("processors","scripts.autofontfeature.handler")
end
commands.enableautofontscript = autofontfeature.enable
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv b/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
index bf8b580c79a..fe62295bb62 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
@@ -17,8 +17,9 @@
\registerctxluafile{scrp-cjk}{1.001}
\registerctxluafile{scrp-eth}{1.001}
-\definesystemattribute[preproc][public]
-\definesystemattribute[prestat][public]
+\definesystemattribute[scriptinjection][public]
+\definesystemattribute[scriptsplitting][public]
+\definesystemattribute[scriptstatus] [public]
%D Since scripts need specific \LUA\ code we use hard coded attribute
%D values, but we might have more tricks at some time, so we use a
@@ -56,15 +57,25 @@
\unexpanded\def\stopscript
{\endgroup}
+% % todo:
+%
+% \unexpanded\def\setscriptsplitterlist
+% {\dodoubleargument\scripts_basics_set_splitter_list}
+%
+% \def\scripts_basics_set_splitter_list[#1][#2]%
+% {\ctxcommand{setscriptsplitterlist("#1","#2")}
+
% \setscript[hangul] \hangul \startscript[hangul]
-\definescript[hangul] [\c!method=hangul]
-\definescript[hanzi] [\c!method=hanzi]
-\definescript[nihongo] [\c!method=nihongo]
+\definescript [hangul] [\c!method=hangul]
+\definescript [hanzi] [\c!method=hanzi]
+\definescript [nihongo] [\c!method=nihongo]
+\definescript [ethiopic] [\c!method=ethiopic]
+\definescript [thai] [\c!method=thai]
-\definescript[ethiopic][\c!method=ethiopic]
+\definescript [latin] [\c!method=] % resets the attribute (also currentscript)
-\definescript[latin] [\c!method=] % resets the attribute (also currentscript)
+\definescript [test] [\c!method=test]
% a new trick (at some point we will predefine more scripts and consider a link with the above)
diff --git a/Master/texmf-dist/tex/context/base/status-files.pdf b/Master/texmf-dist/tex/context/base/status-files.pdf
index c946b365c08..097fe5a2dca 100644
--- a/Master/texmf-dist/tex/context/base/status-files.pdf
+++ b/Master/texmf-dist/tex/context/base/status-files.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/status-lua.pdf b/Master/texmf-dist/tex/context/base/status-lua.pdf
index 0a20f8d0366..f727ca843ec 100644
--- a/Master/texmf-dist/tex/context/base/status-lua.pdf
+++ b/Master/texmf-dist/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/status-mkiv.lua b/Master/texmf-dist/tex/context/base/status-mkiv.lua
index 95139d1d4e2..443eee60ec4 100644
--- a/Master/texmf-dist/tex/context/base/status-mkiv.lua
+++ b/Master/texmf-dist/tex/context/base/status-mkiv.lua
@@ -3255,6 +3255,12 @@ return {
},
{
category = "lua",
+ filename = "font-trt",
+ loading = "font-lib",
+ status = "okay",
+ },
+ {
+ category = "lua",
filename = "font-vf",
loading = "font-lib",
status = "pending",
@@ -4261,8 +4267,93 @@ return {
},
{
category = "lua",
+ filename = "s-fonts-coverage",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-features",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-missing",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-shapes",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-system",
+ status = "okay",
+ },
+ {
+ category = "lua",
filename = "s-fonts-tables",
- status = "todo",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-vectors",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-counters",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-frequencies",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-hyphenation",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-sorting",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-system",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-math-characters",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-math-coverage",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-math-extensibles",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-fonts-goodies",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-math-parameters",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-physics-units",
+ status = "okay",
},
{
category = "lua",
@@ -4271,6 +4362,11 @@ return {
},
{
category = "lua",
+ filename = "s-sql-tables",
+ status = "okay",
+ },
+ {
+ category = "lua",
filename = "scrn-but",
status = "todo",
},
@@ -5250,11 +5346,6 @@ return {
},
{
category = "mkiv",
- filename = "s-fnt-11",
- status = "todo",
- },
- {
- category = "mkiv",
filename = "s-fnt-20",
status = "todo",
},
@@ -5265,53 +5356,61 @@ return {
},
{
category = "mkiv",
- filename = "s-fnt-23",
+ filename = "s-fnt-24",
status = "todo",
},
{
category = "mkiv",
- filename = "s-fnt-24",
+ filename = "s-fnt-30",
status = "todo",
},
{
category = "mkiv",
- filename = "s-fnt-26",
- status = "todo",
+ filename = "s-fonts-coverage",
+ loading = "s-fonts-coverage",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fnt-28",
- status = "todo",
+ filename = "s-fonts-features",
+ loading = "s-fonts-features",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fnt-29",
- status = "todo",
+ filename = "s-fonts-goodies",
+ loading = "s-fonts-goodies",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fnt-30",
- status = "todo",
+ filename = "s-fonts-missing",
+ loading = "s-fonts-missing",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fnt-31",
- status = "todo",
+ filename = "s-fonts-shapes",
+ loading = "s-fonts-shapes",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fnt-32",
- status = "todo",
+ filename = "s-fonts-system",
+ loading = "s-fonts-system",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fonts-missing",
- status = "todo",
+ filename = "s-fonts-tables",
+ loading = "s-fonts-tables",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-fonts-tables",
- status = "todo",
+ filename = "s-fonts-vectors",
+ loading = "s-fonts-vectors",
+ status = "okay",
},
{
category = "mkvi",
@@ -5334,6 +5433,36 @@ return {
status = "todo",
},
{
+ category = "lua",
+ filename = "s-languages-counters",
+ loading = "s-languages-counters",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-frequencies",
+ loading = "s-languages-frequencies",
+ status = "okay",
+ },
+ {
+ category = "lua",
+ filename = "s-languages-hyphenation",
+ loading = "s-languages-hyphenation",
+ status = "okay",
+ },
+ {
+ category = "mkiv",
+ filename = "s-languages-sorting",
+ loading = "s-languages-sorting",
+ status = "okay",
+ },
+ {
+ category = "mkiv",
+ filename = "s-languages-system",
+ loading = "s-languages-system",
+ status = "okay",
+ },
+ {
category = "mkiv",
filename = "s-lan-03",
status = "todo",
@@ -5360,23 +5489,33 @@ return {
},
{
category = "mkiv",
- filename = "s-mat-10",
- status = "todo",
+ filename = "s-math-characters",
+ loading = "s-math-characters",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-mat-20",
+ filename = "s-math-coverage",
+ loading = "s-math-coverage",
status = "okay",
},
{
category = "mkiv",
- filename = "s-mat-11",
- status = "todo",
+ filename = "s-math-extensibles",
+ loading = "s-math-extensibles",
+ status = "okay",
},
{
category = "mkiv",
- filename = "s-mat-12",
- status = "todo",
+ filename = "s-math-parameters",
+ loading = "s-math-parameters",
+ status = "okay",
+ },
+ {
+ category = "mkiv",
+ filename = "s-math-repertoire",
+ loading = "s-math-repertoire",
+ status = "okay",
},
{
category = "mkiv",
@@ -5395,8 +5534,14 @@ return {
},
{
category = "mkiv",
- filename = "s-phy-01",
- status = "todo",
+ filename = "s-pages-statistics",
+ status = "okay",
+ },
+ {
+ category = "mkiv",
+ filename = "s-physics-units",
+ loading = "s-physics-units",
+ status = "okay",
},
{
category = "tex",
@@ -5524,6 +5669,11 @@ return {
status = "todo",
},
{
+ category = "mkiv",
+ filename = "s-present-tiles",
+ status = "okay",
+ },
+ {
category = "tex",
filename = "s-pre-50",
status = "todo",
@@ -5615,6 +5765,12 @@ return {
},
{
category = "mkiv",
+ filename = "s-sql-tables",
+ loading = "s-sql-tables",
+ status = "okay",
+ },
+ {
+ category = "mkiv",
filename = "x-asciimath",
status = "okay",
},
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.mkvi b/Master/texmf-dist/tex/context/base/strc-itm.mkvi
index 5840ee73ea3..85ec4bc456d 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.mkvi
+++ b/Master/texmf-dist/tex/context/base/strc-itm.mkvi
@@ -430,6 +430,7 @@
\setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
\setvalue{\??itemgroupkeyword\v!unpacked }{\setfalse\c_strc_itemgroups_pack}
\setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_strc_itemgroups_repeat}
+\setvalue{\??itemgroupkeyword\v!norepeat }{\setfalse\c_strc_itemgroups_repeat}
\setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_strc_itemgroups_reverse}
\setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_strc_itemgroups_columns}
\setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone}
@@ -1306,6 +1307,8 @@
\ifx\m_strc_itemgroups_repeat_start\empty
\edef\m_strc_itemgroups_repeat_start{\currentitemlevel}%
\fi
+ \else
+ \let\m_strc_itemgroups_repeat_start\empty
\fi}
\def\strc_itemgroups_insert_item
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.lua b/Master/texmf-dist/tex/context/base/strc-lst.lua
index ad7dc0f5413..305b6a6fa5b 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.lua
+++ b/Master/texmf-dist/tex/context/base/strc-lst.lua
@@ -679,12 +679,16 @@ commands.listprefixednumber = lists.prefixednumber
commands.listprefixedpage = lists.prefixedpage
-function commands.addtolist (...) context(lists.addto (...)) end -- we could use variables instead of print
-function commands.listsize (...) context(lists.size (...)) end
-function commands.listlocation (...) context(lists.location (...)) end
-function commands.listlabel (...) context(lists.label (...)) end
-function commands.listrealpage (...) context(lists.realpage (...)) end
-function commands.listgroupindex(...) context(lists.groupindex(...)) end
+function commands.addtolist (...) context(lists.addto (...)) end
+function commands.listsize (...) context(lists.size (...)) end
+function commands.listlocation (...) context(lists.location (...)) end
+function commands.listlabel (...) context(lists.label (...)) end
+function commands.listrealpage (...) context(lists.realpage (...)) end
+function commands.listgroupindex (...) context(lists.groupindex(...)) end
+
+function commands.currentsectiontolist()
+ context(lists.addto(sections.current()))
+end
function commands.listuserdata(...)
local str, metadata = lists.userdata(...)
diff --git a/Master/texmf-dist/tex/context/base/strc-sec.mkiv b/Master/texmf-dist/tex/context/base/strc-sec.mkiv
index dd51451b9b1..a5ff2084e5a 100644
--- a/Master/texmf-dist/tex/context/base/strc-sec.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-sec.mkiv
@@ -204,7 +204,8 @@
userdata = \!!bs\detokenize{#3}\!!es % will be converted to table at the lua end
}
}}%
- \xdef\currentstructurelistnumber{\ctxcommand{addtolist(structures.sections.current())}}%
+ % \xdef\currentstructurelistnumber{\ctxcommand{addtolist(structures.sections.current())}}%
+ \xdef\currentstructurelistnumber{\ctxcommand{currentsectiontolist()}}%
% \currentstructuresynchronize has to be called someplace, since it introduces a node
\setstructuresynchronization\currentstructurelistnumber
\endgroup}
@@ -722,7 +723,6 @@
\unexpanded\def\placeheadtext {\dosingleempty\strc_sectioning_place_head_text } % use with care
\unexpanded\def\placeheadnumber{\dosingleempty\strc_sectioning_place_head_number} % use with care
-
\unexpanded\def\strc_sectioning_report{\ctxlua{structures.sections.reportstructure()}}
\ifdefined\strc_rendering_initialize_style_and_color \else
diff --git a/Master/texmf-dist/tex/context/base/supp-box.mkiv b/Master/texmf-dist/tex/context/base/supp-box.mkiv
index 25c7764f8d9..83309622261 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.mkiv
+++ b/Master/texmf-dist/tex/context/base/supp-box.mkiv
@@ -271,15 +271,17 @@
\box\nextbox
\endgroup}
-\def\syst_boxes_s_w{\wd\nextbox\zeropoint}
-\def\syst_boxes_s_h{\ht\nextbox\zeropoint}
-\def\syst_boxes_s_d{\dp\nextbox\zeropoint}
-\def\syst_boxes_s_t{\ht\nextbox\zeropoint}
-\def\syst_boxes_s_b{\dp\nextbox\zeropoint}
+\installcorenamespace {smashoptions}
+
+\setvalue{\??smashoptions w}{\wd\nextbox\zeropoint}
+\setvalue{\??smashoptions h}{\ht\nextbox\zeropoint}
+\setvalue{\??smashoptions d}{\dp\nextbox\zeropoint}
+\setvalue{\??smashoptions t}{\ht\nextbox\zeropoint}
+\setvalue{\??smashoptions b}{\dp\nextbox\zeropoint}
\def\syst_boxes_smash_process_option#1%
{\ifx#1\relax\else
- \csname boxes_s_#1\endcsname
+ \ifcsname\??smashoptions#1\endcsname\csname\??smashoptions#1\endcsname\fi
\expandafter\syst_boxes_smash_process_option
\fi}
diff --git a/Master/texmf-dist/tex/context/base/syst-aux.mkiv b/Master/texmf-dist/tex/context/base/syst-aux.mkiv
index 4a8c8d32f26..542b132ae9a 100644
--- a/Master/texmf-dist/tex/context/base/syst-aux.mkiv
+++ b/Master/texmf-dist/tex/context/base/syst-aux.mkiv
@@ -470,6 +470,8 @@
\def\setugvalue #1{\normalprotected\expandafter\gdef\csname#1\endcsname}
\def\setuxvalue #1{\normalprotected\expandafter\xdef\csname#1\endcsname}
+\unexpanded\def\getuvalue#1{\csname#1\endcsname}
+
%D \macros
%D {globallet,glet}
%D
@@ -3494,6 +3496,19 @@
\global\advance\outerrecurse \minusone }
%D \macros
+%D {dowith}
+%D
+%D Here's a loop over whatever is in a list:
+%D
+%D \starttyping
+%D \dowith{a,b,c}{[#1]}
+%D \stoptyping
+
+\unexpanded\def\dowith#1#2%
+ {\def\syst_helpers_with##1{#2}%
+ \normalexpanded{\processcommalist[#1]}\syst_helpers_with}
+
+%D \macros
%D {doloop,exitloop}
%D
%D Sometimes loops are not determined by counters, but by
@@ -6284,7 +6299,7 @@
\unexpanded\def\freezemeasure
{\dodoubleargument\syst_helpers_freeze_measure}
-\def\syst_helpers_freede_measure[#1][#2]%
+\def\syst_helpers_freeze_measure[#1][#2]%
{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}}
\unexpanded\def\setmeasure #1#2{\expandafter\def \csname\??measure#1\endcsname{#2}} % quick way
@@ -6292,8 +6307,11 @@
\unexpanded\def\setemeasure#1#2{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way
\unexpanded\def\setxmeasure#1#2{\expandafter\xdef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way
-\def\measure#1% maybe \dimexpr ... \relax
- {\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi}
+\def\measure
+ {\the\measured}
+
+\def\measured#1%
+ {\dimexpr\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi\relax}
% #2 could be omitted, but we want to support spaces
%
diff --git a/Master/texmf-dist/tex/context/base/syst-ini.mkiv b/Master/texmf-dist/tex/context/base/syst-ini.mkiv
index 59313ba494c..ab1c53131de 100644
--- a/Master/texmf-dist/tex/context/base/syst-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/syst-ini.mkiv
@@ -87,37 +87,42 @@
\expandafter\end
\fi
-\ifnum\texengine=\luatexengine
- \directlua 0 { % this info is stored in the format
- lua.name[0] = "main ctx instance"
- local extraprimitives = tex.extraprimitives
- local enableprimitives = tex.enableprimitives
- local core = extraprimitives('core')
- local btex = extraprimitives('tex')
- local etex = extraprimitives('etex')
- local pdftex = extraprimitives('pdftex')
- local luatex = extraprimitives('luatex')
- local omega = {
- "textdir", "pagedir", "mathdir", "pardir", "bodydir",
- "leftghost", "rightghost", "localleftbox", "localrightbox",
- "localinterlinepenalty", "localbrokenpenalty",
- }
- local aleph = {
- "boxdir", "pagebottomoffset", "pagerightoffset",
- }
- for _, subset in next, { etex, pdftex, luatex, omega, aleph } do
- enableprimitives('',subset)
- end
- for _, subset in next, { core, btex, etex, pdftex, luatex, omega, aleph } do
- enableprimitives('normal',subset)
- end
+%D Initialization of primitives.
+
+\directlua 0 { % this info is stored in the format
+ lua.name[0] = "main ctx instance"
+ local extraprimitives = tex.extraprimitives
+ local enableprimitives = tex.enableprimitives
+ local core = extraprimitives("core")
+ local btex = extraprimitives("tex")
+ local etex = extraprimitives("etex")
+ local pdftex = extraprimitives("pdftex")
+ local luatex = extraprimitives("luatex")
+ local omega = {
+ "textdir", "pagedir", "mathdir", "pardir", "bodydir",
+ "leftghost", "rightghost", "localleftbox", "localrightbox",
+ "localinterlinepenalty", "localbrokenpenalty",
}
-\fi
+ local aleph = {
+ "boxdir", "pagebottomoffset", "pagerightoffset",
+ }
+ for _, subset in next, { etex, pdftex, luatex, omega, aleph } do
+ enableprimitives("",subset)
+ end
+ for _, subset in next, { core, btex, etex, pdftex, luatex, omega, aleph } do
+ enableprimitives("normal",subset)
+ end
+}
+
+%D Handy.
+
+\suppresslongerror = 1
+\suppressoutererror = 1
%D \ETEX\ has a not so handy way of telling you the version number, i.e. the revision
%D number has a period in it:
-\long\def\gobbleoneargument#1{} % will be defined later on anyway
+\def\gobbleoneargument#1{} % will be defined later on anyway
\mathchardef\etexversion = \numexpr\eTeXversion*100+\expandafter\gobbleoneargument\eTeXrevision\relax
@@ -286,20 +291,16 @@
%D Since the number of chars exceed 256 now, we can use \type {\chardef} instead of
%D the more limited \type {\mathchardef}.
-\ifnum\texengine>\pdftexengine
- \normalprotected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register}
- \normalprotected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register}
-\fi
+\normalprotected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register}
+\normalprotected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register}
%D Attributes are something very \LUATEX. In \CONTEXT\ you are not supposed to use
%D the attributes directly but always allocate then first. For instance attribute~0
%D is reserved for special purposes (this might change). Attributes in the range
%D 128-1023 are private and should not be touched.
-\ifnum\texengine=\luatexengine
- \let\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone
- \normalprotected\def\newattribute{\syst_basics_allocate\c_syst_min_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register}
-\fi
+\let\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone
+\normalprotected\def\newattribute{\syst_basics_allocate\c_syst_min_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register}
%D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a trick to force
%D strings instead of tokens that take more memory. It's a trick to trick to force
@@ -409,22 +410,12 @@
\chardef \pluscxxvii = 127
\chardef \pluscxxviii = 128
\chardef \pluscclv = 255
-
-\ifnum\texengine=\luatexengine
- \chardef \pluscclvi = 256
- \chardef \plusthousand = 1000
- \chardef \plustenthousand = 10000
- \chardef \plustwentythousand = 20000
- \chardef \medcard = 32768
- \chardef \maxcard = 65536 % pdftex has less mathchars
-\else
- \mathchardef\pluscclvi = 256
- \mathchardef\plusthousand = 1000
- \mathchardef\plustenthousand = 10000
- \mathchardef\plustwentythousand = 20000
- \newcount \medcard \medcard = 32768 % pdftex has less mathchars
- \newcount \maxcard \maxcard = 65536 % pdftex has less mathchars
-\fi
+\chardef \pluscclvi = 256
+\chardef \plusthousand = 1000
+\chardef \plustenthousand = 10000
+\chardef \plustwentythousand = 20000
+\chardef \medcard = 32768
+\chardef \maxcard = 65536 % pdftex has less mathchars
%D \macros
%D {doubleexpandafter,tripleexpandafter,expanded,startexpanded}
@@ -875,7 +866,7 @@
%D get. Beware: this macro does not support nested loops. We use a namespace
%D prefix \type {@@pln}.
-\long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate} % might go
+\def\loop#1\repeat{\def\@@plnbody{#1}\@@plniterate} % might go
%D The following makes \type {\loop} \unknown\ \type {\if} \unknown\ \type
%D {\repeat} skippable (clever trick):
@@ -905,7 +896,7 @@
%D Although we don't add pagenumbers yet we alias the default register used
%D for counting pages:
-\countdef\pageno=0 \pageno=1 % first page is number 1
+\countdef\pageno\zerocount \pageno\plusone % first page is number 1
%D Beside the raw counter \type {\pageno} the \type {\folio} macro provides
%D the value.
@@ -923,7 +914,8 @@
\lineskip = 1pt
\lineskiplimit = 0pt
-%D Again a few kind-of-extensions the core: (might go away)
+%D Again a few kind-of-extensions the core. These come from plain \TEX\ but
+%D are probably not used in \CONTEXT.
\newskip \hideskip \hideskip = -1000pt plus 1fill
\newskip \centering \centering = 0pt plus 1000pt minus 1000pt
@@ -959,12 +951,12 @@
{\egroup}
\egroup
-\let\endTEX \relax \long\def\beginTEX #1\endTEX {}
-\let\endETEX \relax \long\def\beginETEX #1\endETEX {}
-\let\endXETEX \relax \long\def\beginXETEX #1\endXETEX {}
-\let\endLUATEX\relax \long\def\beginLUATEX#1\endLUATEX{}
-\let\endOLDTEX\relax \long\def\beginOLDTEX#1\endOLDTEX{}
-\let\endNEWTEX\relax \long\def\beginNEWTEX#1\endNEWTEX{}
+\let\endTEX \relax \def\beginTEX #1\endTEX {}
+\let\endETEX \relax \def\beginETEX #1\endETEX {}
+\let\endXETEX \relax \def\beginXETEX #1\endXETEX {}
+\let\endLUATEX\relax \def\beginLUATEX#1\endLUATEX{}
+\let\endOLDTEX\relax \def\beginOLDTEX#1\endOLDTEX{}
+\let\endNEWTEX\relax \def\beginNEWTEX#1\endNEWTEX{}
\pickupSOMETEX{ETEX}
@@ -1019,76 +1011,61 @@
% \bindprimitive ifabsdim ifpdfabsdim
% \bindprimitive ifabsnum ifpdfabsnum
-\ifnum\texengine=\xetexengine \else % this test might disappear some day
-
- \pdfminorversion \plusfive
-
- \ifdefined\pdfcompresslevel \else \newcount\pdfcompresslevel \fi
- \ifdefined\pdfobjcompresslevel \else \newcount\pdfobjcompresslevel \fi
- \ifdefined\pdfgentounicode \else \newcount\pdfgentounicode \fi \pdfgentounicode \plusone
- \ifdefined\pdfinclusioncopyfonts\else \newcount\pdfinclusioncopyfonts \fi \pdfinclusioncopyfonts\plusone
-
- \normalprotected\def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount}
- \normalprotected\def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine }
- \normalprotected\def\normalpdfcompression {\pdfobjcompresslevel\plusthree \pdfcompresslevel\plusthree}
-
- \normalpdfcompression
+%D We need to make sure that we start up in \DVI\ mode, so, after testing for running
+%D \PDFTEX, we default to \DVI.
- \let\normalsetrandomseed \setrandomseed
- \let\normaluniformdeviate\uniformdeviate
+\pdfoutput \zerocount
+\pdfminorversion \plusfive
+\pdfgentounicode \plusone
+\pdfinclusioncopyfonts\plusone
-\fi
+\normalprotected\def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount}
+\normalprotected\def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine }
+\normalprotected\def\normalpdfcompression {\pdfobjcompresslevel\plusthree \pdfcompresslevel\plusthree}
-%D Handy.
+\normalpdfcompression
-\ifnum\texengine=\luatexengine
- \ifdefined\suppresslongerror % for the moment test
- \suppresslongerror\plusone
- \fi
-\fi
+\let\normalsetrandomseed \setrandomseed
+\let\normaluniformdeviate\uniformdeviate
%D Basic status stuff.
\newif\ifproductionrun
-%D We need to make sure that we start up in \DVI\ mode, so, after testing for running
-%D \PDFTEX, we default to \DVI.
-
-\ifx\pdftexversion\undefined \newcount\pdfoutput \fi \pdfoutput=0
-
%D For those who expect this \unknown
-\ifx\fmtname \undefined \def\fmtname {ConTeXt Minimized Plain TeX} \fi
-\ifx\fmtversion\undefined \def\fmtversion{3.1415926} \fi
-
-\let\normalfmtversion\fmtversion % still needed ?
+\ifx\fmtname \undefined \def\fmtname {ConTeXt Initial TeX} \fi
+\ifx\fmtversion\undefined \def\fmtversion{3.1415926} \fi
%D A few bonus macros:
\def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax}
\def\dividenumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax}
-\ifnum\texengine=\xetexengine
- \edef\xetexversion {\numexpr\XeTeXversion*100+(\expandafter\gobbleoneargument\XeTeXrevision-5)/10\relax}
- \edef\xetexrevision {\the\numexpr(\expandafter\gobbleoneargument\XeTeXrevision-50)/100\relax}
-\fi
-
-\ifcase\texengine
- \def \texenginename {impossible}
- \edef\texengineversion{0}
-\or
- \def \texenginename {pdfTeX}
- \edef\texengineversion{\dividenumber{100}\pdftexversion.\modulonumber{100}\pdftexversion.\pdftexrevision}
-\or
- \def \texenginename {XeTeX}
- \edef\texengineversion{\dividenumber{100}\xetexversion .\modulonumber{100}\xetexversion .\xetexrevision}
-\or
- \def \texenginename {LuaTeX}
- \edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision}
-\else
- \def \texenginename {impossible}
- \edef\texengineversion{0}
-\fi
+% \ifnum\texengine=\xetexengine
+% \edef\xetexversion {\numexpr\XeTeXversion*100+(\expandafter\gobbleoneargument\XeTeXrevision-5)/10\relax}
+% \edef\xetexrevision {\the\numexpr(\expandafter\gobbleoneargument\XeTeXrevision-50)/100\relax}
+% \fi
+%
+% \ifcase\texengine
+% \def \texenginename {impossible}
+% \edef\texengineversion{0}
+% \or
+% \def \texenginename {pdfTeX}
+% \edef\texengineversion{\dividenumber{100}\pdftexversion.\modulonumber{100}\pdftexversion.\pdftexrevision}
+% \or
+% \def \texenginename {XeTeX}
+% \edef\texengineversion{\dividenumber{100}\xetexversion .\modulonumber{100}\xetexversion .\xetexrevision}
+% \or
+% \def \texenginename {LuaTeX}
+% \edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision}
+% \else
+% \def \texenginename {impossible}
+% \edef\texengineversion{0}
+% \fi
+
+\def \texenginename {LuaTeX}
+\edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision}
%D We have no reason not to enable this:
diff --git a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv b/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
index ec1b78b13cd..57134cb53aa 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
@@ -1706,8 +1706,8 @@
[\c!frameoffset=.5\linewidth,
\c!backgroundoffset=\v!frame,
\c!framecolor=\s!black,
- \c!width=fit,
- \c!height=fit,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
\c!autowidth=\v!yes,
% \c!rulethickness=\linewidth,
\c!strut=\v!no,
diff --git a/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi b/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi
index 03c68e60332..aba4e502718 100644
--- a/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi
+++ b/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi
@@ -168,17 +168,17 @@
% really need them and use the embeddedxtable command when nesting them.
% Implementing nesting would be slower than not using direct buffers.
-\def\tabl_x_process_buffer_directly[#name]%
+\unexpanded\def\tabl_x_process_buffer_directly[#name]%
{\bgroup
\let\tabl_x_start_table\tabl_x_process_buffer
\edef\tabl_x_current_buffer{#name}%
\tabl_x_get_buffer % pickup settings
\tabl_x_process}
-\def\tabl_x_start_ignore[#settings]%
+\unexpanded\def\tabl_x_start_ignore[#settings]%
{}
-\def\tabl_x_process_buffer[#settings]%
+\unexpanded\def\tabl_x_process_buffer[#settings]%
{\tabl_x_prepare{#settings}%
\let\tabl_x_start_table\tabl_x_start_ignore
\gobbleuntil\stopxtable} % nested xtables are not supported,
@@ -189,7 +189,7 @@
\unexpanded\def\startembeddedxtable
{\dosingleempty\tabl_x_embedded_start}
-\def\tabl_x_embedded_start[#settings]#content\stopembeddedxtable
+\unexpanded\def\tabl_x_embedded_start[#settings]#content\stopembeddedxtable
{\tabl_x_prepare{#settings}%
\ctxcommand{assignbuffer("embedded_x_table",\!!bs\detokenize{#content}\!!es)}%
\bgroup
@@ -227,7 +227,7 @@
%D Now we come to processing:
-\def\tabl_x_check_textwidth
+\unexpanded\def\tabl_x_check_textwidth
{\edef\p_textwidth{\xtableparameter\c!textwidth}%
\ifx\p_textwidth\v!local
\d_tabl_x_textwidth\availablehsize
@@ -235,7 +235,7 @@
\d_tabl_x_textwidth\p_textwidth
\fi}
-\def\tabl_x_prepare#settings% assumes \iffirstargument to be set
+\unexpanded\def\tabl_x_prepare#settings% assumes \iffirstargument to be set
{\advance\c_tabl_x_nesting\plusone
\dostarttagged\t!table\empty
\iffirstargument
@@ -247,7 +247,12 @@
\def\tabl_x_get_buffer
{\ctxcommand{gettexbuffer("\tabl_x_current_buffer")}}
-\let\tabl_x_stop_cell\relax
+\let\tabl_x_start_row_yes \relax
+\let\tabl_x_start_row_nop \relax
+\let\tabl_x_stop_row \relax
+\let\tabl_x_start_cell_yes\relax
+\let\tabl_x_start_cell_nop\relax
+\let\tabl_x_stop_cell \relax
\unexpanded\def\tabl_x_process
{\begingroup % *
@@ -322,7 +327,7 @@
\installcorenamespace{xtableflushsplit}
-\def\tabl_x_flush_text_checked
+\unexpanded\def\tabl_x_flush_text_checked
{\expandnamespaceparameter\??xtableflushsplit\xtableparameter\c!split\v!no}
% in text flow: headers and footers only once
@@ -371,10 +376,10 @@
\let\extratxtablesplitheight\zeropoint % might disappear so don't depend on it
-\def\tabl_x_flush_float_normal
+\unexpanded\def\tabl_x_flush_float_normal
{\ctxcommand{x_table_flush{ method = "\v!normal" }}}
-\def\tabl_x_flush_float_split
+\unexpanded\def\tabl_x_flush_float_split
{\resetdirecttsplit
\edef\extrasplitfloatlines {\xtableparameter\c!split}%
\edef\tsplitminimumfreespace{\the\dimexpr\extratxtablesplitheight+\xtableparameter\c!splitoffset\relax}%
@@ -383,7 +388,7 @@
\let\tsplitdirectwidth \d_tabl_x_final_width
\handledirecttsplit}
-\def\tabl_x_split_splitter#vsize%
+\unexpanded\def\tabl_x_split_splitter#vsize%
{\setbox\tsplitresult\vbox
{\ctxcommand{x_table_flush{ method = "\v!split", vsize = \number\dimexpr#vsize }}}%
\ifcase\c_tabl_x_state
@@ -396,30 +401,30 @@
{\begingroup
\doifnextoptionalelse\tabl_x_start_row_yes\tabl_x_start_row_nop}
-\def\tabl_x_start_row_reflow_width_yes[#settings]%
+\unexpanded\def\tabl_x_start_row_reflow_width_yes[#settings]%
{\setupcurrentxtable[#settings]%
\ctxcommand{x_table_next_row()}}
-\def\tabl_x_start_row_reflow_width_nop
+\unexpanded\def\tabl_x_start_row_reflow_width_nop
{\ctxcommand{x_table_next_row()}}
-\def\tabl_x_stop_row_reflow_width
+\unexpanded\def\tabl_x_stop_row_reflow_width
{}
\let\tabl_x_start_row_reflow_height_yes\tabl_x_start_row_reflow_width_yes
\let\tabl_x_start_row_reflow_height_nop\tabl_x_start_row_reflow_width_nop
\let\tabl_x_stop_row_reflow_height \tabl_x_stop_row_reflow_width
-\def\tabl_x_start_row_construct_yes[#settings]%
+\unexpanded\def\tabl_x_start_row_construct_yes[#settings]%
{\setupcurrentxtable[#settings]%
\dostarttagged\t!tablerow\empty
\ctxcommand{x_table_next_row()}}
-\def\tabl_x_start_row_construct_nop
+\unexpanded\def\tabl_x_start_row_construct_nop
{\dostarttagged\t!tablerow\empty
\ctxcommand{x_table_next_row()}}
-\def\tabl_x_stop_row_construct
+\unexpanded\def\tabl_x_stop_row_construct
{\dostoptagged}
\unexpanded\def\stopxrow
@@ -432,11 +437,11 @@
\unexpanded\def\stopxcell
{\tabl_x_stop_cell}
-\def\tabl_x_begin_of_cell
+\unexpanded\def\tabl_x_begin_of_cell
{\inhibitblank
\everypar{\delayedbegstrut}}
-\def\tabl_x_end_of_cell
+\unexpanded\def\tabl_x_end_of_cell
{\ifhmode
\delayedendstrut
\par
@@ -674,7 +679,7 @@
\unexpanded\def\stopxgroup
{\endgroup}
-\def\tabl_x_start_group_delayed_one[#tag]%
+\unexpanded\def\tabl_x_start_group_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
{\ifcsname\??xtablecheck#tag\endcsname
\expandafter\tabl_x_start_group_delayed_two
@@ -682,7 +687,7 @@
\expandafter\setupcurrentxtable
\fi[#tag]}
-\def\tabl_x_start_group_delayed_two[#tag]%
+\unexpanded\def\tabl_x_start_group_delayed_two[#tag]%
{\ifx\currentxtable\empty \else
\chaintocurrentxtable{#tag}%
\fi
@@ -700,7 +705,7 @@
{\begingroup
\doifnextoptionalelse\tabl_x_start_cell_delayed_one\tabl_x_start_cell_nop}
-\def\tabl_x_start_cell_delayed_one[#tag]%
+\unexpanded\def\tabl_x_start_cell_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
{\ifcsname\??xtablecheck#tag\endcsname
\expandafter\tabl_x_start_cell_delayed_two
@@ -708,7 +713,7 @@
\expandafter\tabl_x_start_cell_yes
\fi[#tag]}
-\def\tabl_x_start_cell_delayed_two[#tag]%
+\unexpanded\def\tabl_x_start_cell_delayed_two[#tag]%
{\ifx\currentxtable\empty \else
\chaintocurrentxtable{#tag}%
\fi
@@ -725,7 +730,7 @@
{\begingroup
\doifnextoptionalelse\tabl_x_start_row_delayed_one\tabl_x_start_row_nop}
-\def\tabl_x_start_row_delayed_one[#tag]%
+\unexpanded\def\tabl_x_start_row_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
{\ifcsname\??xtablecheck#tag\endcsname
\expandafter\tabl_x_start_row_delayed_two
@@ -733,7 +738,7 @@
\expandafter\tabl_x_start_row_yes
\fi[#tag]}
-\def\tabl_x_start_row_delayed_two[#tag]%
+\unexpanded\def\tabl_x_start_row_delayed_two[#tag]%
{\ifx\currentxtable\empty \else
\chaintocurrentxtable{#tag}%
\fi
diff --git a/Master/texmf-dist/tex/context/base/task-ini.lua b/Master/texmf-dist/tex/context/base/task-ini.lua
index 011ed50ca81..0f477cb6eb3 100644
--- a/Master/texmf-dist/tex/context/base/task-ini.lua
+++ b/Master/texmf-dist/tex/context/base/task-ini.lua
@@ -24,11 +24,12 @@ appendaction("processors", "normalizers", "fonts.collections.process")
appendaction("processors", "normalizers", "fonts.checkers.missing") -- disabled
appendaction("processors", "characters", "scripts.autofontfeature.handler")
+appendaction("processors", "characters", "scripts.splitters.handler") -- disabled
appendaction("processors", "characters", "typesetters.cleaners.handler") -- disabled
appendaction("processors", "characters", "typesetters.directions.handler") -- disabled
appendaction("processors", "characters", "typesetters.cases.handler") -- disabled
appendaction("processors", "characters", "typesetters.breakpoints.handler") -- disabled
-appendaction("processors", "characters", "scripts.preprocess")
+appendaction("processors", "characters", "scripts.injectors.handler") -- disabled
appendaction("processors", "words", "builders.kernel.hyphenation") -- always on
appendaction("processors", "words", "languages.words.check") -- disabled
@@ -108,6 +109,8 @@ appendaction("vboxbuilders","normalizers","typesetters.checkers.handler")
-- speedup: only kick in when used
disableaction("processors", "scripts.autofontfeature.handler")
+disableaction("processors", "scripts.splitters.handler")
+disableaction("processors", "scripts.injectors.handler") -- was enabled
disableaction("processors", "fonts.collections.process")
disableaction("processors", "fonts.checkers.missing")
disableaction("processors", "chars.handle_breakpoints")
diff --git a/Master/texmf-dist/tex/context/base/trac-log.lua b/Master/texmf-dist/tex/context/base/trac-log.lua
index be2a954e3e9..1f2520130c5 100644
--- a/Master/texmf-dist/tex/context/base/trac-log.lua
+++ b/Master/texmf-dist/tex/context/base/trac-log.lua
@@ -14,7 +14,7 @@ if not modules then modules = { } end modules ['trac-log'] = {
-- local texio_write_nl = texio.write_nl
-- local texio_write = texio.write
-- local io_write = io.write
---
+
-- local write_nl = function(target,...)
-- if not io_write then
-- io_write = io.write
@@ -34,7 +34,7 @@ if not modules then modules = { } end modules ['trac-log'] = {
-- io_write(target,...)
-- end
-- end
---
+
-- local write = function(target,...)
-- if not io_write then
-- io_write = io.write
@@ -51,7 +51,7 @@ if not modules then modules = { } end modules ['trac-log'] = {
-- io_write(target,...)
-- end
-- end
---
+
-- texio.write = write
-- texio.write_nl = write_nl
--
diff --git a/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv b/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv
index 1cb825a1192..f93e36428c0 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv
@@ -77,7 +77,7 @@
\definetypeface [sheep][rm][serif][sheep] [default]
\definetypeface [sheep][ss][serif][sheep] [default]
\definetypeface [sheep][mm][math] [sheep] [default]
- \definetypeface [sheep][tt][mono] [modern][default][,rscale=0.85]
+ \definetypeface [sheep][tt][mono] [modern][default][rscale=0.85]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv b/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv
index b81996c3379..76cbf77db65 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv
@@ -20,40 +20,40 @@
mode=node,
language=dflt,
script=arab,
- ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
- init=yes, % contextual analysis
- medi=yes, % contextual analysis
- fina=yes, % contextual analysis
- rlig=yes, % indispensable
- calt=yes, % ayah+numerals
- salt=yes, % includes manual justification with Tatwiil
- anum=yes, % replace latin numerals with arabic-script ones
- ss01=yes, % Allah, Muhammad,
- ss03=yes, % level-1 stack over Jiim, initial entry only
- ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim
- ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim,
- ss15=yes, % full stacked Laam-on-Miim
- ss16=yes, % initial entry, stacked Ayn-on-Miim
- ss19=yes, % LM_im
- ss24=yes, % BR_i_mf, BN_i_mf
- ss25=yes, % basic LH_im % might merge with ss24
- ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf
- ss27=yes, % basic thin Miim.final
- ss31=yes, % basic Raa.final strings: JR and SR
- ss34=yes, % AyR style % also available in jsnn
- ss35=yes, % full Kaaf contexts
- ss36=yes, % full Laam contexts
- ss37=yes, % Miim-Miim contexts
- ss38=yes, % basic dipped Haa, B_SH_mm
- ss41=yes, % high and low Baa strings
- ss42=yes, % diagonal entry
- ss43=yes, % initial alternates
- ss60=yes, %
- js16=yes, % aesthetic medial Faa/Qaaf
- kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
- curs=yes, % we don't curs final pairs, padj for that
- mark=yes, % vowels
- mkmk=yes, % stacked vowels
+ ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
+ init=yes, % contextual analysis
+ medi=yes, % contextual analysis
+ fina=yes, % contextual analysis
+ rlig=yes, % indispensable
+ calt=yes, % ayah+numerals
+ salt=yes, % includes manual justification with Tatwiil
+ anum=yes, % replace latin numerals with arabic-script ones
+ ss01=yes, % Allah, Muhammad,
+ ss03=yes, % level-1 stack over Jiim, initial entry only
+ ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim
+ ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim,
+ ss15=yes, % full stacked Laam-on-Miim
+ ss16=yes, % initial entry, stacked Ayn-on-Miim
+ ss19=yes, % LM_im
+ ss24=yes, % BR_i_mf, BN_i_mf
+ ss25=yes, % basic LH_im % might merge with ss24
+ ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf
+ ss27=yes, % basic thin Miim.final
+ ss31=yes, % basic Raa.final strings: JR and SR
+ ss34=yes, % AyR style % also available in jsnn
+ ss35=yes, % full Kaaf contexts
+ ss36=yes, % full Laam contexts
+ ss37=yes, % Miim-Miim contexts
+ ss38=yes, % basic dipped Haa, B_SH_mm
+ ss41=yes, % high and low Baa strings
+ ss42=yes, % diagonal entry
+ ss43=yes, % initial alternates
+ ss60=yes, %
+ js16=yes, % aesthetic medial Faa/Qaaf
+ kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
+ curs=yes, % we don't curs final pairs, padj for that
+ mark=yes, % vowels
+ mkmk=yes, % stacked vowels
tlig=yes,
goodies=husayni,
colorscheme=default]
@@ -64,40 +64,40 @@
mode=node,
language=dflt,
script=arab,
- ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
- init=yes, % contextual analysis
- medi=yes, % contextual analysis
- fina=yes, % contextual analysis
- rlig=yes, % indispensable
- calt=yes, % ayah+numerals
- salt=yes, % includes manual justification with Tatwiil
- anum=yes, % replace latin numerals with arabic-script ones
- ss01=yes, % Allah, Muhammad,
- ss03=yes, % level-1 stack over Jiim, initial entry only
- ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim
- ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim,
- ss15=yes, % full stacked Laam-on-Miim
- ss16=yes, % initial entry, stacked Ayn-on-Miim
- ss19=yes, % LM_im
- ss24=yes, % BR_i_mf, BN_i_mf
- ss25=yes, % basic LH_im % might merge with ss24
- ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf
- ss27=yes, % basic thin Miim.final
- ss31=yes, % basic Raa.final strings: JR and SR
- ss34=yes, % AyR style % also available in jsnn
- ss35=yes, % full Kaaf contexts
- ss36=yes, % full Laam contexts
- ss37=yes, % Miim-Miim contexts
- ss38=yes, % basic dipped Haa, B_SH_mm
- ss41=yes, % high and low Baa strings
- ss42=yes, % diagonal entry
- ss43=yes, % initial alternates
- ss60=yes, %
- js16=yes, % aesthetic medial Faa/Qaaf
- kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
- curs=yes, % we don't curs final pairs, padj for that
- mark=yes, % vowels
- mkmk=yes, % stacked vowels
+ ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
+ init=yes, % contextual analysis
+ medi=yes, % contextual analysis
+ fina=yes, % contextual analysis
+ rlig=yes, % indispensable
+ calt=yes, % ayah+numerals
+ salt=yes, % includes manual justification with Tatwiil
+ anum=yes, % replace latin numerals with arabic-script ones
+ ss01=yes, % Allah, Muhammad,
+ ss03=yes, % level-1 stack over Jiim, initial entry only
+ ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim
+ ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim,
+ ss15=yes, % full stacked Laam-on-Miim
+ ss16=yes, % initial entry, stacked Ayn-on-Miim
+ ss19=yes, % LM_im
+ ss24=yes, % BR_i_mf, BN_i_mf
+ ss25=yes, % basic LH_im % might merge with ss24
+ ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf
+ ss27=yes, % basic thin Miim.final
+ ss31=yes, % basic Raa.final strings: JR and SR
+ ss34=yes, % AyR style % also available in jsnn
+ ss35=yes, % full Kaaf contexts
+ ss36=yes, % full Laam contexts
+ ss37=yes, % Miim-Miim contexts
+ ss38=yes, % basic dipped Haa, B_SH_mm
+ ss41=yes, % high and low Baa strings
+ ss42=yes, % diagonal entry
+ ss43=yes, % initial alternates
+ ss60=yes, %
+ js16=yes, % aesthetic medial Faa/Qaaf
+ kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
+ curs=yes, % we don't curs final pairs, padj for that
+ mark=yes, % vowels
+ mkmk=yes, % stacked vowels
tlig=yes]
\definefontfeature
diff --git a/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv b/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv
index b0e25e82ca1..afe2c641778 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv
@@ -230,8 +230,6 @@
%D It doesn't hurt to have these, at least for the moment (can go to type-imp-symbol)
-\definefontsynonym [ZapfDingbats] [\s!file:uzdr] [\s!features=dingbats] % [\s!goodies=dingbats]
-%definefontsynonym [MartinVogel] [\s!file:marvosym.ttf]
-%definefontsynonym [RalfSmithFormalScript] [\s!file:rsfs10]
+\definefontsynonym [ZapfDingbats] [\s!file:uzdr] [\s!features=dingbats]% [\s!goodies=dingbats]
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv b/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv
index 620c5d03b3e..11ba93c348b 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv
@@ -15,63 +15,63 @@
\starttypescript [\s!serif] [modern,latin-modern-designsize,latin-modern]
- \definefontsynonym [LMRoman5-Regular] [\s!file:lmroman5-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman6-Regular] [\s!file:lmroman6-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman7-Regular] [\s!file:lmroman7-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman8-Regular] [\s!file:lmroman8-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman9-Regular] [\s!file:lmroman9-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Regular] [\s!file:lmroman10-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman12-Regular] [\s!file:lmroman12-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman17-Regular] [\s!file:lmroman17-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman5-Bold] [\s!file:lmroman5-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman6-Bold] [\s!file:lmroman6-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman7-Bold] [\s!file:lmroman7-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman8-Bold] [\s!file:lmroman8-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman9-Bold] [\s!file:lmroman9-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Bold] [\s!file:lmroman10-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman12-Bold] [\s!file:lmroman12-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman7-Italic] [\s!file:lmroman7-italic] [\s!features=\s!default]
- \definefontsynonym [LMRoman8-Italic] [\s!file:lmroman8-italic] [\s!features=\s!default]
- \definefontsynonym [LMRoman9-Italic] [\s!file:lmroman9-italic] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Italic] [\s!file:lmroman10-italic] [\s!features=\s!default]
- \definefontsynonym [LMRoman12-Italic] [\s!file:lmroman12-italic] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-BoldItalic] [\s!file:lmroman10-bolditalic] [\s!features=\s!default]
- \definefontsynonym [LMRoman8-Oblique] [\s!file:lmromanslant8-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman9-Oblique] [\s!file:lmromanslant9-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Oblique] [\s!file:lmromanslant10-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman12-Oblique] [\s!file:lmromanslant12-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman17-Oblique] [\s!file:lmromanslant17-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-BoldOblique] [\s!file:lmromanslant10-bold] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Demi] [\s!file:lmromandemi10-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-DemiOblique] [\s!file:lmromandemi10-oblique] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-CapsRegular] [\s!file:lmromancaps10-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-CapsOblique] [\s!file:lmromancaps10-oblique] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Dunhill] [\s!file:lmromandunh10-regular] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-DunhillOblique] [\s!file:lmromandunh10-oblique] [\s!features=\s!default]
- \definefontsynonym [LMRoman10-Unslanted] [\s!file:lmromanunsl10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman5-Regular] [\s!file:lmroman5-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman6-Regular] [\s!file:lmroman6-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Regular] [\s!file:lmroman7-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Regular] [\s!file:lmroman8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Regular] [\s!file:lmroman9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Regular] [\s!file:lmroman10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Regular] [\s!file:lmroman12-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman17-Regular] [\s!file:lmroman17-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman5-Bold] [\s!file:lmroman5-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman6-Bold] [\s!file:lmroman6-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Bold] [\s!file:lmroman7-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Bold] [\s!file:lmroman8-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Bold] [\s!file:lmroman9-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Bold] [\s!file:lmroman10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Bold] [\s!file:lmroman12-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Italic] [\s!file:lmroman7-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Italic] [\s!file:lmroman8-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Italic] [\s!file:lmroman9-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Italic] [\s!file:lmroman10-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Italic] [\s!file:lmroman12-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-BoldItalic] [\s!file:lmroman10-bolditalic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Oblique] [\s!file:lmromanslant8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Oblique] [\s!file:lmromanslant9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Oblique] [\s!file:lmromanslant10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Oblique] [\s!file:lmromanslant12-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman17-Oblique] [\s!file:lmromanslant17-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-BoldOblique] [\s!file:lmromanslant10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Demi] [\s!file:lmromandemi10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-DemiOblique] [\s!file:lmromandemi10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-CapsRegular] [\s!file:lmromancaps10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-CapsOblique] [\s!file:lmromancaps10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Dunhill] [\s!file:lmromandunh10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-DunhillOblique] [\s!file:lmromandunh10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Unslanted] [\s!file:lmromanunsl10-regular] [\s!features=\s!default]
\stoptypescript
\starttypescript [\s!sans] [modern,latin-modern-designsize,latin-modern]
- \definefontsynonym [LMSans8-Regular] [\s!file:lmsans8-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans9-Regular] [\s!file:lmsans9-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans10-Regular] [\s!file:lmsans10-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans12-Regular] [\s!file:lmsans12-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans17-Regular] [\s!file:lmsans17-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans10-Bold] [\s!file:lmsans10-bold] [\s!features=\s!default]
- \definefontsynonym [LMSans8-Oblique] [\s!file:lmsans8-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSans9-Oblique] [\s!file:lmsans9-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSans10-Oblique] [\s!file:lmsans10-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSans12-Oblique] [\s!file:lmsans12-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSans17-Oblique] [\s!file:lmsans17-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSans10-BoldOblique] [\s!file:lmsans10-boldoblique] [\s!features=\s!default]
- \definefontsynonym [LMSans10-DemiCondensed] [\s!file:lmsansdemicond10-regular] [\s!features=\s!default]
- \definefontsynonym [LMSans10-DemiCondensedOblique] [\s!file:lmsansdemicond10-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSansQuotation8-Regular] [\s!file:lmsansquot8-regular] [\s!features=\s!default]
- \definefontsynonym [LMSansQuotation8-Bold] [\s!file:lmsansquot8-bold] [\s!features=\s!default]
- \definefontsynonym [LMSansQuotation8-Oblique] [\s!file:lmsansquot8-oblique] [\s!features=\s!default]
- \definefontsynonym [LMSansQuotation8-BoldOblique] [\s!file:lmsansquot8-boldoblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans8-Regular] [\s!file:lmsans8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans9-Regular] [\s!file:lmsans9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Regular] [\s!file:lmsans10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans12-Regular] [\s!file:lmsans12-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans17-Regular] [\s!file:lmsans17-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Bold] [\s!file:lmsans10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMSans8-Oblique] [\s!file:lmsans8-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans9-Oblique] [\s!file:lmsans9-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Oblique] [\s!file:lmsans10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans12-Oblique] [\s!file:lmsans12-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans17-Oblique] [\s!file:lmsans17-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-BoldOblique] [\s!file:lmsans10-boldoblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-DemiCondensed] [\s!file:lmsansdemicond10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-DemiCondensedOblique] [\s!file:lmsansdemicond10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-Regular] [\s!file:lmsansquot8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-Bold] [\s!file:lmsansquot8-bold] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-Oblique] [\s!file:lmsansquot8-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-BoldOblique] [\s!file:lmsansquot8-boldoblique] [\s!features=\s!default]
\stoptypescript
@@ -102,25 +102,25 @@
\starttypescript [\s!math] [modern,latin-modern]
- \definefontsynonym [LMMathRoman5-Regular] [LMMath5-Regular@lmroman5-math]
- \definefontsynonym [LMMathRoman6-Regular] [LMMath6-Regular@lmroman6-math]
- \definefontsynonym [LMMathRoman7-Regular] [LMMath7-Regular@lmroman7-math]
- \definefontsynonym [LMMathRoman8-Regular] [LMMath8-Regular@lmroman8-math]
- \definefontsynonym [LMMathRoman9-Regular] [LMMath9-Regular@lmroman9-math]
- \definefontsynonym [LMMathRoman10-Regular] [LMMath10-Regular@lmroman10-math]
- \definefontsynonym [LMMathRoman12-Regular] [LMMath12-Regular@lmroman12-math]
- \definefontsynonym [LMMathRoman17-Regular] [LMMath17-Regular@lmroman17-math]
+ \definefontsynonym [LMMathRoman5-Regular] [LMMath5-Regular@lmroman5-math]
+ \definefontsynonym [LMMathRoman6-Regular] [LMMath6-Regular@lmroman6-math]
+ \definefontsynonym [LMMathRoman7-Regular] [LMMath7-Regular@lmroman7-math]
+ \definefontsynonym [LMMathRoman8-Regular] [LMMath8-Regular@lmroman8-math]
+ \definefontsynonym [LMMathRoman9-Regular] [LMMath9-Regular@lmroman9-math]
+ \definefontsynonym [LMMathRoman10-Regular] [LMMath10-Regular@lmroman10-math]
+ \definefontsynonym [LMMathRoman12-Regular] [LMMath12-Regular@lmroman12-math]
+ \definefontsynonym [LMMathRoman17-Regular] [LMMath17-Regular@lmroman17-math]
% we no longer care to provide pseudo full bold
- \definefontsynonym [LMMathRoman5-Bold] [LMMathRoman5-Regular]
- \definefontsynonym [LMMathRoman6-Bold] [LMMathRoman6-Regular]
- \definefontsynonym [LMMathRoman7-Bold] [LMMathRoman7-Regular]
- \definefontsynonym [LMMathRoman8-Bold] [LMMathRoman8-Regular]
- \definefontsynonym [LMMathRoman9-Bold] [LMMathRoman9-Regular]
- \definefontsynonym [LMMathRoman10-Bold] [LMMathRoman10-Regular]
- \definefontsynonym [LMMathRoman12-Bold] [LMMathRoman12-Regular]
- \definefontsynonym [LMMathRoman17-Bold] [LMMathRoman17-Regular]
+ \definefontsynonym [LMMathRoman5-Bold] [LMMathRoman5-Regular]
+ \definefontsynonym [LMMathRoman6-Bold] [LMMathRoman6-Regular]
+ \definefontsynonym [LMMathRoman7-Bold] [LMMathRoman7-Regular]
+ \definefontsynonym [LMMathRoman8-Bold] [LMMathRoman8-Regular]
+ \definefontsynonym [LMMathRoman9-Bold] [LMMathRoman9-Regular]
+ \definefontsynonym [LMMathRoman10-Bold] [LMMathRoman10-Regular]
+ \definefontsynonym [LMMathRoman12-Bold] [LMMathRoman12-Regular]
+ \definefontsynonym [LMMathRoman17-Bold] [LMMathRoman17-Regular]
\loadfontgoodies[lm-math]
diff --git a/Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv b/Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv
new file mode 100644
index 00000000000..770d43c6ce4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv
@@ -0,0 +1,39 @@
+%D \module
+%D [ file=type-imp-opendyslexic,
+%D version=2013.05.02,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Opendyslexic Fonts,
+%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.
+
+\starttypescriptcollection[opendyslexic]
+
+ \starttypescript [\s!serif] [opendyslexic] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:opendyslexic-regular.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:opendyslexic-bold.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:opendyslexic-italic.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:opendyslexic-bolditalic.otf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [opendyslexic] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:opendyslexicalta-regular.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:opendyslexicalta-bold.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:opendyslexicalta-italic.otf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:opendyslexicalta-bolditalic.otf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript[opendyslexic]
+ \definetypeface [opendyslexic] [\s!rm] [\s!serif] [opendyslexic] [\s!default]
+ \definetypeface [opendyslexic] [\s!ss] [\s!sans] [opendyslexic] [\s!default]
+ \definetypeface [opendyslexic] [\s!tt] [\s!mono] [dejavu] [\s!default]% [rscale=1.065]
+ \definetypeface [opendyslexic] [\s!mm] [\s!math] [xits] [\s!default]% [rscale=1.020]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv b/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv
index c404729a246..24185f41d35 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv
@@ -16,23 +16,41 @@
\starttypescriptcollection[texgyre]
- \definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella]
- \definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes]
- \definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros]
- \definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum]
- \definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola]
- \definetypescriptprefix [f:adventor][adventor] \definetypescriptprefix [f:avantgarde] [adventor]
- \definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor]
- \definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus]
-
- \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
- \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
- \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
- \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
- \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
- \definetypescriptprefix [n:adventor] [TeXGyreAdventor]% \definetypescriptprefix [n:adventor] [TeXGyreAdventor]
- \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
- \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
+ \definetypescriptprefix [f:pagella] [pagella]
+ \definetypescriptprefix [f:termes] [termes]
+ \definetypescriptprefix [f:heros] [heros]
+ \definetypescriptprefix [f:bonum] [bonum]
+ \definetypescriptprefix [f:schola] [schola]
+ \definetypescriptprefix [f:adventor][adventor]
+ \definetypescriptprefix [f:cursor] [cursor]
+ \definetypescriptprefix [f:chorus] [chorus]
+
+ \definetypescriptprefix [f:palatino] [pagella]
+ \definetypescriptprefix [f:times] [termes]
+ \definetypescriptprefix [f:helvetica] [heros]
+ \definetypescriptprefix [f:bookman] [bonum]
+ \definetypescriptprefix [f:schoolbook] [schola]
+ \definetypescriptprefix [f:avantgarde] [adventor]
+ \definetypescriptprefix [f:courier] [cursor]
+ \definetypescriptprefix [f:chancery] [chorus]
+
+ \definetypescriptprefix [n:pagella] [TeXGyrePagella]
+ \definetypescriptprefix [n:termes] [TeXGyreTermes]
+ \definetypescriptprefix [n:heros] [TeXGyreHeros]
+ \definetypescriptprefix [n:bonum] [TeXGyreBonum]
+ \definetypescriptprefix [n:schola] [TeXGyreSchola]
+ \definetypescriptprefix [n:adventor] [TeXGyreAdventor]
+ \definetypescriptprefix [n:cursor] [TeXGyreCursor]
+ \definetypescriptprefix [n:chorus] [TeXGyreChorus]
+
+ \definetypescriptprefix [n:palatino] [TeXGyrePagella]
+ \definetypescriptprefix [n:times] [TeXGyreTermes]
+ \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
+ \definetypescriptprefix [n:bookman] [TeXGyreBonum]
+ \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
+ \definetypescriptprefix [n:adventor] [TeXGyreAdventor]
+ \definetypescriptprefix [n:courier] [TeXGyreCursor]
+ \definetypescriptprefix [n:chancery] [TeXGyreChorus]
\starttypescript [\s!serif,\s!sans] [adventor,bonum,bookman,heros,helvetica,pagella,palatino,bonum,bookman,schola,schoolbook,termes,times]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!default]
@@ -159,7 +177,7 @@
\definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default]
\definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern] [\s!default] [\s!rscale=1.1]
\definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern] [\s!default] [\s!rscale=1.1]
- \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern] [\s!default] [\s!rscale=1.1]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [bonum] [\s!default]
\quittypescriptscanning
\stoptypescript
@@ -226,7 +244,7 @@
\startmode[pxmath]
- \starttypescriptcollection[texgyre-math]
+ \starttypescriptcollection[texgyre-math-pagella]
\starttypescript [\s!math][palatino,pagella][\s!all]
\loadfontgoodies[px-math]
@@ -240,7 +258,7 @@
\startnotmode[pxmath]
- \starttypescriptcollection[texgyre-math]
+ \starttypescriptcollection[texgyre-math-pagella]
\starttypescript [\s!math][palatino,pagella][\s!all]
\loadfontgoodies[texgyre]
@@ -250,3 +268,12 @@
\stoptypescriptcollection
\stopnotmode
+
+\starttypescriptcollection[texgyre-math-bonum]
+
+ \starttypescript [\s!math][bookman,bonum][\s!all]
+ \loadfontgoodies[texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features=\s!math\mathsizesuffix]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-ini.lua b/Master/texmf-dist/tex/context/base/type-ini.lua
index 03cdb0fe571..9ee97acaed3 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.lua
+++ b/Master/texmf-dist/tex/context/base/type-ini.lua
@@ -18,11 +18,11 @@ local patterns = { "type-imp-%s.mkiv", "type-imp-%s.tex", "type-%s.mkiv", "type-
local function action(name,foundname)
-- context.startreadingfile()
- -- context.pushendofline()
-- context.unprotect()
+ -- context.pushendofline()
-- context.input(foundname)
- -- context.protect()
-- context.popendofline()
+ -- context.protect()
-- context.stopreadingfile()
context.loadfoundtypescriptfile(foundname)
end
diff --git a/Master/texmf-dist/tex/context/base/type-ini.mkvi b/Master/texmf-dist/tex/context/base/type-ini.mkvi
index ddf7cad8f6f..0ce14ef9f90 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/type-ini.mkvi
@@ -113,8 +113,11 @@
\iftracetypescripts
\writestatus\m!fonts{request: [\m_font_typescripts_one] [\m_font_typescripts_two] [\m_font_typescripts_three]}%
\fi
- \processcommacommand[\typescriptfiles]\font_typescripts_load_file
- \the\c_font_typescripts_document
+ \ifhmode
+ \font_typescripts_use_inline
+ \else
+ \font_typescripts_use_display
+ \fi
\setfalse\c_font_typescripts_first_pass
\popmacro\stoptypescript
\popmacro\typescriptstate
@@ -126,6 +129,36 @@
\popmacro\m_font_typescripts_two
\popmacro\m_font_typescripts_one}
+\def\font_typescripts_use_display
+ {\processcommacommand[\typescriptfiles]\font_typescripts_load_file
+ \the\c_font_typescripts_document}
+
+\let\font_typescripts_use_inline\font_typescripts_use_display
+
+% % not yet:
+%
+% \newsignal\d_font_typescripts_signal
+%
+% \def\font_typescripts_use_inline
+% {\ifhmode
+% \kern\d_font_typescripts_signal
+% \fi
+% \font_typescripts_use_display
+% \ifhmode
+% \ifdim\lastkern=\d_font_typescripts_signal
+% \unkern
+% \else
+% \removeunwantedspaces
+% \ifdim\lastkern=\d_font_typescripts_signal
+% \unkern
+% \else
+% % messy typescript 2
+% \fi
+% \fi
+% \else
+% % messy typescript 1
+% \fi}
+
\unexpanded\def\preloadtypescripts
{\ifproductionrun\settrue\c_font_typescripts_preload\fi}
@@ -144,11 +177,11 @@
\unexpanded\def\loadfoundtypescriptfile#1%
{\startreadingfile
- \pushendofline
\unprotect
+ \pushendofline
\input{#1}%
- \protect
\popendofline
+ \protect
\stopreadingfile}
\unexpanded\def\quittypescriptscanning
diff --git a/Master/texmf-dist/tex/context/base/type-set.mkiv b/Master/texmf-dist/tex/context/base/type-set.mkiv
index 99c38bc5d0f..bfbf7af9ed5 100644
--- a/Master/texmf-dist/tex/context/base/type-set.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-set.mkiv
@@ -15,18 +15,30 @@
\ifnum\typescriptstate=\plustwo
- % store
-
- \loadmarkfile{type-def}
- \loadmarkfile{type-lua}
- \loadmarkfile{type-siz}
- \loadmarkfile{type-fbk}
-
- % \loadtypescriptfile[def] % meant for local usage only
- % \loadtypescriptfile[lua] % meant for local usage only
- % \loadtypescriptfile[siz] % meant for local usage only
- \loadmarkfile{type-imp-latinmodern}
- % \usetypescriptfile[latinmodern]
+ % we store some typescripts in the format
+
+ % \loadmarkfile{type-def}
+ % \loadmarkfile{type-lua}
+ % \loadmarkfile{type-siz}
+ % \loadmarkfile{type-fbk}
+ % \loadmarkfile{type-imp-latinmodern}
+
+ % but ... let's make sure that newlines are gone
+
+ \loadfoundtypescriptfile{type-def.mkiv}
+ \loadfoundtypescriptfile{type-lua.mkiv}
+ \loadfoundtypescriptfile{type-siz.mkiv}
+ \loadfoundtypescriptfile{type-fbk.mkiv}
+ \loadfoundtypescriptfile{type-imp-latinmodern.mkiv}
+
+ % and not:
+
+ % \loadtypescriptfile[def] % meant for local usage only
+ % \loadtypescriptfile[fbk] % meant for local usage only
+ % \loadtypescriptfile[lua] % meant for local usage only
+ % \loadtypescriptfile[siz] % meant for local usage only
+ % \usetypescriptfile[latinmodern]
+
\usetypescriptfile[loc]
% We want these names preset but they conflict with later loads so from now on
@@ -40,7 +52,7 @@
\usetypescriptfile[fbk]
\usetypescriptfile[lua]
\usetypescriptfile[siz]
- \usetypescriptfile[otf]
+ \usetypescriptfile[latinmodern]
\usetypescriptfile[loc]
\fi
diff --git a/Master/texmf-dist/tex/context/base/typo-cap.mkiv b/Master/texmf-dist/tex/context/base/typo-cap.mkiv
index 25a0ff9ee46..d2f1dc0e02e 100644
--- a/Master/texmf-dist/tex/context/base/typo-cap.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-cap.mkiv
@@ -211,9 +211,9 @@
\appendtoks
\doifelse{\directcapitalsparameter\c!title}\v!yes
{\definealternativestyle[\v!capital ][\font_style_normalsmallcapped][\font_style_normalsmallcapped]%
- \definealternativestyle[\v!smallcaps][\sc][\sc]}
+ \definealternativestyle[\v!smallcaps][\setsmallcaps][\setsmallcaps]}
{\definealternativestyle[\v!capital ][\font_style_normalsmallcapped][\font_style_normalWORD]%
- \definealternativestyle[\v!smallcaps][\sc][\font_style_normalWORD]}%
+ \definealternativestyle[\v!smallcaps][\setsmallcaps][\font_style_normalWORD]}%
\doifelse{\directcapitalsparameter\s!sc}\v!yes
\userealcaps
\usepseudocaps
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.lua b/Master/texmf-dist/tex/context/base/typo-dig.lua
index e6c65399d19..62d17fa3bb7 100644
--- a/Master/texmf-dist/tex/context/base/typo-dig.lua
+++ b/Master/texmf-dist/tex/context/base/typo-dig.lua
@@ -151,7 +151,7 @@ function digits.set(n) -- number or 'reset'
texattribute[a_digits] = n
end
-digits.handler = nodes.installattributehandler {
+digits.handler = nodes.installattributehandler { -- we could avoid this wrapper
name = "digits",
namespace = digits,
processor = process,
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.mkiv b/Master/texmf-dist/tex/context/base/typo-dig.mkiv
index 832ebbec4e1..71425c594a5 100644
--- a/Master/texmf-dist/tex/context/base/typo-dig.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-dig.mkiv
@@ -52,7 +52,7 @@
\unexpanded\def\dummydigit {\hphantom {\setdigitsmanipulation[\number\plusone]0}}
\appendtoks
- \resetcharacterspacing
+ \resetdigitsmanipulation
\to \everyinitializeverbatim
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/util-jsn.lua b/Master/texmf-dist/tex/context/base/util-jsn.lua
index 7493f108d22..29587cd3834 100644
--- a/Master/texmf-dist/tex/context/base/util-jsn.lua
+++ b/Master/texmf-dist/tex/context/base/util-jsn.lua
@@ -11,6 +11,9 @@ if not modules then modules = { } end modules ['util-jsn'] = {
-- a correct stream. If not, we have some fatal error anyway. So, we can just rely
-- on strings being strings (apart from the unicode escape which is not in 5.1) and
-- as we first catch known types we just assume that anything else is a number.
+--
+-- Reminder for me: check usage in framework and extend when needed. Also document
+-- it in the cld lib documentation.
local P, V, R, S, C, Cc, Cs, Ct, Cf, Cg = lpeg.P, lpeg.V, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct, lpeg.Cf, lpeg.Cg
local lpegmatch = lpeg.match
@@ -141,5 +144,3 @@ end
-- inspect(tmp)
-- inspect(json.tostring(true))
-
-return json
diff --git a/Master/texmf-dist/tex/context/base/util-lib.lua b/Master/texmf-dist/tex/context/base/util-lib.lua
index 2ec3d395c28..c5c99911363 100644
--- a/Master/texmf-dist/tex/context/base/util-lib.lua
+++ b/Master/texmf-dist/tex/context/base/util-lib.lua
@@ -160,12 +160,12 @@ local function requireswiglib(required,version)
return found
end
end
- -- Check clib paths using name and version.
+ -- Check lib paths using name and version.
if trace_swiglib then
- report_swiglib("checking clib paths")
+ report_swiglib("checking lib paths")
end
- package.extraclibpath(environment.ownpath)
- local paths = package.clibpaths()
+ package.extralibpath(environment.ownpath)
+ local paths = package.libpaths()
for i=1,#paths do
local found = check(lfs.isfile)
if found and (not checkpattern or find(found,checkpattern)) then
@@ -258,7 +258,9 @@ function swiglib(name,version)
local library = swiglibs[name]
if not library then
statistics.starttiming(swiglibs)
- report_swiglib("loading %a",name)
+ if trace_swiglib then
+ report_swiglib("loading %a",name)
+ end
library = requireswiglib("swiglib." .. name,version)
swiglibs[name] = library
statistics.stoptiming(swiglibs)
diff --git a/Master/texmf-dist/tex/context/base/util-prs.lua b/Master/texmf-dist/tex/context/base/util-prs.lua
index 31e7ffa535b..9d2ffcc3ee7 100644
--- a/Master/texmf-dist/tex/context/base/util-prs.lua
+++ b/Master/texmf-dist/tex/context/base/util-prs.lua
@@ -93,7 +93,9 @@ patterns.settings_to_hash_b = pattern_b_s
patterns.settings_to_hash_c = pattern_c_s
function parsers.make_settings_to_hash_pattern(set,how)
- if how == "strict" then
+ if type(str) == "table" then
+ return set
+ elseif how == "strict" then
return (pattern_c/set)^1
elseif how == "tolerant" then
return (pattern_b/set)^1
@@ -103,7 +105,16 @@ function parsers.make_settings_to_hash_pattern(set,how)
end
function parsers.settings_to_hash(str,existing)
- if str and str ~= "" then
+ if type(str) == "table" then
+ if existing then
+ for k, v in next, str do
+ existing[k] = v
+ end
+ return exiting
+ else
+ return str
+ end
+ elseif str and str ~= "" then
hash = existing or { }
lpegmatch(pattern_a_s,str)
return hash
@@ -113,7 +124,16 @@ function parsers.settings_to_hash(str,existing)
end
function parsers.settings_to_hash_tolerant(str,existing)
- if str and str ~= "" then
+ if type(str) == "table" then
+ if existing then
+ for k, v in next, str do
+ existing[k] = v
+ end
+ return exiting
+ else
+ return str
+ end
+ elseif str and str ~= "" then
hash = existing or { }
lpegmatch(pattern_b_s,str)
return hash
@@ -123,7 +143,16 @@ function parsers.settings_to_hash_tolerant(str,existing)
end
function parsers.settings_to_hash_strict(str,existing)
- if str and str ~= "" then
+ if type(str) == "table" then
+ if existing then
+ for k, v in next, str do
+ existing[k] = v
+ end
+ return exiting
+ else
+ return str
+ end
+ elseif str and str ~= "" then
hash = existing or { }
lpegmatch(pattern_c_s,str)
return next(hash) and hash
@@ -144,7 +173,9 @@ patterns.settings_to_array = pattern
-- we could use a weak table as cache
function parsers.settings_to_array(str,strict)
- if not str or str == "" then
+ if type(str) == "table" then
+ return str
+ elseif not str or str == "" then
return { }
elseif strict then
if find(str,"{") then
@@ -341,9 +372,8 @@ local separator = S(' ,')
local key = C((1-equal)^1)
local value = dquote * C((1-dquote-escape*dquote)^0) * dquote
-local pattern = Cf(Ct("") * Cg(key * equal * value) * separator^0,rawset)^0 * P(-1)
-
-patterns.keq_to_hash_c = pattern
+----- pattern = Cf(Ct("") * Cg(key * equal * value) * separator^0,rawset)^0 * P(-1) -- was wrong
+local pattern = Cf(Ct("") * (Cg(key * equal * value) * separator^0)^1,rawset)^0 * P(-1)
function parsers.keq_to_hash(str)
if str and str ~= "" then
@@ -353,7 +383,7 @@ function parsers.keq_to_hash(str)
end
end
--- inspect(lpeg.match(pattern,[[key="value"]]))
+-- inspect(lpeg.match(pattern,[[key="value" foo="bar"]]))
local defaultspecification = { separator = ",", quote = '"' }
@@ -361,7 +391,7 @@ local defaultspecification = { separator = ",", quote = '"' }
-- database module
function parsers.csvsplitter(specification)
- specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification
+ specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification
local separator = specification.separator
local quotechar = specification.quote
local separator = S(separator ~= "" and separator or ",")
@@ -388,14 +418,14 @@ end
-- and this is a slightly patched version of a version posted by Philipp Gesang
-- local mycsvsplitter = utilities.parsers.rfc4180splitter()
---
+
-- local crap = [[
-- first,second,third,fourth
-- "1","2","3","4"
-- "a","b","c","d"
-- "foo","bar""baz","boogie","xyzzy"
-- ]]
---
+
-- local list, names = mycsvsplitter(crap,true) inspect(list) inspect(names)
-- local list, names = mycsvsplitter(crap) inspect(list) inspect(names)
diff --git a/Master/texmf-dist/tex/context/base/util-soc.lua b/Master/texmf-dist/tex/context/base/util-soc.lua
new file mode 100644
index 00000000000..30301c51027
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/util-soc.lua
@@ -0,0 +1,93 @@
+if not modules then modules = { } end modules ['util-soc'] = {
+ version = 1.001,
+ comment = "support for sockets / protocols",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format = string.format
+
+local smtp = require("socket.smtp")
+local ltn12 = require("ltn12")
+local mime = require("mime")
+
+local mail = utilities.mail or { }
+utilities.mail = mail
+
+local report_mail = logs.reporter("mail")
+
+function mail.send(specification)
+ local presets = specification.presets
+ if presets then
+ table.setmetatableindex(specification,presets)
+ end
+ local server = specification.server or ""
+ if not server then
+ report_mail("no server specified")
+ return false
+ end
+ local to = specification.to or specification.recepient or ""
+ if to == "" then
+ report_mail("no recepient specified")
+ return false
+ end
+ local from = specification.from or specification.sender or ""
+ if from == "" then
+ report_mail("no sender specified")
+ return false
+ end
+ local message = { }
+ local body = specification.body
+ if body then
+ message[#message+1] = {
+ body = body
+ }
+ end
+ local files = specification.files
+ if files then
+ for i=1,#files do
+ local filename = files[i]
+ local handle = io.open(filename, "rb")
+ if handle then
+ report_mail("attaching file %a",filename)
+ message[#message+1] = {
+ headers = {
+ ["content-type"] = format('application/pdf; name="%s"',filename),
+ ["content-disposition"] = format('attachment; filename="%s"',filename),
+ ["content-description"] = format('file: %s',filename),
+ ["content-transfer-encoding"] = "BASE64"
+ },
+ body = ltn12.source.chain(
+ ltn12.source.file(handle),
+ ltn12.filter.chain(mime.encode("base64"),mime.wrap())
+ )
+ }
+ else
+ report_mail("file %a not found",filename)
+ end
+ end
+ end
+ local result, detail = smtp.send {
+ server = specification.server,
+ port = specification.port,
+ user = specification.user,
+ password = specification.password,
+ from = from,
+ rcpt = to,
+ source = smtp.message {
+ headers = {
+ to = to,
+ from = from,
+ cc = specification.cc,
+ subject = specification.subject or "no subject",
+ },
+ body = message
+ },
+ }
+ if detail then
+ report_mail("error: %s",detail)
+ else
+ report_mail("message sent")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua b/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua
index 719620a6f9c..758c817469d 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua
+++ b/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua
@@ -23,6 +23,7 @@ local report_state = logs.reporter("sql","swiglib")
local sql = utilities.sql
local mysql = require("swiglib.mysql.core") -- "5.6"
+----- mysql = swiglib("mysql.core") -- "5.6"
-- inspect(table.sortedkeys(mysql))
diff --git a/Master/texmf-dist/tex/context/base/util-sql-tracers.lua b/Master/texmf-dist/tex/context/base/util-sql-tracers.lua
new file mode 100644
index 00000000000..1bd133acba2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/util-sql-tracers.lua
@@ -0,0 +1,48 @@
+if not modules then modules = { } end modules ['util-sql-tracers'] = {
+ version = 1.001,
+ comment = "companion to m-sql.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local sql = utilities.sql
+local tracers = { }
+sql.tracers = tracers
+
+sql.setmethod("swiglib")
+
+function sql.tracers.gettables(presets)
+ local results, keys = sql.execute {
+ presets = presets,
+ template = "SHOW TABLES FROM `%database%`",
+ variables = {
+ database = presets.database,
+ },
+ }
+
+ local key = keys[1]
+ local tables = { }
+
+ for i=1,#results do
+ local name = results[i][key]
+ local results, keys = sql.execute {
+ presets = presets,
+ template = "SHOW FIELDS FROM `%database%`.`%table%` ",
+ variables = {
+ database = presets.database,
+ table = name
+ },
+ }
+ if #results > 0 then
+ for i=1,#results do
+ results[i] = table.loweredkeys(results[i])
+ end
+ tables[name] = results
+ else
+ -- a view
+ end
+ end
+
+ return tables
+end
diff --git a/Master/texmf-dist/tex/context/base/util-tab.lua b/Master/texmf-dist/tex/context/base/util-tab.lua
index ecf36b13726..a47c0cb77fd 100644
--- a/Master/texmf-dist/tex/context/base/util-tab.lua
+++ b/Master/texmf-dist/tex/context/base/util-tab.lua
@@ -406,9 +406,9 @@ end
-- inspect(table.fastserialize { a = 1, b = { 4, { 5, 6 } }, c = { d = 7, e = 'f"g\nh' } })
-function table.load(filename)
+function table.load(filename,loader)
if filename then
- local t = io.loaddata(filename)
+ local t = (loader or io.loaddata)(filename)
if t and t ~= "" then
t = load(t)
if type(t) == "function" then
diff --git a/Master/texmf-dist/tex/context/base/x-cals.lua b/Master/texmf-dist/tex/context/base/x-cals.lua
index 4051dd157e1..36bc1aaba2d 100644
--- a/Master/texmf-dist/tex/context/base/x-cals.lua
+++ b/Master/texmf-dist/tex/context/base/x-cals.lua
@@ -30,15 +30,15 @@ cals.stretch_widths = false
-- has to happen at the core-ntb level (todo)
local halignments = {
- left = "flushleft",
- right = "flushright",
- center = "middle",
- centre = "middle",
+ left = "flushleft",
+ right = "flushright",
+ center = "middle",
+ centre = "middle",
justify = "normal",
}
local valignments = {
- top = "high",
+ top = "high",
bottom = "low",
middle = "lohi",
}
diff --git a/Master/texmf-dist/tex/context/base/x-cals.mkiv b/Master/texmf-dist/tex/context/base/x-cals.mkiv
index 4e68c34003d..31ba2d213a9 100644
--- a/Master/texmf-dist/tex/context/base/x-cals.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-cals.mkiv
@@ -18,7 +18,7 @@
\registerctxluafile{x-cals}{}
% \startxmlsetups xml:cals:process
-% \xmlsetsetup {\xmldocument} {cals:table} {*}
+% \xmlsetsetup {#1} {cals:table} {*}
% \stopxmlsetups
% \startxmlsetups cals:table
% \ctxlua{moduledata.cals.table("#1")}
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.mkiv b/Master/texmf-dist/tex/context/base/x-mathml.mkiv
index 99b9f92afde..a4eb0946740 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-mathml.mkiv
@@ -16,6 +16,8 @@
% This module is under construction and will be cleaned up. We use a funny mix of
% xml, tex and lua. I could rewrite the lot but it also shows how context evolves.
%
+% I might en dup with a lua-only implementation some day.
+%
% no m:text strip (needs checking, maybe nbsp is mandate
%
% todo: more will be moved to lua (less hassle)
diff --git a/Master/texmf-dist/tex/context/base/x-set-02.mkii b/Master/texmf-dist/tex/context/base/x-set-02.mkii
index 8af98c41263..7a2cd77016b 100644
--- a/Master/texmf-dist/tex/context/base/x-set-02.mkii
+++ b/Master/texmf-dist/tex/context/base/x-set-02.mkii
@@ -25,6 +25,6 @@
\def\setinterfaceelement {\setinterfacecomponent{string}} % element
\def\setinterfacecommand {\setinterfacecomponent{string}} % command
-\input mult-\userinterfacetag
+\input mult-\userinterfacetag.mkii
\egroup \protect \endinput