From 15ab7c153a96a9befc4e2c1774e701f3c941cc2d Mon Sep 17 00:00:00 2001
From: Hans Hagen
Date: Mon, 2 Apr 2018 16:25:10 +0200
Subject: 2018-04-02 15:51:00
---
tex/context/base/mkii/cont-new.mkii | 2 +-
tex/context/base/mkii/context.mkii | 2 +-
tex/context/base/mkiv/anch-pgr.lua | 2 +-
tex/context/base/mkiv/attr-ini.lua | 2 +-
tex/context/base/mkiv/back-exp.lua | 2 +-
tex/context/base/mkiv/buff-ini.lua | 2 +-
tex/context/base/mkiv/buff-par.lua | 6 +-
tex/context/base/mkiv/char-def.lua | 1194 +++++++++++++-
tex/context/base/mkiv/char-tex.lua | 4 +-
tex/context/base/mkiv/char-utf.lua | 2 +-
tex/context/base/mkiv/chem-str.lua | 4 +-
tex/context/base/mkiv/cldf-ini.lua | 72 +-
tex/context/base/mkiv/cldf-scn.lua | 4 +-
tex/context/base/mkiv/colo-ini.lua | 10 +-
tex/context/base/mkiv/cont-new.mkiv | 2 +-
tex/context/base/mkiv/context.mkiv | 2 +-
tex/context/base/mkiv/core-con.lua | 6 +-
tex/context/base/mkiv/core-dat.lua | 10 +-
tex/context/base/mkiv/core-sys.lua | 2 +-
tex/context/base/mkiv/core-two.lua | 8 +-
tex/context/base/mkiv/core-uti.lua | 40 +-
tex/context/base/mkiv/file-job.lua | 8 +-
tex/context/base/mkiv/file-res.lua | 2 +-
tex/context/base/mkiv/file-syn.lua | 4 +-
tex/context/base/mkiv/font-cft.lua | 2 +
tex/context/base/mkiv/font-col.lua | 4 +-
tex/context/base/mkiv/font-con.lua | 28 +-
tex/context/base/mkiv/font-ctx.lua | 10 +-
tex/context/base/mkiv/font-ext.lua | 194 ++-
tex/context/base/mkiv/font-map.lua | 6 +-
tex/context/base/mkiv/font-osd.lua | 882 +++++-----
tex/context/base/mkiv/font-ota.lua | 10 +-
tex/context/base/mkiv/font-ots.lua | 2 +-
tex/context/base/mkiv/font-pre.mkiv | 138 +-
tex/context/base/mkiv/font-sel.lua | 2 +-
tex/context/base/mkiv/grph-fil.lua | 2 +-
tex/context/base/mkiv/grph-inc.lua | 4 +-
tex/context/base/mkiv/java-ini.lua | 4 +-
tex/context/base/mkiv/l-macro.lua | 72 +-
tex/context/base/mkiv/l-package.lua | 6 +-
tex/context/base/mkiv/l-table.lua | 10 +-
tex/context/base/mkiv/lang-hyp.lua | 4 +-
tex/context/base/mkiv/lang-ini.lua | 10 +-
tex/context/base/mkiv/lang-rep.lua | 4 +-
tex/context/base/mkiv/lang-url.lua | 2 +-
tex/context/base/mkiv/lang-wrd.lua | 2 +-
tex/context/base/mkiv/lpdf-epd.lua | 2 +
tex/context/base/mkiv/lpdf-ini.lua | 30 +-
tex/context/base/mkiv/lpdf-mis.lua | 32 +-
tex/context/base/mkiv/lpdf-pda.xml | 9 +-
tex/context/base/mkiv/lpdf-pdx.xml | 9 +-
tex/context/base/mkiv/lpdf-pua.xml | 9 +-
tex/context/base/mkiv/lpdf-xmp.lua | 123 +-
tex/context/base/mkiv/luat-ini.mkiv | 40 +-
tex/context/base/mkiv/luat-usr.lua | 4 +-
tex/context/base/mkiv/lxml-css.lua | 4 +-
tex/context/base/mkiv/lxml-ini.lua | 114 +-
tex/context/base/mkiv/lxml-ini.mkiv | 4 +
tex/context/base/mkiv/lxml-tex.lua | 44 +-
tex/context/base/mkiv/lxml-xml.lua | 23 +
tex/context/base/mkiv/math-map.lua | 2 +-
tex/context/base/mkiv/math-noa.lua | 3 +
tex/context/base/mkiv/meta-grd.mkiv | 220 ++-
tex/context/base/mkiv/meta-imp-mat.mkiv | 152 +-
tex/context/base/mkiv/meta-ini.mkiv | 6 +
tex/context/base/mkiv/meta-tex.lua | 4 +-
tex/context/base/mkiv/mlib-ctx.lua | 4 +-
tex/context/base/mkiv/mlib-lua.lua | 2 +-
tex/context/base/mkiv/mult-aux.lua | 2 +-
tex/context/base/mkiv/mult-aux.mkiv | 9 +-
tex/context/base/mkiv/mult-chk.lua | 6 +-
tex/context/base/mkiv/mult-ini.lua | 20 +-
tex/context/base/mkiv/mult-low.lua | 9 +-
tex/context/base/mkiv/mult-prm.lua | 1 +
tex/context/base/mkiv/pack-obj.lua | 12 +-
tex/context/base/mkiv/page-cst.lua | 10 +-
tex/context/base/mkiv/page-ini.lua | 2 +-
tex/context/base/mkiv/page-inj.mkvi | 20 +-
tex/context/base/mkiv/page-ins.lua | 2 +-
tex/context/base/mkiv/page-sid.mkiv | 5 +-
tex/context/base/mkiv/phys-dim.lua | 2 +-
tex/context/base/mkiv/publ-aut.lua | 2 +-
tex/context/base/mkiv/publ-ini.lua | 56 +-
tex/context/base/mkiv/publ-jrn.lua | 2 +-
tex/context/base/mkiv/publ-reg.lua | 4 +-
tex/context/base/mkiv/scrn-but.lua | 2 +-
tex/context/base/mkiv/scrn-fld.lua | 2 +-
tex/context/base/mkiv/scrn-fld.mkvi | 2 +-
tex/context/base/mkiv/scrn-pag.mkvi | 13 +-
tex/context/base/mkiv/scrn-wid.lua | 2 +-
tex/context/base/mkiv/scrp-ini.lua | 2 +-
tex/context/base/mkiv/sort-ini.lua | 58 +-
tex/context/base/mkiv/spac-ver.lua | 4 +-
tex/context/base/mkiv/status-files.pdf | Bin 25832 -> 26081 bytes
tex/context/base/mkiv/status-lua.pdf | Bin 254074 -> 255107 bytes
tex/context/base/mkiv/strc-bkm.lua | 2 +-
tex/context/base/mkiv/strc-blk.lua | 6 +-
tex/context/base/mkiv/strc-doc.lua | 8 +-
tex/context/base/mkiv/strc-lev.lua | 2 +-
tex/context/base/mkiv/strc-lst.lua | 2 +-
tex/context/base/mkiv/strc-mar.lua | 20 +-
tex/context/base/mkiv/strc-not.lua | 8 +-
tex/context/base/mkiv/strc-ref.lua | 18 +-
tex/context/base/mkiv/strc-reg.lua | 8 +-
tex/context/base/mkiv/strc-syn.lua | 12 +-
tex/context/base/mkiv/strc-tag.lua | 17 +-
tex/context/base/mkiv/supp-box.lua | 6 +-
tex/context/base/mkiv/syst-aux.lua | 24 +-
tex/context/base/mkiv/toks-ini.lua | 2 +
tex/context/base/mkiv/toks-scn.lua | 18 +
tex/context/base/mkiv/trac-ctx.lua | 4 +-
tex/context/base/mkiv/trac-inf.lua | 5 +-
tex/context/base/mkiv/trac-log.lua | 10 +-
tex/context/base/mkiv/typo-inj.lua | 4 +-
tex/context/base/mkiv/util-lua.lua | 14 +-
tex/context/base/mkiv/util-sql-imp-ffi.lua | 4 +-
tex/context/base/mkiv/util-str.lua | 61 +-
tex/context/fonts/mkiv/type-imp-modernlatin.mkiv | 69 +
tex/context/interface/mkiv/i-context.pdf | Bin 848123 -> 846098 bytes
tex/context/interface/mkiv/i-readme.pdf | Bin 60774 -> 61032 bytes
tex/context/modules/common/s-faq-01.tex | 12 +-
tex/context/modules/common/s-faq-02.tex | 6 +-
tex/context/modules/mkiv/m-punk.mkiv | 6 +
tex/context/modules/mkiv/s-fonts-basics.mkiv | 175 ++
tex/context/modules/mkiv/s-fonts-overlay.mkiv | 107 ++
tex/context/modules/mkiv/s-fonts-shapes.lua | 115 +-
tex/context/modules/mkiv/s-fonts-shapes.mkiv | 6 +-
tex/context/modules/mkiv/s-tugboat.mkiv | 15 +-
tex/context/modules/mkiv/x-asciimath.lua | 13 +-
tex/context/modules/mkiv/x-asciimath.mkiv | 17 +
tex/generic/context/luatex/luatex-basics-chr.lua | 1072 +++++++++++++
.../context/luatex/luatex-basics-prepare.tex | 8 +-
tex/generic/context/luatex/luatex-fonts-merged.lua | 1680 ++++++++++++++++----
tex/generic/context/luatex/luatex-fonts.lua | 2 +-
134 files changed, 5972 insertions(+), 1465 deletions(-)
create mode 100644 tex/context/fonts/mkiv/type-imp-modernlatin.mkiv
create mode 100644 tex/context/modules/mkiv/s-fonts-basics.mkiv
create mode 100644 tex/context/modules/mkiv/s-fonts-overlay.mkiv
(limited to 'tex')
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 0c189965f..082e39ee4 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.03.16 22:20}
+\newcontextversion{2018.04.02 15:43}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 2dcc7482e..4e087c1c8 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.03.16 22:20}
+\edef\contextversion{2018.04.02 15:43}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/anch-pgr.lua b/tex/context/base/mkiv/anch-pgr.lua
index 18a915692..ca5a5a8af 100644
--- a/tex/context/base/mkiv/anch-pgr.lua
+++ b/tex/context/base/mkiv/anch-pgr.lua
@@ -222,7 +222,7 @@ end
interfaces.implement {
name = "registerbackground",
actions = registerbackground,
- arguments = { "string" }
+ arguments = "string",
}
-- optimized already but we can assume a cycle i.e. prune the last point and then
diff --git a/tex/context/base/mkiv/attr-ini.lua b/tex/context/base/mkiv/attr-ini.lua
index 2a11558a5..67faa9fc0 100644
--- a/tex/context/base/mkiv/attr-ini.lua
+++ b/tex/context/base/mkiv/attr-ini.lua
@@ -170,7 +170,7 @@ end
implement {
name = "defineattribute",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = { attributes.define, context }
}
diff --git a/tex/context/base/mkiv/back-exp.lua b/tex/context/base/mkiv/back-exp.lua
index 2d51d933d..b18679fa2 100644
--- a/tex/context/base/mkiv/back-exp.lua
+++ b/tex/context/base/mkiv/back-exp.lua
@@ -3876,7 +3876,7 @@ implement {
implement {
name = "settagfloat",
actions = structurestags.setfloat,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/buff-ini.lua b/tex/context/base/mkiv/buff-ini.lua
index 2bbec2e4a..1c7912773 100644
--- a/tex/context/base/mkiv/buff-ini.lua
+++ b/tex/context/base/mkiv/buff-ini.lua
@@ -492,7 +492,7 @@ end
implement {
name = "savebuffer",
actions = savebuffer,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
-- we can consider adding a size to avoid unlikely clashes
diff --git a/tex/context/base/mkiv/buff-par.lua b/tex/context/base/mkiv/buff-par.lua
index 33ed4baf0..a2b300a2b 100644
--- a/tex/context/base/mkiv/buff-par.lua
+++ b/tex/context/base/mkiv/buff-par.lua
@@ -203,7 +203,7 @@ end
implement {
name = "defineparallel",
actions = parallel.define,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -236,11 +236,11 @@ implement {
implement {
name = "resetparallel",
actions = parallel.reset,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "doifelseparallel",
actions = { parallel.hassomecontent, commands.doifelse } ,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua
index a305ee202..fcbf01900 100644
--- a/tex/context/base/mkiv/char-def.lua
+++ b/tex/context/base/mkiv/char-def.lua
@@ -16,6 +16,9 @@ now and then using mtx-unicode where we check against the latest unicode txt fil
(normally once per year around the tex live code freeze) and checked afterwards for
differences. We could save some bytes by sharing variant tables but it's not worth
the trouble. Some additional data is kept in other files.
+
+For a generic subset of the data here, run "context luatex-basics-prepare.tex" after
+adapting this file.
]]--
local variants_emoji={
@@ -15430,8 +15433,8 @@ characters.data={
},
[0x60C]={
adobename="commaarabic",
- contextname="arabiccomma",
category="po",
+ contextname="arabiccomma",
description="ARABIC COMMA",
direction="cs",
linebreak="is",
@@ -20729,6 +20732,8 @@ characters.data={
category="mn",
description="DEVANAGARI SIGN INVERTED CANDRABINDU",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x900,
},
@@ -20737,6 +20742,8 @@ characters.data={
category="mn",
description="DEVANAGARI SIGN CANDRABINDU",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
synonyms={ "devanagari anunasika" },
unicodeslot=0x901,
@@ -20746,6 +20753,8 @@ characters.data={
category="mn",
description="DEVANAGARI SIGN ANUSVARA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
synonyms={ "devanagari bindu" },
unicodeslot=0x902,
@@ -20755,6 +20764,8 @@ characters.data={
category="mc",
description="DEVANAGARI SIGN VISARGA",
direction="l",
+ indic="m",
+ indicmark="r",
linebreak="cm",
unicodeslot=0x903,
},
@@ -20762,6 +20773,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SHORT A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x904,
},
@@ -20770,6 +20782,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x905,
},
@@ -20778,6 +20791,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x906,
},
@@ -20786,6 +20800,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x907,
},
@@ -20794,6 +20809,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x908,
},
@@ -20802,6 +20818,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x909,
},
@@ -20810,6 +20827,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90A,
},
@@ -20818,6 +20836,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90B,
},
@@ -20826,6 +20845,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90C,
},
@@ -20834,6 +20854,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER CANDRA E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90D,
},
@@ -20842,6 +20863,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SHORT E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90E,
},
@@ -20850,6 +20872,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x90F,
},
@@ -20858,6 +20881,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x910,
},
@@ -20866,6 +20890,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER CANDRA O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x911,
},
@@ -20874,6 +20899,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SHORT O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x912,
},
@@ -20882,6 +20908,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x913,
},
@@ -20890,6 +20917,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x914,
},
@@ -20898,6 +20926,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x915,
},
@@ -20906,6 +20935,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x916,
},
@@ -20914,6 +20944,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x917,
},
@@ -20922,6 +20953,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x918,
},
@@ -20930,6 +20962,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x919,
},
@@ -20938,6 +20971,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91A,
},
@@ -20946,6 +20980,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91B,
},
@@ -20954,6 +20989,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91C,
},
@@ -20962,6 +20998,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91D,
},
@@ -20970,6 +21007,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91E,
},
@@ -20978,6 +21016,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x91F,
},
@@ -20986,6 +21025,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x920,
},
@@ -20994,6 +21034,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x921,
},
@@ -21002,6 +21043,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x922,
},
@@ -21010,6 +21052,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x923,
},
@@ -21018,6 +21061,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x924,
},
@@ -21026,6 +21070,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x925,
},
@@ -21034,6 +21079,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x926,
},
@@ -21042,6 +21088,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x927,
},
@@ -21050,6 +21097,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x928,
},
@@ -21058,6 +21106,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER NNNA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x928, 0x93C },
unicodeslot=0x929,
@@ -21067,6 +21116,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92A,
},
@@ -21075,6 +21125,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92B,
},
@@ -21083,6 +21134,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92C,
},
@@ -21091,6 +21143,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92D,
},
@@ -21099,6 +21152,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92E,
},
@@ -21107,6 +21161,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x92F,
},
@@ -21115,6 +21170,9 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="bp",
linebreak="al",
unicodeslot=0x930,
},
@@ -21123,6 +21181,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x930, 0x93C },
unicodeslot=0x931,
@@ -21132,6 +21191,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x932,
},
@@ -21140,6 +21200,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x933,
},
@@ -21148,6 +21209,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER LLLA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x933, 0x93C },
unicodeslot=0x934,
@@ -21157,6 +21219,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x935,
},
@@ -21165,6 +21228,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x936,
},
@@ -21173,6 +21237,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x937,
},
@@ -21181,6 +21246,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x938,
},
@@ -21189,6 +21255,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x939,
},
@@ -21196,6 +21263,8 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN OE",
direction="nsm",
+ indic="d",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x93A,
},
@@ -21203,6 +21272,8 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN OOE",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
unicodeslot=0x93B,
},
@@ -21212,6 +21283,9 @@ characters.data={
combining=0x7,
description="DEVANAGARI SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0x93C,
},
@@ -21220,6 +21294,7 @@ characters.data={
category="lo",
description="DEVANAGARI SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x93D,
},
@@ -21228,6 +21303,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x93E,
},
@@ -21236,6 +21314,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0x93F,
},
@@ -21244,6 +21325,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x940,
},
@@ -21252,6 +21336,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x941,
},
@@ -21260,6 +21347,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x942,
},
@@ -21268,6 +21358,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN VOCALIC R",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x943,
},
@@ -21276,6 +21369,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN VOCALIC RR",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x944,
},
@@ -21284,6 +21380,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN CANDRA E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x945,
},
@@ -21292,6 +21391,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN SHORT E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x946,
},
@@ -21300,6 +21402,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x947,
},
@@ -21308,6 +21413,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN AI",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x948,
},
@@ -21316,6 +21424,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN CANDRA O",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x949,
},
@@ -21324,6 +21435,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN SHORT O",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x94A,
},
@@ -21332,6 +21446,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x94B,
},
@@ -21340,6 +21457,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN AU",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x94C,
},
@@ -21349,6 +21469,9 @@ characters.data={
combining=0x9,
description="DEVANAGARI SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="b",
linebreak="cm",
synonyms={ "halant" },
unicodeslot=0x94D,
@@ -21357,6 +21480,9 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN PRISHTHAMATRA E",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0x94E,
},
@@ -21364,6 +21490,8 @@ characters.data={
category="mc",
description="DEVANAGARI VOWEL SIGN AW",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
unicodeslot=0x94F,
},
@@ -21372,6 +21500,7 @@ characters.data={
category="lo",
description="DEVANAGARI OM",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x950,
},
@@ -21381,6 +21510,8 @@ characters.data={
combining=0xE6,
description="DEVANAGARI STRESS SIGN UDATTA",
direction="nsm",
+ indic="s",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x951,
},
@@ -21390,6 +21521,9 @@ characters.data={
combining=0xDC,
description="DEVANAGARI STRESS SIGN ANUDATTA",
direction="nsm",
+ indic="s",
+ indicmark="b",
+ indicclass="anudatta",
linebreak="cm",
unicodeslot=0x952,
},
@@ -21399,6 +21533,8 @@ characters.data={
combining=0xE6,
description="DEVANAGARI GRAVE ACCENT",
direction="nsm",
+ indic="s",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x953,
},
@@ -21408,6 +21544,8 @@ characters.data={
combining=0xE6,
description="DEVANAGARI ACUTE ACCENT",
direction="nsm",
+ indic="s",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x954,
},
@@ -21415,6 +21553,8 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN CANDRA LONG E",
direction="nsm",
+ indic="d",
+ indicmark="t",
linebreak="cm",
unicodeslot=0x955,
},
@@ -21422,6 +21562,8 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN UE",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0x956,
},
@@ -21429,6 +21571,8 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN UUE",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0x957,
},
@@ -21437,6 +21581,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER QA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x915, 0x93C },
unicodeslot=0x958,
@@ -21446,6 +21591,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER KHHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x916, 0x93C },
unicodeslot=0x959,
@@ -21455,6 +21601,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER GHHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x917, 0x93C },
unicodeslot=0x95A,
@@ -21464,6 +21611,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER ZA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x91C, 0x93C },
unicodeslot=0x95B,
@@ -21473,6 +21621,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DDDHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x921, 0x93C },
unicodeslot=0x95C,
@@ -21482,6 +21631,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER RHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x922, 0x93C },
unicodeslot=0x95D,
@@ -21491,6 +21641,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER FA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x92B, 0x93C },
unicodeslot=0x95E,
@@ -21500,6 +21651,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER YYA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x92F, 0x93C },
unicodeslot=0x95F,
@@ -21509,6 +21661,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x960,
},
@@ -21517,6 +21670,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x961,
},
@@ -21525,6 +21679,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x962,
},
@@ -21533,6 +21690,9 @@ characters.data={
category="mn",
description="DEVANAGARI VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x963,
},
@@ -21541,6 +21701,7 @@ characters.data={
category="po",
description="DEVANAGARI DANDA",
direction="l",
+ indic="o",
linebreak="ba",
synonyms={ "devanagari phrase separator", "devanagari purna viram" },
unicodeslot=0x964,
@@ -21550,6 +21711,7 @@ characters.data={
category="po",
description="DEVANAGARI DOUBLE DANDA",
direction="l",
+ indic="o",
linebreak="ba",
synonyms={ "devanagari deergh viram" },
unicodeslot=0x965,
@@ -21559,6 +21721,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x966,
},
@@ -21567,6 +21730,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x967,
},
@@ -21575,6 +21739,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x968,
},
@@ -21583,6 +21748,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x969,
},
@@ -21591,6 +21757,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96A,
},
@@ -21599,6 +21766,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96B,
},
@@ -21607,6 +21775,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96C,
},
@@ -21615,6 +21784,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96D,
},
@@ -21623,6 +21793,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96E,
},
@@ -21631,6 +21802,7 @@ characters.data={
category="nd",
description="DEVANAGARI DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x96F,
},
@@ -21639,6 +21811,7 @@ characters.data={
category="po",
description="DEVANAGARI ABBREVIATION SIGN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x970,
},
@@ -21646,6 +21819,7 @@ characters.data={
category="lm",
description="DEVANAGARI SIGN HIGH SPACING DOT",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x971,
},
@@ -21653,6 +21827,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER CANDRA A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x972,
},
@@ -21660,6 +21835,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER OE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x973,
},
@@ -21667,6 +21843,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER OOE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x974,
},
@@ -21674,6 +21851,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER AW",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x975,
},
@@ -21681,6 +21859,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER UE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x976,
},
@@ -21688,6 +21867,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER UUE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x977,
},
@@ -21695,6 +21875,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER MARWARI DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x978,
},
@@ -21702,6 +21883,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER ZHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x979,
},
@@ -21709,6 +21891,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER HEAVY YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x97A,
},
@@ -21716,6 +21899,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER GGA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x97B,
},
@@ -21723,6 +21907,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER JJA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x97C,
},
@@ -21730,6 +21915,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER GLOTTAL STOP",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x97D,
},
@@ -21737,6 +21923,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER DDDA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x97E,
},
@@ -21744,6 +21931,7 @@ characters.data={
category="lo",
description="DEVANAGARI LETTER BBA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x97F,
},
@@ -21751,6 +21939,7 @@ characters.data={
category="lo",
description="BENGALI ANJI",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x980,
},
@@ -21759,6 +21948,8 @@ characters.data={
category="mn",
description="BENGALI SIGN CANDRABINDU",
direction="nsm",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0x981,
},
@@ -21767,6 +21958,7 @@ characters.data={
category="mc",
description="BENGALI SIGN ANUSVARA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0x982,
},
@@ -21775,6 +21967,7 @@ characters.data={
category="mc",
description="BENGALI SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0x983,
},
@@ -21783,6 +21976,7 @@ characters.data={
category="lo",
description="BENGALI LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x985,
},
@@ -21791,6 +21985,7 @@ characters.data={
category="lo",
description="BENGALI LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x986,
},
@@ -21799,6 +21994,7 @@ characters.data={
category="lo",
description="BENGALI LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x987,
},
@@ -21807,6 +22003,7 @@ characters.data={
category="lo",
description="BENGALI LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x988,
},
@@ -21815,6 +22012,7 @@ characters.data={
category="lo",
description="BENGALI LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x989,
},
@@ -21823,6 +22021,7 @@ characters.data={
category="lo",
description="BENGALI LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x98A,
},
@@ -21831,6 +22030,7 @@ characters.data={
category="lo",
description="BENGALI LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x98B,
},
@@ -21839,6 +22039,7 @@ characters.data={
category="lo",
description="BENGALI LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x98C,
},
@@ -21847,6 +22048,7 @@ characters.data={
category="lo",
description="BENGALI LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x98F,
},
@@ -21855,6 +22057,7 @@ characters.data={
category="lo",
description="BENGALI LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x990,
},
@@ -21863,6 +22066,7 @@ characters.data={
category="lo",
description="BENGALI LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x993,
},
@@ -21871,6 +22075,7 @@ characters.data={
category="lo",
description="BENGALI LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x994,
},
@@ -21879,6 +22084,7 @@ characters.data={
category="lo",
description="BENGALI LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x995,
},
@@ -21887,6 +22093,7 @@ characters.data={
category="lo",
description="BENGALI LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x996,
},
@@ -21895,6 +22102,7 @@ characters.data={
category="lo",
description="BENGALI LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x997,
},
@@ -21903,6 +22111,7 @@ characters.data={
category="lo",
description="BENGALI LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x998,
},
@@ -21911,6 +22120,7 @@ characters.data={
category="lo",
description="BENGALI LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x999,
},
@@ -21919,6 +22129,7 @@ characters.data={
category="lo",
description="BENGALI LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99A,
},
@@ -21927,6 +22138,7 @@ characters.data={
category="lo",
description="BENGALI LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99B,
},
@@ -21935,6 +22147,7 @@ characters.data={
category="lo",
description="BENGALI LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99C,
},
@@ -21943,6 +22156,7 @@ characters.data={
category="lo",
description="BENGALI LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99D,
},
@@ -21951,6 +22165,7 @@ characters.data={
category="lo",
description="BENGALI LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99E,
},
@@ -21959,6 +22174,7 @@ characters.data={
category="lo",
description="BENGALI LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x99F,
},
@@ -21967,6 +22183,7 @@ characters.data={
category="lo",
description="BENGALI LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A0,
},
@@ -21975,6 +22192,7 @@ characters.data={
category="lo",
description="BENGALI LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A1,
},
@@ -21983,6 +22201,7 @@ characters.data={
category="lo",
description="BENGALI LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A2,
},
@@ -21991,6 +22210,7 @@ characters.data={
category="lo",
description="BENGALI LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A3,
},
@@ -21999,6 +22219,7 @@ characters.data={
category="lo",
description="BENGALI LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A4,
},
@@ -22007,6 +22228,7 @@ characters.data={
category="lo",
description="BENGALI LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A5,
},
@@ -22015,6 +22237,7 @@ characters.data={
category="lo",
description="BENGALI LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A6,
},
@@ -22023,6 +22246,7 @@ characters.data={
category="lo",
description="BENGALI LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A7,
},
@@ -22031,6 +22255,7 @@ characters.data={
category="lo",
description="BENGALI LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9A8,
},
@@ -22039,6 +22264,7 @@ characters.data={
category="lo",
description="BENGALI LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AA,
},
@@ -22047,6 +22273,7 @@ characters.data={
category="lo",
description="BENGALI LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AB,
},
@@ -22055,6 +22282,7 @@ characters.data={
category="lo",
description="BENGALI LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AC,
},
@@ -22063,6 +22291,7 @@ characters.data={
category="lo",
description="BENGALI LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AD,
},
@@ -22071,6 +22300,7 @@ characters.data={
category="lo",
description="BENGALI LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AE,
},
@@ -22079,6 +22309,7 @@ characters.data={
category="lo",
description="BENGALI LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9AF,
},
@@ -22087,6 +22318,9 @@ characters.data={
category="lo",
description="BENGALI LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="as",
linebreak="al",
unicodeslot=0x9B0,
},
@@ -22095,6 +22329,7 @@ characters.data={
category="lo",
description="BENGALI LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9B2,
},
@@ -22103,6 +22338,7 @@ characters.data={
category="lo",
description="BENGALI LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9B6,
},
@@ -22111,6 +22347,7 @@ characters.data={
category="lo",
description="BENGALI LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9B7,
},
@@ -22119,6 +22356,7 @@ characters.data={
category="lo",
description="BENGALI LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9B8,
},
@@ -22127,6 +22365,7 @@ characters.data={
category="lo",
description="BENGALI LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9B9,
},
@@ -22136,6 +22375,9 @@ characters.data={
combining=0x7,
description="BENGALI SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0x9BC,
},
@@ -22143,6 +22385,7 @@ characters.data={
category="lo",
description="BENGALI SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9BD,
},
@@ -22151,6 +22394,9 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0x9BE,
},
@@ -22159,6 +22405,9 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0x9BF,
},
@@ -22167,6 +22416,9 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0x9C0,
},
@@ -22175,6 +22427,9 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9C1,
},
@@ -22183,6 +22438,9 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9C2,
},
@@ -22191,6 +22449,9 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN VOCALIC R",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9C3,
},
@@ -22199,6 +22460,9 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN VOCALIC RR",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9C4,
},
@@ -22207,6 +22471,9 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN E",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0x9C7,
},
@@ -22215,6 +22482,9 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN AI",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0x9C8,
},
@@ -22223,6 +22493,7 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN O",
direction="l",
+ indic="s",
linebreak="cm",
specials={ "char", 0x9C7, 0x9BE },
unicodeslot=0x9CB,
@@ -22232,6 +22503,7 @@ characters.data={
category="mc",
description="BENGALI VOWEL SIGN AU",
direction="l",
+ indic="s",
linebreak="cm",
specials={ "char", 0x9C7, 0x9D7 },
unicodeslot=0x9CC,
@@ -22242,6 +22514,9 @@ characters.data={
combining=0x9,
description="BENGALI SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="b",
linebreak="cm",
synonyms={ "bengali hasant" },
unicodeslot=0x9CD,
@@ -22250,6 +22525,7 @@ characters.data={
category="lo",
description="BENGALI LETTER KHANDA TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0x9CE,
},
@@ -22258,6 +22534,8 @@ characters.data={
category="mc",
description="BENGALI AU LENGTH MARK",
direction="l",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0x9D7,
},
@@ -22266,6 +22544,7 @@ characters.data={
category="lo",
description="BENGALI LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x9A1, 0x9BC },
unicodeslot=0x9DC,
@@ -22275,6 +22554,7 @@ characters.data={
category="lo",
description="BENGALI LETTER RHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x9A2, 0x9BC },
unicodeslot=0x9DD,
@@ -22284,6 +22564,7 @@ characters.data={
category="lo",
description="BENGALI LETTER YYA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0x9AF, 0x9BC },
unicodeslot=0x9DF,
@@ -22293,6 +22574,7 @@ characters.data={
category="lo",
description="BENGALI LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x9E0,
},
@@ -22301,6 +22583,7 @@ characters.data={
category="lo",
description="BENGALI LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0x9E1,
},
@@ -22309,6 +22592,8 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="i",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9E2,
},
@@ -22317,6 +22602,8 @@ characters.data={
category="mn",
description="BENGALI VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="i",
+ indicorder="as",
linebreak="cm",
unicodeslot=0x9E3,
},
@@ -22325,6 +22612,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9E6,
},
@@ -22333,6 +22621,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9E7,
},
@@ -22341,6 +22630,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9E8,
},
@@ -22349,6 +22639,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9E9,
},
@@ -22357,6 +22648,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9EA,
},
@@ -22365,6 +22657,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9EB,
},
@@ -22373,6 +22666,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9EC,
},
@@ -22381,6 +22675,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9ED,
},
@@ -22389,6 +22684,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9EE,
},
@@ -22397,6 +22693,7 @@ characters.data={
category="nd",
description="BENGALI DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0x9EF,
},
@@ -22405,6 +22702,8 @@ characters.data={
category="lo",
description="BENGALI LETTER RA WITH MIDDLE DIAGONAL",
direction="l",
+ indic="o",
+ indicorder="as",
linebreak="al",
shcode=0x9B0,
unicodeslot=0x9F0,
@@ -22414,6 +22713,7 @@ characters.data={
category="lo",
description="BENGALI LETTER RA WITH LOWER DIAGONAL",
direction="l",
+ indic="o",
linebreak="al",
shcode=0x9B0,
unicodeslot=0x9F1,
@@ -22423,6 +22723,7 @@ characters.data={
category="sc",
description="BENGALI RUPEE MARK",
direction="et",
+ indic="o",
linebreak="po",
unicodeslot=0x9F2,
},
@@ -22431,6 +22732,7 @@ characters.data={
category="sc",
description="BENGALI RUPEE SIGN",
direction="et",
+ indic="o",
linebreak="po",
unicodeslot=0x9F3,
},
@@ -22439,6 +22741,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY NUMERATOR ONE",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9F4,
},
@@ -22447,6 +22750,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY NUMERATOR TWO",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9F5,
},
@@ -22455,6 +22759,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY NUMERATOR THREE",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9F6,
},
@@ -22463,6 +22768,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY NUMERATOR FOUR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9F7,
},
@@ -22471,6 +22777,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9F8,
},
@@ -22479,6 +22786,7 @@ characters.data={
category="no",
description="BENGALI CURRENCY DENOMINATOR SIXTEEN",
direction="l",
+ indic="o",
linebreak="po",
unicodeslot=0x9F9,
},
@@ -22487,6 +22795,7 @@ characters.data={
category="so",
description="BENGALI ISSHAR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9FA,
},
@@ -22494,6 +22803,7 @@ characters.data={
category="sc",
description="BENGALI GANDA MARK",
direction="et",
+ indic="o",
linebreak="pr",
unicodeslot=0x9FB,
},
@@ -22501,6 +22811,7 @@ characters.data={
category="lo",
description="BENGALI LETTER VEDIC ANUSVARA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9FC,
},
@@ -22508,6 +22819,7 @@ characters.data={
category="po",
description="BENGALI ABBREVIATION SIGN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0x9FD,
},
@@ -22515,6 +22827,8 @@ characters.data={
category="mn",
description="GURMUKHI SIGN ADAK BINDI",
direction="nsm",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA01,
},
@@ -22523,6 +22837,8 @@ characters.data={
category="mn",
description="GURMUKHI SIGN BINDI",
direction="nsm",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA02,
},
@@ -22530,6 +22846,7 @@ characters.data={
category="mc",
description="GURMUKHI SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xA03,
},
@@ -22538,6 +22855,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA05,
},
@@ -22546,6 +22864,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA06,
},
@@ -22554,6 +22873,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA07,
},
@@ -22562,6 +22882,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA08,
},
@@ -22570,6 +22891,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA09,
},
@@ -22578,6 +22900,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA0A,
},
@@ -22586,6 +22909,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER EE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA0F,
},
@@ -22594,6 +22918,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA10,
},
@@ -22602,6 +22927,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER OO",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA13,
},
@@ -22610,6 +22936,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA14,
},
@@ -22618,6 +22945,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA15,
},
@@ -22626,6 +22954,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA16,
},
@@ -22634,6 +22963,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA17,
},
@@ -22642,6 +22972,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA18,
},
@@ -22650,6 +22981,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA19,
},
@@ -22658,6 +22990,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1A,
},
@@ -22666,6 +22999,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1B,
},
@@ -22674,6 +23008,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1C,
},
@@ -22682,6 +23017,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1D,
},
@@ -22690,6 +23026,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1E,
},
@@ -22698,6 +23035,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA1F,
},
@@ -22706,6 +23044,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA20,
},
@@ -22714,6 +23053,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA21,
},
@@ -22722,6 +23062,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA22,
},
@@ -22730,6 +23071,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA23,
},
@@ -22738,6 +23080,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA24,
},
@@ -22746,6 +23089,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA25,
},
@@ -22754,6 +23098,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA26,
},
@@ -22762,6 +23107,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA27,
},
@@ -22770,6 +23116,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA28,
},
@@ -22778,6 +23125,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2A,
},
@@ -22786,6 +23134,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2B,
},
@@ -22794,6 +23143,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2C,
},
@@ -22802,6 +23152,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2D,
},
@@ -22810,6 +23161,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2E,
},
@@ -22818,6 +23170,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA2F,
},
@@ -22826,6 +23179,9 @@ characters.data={
category="lo",
description="GURMUKHI LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="bs",
linebreak="al",
unicodeslot=0xA30,
},
@@ -22834,6 +23190,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA32,
},
@@ -22841,6 +23198,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA32, 0xA3C },
unicodeslot=0xA33,
@@ -22850,6 +23208,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA35,
},
@@ -22858,6 +23217,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA38, 0xA3C },
unicodeslot=0xA36,
@@ -22867,6 +23227,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA38,
},
@@ -22875,6 +23236,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA39,
},
@@ -22884,6 +23246,9 @@ characters.data={
combining=0x7,
description="GURMUKHI SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0xA3C,
},
@@ -22892,6 +23257,9 @@ characters.data={
category="mc",
description="GURMUKHI VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA3E,
},
@@ -22900,6 +23268,9 @@ characters.data={
category="mc",
description="GURMUKHI VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0xA3F,
},
@@ -22908,6 +23279,9 @@ characters.data={
category="mc",
description="GURMUKHI VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA40,
},
@@ -22916,6 +23290,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA41,
},
@@ -22924,6 +23301,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA42,
},
@@ -22932,6 +23312,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN EE",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xA47,
},
@@ -22940,6 +23323,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN AI",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xA48,
},
@@ -22948,6 +23334,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN OO",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xA4B,
},
@@ -22956,6 +23345,9 @@ characters.data={
category="mn",
description="GURMUKHI VOWEL SIGN AU",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xA4C,
},
@@ -22965,6 +23357,9 @@ characters.data={
combining=0x9,
description="GURMUKHI SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xA4D,
},
@@ -22972,6 +23367,7 @@ characters.data={
category="mn",
description="GURMUKHI SIGN UDAAT",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xA51,
},
@@ -22980,6 +23376,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER KHHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA16, 0xA3C },
unicodeslot=0xA59,
@@ -22989,6 +23386,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER GHHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA17, 0xA3C },
unicodeslot=0xA5A,
@@ -22998,6 +23396,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER ZA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA1C, 0xA3C },
unicodeslot=0xA5B,
@@ -23007,6 +23406,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA5C,
},
@@ -23015,6 +23415,7 @@ characters.data={
category="lo",
description="GURMUKHI LETTER FA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xA2B, 0xA3C },
unicodeslot=0xA5E,
@@ -23024,6 +23425,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA66,
},
@@ -23032,6 +23434,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA67,
},
@@ -23040,6 +23443,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA68,
},
@@ -23048,6 +23452,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA69,
},
@@ -23056,6 +23461,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6A,
},
@@ -23064,6 +23470,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6B,
},
@@ -23072,6 +23479,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6C,
},
@@ -23080,6 +23488,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6D,
},
@@ -23088,6 +23497,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6E,
},
@@ -23096,6 +23506,7 @@ characters.data={
category="nd",
description="GURMUKHI DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xA6F,
},
@@ -23104,6 +23515,8 @@ characters.data={
category="mn",
description="GURMUKHI TIPPI",
direction="nsm",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA70,
},
@@ -23112,6 +23525,8 @@ characters.data={
category="mn",
description="GURMUKHI ADDAK",
direction="nsm",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xA71,
},
@@ -23120,6 +23535,7 @@ characters.data={
category="lo",
description="GURMUKHI IRI",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xA72,
},
@@ -23128,6 +23544,7 @@ characters.data={
category="lo",
description="GURMUKHI URA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xA73,
},
@@ -23136,6 +23553,7 @@ characters.data={
category="lo",
description="GURMUKHI EK ONKAR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xA74,
},
@@ -23143,6 +23561,7 @@ characters.data={
category="mn",
description="GURMUKHI SIGN YAKASH",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xA75,
},
@@ -23151,6 +23570,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN CANDRABINDU",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xA81,
},
@@ -23159,6 +23579,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN ANUSVARA",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xA82,
},
@@ -23167,6 +23588,7 @@ characters.data={
category="mc",
description="GUJARATI SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xA83,
},
@@ -23175,6 +23597,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA85,
},
@@ -23183,6 +23606,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA86,
},
@@ -23191,6 +23615,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA87,
},
@@ -23199,6 +23624,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA88,
},
@@ -23207,6 +23633,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA89,
},
@@ -23215,6 +23642,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA8A,
},
@@ -23223,6 +23651,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA8B,
},
@@ -23230,6 +23659,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA8C,
},
@@ -23238,6 +23668,7 @@ characters.data={
category="lo",
description="GUJARATI VOWEL CANDRA E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA8D,
},
@@ -23246,6 +23677,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA8F,
},
@@ -23254,6 +23686,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA90,
},
@@ -23262,6 +23695,7 @@ characters.data={
category="lo",
description="GUJARATI VOWEL CANDRA O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA91,
},
@@ -23270,6 +23704,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA93,
},
@@ -23278,6 +23713,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xA94,
},
@@ -23286,6 +23722,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA95,
},
@@ -23294,6 +23731,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA96,
},
@@ -23302,6 +23740,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA97,
},
@@ -23310,6 +23749,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA98,
},
@@ -23318,6 +23758,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA99,
},
@@ -23326,6 +23767,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9A,
},
@@ -23334,6 +23776,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9B,
},
@@ -23342,6 +23785,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9C,
},
@@ -23350,6 +23794,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9D,
},
@@ -23358,6 +23803,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9E,
},
@@ -23366,6 +23812,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xA9F,
},
@@ -23374,6 +23821,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA0,
},
@@ -23382,6 +23830,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA1,
},
@@ -23390,6 +23839,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA2,
},
@@ -23398,6 +23848,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA3,
},
@@ -23406,6 +23857,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA4,
},
@@ -23414,6 +23866,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA5,
},
@@ -23422,6 +23875,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA6,
},
@@ -23430,6 +23884,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA7,
},
@@ -23438,6 +23893,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAA8,
},
@@ -23446,6 +23902,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAA,
},
@@ -23454,6 +23911,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAB,
},
@@ -23462,6 +23920,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAC,
},
@@ -23470,6 +23929,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAD,
},
@@ -23478,6 +23938,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAE,
},
@@ -23486,6 +23947,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAAF,
},
@@ -23494,6 +23956,9 @@ characters.data={
category="lo",
description="GUJARATI LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="bp",
linebreak="al",
unicodeslot=0xAB0,
},
@@ -23502,6 +23967,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB2,
},
@@ -23510,6 +23976,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB3,
},
@@ -23518,6 +23985,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB5,
},
@@ -23526,6 +23994,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB6,
},
@@ -23534,6 +24003,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB7,
},
@@ -23542,6 +24012,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB8,
},
@@ -23550,6 +24021,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xAB9,
},
@@ -23559,6 +24031,9 @@ characters.data={
combining=0x7,
description="GUJARATI SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0xABC,
},
@@ -23566,6 +24041,7 @@ characters.data={
category="lo",
description="GUJARATI SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xABD,
},
@@ -23574,6 +24050,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xABE,
},
@@ -23582,6 +24061,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0xABF,
},
@@ -23590,6 +24072,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC0,
},
@@ -23598,6 +24083,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC1,
},
@@ -23606,6 +24094,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC2,
},
@@ -23614,6 +24105,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN VOCALIC R",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC3,
},
@@ -23622,6 +24116,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN VOCALIC RR",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC4,
},
@@ -23630,6 +24127,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN CANDRA E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xAC5,
},
@@ -23638,6 +24138,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xAC7,
},
@@ -23646,6 +24149,9 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN AI",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xAC8,
},
@@ -23654,6 +24160,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN CANDRA O",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAC9,
},
@@ -23662,6 +24171,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xACB,
},
@@ -23670,6 +24182,9 @@ characters.data={
category="mc",
description="GUJARATI VOWEL SIGN AU",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xACC,
},
@@ -23679,6 +24194,9 @@ characters.data={
combining=0x9,
description="GUJARATI SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xACD,
},
@@ -23687,6 +24205,7 @@ characters.data={
category="lo",
description="GUJARATI OM",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xAD0,
},
@@ -23695,6 +24214,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xAE0,
},
@@ -23702,6 +24222,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xAE1,
},
@@ -23709,6 +24230,8 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="i",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAE2,
},
@@ -23716,6 +24239,8 @@ characters.data={
category="mn",
description="GUJARATI VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="i",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xAE3,
},
@@ -23724,6 +24249,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAE6,
},
@@ -23732,6 +24258,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAE7,
},
@@ -23740,6 +24267,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAE8,
},
@@ -23748,6 +24276,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAE9,
},
@@ -23756,6 +24285,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAEA,
},
@@ -23764,6 +24294,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAEB,
},
@@ -23772,6 +24303,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAEC,
},
@@ -23780,6 +24312,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAED,
},
@@ -23788,6 +24321,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAEE,
},
@@ -23796,6 +24330,7 @@ characters.data={
category="nd",
description="GUJARATI DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xAEF,
},
@@ -23803,6 +24338,7 @@ characters.data={
category="po",
description="GUJARATI ABBREVIATION SIGN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xAF0,
},
@@ -23810,6 +24346,7 @@ characters.data={
category="sc",
description="GUJARATI RUPEE SIGN",
direction="et",
+ indic="o",
linebreak="pr",
unicodeslot=0xAF1,
},
@@ -23817,6 +24354,7 @@ characters.data={
category="lo",
description="GUJARATI LETTER ZHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xAF9,
},
@@ -23824,6 +24362,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN SUKUN",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFA,
},
@@ -23831,6 +24370,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN SHADDA",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFB,
},
@@ -23838,6 +24378,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN MADDAH",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFC,
},
@@ -23845,6 +24386,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN THREE-DOT NUKTA ABOVE",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFD,
},
@@ -23852,6 +24394,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN CIRCLE NUKTA ABOVE",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFE,
},
@@ -23859,6 +24402,7 @@ characters.data={
category="mn",
description="GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xAFF,
},
@@ -23866,6 +24410,8 @@ characters.data={
category="mn",
description="ORIYA SIGN CANDRABINDU",
direction="nsm",
+ indic="o",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xB01,
},
@@ -23873,6 +24419,7 @@ characters.data={
category="mc",
description="ORIYA SIGN ANUSVARA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xB02,
},
@@ -23880,6 +24427,7 @@ characters.data={
category="mc",
description="ORIYA SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xB03,
},
@@ -23887,6 +24435,7 @@ characters.data={
category="lo",
description="ORIYA LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB05,
},
@@ -23894,6 +24443,7 @@ characters.data={
category="lo",
description="ORIYA LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB06,
},
@@ -23901,6 +24451,7 @@ characters.data={
category="lo",
description="ORIYA LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB07,
},
@@ -23908,6 +24459,7 @@ characters.data={
category="lo",
description="ORIYA LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB08,
},
@@ -23915,6 +24467,7 @@ characters.data={
category="lo",
description="ORIYA LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB09,
},
@@ -23922,6 +24475,7 @@ characters.data={
category="lo",
description="ORIYA LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB0A,
},
@@ -23929,6 +24483,7 @@ characters.data={
category="lo",
description="ORIYA LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB0B,
},
@@ -23936,6 +24491,7 @@ characters.data={
category="lo",
description="ORIYA LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB0C,
},
@@ -23943,6 +24499,7 @@ characters.data={
category="lo",
description="ORIYA LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB0F,
},
@@ -23950,6 +24507,7 @@ characters.data={
category="lo",
description="ORIYA LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB10,
},
@@ -23957,6 +24515,7 @@ characters.data={
category="lo",
description="ORIYA LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB13,
},
@@ -23964,6 +24523,7 @@ characters.data={
category="lo",
description="ORIYA LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB14,
},
@@ -23971,6 +24531,7 @@ characters.data={
category="lo",
description="ORIYA LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB15,
},
@@ -23978,6 +24539,7 @@ characters.data={
category="lo",
description="ORIYA LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB16,
},
@@ -23985,6 +24547,7 @@ characters.data={
category="lo",
description="ORIYA LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB17,
},
@@ -23992,6 +24555,7 @@ characters.data={
category="lo",
description="ORIYA LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB18,
},
@@ -23999,6 +24563,7 @@ characters.data={
category="lo",
description="ORIYA LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB19,
},
@@ -24006,6 +24571,7 @@ characters.data={
category="lo",
description="ORIYA LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1A,
},
@@ -24013,6 +24579,7 @@ characters.data={
category="lo",
description="ORIYA LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1B,
},
@@ -24020,6 +24587,7 @@ characters.data={
category="lo",
description="ORIYA LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1C,
},
@@ -24027,6 +24595,7 @@ characters.data={
category="lo",
description="ORIYA LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1D,
},
@@ -24034,6 +24603,7 @@ characters.data={
category="lo",
description="ORIYA LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1E,
},
@@ -24041,6 +24611,7 @@ characters.data={
category="lo",
description="ORIYA LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB1F,
},
@@ -24048,6 +24619,7 @@ characters.data={
category="lo",
description="ORIYA LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB20,
},
@@ -24055,6 +24627,7 @@ characters.data={
category="lo",
description="ORIYA LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB21,
},
@@ -24062,6 +24635,7 @@ characters.data={
category="lo",
description="ORIYA LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB22,
},
@@ -24069,6 +24643,7 @@ characters.data={
category="lo",
description="ORIYA LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB23,
},
@@ -24076,6 +24651,7 @@ characters.data={
category="lo",
description="ORIYA LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB24,
},
@@ -24083,6 +24659,7 @@ characters.data={
category="lo",
description="ORIYA LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB25,
},
@@ -24090,6 +24667,7 @@ characters.data={
category="lo",
description="ORIYA LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB26,
},
@@ -24097,6 +24675,7 @@ characters.data={
category="lo",
description="ORIYA LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB27,
},
@@ -24104,6 +24683,7 @@ characters.data={
category="lo",
description="ORIYA LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB28,
},
@@ -24111,6 +24691,7 @@ characters.data={
category="lo",
description="ORIYA LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2A,
},
@@ -24118,6 +24699,7 @@ characters.data={
category="lo",
description="ORIYA LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2B,
},
@@ -24125,6 +24707,7 @@ characters.data={
category="lo",
description="ORIYA LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2C,
},
@@ -24132,6 +24715,7 @@ characters.data={
category="lo",
description="ORIYA LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2D,
},
@@ -24139,6 +24723,7 @@ characters.data={
category="lo",
description="ORIYA LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2E,
},
@@ -24146,6 +24731,7 @@ characters.data={
category="lo",
description="ORIYA LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB2F,
},
@@ -24153,6 +24739,9 @@ characters.data={
category="lo",
description="ORIYA LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="am",
linebreak="al",
unicodeslot=0xB30,
},
@@ -24160,6 +24749,7 @@ characters.data={
category="lo",
description="ORIYA LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB32,
},
@@ -24167,6 +24757,7 @@ characters.data={
category="lo",
description="ORIYA LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB33,
},
@@ -24174,6 +24765,7 @@ characters.data={
category="lo",
description="ORIYA LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB35,
},
@@ -24181,6 +24773,7 @@ characters.data={
category="lo",
description="ORIYA LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB36,
},
@@ -24188,6 +24781,7 @@ characters.data={
category="lo",
description="ORIYA LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB37,
},
@@ -24195,6 +24789,7 @@ characters.data={
category="lo",
description="ORIYA LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB38,
},
@@ -24202,6 +24797,7 @@ characters.data={
category="lo",
description="ORIYA LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB39,
},
@@ -24210,6 +24806,9 @@ characters.data={
combining=0x7,
description="ORIYA SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0xB3C,
},
@@ -24217,6 +24816,7 @@ characters.data={
category="lo",
description="ORIYA SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB3D,
},
@@ -24224,6 +24824,9 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xB3E,
},
@@ -24231,6 +24834,9 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN I",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="am",
linebreak="cm",
unicodeslot=0xB3F,
},
@@ -24238,6 +24844,9 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xB40,
},
@@ -24245,6 +24854,9 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xB41,
},
@@ -24252,6 +24864,9 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xB42,
},
@@ -24259,6 +24874,9 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN VOCALIC R",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xB43,
},
@@ -24266,6 +24884,8 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN VOCALIC RR",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xB44,
},
@@ -24273,6 +24893,9 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN E",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bh",
linebreak="cm",
unicodeslot=0xB47,
},
@@ -24280,6 +24903,8 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN AI",
direction="l",
+ indic="d",
+ indicmark="l",
linebreak="cm",
specials={ "char", 0xB47, 0xB56 },
unicodeslot=0xB48,
@@ -24288,6 +24913,8 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xB47, 0xB3E },
unicodeslot=0xB4B,
@@ -24296,6 +24923,8 @@ characters.data={
category="mc",
description="ORIYA VOWEL SIGN AU",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xB47, 0xB57 },
unicodeslot=0xB4C,
@@ -24305,6 +24934,9 @@ characters.data={
combining=0x9,
description="ORIYA SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xB4D,
},
@@ -24312,6 +24944,8 @@ characters.data={
category="mn",
description="ORIYA AI LENGTH MARK",
direction="nsm",
+ indic="o",
+ indicorder="am",
linebreak="cm",
unicodeslot=0xB56,
},
@@ -24319,6 +24953,8 @@ characters.data={
category="mc",
description="ORIYA AU LENGTH MARK",
direction="l",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xB57,
},
@@ -24326,6 +24962,7 @@ characters.data={
category="lo",
description="ORIYA LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xB21, 0xB3C },
unicodeslot=0xB5C,
@@ -24334,6 +24971,7 @@ characters.data={
category="lo",
description="ORIYA LETTER RHA",
direction="l",
+ indic="c",
linebreak="al",
specials={ "char", 0xB22, 0xB3C },
unicodeslot=0xB5D,
@@ -24342,6 +24980,7 @@ characters.data={
category="lo",
description="ORIYA LETTER YYA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB5F,
},
@@ -24349,6 +24988,7 @@ characters.data={
category="lo",
description="ORIYA LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB60,
},
@@ -24356,6 +24996,7 @@ characters.data={
category="lo",
description="ORIYA LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB61,
},
@@ -24363,6 +25004,8 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xB62,
},
@@ -24370,6 +25013,8 @@ characters.data={
category="mn",
description="ORIYA VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xB63,
},
@@ -24377,6 +25022,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB66,
},
@@ -24384,6 +25030,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB67,
},
@@ -24391,6 +25038,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB68,
},
@@ -24398,6 +25046,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB69,
},
@@ -24405,6 +25054,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6A,
},
@@ -24412,6 +25062,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6B,
},
@@ -24419,6 +25070,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6C,
},
@@ -24426,6 +25078,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6D,
},
@@ -24433,6 +25086,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6E,
},
@@ -24440,6 +25094,7 @@ characters.data={
category="nd",
description="ORIYA DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xB6F,
},
@@ -24447,6 +25102,7 @@ characters.data={
category="so",
description="ORIYA ISSHAR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB70,
},
@@ -24454,6 +25110,7 @@ characters.data={
category="lo",
description="ORIYA LETTER WA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB71,
},
@@ -24461,6 +25118,7 @@ characters.data={
category="no",
description="ORIYA FRACTION ONE QUARTER",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB72,
},
@@ -24468,6 +25126,7 @@ characters.data={
category="no",
description="ORIYA FRACTION ONE HALF",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB73,
},
@@ -24475,6 +25134,7 @@ characters.data={
category="no",
description="ORIYA FRACTION THREE QUARTERS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB74,
},
@@ -24482,6 +25142,7 @@ characters.data={
category="no",
description="ORIYA FRACTION ONE SIXTEENTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB75,
},
@@ -24489,6 +25150,7 @@ characters.data={
category="no",
description="ORIYA FRACTION ONE EIGHTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB76,
},
@@ -24496,6 +25158,7 @@ characters.data={
category="no",
description="ORIYA FRACTION THREE SIXTEENTHS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xB77,
},
@@ -24503,6 +25166,7 @@ characters.data={
category="mn",
description="TAMIL SIGN ANUSVARA",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xB82,
},
@@ -24510,6 +25174,7 @@ characters.data={
category="lo",
description="TAMIL SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="al",
synonyms={ "tamil aytham" },
unicodeslot=0xB83,
@@ -24518,6 +25183,7 @@ characters.data={
category="lo",
description="TAMIL LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB85,
},
@@ -24525,6 +25191,7 @@ characters.data={
category="lo",
description="TAMIL LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB86,
},
@@ -24532,6 +25199,7 @@ characters.data={
category="lo",
description="TAMIL LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB87,
},
@@ -24539,6 +25207,7 @@ characters.data={
category="lo",
description="TAMIL LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB88,
},
@@ -24546,6 +25215,7 @@ characters.data={
category="lo",
description="TAMIL LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB89,
},
@@ -24553,6 +25223,7 @@ characters.data={
category="lo",
description="TAMIL LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB8A,
},
@@ -24560,6 +25231,7 @@ characters.data={
category="lo",
description="TAMIL LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB8E,
},
@@ -24567,6 +25239,7 @@ characters.data={
category="lo",
description="TAMIL LETTER EE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB8F,
},
@@ -24574,6 +25247,7 @@ characters.data={
category="lo",
description="TAMIL LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB90,
},
@@ -24581,6 +25255,7 @@ characters.data={
category="lo",
description="TAMIL LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB92,
},
@@ -24588,6 +25263,7 @@ characters.data={
category="lo",
description="TAMIL LETTER OO",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xB93,
},
@@ -24595,6 +25271,7 @@ characters.data={
category="lo",
description="TAMIL LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
specials={ "char", 0xB92, 0xBD7 },
unicodeslot=0xB94,
@@ -24603,6 +25280,7 @@ characters.data={
category="lo",
description="TAMIL LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB95,
},
@@ -24610,6 +25288,7 @@ characters.data={
category="lo",
description="TAMIL LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB99,
},
@@ -24617,6 +25296,7 @@ characters.data={
category="lo",
description="TAMIL LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB9A,
},
@@ -24624,6 +25304,7 @@ characters.data={
category="lo",
description="TAMIL LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB9C,
},
@@ -24631,6 +25312,7 @@ characters.data={
category="lo",
description="TAMIL LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB9E,
},
@@ -24638,6 +25320,7 @@ characters.data={
category="lo",
description="TAMIL LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xB9F,
},
@@ -24645,6 +25328,7 @@ characters.data={
category="lo",
description="TAMIL LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBA3,
},
@@ -24652,6 +25336,7 @@ characters.data={
category="lo",
description="TAMIL LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBA4,
},
@@ -24659,6 +25344,7 @@ characters.data={
category="lo",
description="TAMIL LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBA8,
},
@@ -24666,6 +25352,7 @@ characters.data={
category="lo",
description="TAMIL LETTER NNNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBA9,
},
@@ -24673,6 +25360,7 @@ characters.data={
category="lo",
description="TAMIL LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBAA,
},
@@ -24680,6 +25368,7 @@ characters.data={
category="lo",
description="TAMIL LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBAE,
},
@@ -24687,6 +25376,7 @@ characters.data={
category="lo",
description="TAMIL LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBAF,
},
@@ -24694,6 +25384,9 @@ characters.data={
category="lo",
description="TAMIL LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="ap",
linebreak="al",
unicodeslot=0xBB0,
},
@@ -24701,6 +25394,7 @@ characters.data={
category="lo",
description="TAMIL LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB1,
},
@@ -24708,6 +25402,7 @@ characters.data={
category="lo",
description="TAMIL LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB2,
},
@@ -24715,6 +25410,7 @@ characters.data={
category="lo",
description="TAMIL LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB3,
},
@@ -24722,6 +25418,7 @@ characters.data={
category="lo",
description="TAMIL LETTER LLLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB4,
},
@@ -24729,6 +25426,7 @@ characters.data={
category="lo",
description="TAMIL LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB5,
},
@@ -24736,6 +25434,7 @@ characters.data={
category="lo",
description="TAMIL LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB6,
},
@@ -24743,6 +25442,7 @@ characters.data={
category="lo",
description="TAMIL LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB7,
},
@@ -24750,6 +25450,7 @@ characters.data={
category="lo",
description="TAMIL LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB8,
},
@@ -24757,6 +25458,7 @@ characters.data={
category="lo",
description="TAMIL LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xBB9,
},
@@ -24764,6 +25466,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xBBE,
},
@@ -24771,6 +25476,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xBBF,
},
@@ -24778,6 +25486,9 @@ characters.data={
category="mn",
description="TAMIL VOWEL SIGN II",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xBC0,
},
@@ -24785,6 +25496,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN U",
direction="l",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xBC1,
},
@@ -24792,6 +25506,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN UU",
direction="l",
+ indic="d",
+ indicmark="b",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xBC2,
},
@@ -24799,6 +25516,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN E",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xBC6,
},
@@ -24806,6 +25526,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN EE",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xBC7,
},
@@ -24813,6 +25536,9 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN AI",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xBC8,
},
@@ -24820,6 +25546,8 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xBC6, 0xBBE },
unicodeslot=0xBCA,
@@ -24828,6 +25556,8 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN OO",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xBC7, 0xBBE },
unicodeslot=0xBCB,
@@ -24836,6 +25566,8 @@ characters.data={
category="mc",
description="TAMIL VOWEL SIGN AU",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xBC6, 0xBD7 },
unicodeslot=0xBCC,
@@ -24845,6 +25577,9 @@ characters.data={
combining=0x9,
description="TAMIL SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xBCD,
},
@@ -24852,6 +25587,7 @@ characters.data={
category="lo",
description="TAMIL OM",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xBD0,
},
@@ -24859,6 +25595,8 @@ characters.data={
category="mc",
description="TAMIL AU LENGTH MARK",
direction="l",
+ indic="o",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xBD7,
},
@@ -24866,6 +25604,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBE6,
},
@@ -24873,6 +25612,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBE7,
},
@@ -24880,6 +25620,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBE8,
},
@@ -24887,6 +25628,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBE9,
},
@@ -24894,6 +25636,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBEA,
},
@@ -24901,6 +25644,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBEB,
},
@@ -24908,6 +25652,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBEC,
},
@@ -24915,6 +25660,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBED,
},
@@ -24922,6 +25668,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBEE,
},
@@ -24929,6 +25676,7 @@ characters.data={
category="nd",
description="TAMIL DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xBEF,
},
@@ -24936,6 +25684,7 @@ characters.data={
category="no",
description="TAMIL NUMBER TEN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xBF0,
},
@@ -24943,6 +25692,7 @@ characters.data={
category="no",
description="TAMIL NUMBER ONE HUNDRED",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xBF1,
},
@@ -24950,6 +25700,7 @@ characters.data={
category="no",
description="TAMIL NUMBER ONE THOUSAND",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xBF2,
},
@@ -24957,6 +25708,7 @@ characters.data={
category="so",
description="TAMIL DAY SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil naal" },
unicodeslot=0xBF3,
@@ -24965,6 +25717,7 @@ characters.data={
category="so",
description="TAMIL MONTH SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil maatham" },
unicodeslot=0xBF4,
@@ -24973,6 +25726,7 @@ characters.data={
category="so",
description="TAMIL YEAR SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil varudam" },
unicodeslot=0xBF5,
@@ -24981,6 +25735,7 @@ characters.data={
category="so",
description="TAMIL DEBIT SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil patru" },
unicodeslot=0xBF6,
@@ -24989,6 +25744,7 @@ characters.data={
category="so",
description="TAMIL CREDIT SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil varavu" },
unicodeslot=0xBF7,
@@ -24997,6 +25753,7 @@ characters.data={
category="so",
description="TAMIL AS ABOVE SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil merpadi" },
unicodeslot=0xBF8,
@@ -25005,6 +25762,7 @@ characters.data={
category="sc",
description="TAMIL RUPEE SIGN",
direction="et",
+ indic="o",
linebreak="pr",
synonyms={ "tamil rupai" },
unicodeslot=0xBF9,
@@ -25013,6 +25771,7 @@ characters.data={
category="so",
description="TAMIL NUMBER SIGN",
direction="on",
+ indic="o",
linebreak="al",
synonyms={ "tamil enn" },
unicodeslot=0xBFA,
@@ -25021,6 +25780,7 @@ characters.data={
category="mn",
description="TELUGU SIGN COMBINING CANDRABINDU ABOVE",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xC00,
},
@@ -25028,6 +25788,7 @@ characters.data={
category="mc",
description="TELUGU SIGN CANDRABINDU",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xC01,
},
@@ -25035,6 +25796,7 @@ characters.data={
category="mc",
description="TELUGU SIGN ANUSVARA",
direction="l",
+ indic="o",
linebreak="cm",
synonyms={ "telugu sunna" },
unicodeslot=0xC02,
@@ -25043,6 +25805,7 @@ characters.data={
category="mc",
description="TELUGU SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xC03,
},
@@ -25050,6 +25813,7 @@ characters.data={
category="lo",
description="TELUGU LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC05,
},
@@ -25057,6 +25821,7 @@ characters.data={
category="lo",
description="TELUGU LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC06,
},
@@ -25064,6 +25829,7 @@ characters.data={
category="lo",
description="TELUGU LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC07,
},
@@ -25071,6 +25837,7 @@ characters.data={
category="lo",
description="TELUGU LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC08,
},
@@ -25078,6 +25845,7 @@ characters.data={
category="lo",
description="TELUGU LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC09,
},
@@ -25085,6 +25853,7 @@ characters.data={
category="lo",
description="TELUGU LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC0A,
},
@@ -25092,6 +25861,7 @@ characters.data={
category="lo",
description="TELUGU LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC0B,
},
@@ -25099,6 +25869,7 @@ characters.data={
category="lo",
description="TELUGU LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC0C,
},
@@ -25106,6 +25877,7 @@ characters.data={
category="lo",
description="TELUGU LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC0E,
},
@@ -25113,6 +25885,7 @@ characters.data={
category="lo",
description="TELUGU LETTER EE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC0F,
},
@@ -25120,6 +25893,7 @@ characters.data={
category="lo",
description="TELUGU LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC10,
},
@@ -25127,6 +25901,7 @@ characters.data={
category="lo",
description="TELUGU LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC12,
},
@@ -25134,6 +25909,7 @@ characters.data={
category="lo",
description="TELUGU LETTER OO",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC13,
},
@@ -25141,6 +25917,7 @@ characters.data={
category="lo",
description="TELUGU LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC14,
},
@@ -25148,6 +25925,7 @@ characters.data={
category="lo",
description="TELUGU LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC15,
},
@@ -25155,6 +25933,7 @@ characters.data={
category="lo",
description="TELUGU LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC16,
},
@@ -25162,6 +25941,7 @@ characters.data={
category="lo",
description="TELUGU LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC17,
},
@@ -25169,6 +25949,7 @@ characters.data={
category="lo",
description="TELUGU LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC18,
},
@@ -25176,6 +25957,7 @@ characters.data={
category="lo",
description="TELUGU LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC19,
},
@@ -25183,6 +25965,7 @@ characters.data={
category="lo",
description="TELUGU LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1A,
},
@@ -25190,6 +25973,7 @@ characters.data={
category="lo",
description="TELUGU LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1B,
},
@@ -25197,6 +25981,7 @@ characters.data={
category="lo",
description="TELUGU LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1C,
},
@@ -25204,6 +25989,7 @@ characters.data={
category="lo",
description="TELUGU LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1D,
},
@@ -25211,6 +25997,7 @@ characters.data={
category="lo",
description="TELUGU LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1E,
},
@@ -25218,6 +26005,7 @@ characters.data={
category="lo",
description="TELUGU LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC1F,
},
@@ -25225,6 +26013,7 @@ characters.data={
category="lo",
description="TELUGU LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC20,
},
@@ -25232,6 +26021,7 @@ characters.data={
category="lo",
description="TELUGU LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC21,
},
@@ -25239,6 +26029,7 @@ characters.data={
category="lo",
description="TELUGU LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC22,
},
@@ -25246,6 +26037,7 @@ characters.data={
category="lo",
description="TELUGU LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC23,
},
@@ -25253,6 +26045,7 @@ characters.data={
category="lo",
description="TELUGU LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC24,
},
@@ -25260,6 +26053,7 @@ characters.data={
category="lo",
description="TELUGU LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC25,
},
@@ -25267,6 +26061,7 @@ characters.data={
category="lo",
description="TELUGU LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC26,
},
@@ -25274,6 +26069,7 @@ characters.data={
category="lo",
description="TELUGU LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC27,
},
@@ -25281,6 +26077,7 @@ characters.data={
category="lo",
description="TELUGU LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC28,
},
@@ -25288,6 +26085,7 @@ characters.data={
category="lo",
description="TELUGU LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2A,
},
@@ -25295,6 +26093,7 @@ characters.data={
category="lo",
description="TELUGU LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2B,
},
@@ -25302,6 +26101,7 @@ characters.data={
category="lo",
description="TELUGU LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2C,
},
@@ -25309,6 +26109,7 @@ characters.data={
category="lo",
description="TELUGU LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2D,
},
@@ -25316,6 +26117,7 @@ characters.data={
category="lo",
description="TELUGU LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2E,
},
@@ -25323,6 +26125,7 @@ characters.data={
category="lo",
description="TELUGU LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC2F,
},
@@ -25330,6 +26133,9 @@ characters.data={
category="lo",
description="TELUGU LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="ap",
linebreak="al",
unicodeslot=0xC30,
},
@@ -25337,6 +26143,7 @@ characters.data={
category="lo",
description="TELUGU LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC31,
},
@@ -25344,6 +26151,7 @@ characters.data={
category="lo",
description="TELUGU LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC32,
},
@@ -25351,6 +26159,7 @@ characters.data={
category="lo",
description="TELUGU LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC33,
},
@@ -25358,6 +26167,7 @@ characters.data={
category="lo",
description="TELUGU LETTER LLLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC34,
},
@@ -25367,11 +26177,13 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0xC35,
+ indic="c",
},
[0xC36]={
category="lo",
description="TELUGU LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC36,
},
@@ -25379,6 +26191,7 @@ characters.data={
category="lo",
description="TELUGU LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC37,
},
@@ -25386,6 +26199,7 @@ characters.data={
category="lo",
description="TELUGU LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC38,
},
@@ -25393,6 +26207,7 @@ characters.data={
category="lo",
description="TELUGU LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC39,
},
@@ -25400,6 +26215,7 @@ characters.data={
category="lo",
description="TELUGU SIGN AVAGRAHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC3D,
},
@@ -25407,6 +26223,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN AA",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC3E,
},
@@ -25414,6 +26233,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN I",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC3F,
},
@@ -25421,6 +26243,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN II",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC40,
},
@@ -25428,6 +26253,9 @@ characters.data={
category="mc",
description="TELUGU VOWEL SIGN U",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC41,
},
@@ -25435,6 +26263,9 @@ characters.data={
category="mc",
description="TELUGU VOWEL SIGN UU",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC42,
},
@@ -25442,6 +26273,9 @@ characters.data={
category="mc",
description="TELUGU VOWEL SIGN VOCALIC R",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xC43,
},
@@ -25449,6 +26283,9 @@ characters.data={
category="mc",
description="TELUGU VOWEL SIGN VOCALIC RR",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xC44,
},
@@ -25456,6 +26293,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN E",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC46,
},
@@ -25463,6 +26303,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN EE",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC47,
},
@@ -25470,6 +26313,8 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN AI",
direction="nsm",
+ indic="d",
+ indicmark="t",
linebreak="cm",
specials={ "char", 0xC46, 0xC56 },
unicodeslot=0xC48,
@@ -25478,6 +26323,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN O",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC4A,
},
@@ -25485,6 +26333,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN OO",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC4B,
},
@@ -25492,6 +26343,9 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN AU",
direction="nsm",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC4C,
},
@@ -25500,6 +26354,9 @@ characters.data={
combining=0x9,
description="TELUGU SIGN VIRAMA",
direction="nsm",
+ indic="o",
+ indicclass="halant",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xC4D,
},
@@ -25508,6 +26365,8 @@ characters.data={
combining=0x54,
description="TELUGU LENGTH MARK",
direction="nsm",
+ indic="o",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC55,
},
@@ -25516,6 +26375,8 @@ characters.data={
combining=0x5B,
description="TELUGU AI LENGTH MARK",
direction="nsm",
+ indic="o",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xC56,
},
@@ -25523,6 +26384,7 @@ characters.data={
category="lo",
description="TELUGU LETTER TSA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xC58,
},
@@ -25530,6 +26392,7 @@ characters.data={
category="lo",
description="TELUGU LETTER DZA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xC59,
},
@@ -25537,6 +26400,7 @@ characters.data={
category="lo",
description="TELUGU LETTER RRRA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xC5A,
},
@@ -25544,6 +26408,7 @@ characters.data={
category="lo",
description="TELUGU LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC60,
},
@@ -25551,6 +26416,7 @@ characters.data={
category="lo",
description="TELUGU LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC61,
},
@@ -25558,6 +26424,8 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xC62,
},
@@ -25565,6 +26433,8 @@ characters.data={
category="mn",
description="TELUGU VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xC63,
},
@@ -25572,6 +26442,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC66,
},
@@ -25579,6 +26450,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC67,
},
@@ -25586,6 +26458,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC68,
},
@@ -25593,6 +26466,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC69,
},
@@ -25600,6 +26474,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6A,
},
@@ -25607,6 +26482,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6B,
},
@@ -25614,6 +26490,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6C,
},
@@ -25621,6 +26498,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6D,
},
@@ -25628,6 +26506,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6E,
},
@@ -25635,6 +26514,7 @@ characters.data={
category="nd",
description="TELUGU DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xC6F,
},
@@ -25642,6 +26522,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC78,
},
@@ -25649,6 +26530,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC79,
},
@@ -25656,6 +26538,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC7A,
},
@@ -25663,6 +26546,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC7B,
},
@@ -25670,6 +26554,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC7C,
},
@@ -25677,6 +26562,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC7D,
},
@@ -25684,6 +26570,7 @@ characters.data={
category="no",
description="TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR",
direction="on",
+ indic="o",
linebreak="al",
unicodeslot=0xC7E,
},
@@ -25691,6 +26578,7 @@ characters.data={
category="so",
description="TELUGU SIGN TUUMU",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xC7F,
},
@@ -25698,6 +26586,7 @@ characters.data={
category="lo",
description="KANNADA SIGN SPACING CANDRABINDU",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xC80,
},
@@ -25705,6 +26594,7 @@ characters.data={
category="mn",
description="KANNADA SIGN CANDRABINDU",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xC81,
},
@@ -25712,6 +26602,7 @@ characters.data={
category="mc",
description="KANNADA SIGN ANUSVARA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xC82,
},
@@ -25719,6 +26610,7 @@ characters.data={
category="mc",
description="KANNADA SIGN VISARGA",
direction="l",
+ indic="o",
linebreak="cm",
unicodeslot=0xC83,
},
@@ -25726,6 +26618,7 @@ characters.data={
category="lo",
description="KANNADA LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC85,
},
@@ -25733,6 +26626,7 @@ characters.data={
category="lo",
description="KANNADA LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC86,
},
@@ -25740,6 +26634,7 @@ characters.data={
category="lo",
description="KANNADA LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC87,
},
@@ -25747,6 +26642,7 @@ characters.data={
category="lo",
description="KANNADA LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC88,
},
@@ -25754,6 +26650,7 @@ characters.data={
category="lo",
description="KANNADA LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC89,
},
@@ -25761,6 +26658,7 @@ characters.data={
category="lo",
description="KANNADA LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC8A,
},
@@ -25768,6 +26666,7 @@ characters.data={
category="lo",
description="KANNADA LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC8B,
},
@@ -25775,6 +26674,7 @@ characters.data={
category="lo",
description="KANNADA LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC8C,
},
@@ -25782,6 +26682,7 @@ characters.data={
category="lo",
description="KANNADA LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC8E,
},
@@ -25789,6 +26690,7 @@ characters.data={
category="lo",
description="KANNADA LETTER EE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC8F,
},
@@ -25796,6 +26698,7 @@ characters.data={
category="lo",
description="KANNADA LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC90,
},
@@ -25803,6 +26706,7 @@ characters.data={
category="lo",
description="KANNADA LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC92,
},
@@ -25810,6 +26714,7 @@ characters.data={
category="lo",
description="KANNADA LETTER OO",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC93,
},
@@ -25817,6 +26722,7 @@ characters.data={
category="lo",
description="KANNADA LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xC94,
},
@@ -25824,6 +26730,7 @@ characters.data={
category="lo",
description="KANNADA LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC95,
},
@@ -25831,6 +26738,7 @@ characters.data={
category="lo",
description="KANNADA LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC96,
},
@@ -25838,6 +26746,7 @@ characters.data={
category="lo",
description="KANNADA LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC97,
},
@@ -25845,6 +26754,7 @@ characters.data={
category="lo",
description="KANNADA LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC98,
},
@@ -25852,6 +26762,7 @@ characters.data={
category="lo",
description="KANNADA LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC99,
},
@@ -25859,6 +26770,7 @@ characters.data={
category="lo",
description="KANNADA LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9A,
},
@@ -25866,6 +26778,7 @@ characters.data={
category="lo",
description="KANNADA LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9B,
},
@@ -25873,6 +26786,7 @@ characters.data={
category="lo",
description="KANNADA LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9C,
},
@@ -25880,6 +26794,7 @@ characters.data={
category="lo",
description="KANNADA LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9D,
},
@@ -25887,6 +26802,7 @@ characters.data={
category="lo",
description="KANNADA LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9E,
},
@@ -25894,6 +26810,7 @@ characters.data={
category="lo",
description="KANNADA LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC9F,
},
@@ -25901,6 +26818,7 @@ characters.data={
category="lo",
description="KANNADA LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA0,
},
@@ -25908,6 +26826,7 @@ characters.data={
category="lo",
description="KANNADA LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA1,
},
@@ -25915,6 +26834,7 @@ characters.data={
category="lo",
description="KANNADA LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA2,
},
@@ -25922,6 +26842,7 @@ characters.data={
category="lo",
description="KANNADA LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA3,
},
@@ -25929,6 +26850,7 @@ characters.data={
category="lo",
description="KANNADA LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA4,
},
@@ -25936,6 +26858,7 @@ characters.data={
category="lo",
description="KANNADA LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA5,
},
@@ -25943,6 +26866,7 @@ characters.data={
category="lo",
description="KANNADA LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA6,
},
@@ -25950,6 +26874,7 @@ characters.data={
category="lo",
description="KANNADA LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA7,
},
@@ -25957,6 +26882,7 @@ characters.data={
category="lo",
description="KANNADA LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCA8,
},
@@ -25964,6 +26890,7 @@ characters.data={
category="lo",
description="KANNADA LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAA,
},
@@ -25971,6 +26898,7 @@ characters.data={
category="lo",
description="KANNADA LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAB,
},
@@ -25978,6 +26906,7 @@ characters.data={
category="lo",
description="KANNADA LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAC,
},
@@ -25985,6 +26914,7 @@ characters.data={
category="lo",
description="KANNADA LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAD,
},
@@ -25992,6 +26922,7 @@ characters.data={
category="lo",
description="KANNADA LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAE,
},
@@ -25999,6 +26930,7 @@ characters.data={
category="lo",
description="KANNADA LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCAF,
},
@@ -26006,6 +26938,9 @@ characters.data={
category="lo",
description="KANNADA LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="ap",
linebreak="al",
unicodeslot=0xCB0,
},
@@ -26013,6 +26948,7 @@ characters.data={
category="lo",
description="KANNADA LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB1,
},
@@ -26020,6 +26956,7 @@ characters.data={
category="lo",
description="KANNADA LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB2,
},
@@ -26027,6 +26964,7 @@ characters.data={
category="lo",
description="KANNADA LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB3,
},
@@ -26034,6 +26972,7 @@ characters.data={
category="lo",
description="KANNADA LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB5,
},
@@ -26041,6 +26980,7 @@ characters.data={
category="lo",
description="KANNADA LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB6,
},
@@ -26048,6 +26988,7 @@ characters.data={
category="lo",
description="KANNADA LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB7,
},
@@ -26055,6 +26996,7 @@ characters.data={
category="lo",
description="KANNADA LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB8,
},
@@ -26062,6 +27004,7 @@ characters.data={
category="lo",
description="KANNADA LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCB9,
},
@@ -26070,6 +27013,9 @@ characters.data={
combining=0x7,
description="KANNADA SIGN NUKTA",
direction="nsm",
+ indic="o",
+ indicmark="b",
+ indicclass="nukta",
linebreak="cm",
unicodeslot=0xCBC,
},
@@ -26077,6 +27023,7 @@ characters.data={
category="lo",
description="KANNADA SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xCBD,
},
@@ -26084,6 +27031,9 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCBE,
},
@@ -26091,6 +27041,9 @@ characters.data={
category="mn",
description="KANNADA VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCBF,
},
@@ -26098,6 +27051,8 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
specials={ "char", 0xCBF, 0xCD5 },
unicodeslot=0xCC0,
@@ -26106,6 +27061,9 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN U",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCC1,
},
@@ -26113,6 +27071,9 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN UU",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCC2,
},
@@ -26120,6 +27081,9 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN VOCALIC R",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xCC3,
},
@@ -26127,6 +27091,9 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN VOCALIC RR",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xCC4,
},
@@ -26134,6 +27101,9 @@ characters.data={
category="mn",
description="KANNADA VOWEL SIGN E",
direction="l",
+ indic="d",
+ indicmark="t",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCC6,
},
@@ -26141,6 +27111,8 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN EE",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
specials={ "char", 0xCC6, 0xCD5 },
unicodeslot=0xCC7,
@@ -26149,6 +27121,8 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN AI",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
specials={ "char", 0xCC6, 0xCD6 },
unicodeslot=0xCC8,
@@ -26157,6 +27131,8 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
specials={ "char", 0xCC6, 0xCC2 },
unicodeslot=0xCCA,
@@ -26165,6 +27141,8 @@ characters.data={
category="mc",
description="KANNADA VOWEL SIGN OO",
direction="l",
+ indic="d",
+ indicmark="r",
linebreak="cm",
specials={ "char", 0xCCA, 0xCD5 },
unicodeslot=0xCCB,
@@ -26173,6 +27151,9 @@ characters.data={
category="mn",
description="KANNADA VOWEL SIGN AU",
direction="nsm",
+ indic="d",
+ indicmark="r",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCCC,
},
@@ -26181,6 +27162,8 @@ characters.data={
combining=0x9,
description="KANNADA SIGN VIRAMA",
direction="nsm",
+ indic="s",
+ indicclass="halant",
linebreak="cm",
unicodeslot=0xCCD,
},
@@ -26188,6 +27171,8 @@ characters.data={
category="mc",
description="KANNADA LENGTH MARK",
direction="l",
+ indic="o",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xCD5,
},
@@ -26195,6 +27180,8 @@ characters.data={
category="mc",
description="KANNADA AI LENGTH MARK",
direction="l",
+ indic="o",
+ indicorder="as",
linebreak="cm",
unicodeslot=0xCD6,
},
@@ -26202,6 +27189,7 @@ characters.data={
category="lo",
description="KANNADA LETTER FA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xCDE,
},
@@ -26209,6 +27197,7 @@ characters.data={
category="lo",
description="KANNADA LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xCE0,
},
@@ -26216,6 +27205,7 @@ characters.data={
category="lo",
description="KANNADA LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xCE1,
},
@@ -26223,6 +27213,9 @@ characters.data={
category="mn",
description="KANNADA VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCE2,
},
@@ -26230,6 +27223,9 @@ characters.data={
category="mn",
description="KANNADA VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="d",
+ indicmark="b",
+ indicorder="bs",
linebreak="cm",
unicodeslot=0xCE3,
},
@@ -26237,6 +27233,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCE6,
},
@@ -26244,6 +27241,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCE7,
},
@@ -26251,6 +27249,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCE8,
},
@@ -26258,6 +27257,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCE9,
},
@@ -26265,6 +27265,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCEA,
},
@@ -26272,6 +27273,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCEB,
},
@@ -26279,6 +27281,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCEC,
},
@@ -26286,6 +27289,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCED,
},
@@ -26293,6 +27297,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCEE,
},
@@ -26300,6 +27305,7 @@ characters.data={
category="nd",
description="KANNADA DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xCEF,
},
@@ -26307,6 +27313,7 @@ characters.data={
category="so",
description="KANNADA SIGN JIHVAMULIYA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xCF1,
},
@@ -26314,6 +27321,7 @@ characters.data={
category="so",
description="KANNADA SIGN UPADHMANIYA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xCF2,
},
@@ -26321,6 +27329,7 @@ characters.data={
category="mn",
description="MALAYALAM SIGN COMBINING ANUSVARA ABOVE",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xD00,
},
@@ -26328,6 +27337,7 @@ characters.data={
category="mn",
description="MALAYALAM SIGN CANDRABINDU",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xD01,
},
@@ -26335,6 +27345,7 @@ characters.data={
category="mc",
description="MALAYALAM SIGN ANUSVARA",
direction="l",
+ indic="m",
linebreak="cm",
unicodeslot=0xD02,
},
@@ -26342,6 +27353,7 @@ characters.data={
category="mc",
description="MALAYALAM SIGN VISARGA",
direction="l",
+ indic="m",
linebreak="cm",
unicodeslot=0xD03,
},
@@ -26349,6 +27361,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER A",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD05,
},
@@ -26356,6 +27369,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER AA",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD06,
},
@@ -26363,6 +27377,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER I",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD07,
},
@@ -26370,6 +27385,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD08,
},
@@ -26377,6 +27393,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER U",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD09,
},
@@ -26384,6 +27401,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER UU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD0A,
},
@@ -26391,6 +27409,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER VOCALIC R",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD0B,
},
@@ -26398,6 +27417,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER VOCALIC L",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD0C,
},
@@ -26405,6 +27425,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER E",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD0E,
},
@@ -26412,6 +27433,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER EE",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD0F,
},
@@ -26419,6 +27441,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER AI",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD10,
},
@@ -26426,6 +27449,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER O",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD12,
},
@@ -26433,6 +27457,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER OO",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD13,
},
@@ -26440,6 +27465,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER AU",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD14,
},
@@ -26447,6 +27473,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER KA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD15,
},
@@ -26454,6 +27481,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER KHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD16,
},
@@ -26461,6 +27489,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER GA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD17,
},
@@ -26468,6 +27497,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER GHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD18,
},
@@ -26475,6 +27505,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER NGA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD19,
},
@@ -26482,6 +27513,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1A,
},
@@ -26489,6 +27521,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1B,
},
@@ -26496,6 +27529,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER JA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1C,
},
@@ -26503,6 +27537,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER JHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1D,
},
@@ -26510,6 +27545,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER NYA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1E,
},
@@ -26517,6 +27553,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER TTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD1F,
},
@@ -26524,6 +27561,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER TTHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD20,
},
@@ -26531,6 +27569,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER DDA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD21,
},
@@ -26538,6 +27577,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER DDHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD22,
},
@@ -26545,6 +27585,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER NNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD23,
},
@@ -26552,6 +27593,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER TA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD24,
},
@@ -26559,6 +27601,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER THA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD25,
},
@@ -26566,6 +27609,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER DA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD26,
},
@@ -26573,6 +27617,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER DHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD27,
},
@@ -26580,6 +27625,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER NA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD28,
},
@@ -26587,6 +27633,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER NNNA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD29,
},
@@ -26594,6 +27641,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER PA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2A,
},
@@ -26601,6 +27649,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER PHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2B,
},
@@ -26608,6 +27657,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER BA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2C,
},
@@ -26615,6 +27665,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER BHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2D,
},
@@ -26622,6 +27673,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER MA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2E,
},
@@ -26629,6 +27681,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER YA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD2F,
},
@@ -26636,6 +27689,9 @@ characters.data={
category="lo",
description="MALAYALAM LETTER RA",
direction="l",
+ indic="c",
+ indicclass="ra",
+ indicorder="am",
linebreak="al",
unicodeslot=0xD30,
},
@@ -26643,6 +27699,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER RRA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD31,
},
@@ -26650,6 +27707,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER LA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD32,
},
@@ -26657,6 +27715,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER LLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD33,
},
@@ -26664,6 +27723,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER LLLA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD34,
},
@@ -26671,6 +27731,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD35,
},
@@ -26678,6 +27739,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER SHA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD36,
},
@@ -26685,6 +27747,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER SSA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD37,
},
@@ -26692,6 +27755,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER SA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD38,
},
@@ -26699,6 +27763,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER HA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD39,
},
@@ -26706,6 +27771,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER TTTA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xD3A,
},
@@ -26714,6 +27780,7 @@ characters.data={
combining=0x9,
description="MALAYALAM SIGN VERTICAL BAR VIRAMA",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xD3B,
},
@@ -26722,6 +27789,7 @@ characters.data={
combining=0x9,
description="MALAYALAM SIGN CIRCULAR VIRAMA",
direction="nsm",
+ indic="o",
linebreak="cm",
unicodeslot=0xD3C,
},
@@ -26729,6 +27797,7 @@ characters.data={
category="lo",
description="MALAYALAM SIGN AVAGRAHA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD3D,
},
@@ -26736,6 +27805,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN AA",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD3E,
},
@@ -26743,6 +27815,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN I",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD3F,
},
@@ -26750,6 +27825,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN II",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD40,
},
@@ -26757,6 +27835,9 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN U",
direction="nsm",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD41,
},
@@ -26764,6 +27845,9 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN UU",
direction="nsm",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD42,
},
@@ -26771,6 +27855,9 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN VOCALIC R",
direction="nsm",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD43,
},
@@ -26778,6 +27865,8 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN VOCALIC RR",
direction="nsm",
+ indic="d",
+ indicmark="r",
linebreak="cm",
unicodeslot=0xD44,
},
@@ -26785,6 +27874,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN E",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xD46,
},
@@ -26792,6 +27884,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN EE",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xD47,
},
@@ -26799,6 +27894,9 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN AI",
direction="l",
+ indic="d",
+ indicmark="l",
+ indicorder="bm",
linebreak="cm",
unicodeslot=0xD48,
},
@@ -26806,6 +27904,8 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN O",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xD46, 0xD3E },
unicodeslot=0xD4A,
@@ -26814,6 +27914,8 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN OO",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xD47, 0xD3E },
unicodeslot=0xD4B,
@@ -26822,6 +27924,8 @@ characters.data={
category="mc",
description="MALAYALAM VOWEL SIGN AU",
direction="l",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xD46, 0xD57 },
unicodeslot=0xD4C,
@@ -26831,6 +27935,8 @@ characters.data={
combining=0x9,
description="MALAYALAM SIGN VIRAMA",
direction="nsm",
+ indic="s",
+ indicclass="halant",
linebreak="cm",
synonyms={ "malayalam chandrakkala", "malayalam vowel half-u" },
unicodeslot=0xD4D,
@@ -26839,6 +27945,8 @@ characters.data={
category="lo",
description="MALAYALAM LETTER DOT REPH",
direction="l",
+ indic="o",
+ indicmark="t",
linebreak="al",
unicodeslot=0xD4E,
},
@@ -26846,6 +27954,7 @@ characters.data={
category="so",
description="MALAYALAM SIGN PARA",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD4F,
},
@@ -26853,6 +27962,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU M",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD54,
},
@@ -26860,6 +27970,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU Y",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD55,
},
@@ -26867,6 +27978,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU LLL",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD56,
},
@@ -26874,6 +27986,9 @@ characters.data={
category="mc",
description="MALAYALAM AU LENGTH MARK",
direction="l",
+ indic="d",
+ indicmark="r",
+ indicorder="ap",
linebreak="cm",
unicodeslot=0xD57,
},
@@ -26881,6 +27996,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD58,
},
@@ -26888,6 +28004,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE FORTIETH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD59,
},
@@ -26895,6 +28012,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION THREE EIGHTIETHS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD5A,
},
@@ -26902,6 +28020,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE TWENTIETH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD5B,
},
@@ -26909,6 +28028,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE TENTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD5C,
},
@@ -26916,6 +28036,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION THREE TWENTIETHS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD5D,
},
@@ -26923,6 +28044,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE FIFTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD5E,
},
@@ -26930,6 +28052,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER ARCHAIC II",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD5F,
},
@@ -26937,6 +28060,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER VOCALIC RR",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD60,
},
@@ -26944,6 +28068,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER VOCALIC LL",
direction="l",
+ indic="i",
linebreak="al",
unicodeslot=0xD61,
},
@@ -26951,6 +28076,8 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN VOCALIC L",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xD62,
},
@@ -26958,6 +28085,8 @@ characters.data={
category="mn",
description="MALAYALAM VOWEL SIGN VOCALIC LL",
direction="nsm",
+ indic="d",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xD63,
},
@@ -26965,6 +28094,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT ZERO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD66,
},
@@ -26972,6 +28102,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT ONE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD67,
},
@@ -26979,6 +28110,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT TWO",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD68,
},
@@ -26986,6 +28118,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT THREE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD69,
},
@@ -26993,6 +28126,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT FOUR",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6A,
},
@@ -27000,6 +28134,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT FIVE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6B,
},
@@ -27007,6 +28142,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT SIX",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6C,
},
@@ -27014,6 +28150,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT SEVEN",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6D,
},
@@ -27021,6 +28158,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT EIGHT",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6E,
},
@@ -27028,6 +28166,7 @@ characters.data={
category="nd",
description="MALAYALAM DIGIT NINE",
direction="l",
+ indic="o",
linebreak="nu",
unicodeslot=0xD6F,
},
@@ -27035,6 +28174,7 @@ characters.data={
category="no",
description="MALAYALAM NUMBER TEN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD70,
},
@@ -27042,6 +28182,7 @@ characters.data={
category="no",
description="MALAYALAM NUMBER ONE HUNDRED",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD71,
},
@@ -27049,6 +28190,7 @@ characters.data={
category="no",
description="MALAYALAM NUMBER ONE THOUSAND",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD72,
},
@@ -27056,6 +28198,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE QUARTER",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD73,
},
@@ -27063,6 +28206,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE HALF",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD74,
},
@@ -27070,6 +28214,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION THREE QUARTERS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD75,
},
@@ -27077,6 +28222,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE SIXTEENTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD76,
},
@@ -27084,6 +28230,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION ONE EIGHTH",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD77,
},
@@ -27091,6 +28238,7 @@ characters.data={
category="no",
description="MALAYALAM FRACTION THREE SIXTEENTHS",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD78,
},
@@ -27098,6 +28246,7 @@ characters.data={
category="so",
description="MALAYALAM DATE MARK",
direction="l",
+ indic="o",
linebreak="po",
unicodeslot=0xD79,
},
@@ -27105,6 +28254,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU NN",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7A,
},
@@ -27112,6 +28262,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU N",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7B,
},
@@ -27119,6 +28270,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU RR",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7C,
},
@@ -27126,6 +28278,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU L",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7D,
},
@@ -27133,6 +28286,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU LL",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7E,
},
@@ -27140,6 +28294,7 @@ characters.data={
category="lo",
description="MALAYALAM LETTER CHILLU K",
direction="l",
+ indic="o",
linebreak="al",
unicodeslot=0xD7F,
},
@@ -72295,6 +73450,7 @@ characters.data={
},
[0x25CC]={
adobename="dottedcircle",
+ contextname="dottedcircle",
category="so",
description="DOTTED CIRCLE",
direction="on",
@@ -117560,6 +118716,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT ZERO",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E0,
},
@@ -117568,6 +118726,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT ONE",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E1,
},
@@ -117576,6 +118736,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT TWO",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E2,
},
@@ -117584,6 +118746,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT THREE",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E3,
},
@@ -117592,6 +118756,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT FOUR",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E4,
},
@@ -117600,6 +118766,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT FIVE",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E5,
},
@@ -117608,6 +118776,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT SIX",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E6,
},
@@ -117616,6 +118786,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT SEVEN",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E7,
},
@@ -117624,6 +118796,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT EIGHT",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E8,
},
@@ -117632,6 +118806,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI DIGIT NINE",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8E9,
},
@@ -117640,6 +118816,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER A",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8EA,
},
@@ -117648,6 +118826,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER U",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8EB,
},
@@ -117656,6 +118836,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER KA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8EC,
},
@@ -117664,6 +118846,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER NA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8ED,
},
@@ -117672,6 +118856,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER PA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8EE,
},
@@ -117680,6 +118866,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER RA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8EF,
},
@@ -117688,6 +118876,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI LETTER VI",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8F0,
},
@@ -117696,6 +118886,8 @@ characters.data={
combining=0xE6,
description="COMBINING DEVANAGARI SIGN AVAGRAHA",
direction="nsm",
+ indic="m",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA8F1,
},
diff --git a/tex/context/base/mkiv/char-tex.lua b/tex/context/base/mkiv/char-tex.lua
index f123f0092..065152881 100644
--- a/tex/context/base/mkiv/char-tex.lua
+++ b/tex/context/base/mkiv/char-tex.lua
@@ -847,7 +847,7 @@ end
interfaces.implement {
name = "overloaduppercase",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(c,u)
overload(c,u,"uccode","uccodes")
end
@@ -855,7 +855,7 @@ interfaces.implement {
interfaces.implement {
name = "overloadlowercase",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(c,u)
overload(c,u,"lccode","lccodes")
end
diff --git a/tex/context/base/mkiv/char-utf.lua b/tex/context/base/mkiv/char-utf.lua
index 8f46ae98f..4dc7eba7a 100644
--- a/tex/context/base/mkiv/char-utf.lua
+++ b/tex/context/base/mkiv/char-utf.lua
@@ -269,7 +269,7 @@ if interfaces then -- eventually this goes to char-ctx.lua
interfaces.implement {
name = "addgrapheme",
actions = utffilters.addgrapheme,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
end
diff --git a/tex/context/base/mkiv/chem-str.lua b/tex/context/base/mkiv/chem-str.lua
index 1ad16564c..7581a61d1 100644
--- a/tex/context/base/mkiv/chem-str.lua
+++ b/tex/context/base/mkiv/chem-str.lua
@@ -808,7 +808,7 @@ implement {
implement {
name = "definechemical",
actions = chemistry.define,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
@@ -843,7 +843,7 @@ implement {
implement {
name = "chemicalcomponent",
actions = chemistry.component,
- arguments = { "string", "string", "string", "string" }
+ arguments = "4 strings",
}
-- todo: top / bottom
diff --git a/tex/context/base/mkiv/cldf-ini.lua b/tex/context/base/mkiv/cldf-ini.lua
index a2814877d..8cd6408d3 100644
--- a/tex/context/base/mkiv/cldf-ini.lua
+++ b/tex/context/base/mkiv/cldf-ini.lua
@@ -319,7 +319,43 @@ local interfacescanners = setmetatablenewindex(function(t,k,v)
rawset(t,k,v)
end)
+function interfaces.registerscanner(name,action,protected,public,call)
+ if storedscanners[name] then
+ -- report_cld("warning: scanner %a is already set",k)
+ -- os.exit()
+ -- \scan_ is already in the format
+ -- report_cld("using interface scanner: %s",k)
+ else
+ storedscanners[name] = true
+-- if protected then
+-- -- report_cld("installing expandable interface scanner: %s",k)
+-- if public then
+-- context("\\installprotectedctxscanner{%s}{interfaces.scanners.%s}",name,name)
+-- else
+-- context("\\installprotectedctxscanner{clf_%s}{interfaces.scanners.%s}",name,name)
+-- end
+-- else
+-- -- report_cld("installing protected interface scanner: %s",k)
+-- if public then
+-- context("\\installctxscanner{%s}{interfaces.scanners.%s}",name,name)
+-- else
+-- context("\\installctxscanner{clf_%s}{interfaces.scanners.%s}",name,name)
+-- end
+-- end
+ -- report_cld("installing interface scanner: %s",k)
+ context("\\install%sctxscanner%s{%s%s}{interfaces.scanners.%s}",
+ protected and "protected" or "",
+ call and "call" or "",
+ public and "" or "clf_",
+ name,
+ name
+ )
+ end
+ rawset(interfacescanners,name,action)
+end
+
interfaces.scanners = storage.mark(interfacescanners)
+interfaces._ = interfaces.scanners
context.functions = {
register = registerfunction,
@@ -633,6 +669,20 @@ end
local containseol = patterns.containseol
+local s_cldl_option_b = "[\\cldl"
+local s_cldl_option_f = "[\\cldl" -- add space (not needed)
+local s_cldl_option_e = "]"
+local s_cldl_option_s = "\\cldl"
+local s_cldl_argument_b = "{\\cldl"
+local s_cldl_argument_f = "{\\cldl "
+local s_cldl_argument_e = "}"
+
+-- local s_cldl_option_b = "["
+-- local s_cldl_option_f = "" -- add space (not needed)
+-- local s_cldl_option_s = ""
+-- local s_cldl_argument_b = "{"
+-- local s_cldl_argument_f = "{ "
+
local function writer(parent,command,...) -- already optimized before call
flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
local direct = false
@@ -699,8 +749,7 @@ local function writer(parent,command,...) -- already optimized before call
elseif tn == 1 then -- some 20% faster than the next loop
local tj = ti[1]
if type(tj) == "function" then
- flush(currentcatcodes,"[\\cldl",storefunction(tj),"]")
- -- flush(currentcatcodes,"[",storefunction(tj),"]")
+ flush(currentcatcodes,s_cldl_option_b,storefunction(tj),s_cldl_option_e)
else
flush(currentcatcodes,"[",tj,"]")
end
@@ -710,11 +759,9 @@ local function writer(parent,command,...) -- already optimized before call
local tj = ti[j]
if type(tj) == "function" then
if j == tn then
- flush(currentcatcodes,"\\cldl",storefunction(tj),"]")
- -- flush(currentcatcodes,"",storefunction(tj),"]")
+ flush(currentcatcodes,s_cldl_option_s,storefunction(tj),"]")
else
- flush(currentcatcodes,"\\cldl",storefunction(tj),",")
- -- flush(currentcatcodes,"",storefunction(tj),",")
+ flush(currentcatcodes,s_cldl_option_s,storefunction(tj),",")
end
else
if j == tn then
@@ -726,8 +773,8 @@ local function writer(parent,command,...) -- already optimized before call
end
end
elseif typ == "function" then
- flush(currentcatcodes,"{\\cldl ",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
- -- flush(currentcatcodes,"{",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
+ -- todo: ctx|prt|texcatcodes
+ flush(currentcatcodes,s_cldl_argument_f,storefunction(ti),s_cldl_argument_e)
elseif typ == "boolean" then
if ti then
flushdirect(currentcatcodes,"\r")
@@ -737,8 +784,7 @@ local function writer(parent,command,...) -- already optimized before call
elseif typ == "thread" then
report_context("coroutines not supported as we cannot yield across boundaries")
elseif isnode(ti) then -- slow
- flush(currentcatcodes,"{\\cldl",storenode(ti),"}")
- -- flush(currentcatcodes,"{",storenode(ti),"}")
+ flush(currentcatcodes,s_cldl_argument_b,storenode(ti),s_cldl_argument_e)
else
report_context("error: %a gets a weird argument %a",command,ti)
end
@@ -762,11 +808,9 @@ end
-- if tp == "string" or tp == "number"then
-- flush(prtcatcodes,"{",ti,"}")
-- elseif tp == "function" then
--- flush(prtcatcodes,"{\\cldl ",storefunction(ti),"}")
--- -- flush(currentcatcodes,"{",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
+-- flush(prtcatcodes,s_cldl_argument_f,storefunction(ti),s_cldl_argument_e)
-- elseif isnode(ti) then
--- flush(prtcatcodes,"{\\cldl",storenode(ti),"}")
--- -- flush(currentcatcodes,"{",storenode(ti),"}")
+-- flush(prtcatcodes,s_cldl_argument_b,storenode(ti),s_cldl_argument_e)
-- else
-- report_context("fatal error: prt %a gets a weird argument %a",command,ti)
-- end
diff --git a/tex/context/base/mkiv/cldf-scn.lua b/tex/context/base/mkiv/cldf-scn.lua
index beeb8c8c9..ccf1f01c6 100644
--- a/tex/context/base/mkiv/cldf-scn.lua
+++ b/tex/context/base/mkiv/cldf-scn.lua
@@ -22,6 +22,7 @@ local f_command = formatters["local action = tokens._action\n%\nt\nreturn func
local interfaces = interfaces
local commands = commands
local scanners = interfaces.scanners
+local register = interfaces.registerscanner
local compile = tokens.compile or function() end
@@ -71,7 +72,8 @@ function interfaces.implement(specification)
if scanners[name] and not specification.overload then
report("warning: 'scanners.%s' is redefined",name)
end
- scanners[name] = scanner
+-- scanners[name] = scanner
+ register(name,scanner,specification.protected,specification.public,specification.call)
if private then
return
end
diff --git a/tex/context/base/mkiv/colo-ini.lua b/tex/context/base/mkiv/colo-ini.lua
index ca00ae72f..921612b0f 100644
--- a/tex/context/base/mkiv/colo-ini.lua
+++ b/tex/context/base/mkiv/colo-ini.lua
@@ -1058,12 +1058,12 @@ implement {
implement {
name = "synccolorclone",
actions = synccolorclone,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "setcolormodel",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(model,weight)
texsetattribute(a_colormodel,setcolormodel(model,weight))
end
@@ -1072,7 +1072,7 @@ implement {
implement {
name = "setpagecolormodel",
actions = colors.setpagecolormodel,
- arguments = { "string" },
+ arguments = "string",
}
implement {
@@ -1110,13 +1110,13 @@ implement {
actions = function(main)
colors.main = main
end,
- arguments = { "integer" }
+ arguments = "integer"
}
implement {
name = "definetransparency",
actions = definetransparency,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index aef280dc3..c705c3afc 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.03.16 22:20}
+\newcontextversion{2018.04.02 15:43}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 1ff75e083..2adc6b3ee 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -42,7 +42,7 @@
%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.03.16 22:20}
+\edef\contextversion{2018.04.02 15:43}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/core-con.lua b/tex/context/base/mkiv/core-con.lua
index edba24f10..87b4c063e 100644
--- a/tex/context/base/mkiv/core-con.lua
+++ b/tex/context/base/mkiv/core-con.lua
@@ -644,7 +644,7 @@ end
implement {
name = "defineconversion",
actions = converters.define,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -685,7 +685,7 @@ end
implement {
name = "doifelseconverter",
actions = { valid, commands.doifelse },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -1398,7 +1398,7 @@ end
implement {
name = "currentdate",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(pattern,default,language)
currentdate(
pattern == "" and default or pattern,
diff --git a/tex/context/base/mkiv/core-dat.lua b/tex/context/base/mkiv/core-dat.lua
index c3b00a7c0..fa4d089d0 100644
--- a/tex/context/base/mkiv/core-dat.lua
+++ b/tex/context/base/mkiv/core-dat.lua
@@ -192,9 +192,9 @@ implement {
}
implement {
- name = "datasetvariable",
- actions = datasetvariable,
- arguments = { "string", "string", "string" }
+ name = "datasetvariable",
+ actions = datasetvariable,
+ arguments = "3 strings",
}
--[[ldx--
@@ -305,11 +305,11 @@ implement {
implement {
name = "pagestaterealpage",
actions = pagestaterealpage,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "setpagestaterealpageno",
actions = setpagestaterealpageno,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/core-sys.lua b/tex/context/base/mkiv/core-sys.lua
index 523b47298..26229235b 100644
--- a/tex/context/base/mkiv/core-sys.lua
+++ b/tex/context/base/mkiv/core-sys.lua
@@ -84,7 +84,7 @@ end)
implement {
name = "systemlog",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(whereto,category,text)
logs.system(whereto,"context",tex.jobname,category,text)
end,
diff --git a/tex/context/base/mkiv/core-two.lua b/tex/context/base/mkiv/core-two.lua
index 5192677b2..1e59004be 100644
--- a/tex/context/base/mkiv/core-two.lua
+++ b/tex/context/base/mkiv/core-two.lua
@@ -150,7 +150,7 @@ local implement = interfaces.implement
implement { name = "gettwopassdata", actions = { get , context }, arguments = "string" }
implement { name = "getfirsttwopassdata",actions = { first, context }, arguments = "string" }
implement { name = "getlasttwopassdata", actions = { last , context }, arguments = "string" }
-implement { name = "findtwopassdata", actions = { find , context }, arguments = { "string", "string" } }
+implement { name = "findtwopassdata", actions = { find , context }, arguments = "2 strings" }
implement { name = "gettwopassdatalist", actions = { list , context }, arguments = "string" }
implement { name = "counttwopassdata", actions = { count, context }, arguments = "string" }
implement { name = "checktwopassdata", actions = { check, context }, arguments = "string" }
@@ -164,17 +164,17 @@ implement {
implement {
name = "savetwopassdata",
actions = jobpasses.save,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "savetaggedtwopassdata",
actions = jobpasses.savetagged,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
name = "doifelseintwopassdata",
actions = { inlist, commands.doifelse },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/core-uti.lua b/tex/context/base/mkiv/core-uti.lua
index fda66ed73..b281b81a4 100644
--- a/tex/context/base/mkiv/core-uti.lua
+++ b/tex/context/base/mkiv/core-uti.lua
@@ -384,15 +384,37 @@ statistics.register("jobdata time",function()
end
end)
-statistics.register("callbacks", function()
- local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0
- local pages = texgetcount('realpageno') - 1
- if pages > 1 then
- return format("direct: %s, indirect: %s, total: %s (%i per page)", total-indirect, indirect, total, total/pages)
- else
- return format("direct: %s, indirect: %s, total: %s", total-indirect, indirect, total)
+-- statistics.register("callbacks", function()
+-- local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0
+-- local pages = texgetcount('realpageno') - 1
+-- if pages > 1 then
+-- return format("direct: %s, indirect: %s, total: %s (%i per page)", total-indirect, indirect, total, total/pages)
+-- else
+-- return format("direct: %s, indirect: %s, total: %s", total-indirect, indirect, total)
+-- end
+-- end)
+
+function statistics.callbacks()
+ local c_internal = status.callbacks or 0
+ local c_file = status.indirect_callbacks or 0
+ local c_direct = status.direct_callbacks or 0
+ local c_late = status.late_callbacks or 0
+ local c_function = status.function_callbacks or 0
+ local c_total = c_internal + c_file + c_direct + c_late + c_function
+ local n_pages = texgetcount('realpageno') - 1
+ local c_average = n_pages > 0 and math.round(c_total/n_pages) or 0
+ local s_result = format (
+ c_average > 0 and "internal: %s, file: %s, direct: %s, late: %s, function %s, total: %s (%s per page)"
+ or "internal: %s, file: %s, direct: %s, late: %s, function %s, total: %s",
+ c_internal, c_file, c_direct, c_late, c_function, c_total, c_average
+ )
+ statistics.callbacks = function()
+ return s_result
end
-end)
+ return s_result
+end
+
+statistics.register("callbacks", statistics.callbacks)
statistics.register("randomizer", function()
if rmethod and rvalue then
@@ -436,7 +458,7 @@ end
implement {
name = "savevariable",
actions = job.variables.save,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/file-job.lua b/tex/context/base/mkiv/file-job.lua
index af15eff56..dbf6da9b4 100644
--- a/tex/context/base/mkiv/file-job.lua
+++ b/tex/context/base/mkiv/file-job.lua
@@ -160,7 +160,7 @@ implement {
implement {
name = "usezipfile",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(name,tree)
if tree and tree ~= "" then
resolvers.usezipfile(formatters["zip:///%s?tree=%s"](name,tree))
@@ -923,13 +923,13 @@ end
implement {
name = "setdocumentargument",
actions = document.setargument,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
name = "setdocumentdefaultargument",
actions = document.setdefaultargument,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
@@ -941,7 +941,7 @@ implement {
implement {
name = "getdocumentargument",
actions = { document.getargument, context },
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
diff --git a/tex/context/base/mkiv/file-res.lua b/tex/context/base/mkiv/file-res.lua
index cf76d2d8b..16afae4c7 100644
--- a/tex/context/base/mkiv/file-res.lua
+++ b/tex/context/base/mkiv/file-res.lua
@@ -161,7 +161,7 @@ local implement = interfaces.implement
implement {
name = "getreadfilename",
actions = { getreadfilename, context },
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
diff --git a/tex/context/base/mkiv/file-syn.lua b/tex/context/base/mkiv/file-syn.lua
index 7b000f9ad..c1c25bab3 100644
--- a/tex/context/base/mkiv/file-syn.lua
+++ b/tex/context/base/mkiv/file-syn.lua
@@ -60,11 +60,11 @@ implement {
implement {
name = "definefilesynonym",
actions = environment.definefilesynonym,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
name = "definefilefallback",
actions = environment,definefilefallback,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
diff --git a/tex/context/base/mkiv/font-cft.lua b/tex/context/base/mkiv/font-cft.lua
index 30221cbaa..83227ca4a 100644
--- a/tex/context/base/mkiv/font-cft.lua
+++ b/tex/context/base/mkiv/font-cft.lua
@@ -266,6 +266,8 @@ do
},
slantfactor = t_float,
extendfactor = t_float,
+ mode = t_cardinal,
+ width = t_scale,
factor = t_float,
hfactor = t_float,
vfactor = t_float,
diff --git a/tex/context/base/mkiv/font-col.lua b/tex/context/base/mkiv/font-col.lua
index 8d3152df4..7bbaf31cb 100644
--- a/tex/context/base/mkiv/font-col.lua
+++ b/tex/context/base/mkiv/font-col.lua
@@ -363,13 +363,13 @@ end
implement {
name = "fontcollectiondefine",
actions = collections.define,
- arguments = { "string", "string", "string", "string" }
+ arguments = "4 strings",
}
implement {
name = "fontcollectionreset",
actions = collections.reset,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/font-con.lua b/tex/context/base/mkiv/font-con.lua
index 9cffa5927..add646da1 100644
--- a/tex/context/base/mkiv/font-con.lua
+++ b/tex/context/base/mkiv/font-con.lua
@@ -492,6 +492,15 @@ function constructors.scale(tfmdata,specification)
else
target.slant = 0
end
+ -- effects
+ local mode = parameters.mode or 0
+ if mode ~= 0 then
+ target.mode = mode
+ end
+ local width = parameters.width or 0
+ if width ~= 0 then
+ target.width = width
+ end
--
targetparameters.factor = delta
targetparameters.hfactor = hdelta
@@ -499,6 +508,8 @@ function constructors.scale(tfmdata,specification)
targetparameters.size = scaledpoints
targetparameters.units = units
targetparameters.scaledpoints = askedscaledpoints
+ targetparameters.mode = mode
+ targetparameters.width = width
--
local isvirtual = properties.virtualized or tfmdata.type == "virtual"
local hasquality = parameters.expansion or parameters.protrusion
@@ -875,12 +886,15 @@ function constructors.scale(tfmdata,specification)
--
constructors.aftercopyingcharacters(target,tfmdata)
--
- constructors.trytosharefont(target,tfmdata)
+ constructors.trytosharefont(target,tfmdata)
--
-- catch inconsistencies
--
local vfonts = target.fonts
- if isvirtual then
+-- if isvirtual then
+if isvirtual or target.type == "virtual" or properties.virtualized then
+ properties.virtualized = true
+target.type = "virtual"
if not vfonts or #vfonts == 0 then
target.fonts = { { id = 0 } }
end
@@ -925,6 +939,14 @@ function constructors.finalize(tfmdata)
parameters.size = tfmdata.size
end
--
+ if not parameters.mode then
+ parameters.mode = 0
+ end
+ --
+ if not parameters.width then
+ parameters.width = 0
+ end
+ --
if not parameters.extendfactor then
parameters.extendfactor = tfmdata.extend or 0
end
@@ -1023,6 +1045,8 @@ function constructors.finalize(tfmdata)
tfmdata.step = nil
tfmdata.extend = nil
tfmdata.slant = nil
+ tfmdata.mode = nil
+ tfmdata.width = nil
tfmdata.units = nil
tfmdata.units_per_em = nil
--
diff --git a/tex/context/base/mkiv/font-ctx.lua b/tex/context/base/mkiv/font-ctx.lua
index bc562d0d0..87885f64f 100644
--- a/tex/context/base/mkiv/font-ctx.lua
+++ b/tex/context/base/mkiv/font-ctx.lua
@@ -2249,7 +2249,7 @@ end
implement {
name = "definetypeface",
actions = fonts.definetypeface,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
function fonts.current() -- todo: also handle name
@@ -2442,13 +2442,13 @@ do
implement {
name = "definefontfeature",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = presetcontext
}
implement {
name = "adaptfontfeature",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = adaptcontext
}
@@ -2919,7 +2919,7 @@ do
-- implement {
-- name = "definefontcolorpalette",
- -- arguments = { "string", "string" },
+ -- arguments = "2 strings",
-- actions = function(name,set)
-- set = settings_to_array(set)
-- for i=1,#set do
@@ -2938,7 +2938,7 @@ do
implement {
name = "definefontcolorpalette",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(name,set)
otf.registerpalette(name,settings_to_array(set))
end
diff --git a/tex/context/base/mkiv/font-ext.lua b/tex/context/base/mkiv/font-ext.lua
index f9db5e0d9..d873dccd4 100644
--- a/tex/context/base/mkiv/font-ext.lua
+++ b/tex/context/base/mkiv/font-ext.lua
@@ -30,9 +30,10 @@ of neutral.
local handlers = fonts.handlers
local hashes = fonts.hashes
local otf = handlers.otf
+local afm = handlers.afm
-local registerotffeature = handlers.otf.features.register
-local registerafmfeature = handlers.afm.features.register
+local registerotffeature = otf.features.register
+local registerafmfeature = afm.features.register
local fontdata = hashes.identifiers
local fontproperties = hashes.properties
@@ -181,7 +182,7 @@ fonts.goodies.register("expansions", function(...) return fonts.goodies.report(
implement {
name = "setupfontexpansion",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(class,settings) getparameters(classes,class,'preset',settings) end
}
@@ -492,7 +493,7 @@ fonts.goodies.register("protrusions", function(...) return fonts.goodies.report(
implement {
name = "setupfontprotrusion",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(class,settings) getparameters(classes,class,'preset',settings) end
}
@@ -671,15 +672,15 @@ local function manipulatedimensions(tfmdata,key,value)
local width = newwidth or oldwidth or 0
local height = newheight or oldheight or 0
local depth = newdepth or olddepth or 0
- if oldwidth ~= width then
- -- Defining the tables in one step is more efficient
- -- than adding fields later.
+ if oldwidth ~= width or oldheight ~= height or olddepth ~= depth then
local private = getprivate(tfmdata)
+ local newslot = { "slot", 1, private } -- { "slot", 0, private }
local new_c
- local commands = {
+ local commands = oldwidth ~= width and {
{ "right", (width - oldwidth) / 2 },
- { "slot", 1, private },
- -- { "slot", 0, private },
+ newslot,
+ } or {
+ newslot,
}
if height > 0 then
if depth > 0 then
@@ -718,19 +719,19 @@ local function manipulatedimensions(tfmdata,key,value)
for k, v in next, additions do
characters[k] = v
end
- elseif height > 0 and depth > 0 then
- for unicode, old_c in next, characters do
- old_c.height = height
- old_c.depth = depth
- end
- elseif height > 0 then
- for unicode, old_c in next, characters do
- old_c.height = height
- end
- elseif depth > 0 then
- for unicode, old_c in next, characters do
- old_c.depth = depth
- end
+ -- elseif height > 0 and depth > 0 then
+ -- for unicode, old_c in next, characters do
+ -- old_c.height = height
+ -- old_c.depth = depth
+ -- end
+ -- elseif height > 0 then
+ -- for unicode, old_c in next, characters do
+ -- old_c.height = height
+ -- end
+ -- elseif depth > 0 then
+ -- for unicode, old_c in next, characters do
+ -- old_c.depth = depth
+ -- end
end
end
end
@@ -1706,3 +1707,150 @@ do
}
end
+
+-- maybe useful
+
+local function initializeoutline(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ else
+ value = tonumber(value) or 0
+ end
+ if value then
+ value = value * 1000
+ end
+ tfmdata.parameters.mode = 1
+ tfmdata.parameters.width = value
+end
+
+local outline_specification = {
+ name = "outline",
+ description = "outline glyphs",
+ initializers = {
+ base = initializeoutline,
+ node = initializeoutline,
+ }
+}
+
+registerotffeature(outline_specification)
+registerafmfeature(outline_specification)
+
+-- definitely ugly
+
+local report_effect = logs.reporter("fonts","effect")
+local trace_effect = false
+
+trackers.register("fonts.effect", function(v) trace_effect = v end)
+
+local effects = {
+ inner = 0,
+ normal = 0,
+ outer = 1,
+ outline = 1,
+ both = 2,
+ hidden = 3,
+}
+
+local function initializeeffect(tfmdata,value)
+ local spec
+ if type(value) == "number" then
+ spec = { width = value }
+ else
+ spec = settings_to_hash(value)
+ end
+ local effect = spec.effect or "both"
+ local width = tonumber(spec.width) or 0
+ local mode = effects[effect]
+ if not mode then
+ report_effect("invalid effect %a",effect)
+ elseif width == 0 and mode == 0 then
+ report_effect("invalid width %a for effect %a",width,effect)
+ else
+ local parameters = tfmdata.parameters
+ local properties = tfmdata.properties
+ parameters.mode = mode
+ parameters.width = width * 1000
+ local factor = tonumber(spec.factor) or 0
+ local hfactor = tonumber(spec.vfactor) or factor
+ local vfactor = tonumber(spec.hfactor) or factor
+ local delta = tonumber(spec.delta) or 1
+ local wdelta = tonumber(spec.wdelta) or delta
+ local hdelta = tonumber(spec.hdelta) or delta
+ local ddelta = tonumber(spec.ddelta) or hdelta
+ properties.effect = {
+ effect = effect,
+ width = width,
+ factor = factor,
+ hfactor = hfactor,
+ vfactor = vfactor,
+ wdelta = wdelta,
+ hdelta = hdelta,
+ ddelta = ddelta,
+ }
+ end
+end
+
+local function manipulateeffect(tfmdata)
+ local effect = tfmdata.properties.effect
+ if effect then
+ local characters = tfmdata.characters
+ local parameters = tfmdata.parameters
+ local multiplier = effect.width * 100
+ local wdelta = effect.wdelta * parameters.hfactor * multiplier
+ local hdelta = effect.hdelta * parameters.vfactor * multiplier
+ local ddelta = effect.ddelta * parameters.vfactor * multiplier
+ local hshift = wdelta / 2
+ local factor = (1 + effect.factor) * parameters.factor
+ local hfactor = (1 + effect.hfactor) * parameters.hfactor
+ local vfactor = (1 + effect.vfactor) * parameters.vfactor
+ for unicode, old_c in next, characters do
+ local oldwidth = old_c.width
+ local oldheight = old_c.height
+ local olddepth = old_c.depth
+ if oldwidth and oldwidth > 0 then
+ old_c.width = oldwidth + wdelta
+ old_c.commands = {
+ { "right", hshift },
+ { "char", unicode },
+ }
+ end
+ if oldheight and oldheight > 0 then
+ old_c.height = oldheight + hdelta
+ end
+ if olddepth and olddepth > 0 then
+ old_c.depth = olddepth + ddelta
+ end
+ end
+ parameters.factor = factor
+ parameters.hfactor = hfactor
+ parameters.vfactor = vfactor
+ if trace_effect then
+ report_effect("applying effect")
+ report_effect(" effect : %s", effect.effect)
+ report_effect(" width : %s => %s", effect.width, multiplier)
+ report_effect(" factor : %s => %s", effect.factor, factor )
+ report_effect(" hfactor : %s => %s", effect.hfactor,hfactor)
+ report_effect(" vfactor : %s => %s", effect.vfactor,vfactor)
+ report_effect(" wdelta : %s => %s", effect.wdelta, wdelta)
+ report_effect(" hdelta : %s => %s", effect.hdelta, hdelta)
+ report_effect(" ddelta : %s => %s", effect.ddelta, ddelta)
+ end
+ end
+end
+
+local effect_specification = {
+ name = "effect",
+ description = "apply effects to glyphs",
+ initializers = {
+ base = initializeeffect,
+ node = initializeeffect,
+ },
+ manipulators = {
+ base = manipulateeffect,
+ node = manipulateeffect,
+ },
+}
+
+registerotffeature(effect_specification)
+registerafmfeature(effect_specification)
diff --git a/tex/context/base/mkiv/font-map.lua b/tex/context/base/mkiv/font-map.lua
index d4a1b4594..66cf2db39 100644
--- a/tex/context/base/mkiv/font-map.lua
+++ b/tex/context/base/mkiv/font-map.lua
@@ -192,8 +192,8 @@ local function tounicode(unicode)
end
-- no real gain on runs
---
--- local hash = setmetatableindex(function(t,u)
+
+-- local hash = table.setmetatableindex(function(t,u)
-- local v
-- if u < 0xD7FF or (u > 0xDFFF and u <= 0xFFFF) then
-- v = f_single(u)
@@ -209,7 +209,7 @@ end
-- if type(unicode) == "table" then
-- local t = { }
-- for l=1,#unicode do
--- t[l] = hash[u]
+-- t[l] = hash[unicode[l]]
-- end
-- return concat(t)
-- else
diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua
index 04fbf88f5..9f99fd57f 100644
--- a/tex/context/base/mkiv/font-osd.lua
+++ b/tex/context/base/mkiv/font-osd.lua
@@ -8,64 +8,80 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag
-- A few remarks:
--
--- This code is a partial rewrite of the code that deals with devanagari. The data and logic
--- is by Kai Eigner and based based on Microsoft's OpenType specifications for specific
--- scripts, but with a few improvements. More information can be found at:
+-- This code is a partial rewrite of the code that deals with devanagari. The data
+-- and logic is by Kai Eigner and based based on Microsoft's OpenType specifications
+-- for specific scripts, but with a few improvements. More information can be found
+-- at:
--
-- deva: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/introO.mspx
-- dev2: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/intro.mspx
--
--- Rajeesh Nambiar provided patches for the malayalam variant. Thanks to feedback from
--- the mailing list some aspects could be improved.
+-- Rajeesh Nambiar provided patches for the malayalam variant. Thanks to feedback
+-- from the mailing list some aspects could be improved.
--
--- As I touched nearly all code, reshuffled it, optimized a lot, etc. etc. (imagine how
--- much can get messed up in over a week work) it could be that I introduced bugs. There
--- is more to gain (esp in the functions applied to a range) but I'll do that when
--- everything works as expected. Kai's original code is kept in font-odk.lua as a reference
--- so blame me (HH) for bugs. (We no longer ship that file as the code below has diverted
--- too much and in the meantime has more than doubled in size.)
+-- As I touched nearly all code, reshuffled it, optimized a lot, etc. etc. (imagine
+-- how much can get messed up in over a week work) it could be that I introduced
+-- bugs. There is more to gain (esp in the functions applied to a range) but I'll do
+-- that when everything works as expected. Kai's original code is kept in
+-- font-odk.lua as a reference so blame me (HH) for bugs. (We no longer ship that
+-- file as the code below has diverted too much and in the meantime has more than
+-- doubled in size.)
--
--- Interesting is that Kai managed to write this on top of the existing otf handler. Only a
--- few extensions were needed, like a few more analyzing states and dealing with changed
--- head nodes in the core scanner as that only happens here. There's a lot going on here
--- and it's only because I touched nearly all code that I got a bit of a picture of what
--- happens. For in-depth knowledge one needs to consult Kai.
+-- Interesting is that Kai managed to write this on top of the existing otf handler.
+-- Only a few extensions were needed, like a few more analyzing states and dealing
+-- with changed head nodes in the core scanner as that only happens here. There's a
+-- lot going on here and it's only because I touched nearly all code that I got a
+-- bit of a picture of what happens. For in-depth knowledge one needs to consult
+-- Kai.
--
--- The rewrite mostly deals with efficiency, both in terms of speed and code. We also made
--- sure that it suits generic use as well as use in ConTeXt. I removed some buglets but can
--- as well have messed up the logic by doing this. For this we keep the original around
--- as that serves as reference. Due to the lots of reshuffling glyphs quite some leaks
--- occur(red) but once I'm satisfied with the rewrite I'll weed them. I also integrated
--- initialization etc into the regular mechanisms.
+-- The rewrite mostly deals with efficiency, both in terms of speed and code. We
+-- also made sure that it suits generic use as well as use in ConTeXt. I removed
+-- some buglets but can as well have messed up the logic by doing this. For this we
+-- keep the original around as that serves as reference. Due to the lots of
+-- reshuffling glyphs quite some leaks occur(red) but once I'm satisfied with the
+-- rewrite I'll weed them. I also integrated initialization etc into the regular
+-- mechanisms.
--
--- In the meantime, we're down from 25.5-3.5=22 seconds to 17.7-3.5=14.2 seconds for a 100
--- page sample (mid 2012) with both variants so it's worth the effort. Some more speedup is
--- to be expected. Due to the method chosen it will never be real fast. If I ever become a
--- power user I'll have a go at some further speed up. I will rename some functions (and
--- features) once we don't need to check the original code. We now use a special subset
--- sequence for use inside the analyzer (after all we could can store this in the dataset
--- and save redundant analysis).
+-- In the meantime, we're down from 25.5-3.5=22 seconds to 17.7-3.5=14.2 seconds for
+-- a 100 page sample (mid 2012) with both variants so it's worth the effort. Some
+-- more speedup is to be expected. Due to the method chosen it will never be real
+-- fast. If I ever become a power user I'll have a go at some further speed up. I
+-- will rename some functions (and features) once we don't need to check the
+-- original code. We now use a special subset sequence for use inside the analyzer
+-- (after all we could can store this in the dataset and save redundant analysis).
--
--- I might go for an array approach with respect to attributes (and reshuffling). Easier.
+-- By now we have yet another incremental improved version. In the end I might
+-- rewrite the code.
--
--- Some data will move to char-def.lua (some day).
---
--- By now we have yet another incremental improved version. In the end I might rewrite the
--- code.
-
-- Hans Hagen, PRAGMA-ADE, Hasselt NL
---
--- We could have c_nukta, c_halant, c_ra is we know that they are never used mixed within
--- one script .. yes or no?
+
+-- Todo:
--
-- Matras: according to Microsoft typography specifications "up to one of each type:
-- pre-, above-, below- or post- base", but that does not seem to be right. It could
-- become an option.
+--
+-- Resources:
+--
+-- The tables that we had here are now generated from char-def.lua or in the case of
+-- generic usage loaded from luatex-basics-chr.lua. Still a couple of entries need
+-- to be added to char-def.lua but finally I moved the indic specific tables there.
+-- For generic usage one can create the relevant resources by running:
+--
+-- context luatex-basics-prepare.tex
+--
+-- and an overview with:
+--
+-- context --global s-fonts-basics.mkiv
+--
+-- For now we have defined: bengali, devanagari, gujarati, gurmukhi, kannada,
+-- malayalam, oriya, tamil and tolugu but not all are checked. Also, some of the
+-- code below might need to be adapted to the extra scripts.
local insert, imerge, copy = table.insert, table.imerge, table.copy
local next, type = next, type
-local report_devanagari = logs.reporter("otf","devanagari")
+local report = logs.reporter("otf","devanagari")
fonts = fonts or { }
fonts.analyzers = fonts.analyzers or { }
@@ -115,6 +131,9 @@ local a_state = attributes.private('state')
local a_syllabe = attributes.private('syllabe')
local dotted_circle = 0x25CC
+local c_nbsp = 0x00A0
+local c_zwnj = 0x200C
+local c_zwj = 0x200D
local states = fonts.analyzers.states -- not features
@@ -151,309 +170,199 @@ local function processcharacters(head,font)
return tonut(xprocesscharacters(tonode(head))) -- can be more efficient in context, just direct call
end
--- local fontprocesses = fonts.hashes.processes
+-- to be tested:
--
--- function processcharacters(head,font)
--- local processors = fontprocesses[font]
--- for i=1,#processors do
--- head = processors[i](head,font,0)
+-- local processcharacters = nil
+--
+-- if context then
+-- local fontprocesses = fonts.hashes.processes
+-- function processcharacters(head,font)
+-- local processors = fontprocesses[font]
+-- for i=1,#processors do
+-- head = processors[i](head,font,0)
+-- end
+-- return head, true
+-- end
+-- else
+-- function processcharacters(head,font)
+-- local processors = fontdata[font].shared.processes
+-- for i=1,#processors do
+-- head = processors[i](head,font,0)
+-- end
+-- return head, true
-- end
--- return head, true
-- end
--- In due time there will be entries here for scripts like Bengali, Gujarati,
--- Gurmukhi, Kannada, Malayalam, Oriya, Tamil, Telugu. Feel free to provide the
--- code points.
-
-- We can assume that script are not mixed in the source but if that is the case
-- we might need to have consonants etc per script and initialize a local table
--- pointing to the right one.
+-- pointing to the right one. But not now.
--- new, to be checked:
---
--- U+00978 : DEVANAGARI LETTER MARWARI DDA
--- U+00980 : BENGALI ANJI
--- U+00C00 : TELUGU SIGN COMBINING CANDRABINDU ABOVE
--- U+00C34 : TELUGU LETTER LLLA
--- U+00C81 : KANNADA SIGN CANDRABINDU
--- U+00D01 : MALAYALAM SIGN CANDRABINDU
--- U+00DE6 : SINHALA LITH DIGIT ZERO
--- U+00DE7 : SINHALA LITH DIGIT ONE
--- U+00DE8 : SINHALA LITH DIGIT TWO
--- U+00DE9 : SINHALA LITH DIGIT THREE
--- U+00DEA : SINHALA LITH DIGIT FOUR
--- U+00DEB : SINHALA LITH DIGIT FIVE
--- U+00DEC : SINHALA LITH DIGIT SIX
--- U+00DED : SINHALA LITH DIGIT SEVEN
--- U+00DEE : SINHALA LITH DIGIT EIGHT
--- U+00DEF : SINHALA LITH DIGIT NINE
-
-local consonant = {
- -- devanagari
- [0x0915] = true, [0x0916] = true, [0x0917] = true, [0x0918] = true,
- [0x0919] = true, [0x091A] = true, [0x091B] = true, [0x091C] = true,
- [0x091D] = true, [0x091E] = true, [0x091F] = true, [0x0920] = true,
- [0x0921] = true, [0x0922] = true, [0x0923] = true, [0x0924] = true,
- [0x0925] = true, [0x0926] = true, [0x0927] = true, [0x0928] = true,
- [0x0929] = true, [0x092A] = true, [0x092B] = true, [0x092C] = true,
- [0x092D] = true, [0x092E] = true, [0x092F] = true, [0x0930] = true,
- [0x0931] = true, [0x0932] = true, [0x0933] = true, [0x0934] = true,
- [0x0935] = true, [0x0936] = true, [0x0937] = true, [0x0938] = true,
- [0x0939] = true, [0x0958] = true, [0x0959] = true, [0x095A] = true,
- [0x095B] = true, [0x095C] = true, [0x095D] = true, [0x095E] = true,
- [0x095F] = true, [0x0979] = true, [0x097A] = true,
- -- kannada
- [0x0C95] = true, [0x0C96] = true, [0x0C97] = true, [0x0C98] = true,
- [0x0C99] = true, [0x0C9A] = true, [0x0C9B] = true, [0x0C9C] = true,
- [0x0C9D] = true, [0x0C9E] = true, [0x0C9F] = true, [0x0CA0] = true,
- [0x0CA1] = true, [0x0CA2] = true, [0x0CA3] = true, [0x0CA4] = true,
- [0x0CA5] = true, [0x0CA6] = true, [0x0CA7] = true, [0x0CA8] = true,
- [0x0CA9] = true, [0x0CAA] = true, [0x0CAB] = true, [0x0CAC] = true,
- [0x0CAD] = true, [0x0CAE] = true, [0x0CAF] = true, [0x0CB0] = true,
- [0x0CB1] = true, [0x0CB2] = true, [0x0CB3] = true, [0x0CB4] = true,
- [0x0CB5] = true, [0x0CB6] = true, [0x0CB7] = true, [0x0CB8] = true,
- [0x0CB9] = true,
- [0x0CDE] = true, -- obsolete
- -- malayalam
- [0x0D15] = true, [0x0D16] = true, [0x0D17] = true, [0x0D18] = true,
- [0x0D19] = true, [0x0D1A] = true, [0x0D1B] = true, [0x0D1C] = true,
- [0x0D1D] = true, [0x0D1E] = true, [0x0D1F] = true, [0x0D20] = true,
- [0x0D21] = true, [0x0D22] = true, [0x0D23] = true, [0x0D24] = true,
- [0x0D25] = true, [0x0D26] = true, [0x0D27] = true, [0x0D28] = true,
- [0x0D29] = true, [0x0D2A] = true, [0x0D2B] = true, [0x0D2C] = true,
- [0x0D2D] = true, [0x0D2E] = true, [0x0D2F] = true, [0x0D30] = true,
- [0x0D31] = true, [0x0D32] = true, [0x0D33] = true, [0x0D34] = true,
- [0x0D35] = true, [0x0D36] = true, [0x0D37] = true, [0x0D38] = true,
- [0x0D39] = true, [0x0D3A] = true,
-}
+local indicgroups = characters and characters.indicgroups
-local independent_vowel = {
- -- devanagari
- [0x0904] = true, [0x0905] = true, [0x0906] = true, [0x0907] = true,
- [0x0908] = true, [0x0909] = true, [0x090A] = true, [0x090B] = true,
- [0x090C] = true, [0x090D] = true, [0x090E] = true, [0x090F] = true,
- [0x0910] = true, [0x0911] = true, [0x0912] = true, [0x0913] = true,
- [0x0914] = true, [0x0960] = true, [0x0961] = true, [0x0972] = true,
- [0x0973] = true, [0x0974] = true, [0x0975] = true, [0x0976] = true,
- [0x0977] = true,
- -- kannada
- [0x0C85] = true, [0x0C86] = true, [0x0C87] = true, [0x0C88] = true,
- [0x0C89] = true, [0x0C8A] = true, [0x0C8B] = true, [0x0C8C] = true,
- [0x0C8D] = true, [0x0C8E] = true, [0x0C8F] = true, [0x0C90] = true,
- [0x0C91] = true, [0x0C92] = true, [0x0C93] = true, [0x0C94] = true,
- -- malayalam
- [0x0D05] = true, [0x0D06] = true, [0x0D07] = true, [0x0D08] = true,
- [0x0D09] = true, [0x0D0A] = true, [0x0D0B] = true, [0x0D0C] = true,
- [0x0D0E] = true, [0x0D0F] = true, [0x0D10] = true, [0x0D12] = true,
- [0x0D13] = true, [0x0D14] = true,
-}
+if not indicgroups and characters then
-local dependent_vowel = { -- matra
- -- devanagari
- [0x093A] = true, [0x093B] = true, [0x093E] = true, [0x093F] = true,
- [0x0940] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true,
- [0x0944] = true, [0x0945] = true, [0x0946] = true, [0x0947] = true,
- [0x0948] = true, [0x0949] = true, [0x094A] = true, [0x094B] = true,
- [0x094C] = true, [0x094E] = true, [0x094F] = true, [0x0955] = true,
- [0x0956] = true, [0x0957] = true, [0x0962] = true, [0x0963] = true,
- -- kannada
- [0x0CBE] = true, [0x0CBF] = true, [0x0CC0] = true, [0x0CC1] = true,
- [0x0CC2] = true, [0x0CC3] = true, [0x0CC4] = true, [0x0CC5] = true,
- [0x0CC6] = true, [0x0CC7] = true, [0x0CC8] = true, [0x0CC9] = true,
- [0x0CCA] = true, [0x0CCB] = true, [0x0CCC] = true,
- -- malayalam
- [0x0D3E] = true, [0x0D3F] = true, [0x0D40] = true, [0x0D41] = true,
- [0x0D42] = true, [0x0D43] = true, [0x0D44] = true, [0x0D46] = true,
- [0x0D47] = true, [0x0D48] = true, [0x0D4A] = true, [0x0D4B] = true,
- [0x0D4C] = true, [0x0D57] = true,
-}
+ local indic = {
+ c = { }, -- consonant
+ i = { }, -- independent vowel
+ d = { }, -- dependent vowel
+ m = { }, -- vowel modifier
+ s = { }, -- stress tone mark
+ o = { }, -- other
+ }
-local vowel_modifier = {
- -- devanagari
- [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x0903] = true,
- -- A8E0 - A8F1 are cantillation marks for the Samaveda and may not belong here.
- [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true,
- [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true,
- [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true,
- [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true,
- [0xA8F0] = true, [0xA8F1] = true,
- -- malayalam
- [0x0D02] = true, [0x0D03] = true,
-}
+ local indicmarks = {
+ l = { }, -- left | pre_mark
+ t = { }, -- top | above_mark
+ b = { }, -- bottom | below_mark
+ r = { }, -- right | post_mark
+ s = { }, -- split | twopart_mark
+ }
-local stress_tone_mark = {
- [0x0951] = true, [0x0952] = true, [0x0953] = true, [0x0954] = true,
- -- kannada
- [0x0CCD] = true,
- -- malayalam
- [0x0D4D] = true,
-}
+ local indicclasses = {
+ nukta = { },
+ halant = { },
+ ra = { },
+ anudatta = { },
+ }
-local nukta = {
- -- devanagari
- [0x093C] = true,
- -- kannada:
- [0x0CBC] = true,
-}
+ local indicorders = {
+ bp = { }, -- before_postscript
+ ap = { }, -- after_postscript
+ bs = { }, -- before_half
+ as = { }, -- after_half
+ bh = { }, -- before_subscript
+ ah = { }, -- after_subscript
+ bm = { }, -- before_main
+ am = { }, -- after_main
+ }
-local halant = {
- -- devanagari
- [0x094D] = true,
- -- kannada
- [0x0CCD] = true,
- -- malayalam
- [0x0D4D] = true,
-}
+ for k, v in next, characters.data do
+ local i = v.indic
+ if i then
+ indic[i][k] = true
+ i = v.indicmark
+ if i then
+ if i == "s" then
+ local s = v.specials
+ indicmarks[i][k] = { s[2], s[3] }
+ else
+ indicmarks[i][k] = true
+ end
+ end
+ i = v.indicclass
+ if i then
+ indicclasses[i][k] = true
+ end
+ i = v.indicorder
+ if i then
+ indicorders[i][k] = true
+ end
+ end
+ end
-local ra = {
- -- devanagari
- [0x0930] = true,
- -- kannada
- [0x0CB0] = true,
- -- malayalam
- [0x0D30] = true,
-}
+ indicgroups = {
+ consonant = indic.c,
+ independent_vowel = indic.i,
+ dependent_vowel = indic.d,
+ vowel_modifier = indic.m,
+ stress_tone_mark = indic.s,
+ -- other = indic.o,
+ pre_mark = indicmarks.l,
+ above_mark = indicmarks.t,
+ below_mark = indicmarks.b,
+ post_mark = indicmarks.r,
+ twopart_mark = indicmarks.s,
+ nukta = indicclasses.nukta,
+ halant = indicclasses.halant,
+ ra = indicclasses.ra,
+ anudatta = indicclasses.anudatta,
+ before_postscript = indicorders.bp,
+ after_postscript = indicorders.ap,
+ before_half = indicorders.bh,
+ after_half = indicorders.ah,
+ before_subscript = indicorders.bs,
+ after_subscript = indicorders.as,
+ before_main = indicorders.bm,
+ after_main = indicorders.am,
+ }
-local c_anudatta = 0x0952 -- used to be tables
-local c_nbsp = 0x00A0 -- used to be tables
-local c_zwnj = 0x200C -- used to be tables
-local c_zwj = 0x200D -- used to be tables
+ indic = nil
+ indicmarks = nil
+ indicclasses = nil
+ indicorders = nil
-local zw_char = { -- could also be inlined
- [0x200C] = true,
- [0x200D] = true,
-}
+ characters.indicgroups = indicgroups
--- 0C82 anusvara
--- 0C83 visarga
--- 0CBD avagraha
--- 0CD5 length mark
--- 0CD6 ai length mark
--- 0CE0 letter ll
--- 0CE1 letter rr
--- 0CE2 vowel sign l
--- 0CE2 vowel sign ll
--- 0CF1 sign
--- 0CF2 sign
--- OCE6 - OCEF digits
-
-local pre_mark = {
- [0x093F] = true, [0x094E] = true,
- -- malayalam
- [0x0D46] = true, [0x0D47] = true, [0x0D48] = true,
-}
+else
-local above_mark = {
- [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x093A] = true,
- [0x0945] = true, [0x0946] = true, [0x0947] = true, [0x0948] = true,
- [0x0951] = true, [0x0953] = true, [0x0954] = true, [0x0955] = true,
- [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true,
- [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true,
- [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true,
- [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true,
- [0xA8F0] = true, [0xA8F1] = true,
- -- malayalam
- [0x0D4E] = true,
-}
+ indicgroups = table.setmetatableindex("table")
-local below_mark = {
- [0x093C] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true,
- [0x0944] = true, [0x094D] = true, [0x0952] = true, [0x0956] = true,
- [0x0957] = true, [0x0962] = true, [0x0963] = true,
-}
+end
-local post_mark = {
- [0x0903] = true, [0x093B] = true, [0x093E] = true, [0x0940] = true,
- [0x0949] = true, [0x094A] = true, [0x094B] = true, [0x094C] = true,
- [0x094F] = true,
-}
+local consonant = indicgroups.consonant
+local independent_vowel = indicgroups.independent_vowel
+local dependent_vowel = indicgroups.dependent_vowel
+local vowel_modifier = indicgroups.vowel_modifier
+local stress_tone_mark = indicgroups.stress_tone_mark
+local pre_mark = indicgroups.pre_mark
+local above_mark = indicgroups.above_mark
+local below_mark = indicgroups.below_mark
+local post_mark = indicgroups.post_mark
+local twopart_mark = indicgroups.twopart_mark
+local nukta = indicgroups.nukta
+local halant = indicgroups.halant
+local ra = indicgroups.ra
+local anudatta = indicgroups.anudatta
+
+local before_postscript = indicgroups.before_postscript
+local after_postscript = indicgroups.after_postscript
+local before_half = indicgroups.before_half
+local after_half = indicgroups.after_half
+local before_subscript = indicgroups.before_subscript
+local after_subscript = indicgroups.after_subscript
+local before_main = indicgroups.before_main
+local after_main = indicgroups.after_main
+
+local mark_four = table.merged (
+ pre_mark,
+ above_mark,
+ below_mark,
+ post_mark
+)
+
+local mark_above_below_post = table.merged (
+ above_mark,
+ below_mark,
+ post_mark
+)
-local twopart_mark = {
- -- malayalam
- [0x0D4A] = { 0x0D46, 0x0D3E, }, -- ൊ
- [0x0D4B] = { 0x0D47, 0x0D3E, }, -- ോ
- [0x0D4C] = { 0x0D46, 0x0D57, }, -- ൌ
-}
+-- We use some pseudo features as we need to manipulate the nodelist based
+-- on information in the font as well as already applied features. We can
+-- probably replace some of the code below by injecting 'real' features
+-- using the extension mechanism.
-local mark_four = { } -- As we access these frequently an extra hash is used.
-
-for k, v in next, pre_mark do mark_four[k] = pre_mark end
-for k, v in next, above_mark do mark_four[k] = above_mark end
-for k, v in next, below_mark do mark_four[k] = below_mark end
-for k, v in next, post_mark do mark_four[k] = post_mark end
-
-local mark_above_below_post = { }
-
-for k, v in next, above_mark do mark_above_below_post[k] = above_mark end
-for k, v in next, below_mark do mark_above_below_post[k] = below_mark end
-for k, v in next, post_mark do mark_above_below_post[k] = post_mark end
-
--- Again, this table can be extended for other scripts than devanagari. Actually,
--- for ConTeXt this kind of data is kept elsewhere so eventually we might move
--- tables to someplace else.
-
-local reorder_class = {
- -- devanagari
- [0x0930] = "before postscript",
- [0x093F] = "before half",
- [0x0940] = "after subscript",
- [0x0941] = "after subscript",
- [0x0942] = "after subscript",
- [0x0943] = "after subscript",
- [0x0944] = "after subscript",
- [0x0945] = "after subscript",
- [0x0946] = "after subscript",
- [0x0947] = "after subscript",
- [0x0948] = "after subscript",
- [0x0949] = "after subscript",
- [0x094A] = "after subscript",
- [0x094B] = "after subscript",
- [0x094C] = "after subscript",
- [0x0962] = "after subscript",
- [0x0963] = "after subscript",
- [0x093E] = "after subscript",
- -- kannada:
- [0x0CB0] = "after postscript", -- todo in code below
- [0x0CBF] = "before subscript", -- todo in code below
- [0x0CC6] = "before subscript", -- todo in code below
- [0x0CCC] = "before subscript", -- todo in code below
- [0x0CBE] = "before subscript", -- todo in code below
- [0x0CE2] = "before subscript", -- todo in code below
- [0x0CE3] = "before subscript", -- todo in code below
- [0x0CC1] = "before subscript", -- todo in code below
- [0x0CC2] = "before subscript", -- todo in code below
- [0x0CC3] = "after subscript",
- [0x0CC4] = "after subscript",
- [0x0CD5] = "after subscript",
- [0x0CD6] = "after subscript",
- -- malayalam
+local zw_char = { -- both_joiners_true
+ [c_zwnj] = true,
+ [c_zwj ] = true,
}
--- We use some pseudo features as we need to manipulate the nodelist based
--- on information in the font as well as already applied features.
-
local dflt_true = {
dflt = true
}
-local dev2_defaults = {
+local two_defaults = {
dev2 = dflt_true,
}
-local deva_defaults = {
+local one_defaults = {
dev2 = dflt_true,
deva = dflt_true,
}
local false_flags = { false, false, false, false }
-local both_joiners_true = {
- [0x200C] = true,
- [0x200D] = true,
-}
-
local sequence_reorder_matras = {
- features = { dv01 = dev2_defaults },
+ features = { dv01 = two_defaults },
flags = false_flags,
name = "dv01_reorder_matras",
order = { "dv01" },
@@ -467,7 +376,7 @@ local sequence_reorder_matras = {
}
local sequence_reorder_reph = {
- features = { dv02 = dev2_defaults },
+ features = { dv02 = two_defaults },
flags = false_flags,
name = "dv02_reorder_reph",
order = { "dv02" },
@@ -481,7 +390,7 @@ local sequence_reorder_reph = {
}
local sequence_reorder_pre_base_reordering_consonants = {
- features = { dv03 = dev2_defaults },
+ features = { dv03 = two_defaults },
flags = false_flags,
name = "dv03_reorder_pre_base_reordering_consonants",
order = { "dv03" },
@@ -495,7 +404,7 @@ local sequence_reorder_pre_base_reordering_consonants = {
}
local sequence_remove_joiners = {
- features = { dv04 = deva_defaults },
+ features = { dv04 = one_defaults },
flags = false_flags,
name = "dv04_remove_joiners",
order = { "dv04" },
@@ -503,7 +412,7 @@ local sequence_remove_joiners = {
nofsteps = 1,
steps = {
{
- coverage = both_joiners_true,
+ coverage = zw_char, -- both_joiners_true
},
}
}
@@ -513,38 +422,85 @@ local sequence_remove_joiners = {
-- as it might depends on the font. Not that it's a bottleneck.
local basic_shaping_forms = {
- nukt = true,
+ init = true, -- new
+ abvs = true, -- new
akhn = true,
- rphf = true,
- pref = true,
- rkrf = true,
blwf = true,
+ calt = true, -- new
+ cjct = true,
half = true,
+ haln = true, -- new
+ nukt = true,
+ pref = true,
+ pres = true, -- new
pstf = true,
+ psts = true, -- new
+ rkrf = true,
+ rphf = true,
vatu = true,
- cjct = true,
}
local valid = {
- akhn = true, -- malayalam
- rphf = true,
- pref = true,
- half = true,
+ -- akhn = true, -- malayalam
+ -- rphf = true,
+ -- pref = true,
+ -- half = true,
+ -- blwf = true,
+ -- pstf = true,
+ -- pres = true, -- malayalam
+ -- blws = true, -- malayalam
+ -- psts = true, -- malayalam
+ abvs = true,
+ akhn = true,
blwf = true,
+ calt = true,
+ cjct = true,
+ half = true,
+ haln = true,
+ nukt = true,
+ pref = true,
+ pres = true,
pstf = true,
- pres = true, -- malayalam
- blws = true, -- malayalam
- psts = true, -- malayalam
+ psts = true,
+ rkrf = true,
+ rphf = true,
+ vatu = true,
+ pres = true,
+ abvs = true,
+ blws = true,
+ psts = true,
+ haln = true,
+ calt = true,
}
+local scripts = { }
+
+local scripts_one = { "deva", "mlym", "beng", "gujr", "guru", "knda", "orya", "taml", "telu" }
+local scripts_two = { "dev2", "mlm2", "bng2", "gjr2", "gur2", "knd2", "ory2", "tml2", "tel2" }
+
+local nofscripts = #scripts_one
+
+for i=1,nofscripts do
+ local one = scripts_one[i]
+ local two = scripts_two[i]
+ scripts[one] = true
+ scripts[two] = true
+ two_defaults[one] = dflt_true
+ one_defaults[one] = dflt_true
+ one_defaults[two] = dflt_true
+end
+
+local function valid_one(s) for i=1,nofscripts do if s[scripts_one[i]] then return true end end end
+local function valid_two(s) for i=1,nofscripts do if s[scripts_two[i]] then return true end end end
+
local function initializedevanagi(tfmdata)
local script, language = otf.scriptandlanguage(tfmdata,attr) -- todo: take fast variant
- if script == "deva" or script == "dev2" or script =="mlym" or script == "mlm2" then
+ if scripts[script] then
local resources = tfmdata.resources
local devanagari = resources.devanagari
if not devanagari then
--
- report_devanagari("adding devanagari features to font")
+ report("adding devanagari features to font")
--
local gsubfeatures = resources.features.gsub
local sequences = resources.sequences
@@ -563,10 +519,10 @@ local function initializedevanagi(tfmdata)
end
local insertindex = lastmatch + 1
--
- gsubfeatures["dv01"] = dev2_defaults -- reorder matras
- gsubfeatures["dv02"] = dev2_defaults -- reorder reph
- gsubfeatures["dv03"] = dev2_defaults -- reorder pre base reordering consonants
- gsubfeatures["dv04"] = deva_defaults -- remove joiners
+ gsubfeatures["dv01"] = two_defaults -- reorder matras
+ gsubfeatures["dv02"] = two_defaults -- reorder reph
+ gsubfeatures["dv03"] = two_defaults -- reorder pre base reordering consonants
+ gsubfeatures["dv04"] = one_defaults -- remove joiners
--
local reorder_pre_base_reordering_consonants = copy(sequence_reorder_pre_base_reordering_consonants)
local reorder_reph = copy(sequence_reorder_reph)
@@ -622,8 +578,9 @@ local function initializedevanagi(tfmdata)
end
end
end
- for kind, spec in next, features do -- beware, this is
- if spec.dev2 and valid[kind] then
+ for kind, spec in next, features do
+ -- if spec.dev2 and valid[kind] then
+ if valid[kind] and valid_two(spec)then
for i=1,nofsteps do
local step = steps[i]
local coverage = step.coverage
@@ -648,7 +605,9 @@ local function initializedevanagi(tfmdata)
end
end
end
- seqsubset[#seqsubset+1] = { kind, coverage, reph }
+if reph then
+ seqsubset[#seqsubset+1] = { kind, coverage, reph }
+end
end
end
end
@@ -694,8 +653,30 @@ local function initializedevanagi(tfmdata)
sharedfeatures["pstf"] = true
sharedfeatures["pref"] = true
sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
- gsubfeatures ["dv03"] = dev2_defaults -- reorder pre base reordering consonants
+ gsubfeatures ["dv03"] = two_defaults -- reorder pre base reordering consonants
insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ -- elseif script == "beng" then
+ -- elseif script == "bng2" then
+ -- elseif script == "gujr" then
+ -- elseif script == "gjr2" then
+ -- elseif script == "guru" then
+ -- elseif script == "gur2" then
+ -- elseif script == "knda" then
+ -- elseif script == "knd2" then
+ elseif script == "taml" then
+ sharedfeatures["dv04"] = true -- dv04_remove_joiners
+sharedfeatures["pstf"] = true
+ elseif script == "tml2" then
+-- sharedfeatures["pstf"] = true
+-- sharedfeatures["pref"] = true
+-- sharedfeatures["dv01"] = true -- dv01_reorder_matras
+-- sharedfeatures["dv02"] = true -- dv02_reorder_reph
+-- sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
+-- sharedfeatures["dv04"] = true -- dv04_remove_joiners
+ -- elseif script == "telu" then
+ -- elseif script == "tel2" then
+ else
+ report("todo: enable the right features for script %a",script)
end
end
end
@@ -712,7 +693,7 @@ registerotffeature {
-- hm, this is applied to one character:
-local function deva_initialize(font,attr) -- we need a proper hook into the dataset initializer
+local function initialize_one(font,attr) -- we need a proper hook into the dataset initializer
local tfmdata = fontdata[font]
local datasets = otf.dataset(tfmdata,font,attr) -- don't we know this one?
@@ -751,9 +732,9 @@ local function deva_initialize(font,attr) -- we need a proper hook into the data
end
-local function deva_reorder(head,start,stop,font,attr,nbspaces)
+local function reorder_one(head,start,stop,font,attr,nbspaces)
- local reph, vattu, blwfcache = deva_initialize(font,attr) -- todo: a hash[font]
+ local reph, vattu, blwfcache = initialize_one(font,attr) -- todo: a hash[font]
local current = start
local n = getnext(start)
@@ -790,40 +771,40 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
lastcons = current
current = getnext(current)
if current ~= stop then
- if nukta[getchar(current)] then
+ local char = getchar(current)
+ if nukta[char] then
current = getnext(current)
+ char = getchar(current)
end
- if getchar(current) == c_zwj then
- if current ~= stop then
- local next = getnext(current)
- if next ~= stop and halant[getchar(next)] then
- current = next
- next = getnext(current)
- local tmp = next and getnext(next) or nil -- needs checking
- local changestop = next == stop
- local tempcurrent = copy_node(next)
- copyinjection(tempcurrent,next)
- local nextcurrent = copy_node(current)
- copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
- setlink(tempcurrent,nextcurrent)
- setprop(tempcurrent,a_state,s_blwf)
- tempcurrent = processcharacters(tempcurrent,font)
- setprop(tempcurrent,a_state,unsetvalue)
- if getchar(next) == getchar(tempcurrent) then
- flush_list(tempcurrent)
- local n = copy_node(current)
- copyinjection(n,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
- setchar(current,dotted_circle)
- head = insert_node_after(head, current, n)
- else
- setchar(current,getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node
- local freenode = getnext(current)
- setlink(current,tmp)
- flush_node(freenode)
- flush_list(tempcurrent)
- if changestop then
- stop = current
- end
+ if char == c_zwj and current ~= stop then
+ local next = getnext(current)
+ if next ~= stop and halant[getchar(next)] then
+ current = next
+ next = getnext(current)
+ local tmp = next and getnext(next) or nil -- needs checking
+ local changestop = next == stop
+ local tempcurrent = copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent = copy_node(current)
+ copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent = processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next) == getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n = copy_node(current)
+ copyinjection(n,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
+ setchar(current,dotted_circle)
+ head = insert_node_after(head, current, n)
+ else
+ setchar(current,getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node
+ local freenode = getnext(current)
+ setlink(current,tmp)
+ flush_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop = current
end
end
end
@@ -1130,41 +1111,39 @@ function handlers.devanagari_reorder_matras(head,start) -- no leak
return head, start, true
end
--- todo: way more caching of attributes and font
-
--- Reph’s original position is always at the beginning of the syllable, (i.e. it is not reordered at the character reordering stage).
--- However, it will be reordered according to the basic-forms shaping results.
--- Possible positions for reph, depending on the script, are; after main, before post-base consonant forms,
--- and after post-base consonant forms.
-
--- 1 If reph should be positioned after post-base consonant forms, proceed to step 5.
--- 2 If the reph repositioning class is not after post-base: target position is after the first explicit halant glyph between
--- the first post-reph consonant and last main consonant. If ZWJ or ZWNJ are following this halant, position is moved after it.
--- If such position is found, this is the target position. Otherwise, proceed to the next step.
--- Note: in old-implementation fonts, where classifications were fixed in shaping engine,
--- there was no case where reph position will be found on this step.
--- 3 If reph should be repositioned after the main consonant: from the first consonant not ligated with main,
--- or find the first consonant that is not a potential pre-base reordering Ra.
--- 4 If reph should be positioned before post-base consonant, find first post-base classified consonant not ligated with main.
--- If no consonant is found, the target position should be before the first matra, syllable modifier sign or vedic sign.
--- 5 If no consonant is found in steps 3 or 4, move reph to a position immediately before the first post-base matra,
--- syllable modifier sign or vedic sign that has a reordering class after the intended reph position.
--- For example, if the reordering position for reph is post-main, it will skip above-base matras that also have a post-main position.
--- 6 Otherwise, reorder reph to the end of the syllable.
-
--- hm, this only looks at the start of a nodelist ... is this supposed to be line based?
+-- Reph’s original position is always at the beginning of the syllable, (i.e. it is
+-- not reordered at the character reordering stage). However, it will be reordered
+-- according to the basic-forms shaping results. Possible positions for reph,
+-- depending on the script, are; after main, before post-base consonant forms, and
+-- after post-base consonant forms.
+
+-- In Devanagari reph has reordering position 'before postscript' and dev2 only
+-- follows step 2, 4, and 6.
function handlers.devanagari_reorder_reph(head,start)
- -- since in Devanagari reph has reordering position 'before postscript' dev2 only follows step 2, 4, and 6,
- -- the other steps are still ToDo (required for scripts other than dev2)
local current = getnext(start)
local startnext = nil
local startprev = nil
local startfont = getfont(start)
local startattr = getprop(start,a_syllabe)
+ --
+ ::step_1::
+ --
+ -- If reph should be positioned after post-base consonant forms, proceed to step 5.
+ --
+ ::step_2::
+ --
+ -- If the reph repositioning class is not after post-base: target position is after
+ -- the first explicit halant glyph between the first post-reph consonant and last
+ -- main consonant. If ZWJ or ZWNJ are following this halant, position is moved after
+ -- it. If such position is found, this is the target position. Otherwise, proceed to
+ -- the next step. Note: in old-implementation fonts, where classifications were
+ -- fixed in shaping engine, there was no case where reph position will be found on
+ -- this step.
+ --
while current do
local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then -- step 2
+ if char and getprop(current,a_syllabe) == startattr then
if halant[char] and not getprop(current,a_state) then
local next = getnext(current)
if next then
@@ -1188,11 +1167,25 @@ function handlers.devanagari_reorder_reph(head,start)
break
end
end
+ ::step_3::
+ --
+ -- If reph should be repositioned after the main consonant: from the first consonant
+ -- not ligated with main, or find the first consonant that is not a potential
+ -- pre-base reordering Ra.
+ --
+ -- Kai: todo
+ --
+ ::step_4::
+ --
+ -- If reph should be positioned before post-base consonant, find first post-base
+ -- classified consonant not ligated with main. If no consonant is found, the target
+ -- position should be before the first matra, syllable modifier sign or vedic sign.
+ --
if not startnext then
current = getnext(start)
while current do
local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then -- step 4
+ if char and getprop(current,a_syllabe) == startattr then
if getprop(current,a_state) == s_pstf then -- post-base
startnext = getnext(start)
head = remove_node(head,start)
@@ -1209,16 +1202,22 @@ function handlers.devanagari_reorder_reph(head,start)
end
end
end
- -- todo: determine position for reph with reordering position other than 'before postscript'
- -- (required for scripts other than dev2)
- -- leaks
+ --
+ ::step_5::
+ --
+ -- If no consonant is found in steps 3 or 4, move reph to a position immediately
+ -- before the first post-base matra, syllable modifier sign or vedic sign that has a
+ -- reordering class after the intended reph position. For example, if the reordering
+ -- position for reph is post-main, it will skip above-base matras that also have a
+ -- post-main position.
+ --
if not startnext then
current = getnext(start)
local c = nil
while current do
local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then -- step 5
- if not c and mark_above_below_post[char] and reorder_class[char] ~= "after subscript" then
+ if char and getprop(current,a_syllabe) == startattr then
+ if not c and mark_above_below_post[char] and after_subscript[char] then
c = current
end
current = getnext(current)
@@ -1238,13 +1237,17 @@ function handlers.devanagari_reorder_reph(head,start)
startattr = getprop(start,a_syllabe)
end
end
- -- leaks
+ --
+ ::step_6::
+ --
+ -- Otherwise, reorder reph to the end of the syllable.
+ --
if not startnext then
current = start
local next = getnext(current)
while next do
local nextchar = ischar(next,startfont)
- if nextchar and getprop(next,a_syllabe) == startattr then --step 6
+ if nextchar and getprop(next,a_syllabe) == startattr then
current = next
next = getnext(current)
else
@@ -1264,13 +1267,13 @@ function handlers.devanagari_reorder_reph(head,start)
return head, start, true
end
--- we can cache some checking (v)
-
-- If a pre-base reordering consonant is found, reorder it according to the following rules:
--
--- 1 Only reorder a glyph produced by substitution during application of the feature.
--- (Note that a font may shape a Ra consonant with the feature generally but block it in certain contexts.)
--- 2 Try to find a target position the same way as for pre-base matra. If it is found, reorder pre-base consonant glyph.
+-- 1 Only reorder a glyph produced by substitution during application of the feature. (Note
+-- that a font may shape a Ra consonant with the feature generally but block it in certain
+-- contexts.)
+-- 2 Try to find a target position the same way as for pre-base matra. If it is found, reorder
+-- pre-base consonant glyph.
-- 3 If position is not found, reorder immediately before main consonant.
-- Here we implement a few handlers:
@@ -1358,13 +1361,13 @@ function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replaceme
setnext(prev)
end
if head == start then
- head = stop
+ head = stop
end
flush_list(start)
return head, stop, true
end
-local function dev2_initialize(font,attr)
+local function initialize_two(font,attr)
local devanagari = fontdata[font].resources.devanagari
@@ -1379,9 +1382,9 @@ end
-- this one will be merged into the caller: it saves a call, but we will then make function
-- of the actions
-local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pass over (determine stop in sweep)
+local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pass over (determine stop in sweep)
- local seqsubset, reorderreph = dev2_initialize(font,attr)
+ local seqsubset, reorderreph = initialize_two(font,attr)
local reph = false -- was nil ... probably went unnoticed because never assigned
local halfpos = nil
@@ -1392,7 +1395,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
for i=1,#seqsubset do
- -- maybe quit if start == stop
+ -- this can be done more efficient, the last test and less getnext
local subset = seqsubset[i]
local kind = subset[1]
@@ -1411,8 +1414,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if found[n] then --above-base: rphf Consonant + Halant
local afternext = next ~= stop and getnext(next)
if afternext and zw_char[getchar(afternext)] then -- ZWJ and ZWNJ prevent creation of reph
- current = next
- current = getnext(current)
+ current = afternext -- getnext(next)
elseif current == start then
setprop(current,a_state,s_rphf)
current = next
@@ -1559,7 +1561,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if halant[getchar(current)] then
setnext(getnext(current),tmp)
local nc = copy_node(current)
- copyinjection(nc,current)
+ copyinjection(nc,current)
setchar(current,dotted_circle)
head = insert_node_after(head,current,nc)
else
@@ -1957,7 +1959,7 @@ local function analyze_next_chars_two(c,font)
if not v then
return c
end
- if v == c_anudatta then
+ if anudatta[v] then
c = n
n = getnext(c)
if not n then
@@ -2056,10 +2058,12 @@ local function analyze_next_chars_two(c,font)
end
end
-local function inject_syntax_error(head,current,mark)
+local show_syntax_errors = false
+
+local function inject_syntax_error(head,current,char)
local signal = copy_node(current)
- copyinjection(signal,current)
- if mark == pre_mark then -- THIS IS WRONG: pre_mark is a table
+ copyinjection(signal,current)
+ if pre_mark[char] then
setchar(signal,dotted_circle)
else
setchar(current,dotted_circle)
@@ -2070,21 +2074,21 @@ end
-- It looks like these two analyzers were written independently but they share
-- a lot. Common code has been synced.
-function methods.deva(head,font,attr)
+local function method_one(head,font,attr)
head = tonut(head)
local current = head
local start = true
local done = false
local nbspaces = 0
while current do
- local char = ischar(current,font)
+ local char = ischar(current,font)
if char then
done = true
local syllablestart = current
local syllableend = nil
local c = current
local n = getnext(c)
- local first = char
+ local first = char
if n and ra[first] then
local second = ischar(n,font)
if second and halant[second] then
@@ -2116,10 +2120,10 @@ function methods.deva(head,font,attr)
end
if standalone then
-- stand alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
- local syllableend = analyze_next_chars_one(c,font,2)
- current = getnext(syllableend)
+ local syllableend = analyze_next_chars_one(c,font,2)
+ current = getnext(syllableend)
if syllablestart ~= syllableend then
- head, current, nbspaces = deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head, current, nbspaces = reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current = getnext(current)
end
else
@@ -2225,7 +2229,7 @@ function methods.deva(head,font,attr)
end
end
if syllablestart ~= syllableend then
- head, current, nbspaces = deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head, current, nbspaces = reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current = getnext(current)
end
elseif independent_vowel[char] then
@@ -2247,9 +2251,11 @@ function methods.deva(head,font,attr)
end
end
else
- local mark = mark_four[char]
- if mark then
- head, current = inject_syntax_error(head,current,mark)
+ if show_syntax_errors then
+ local mark = mark_four[char]
+ if mark then
+ head, current = inject_syntax_error(head,current,char)
+ end
end
current = getnext(current)
end
@@ -2264,15 +2270,13 @@ function methods.deva(head,font,attr)
head = replace_all_nbsp(head)
end
- head = tonode(head)
-
- return head, done
+ return tonode(head), done
end
-- there is a good change that when we run into one with subtype < 256 that the rest is also done
-- so maybe we can omit this check (it's pretty hard to get glyphs in the stream out of the blue)
-function methods.dev2(head,font,attr)
+local function method_two(head,font,attr)
head = tonut(head)
local current = head
local start = true
@@ -2296,7 +2300,7 @@ function methods.dev2(head,font,attr)
local nextnextchar = ischar(n,font)
if nextnextchar then
c = n
- char = nextnextchar
+ char = nextnextchar
end
end
end
@@ -2343,14 +2347,14 @@ function methods.dev2(head,font,attr)
end
end
if syllableend and syllablestart ~= syllableend then
- head, current, nbspaces = dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head, current, nbspaces = reorder_two(head,syllablestart,syllableend,font,attr,nbspaces)
end
- if not syllableend then
+ if not syllableend and show_syntax_errors then
local char = ischar(current,font)
if char and not getprop(current,a_state) then
local mark = mark_four[char]
if mark then
- head, current = inject_syntax_error(head,current,mark)
+ head, current = inject_syntax_error(head,current,char)
end
end
end
@@ -2362,10 +2366,10 @@ function methods.dev2(head,font,attr)
head = replace_all_nbsp(head)
end
- head = tonode(head)
-
- return head, done
+ return tonode(head), done
end
-methods.mlym = methods.deva
-methods.mlm2 = methods.dev2
+for i=1,nofscripts do
+ methods[scripts_one[i]] = method_one
+ methods[scripts_two[i]] = method_two
+end
diff --git a/tex/context/base/mkiv/font-ota.lua b/tex/context/base/mkiv/font-ota.lua
index 9c6ee7403..de626c120 100644
--- a/tex/context/base/mkiv/font-ota.lua
+++ b/tex/context/base/mkiv/font-ota.lua
@@ -248,11 +248,11 @@ local function warning(current,what)
end
local mappers = allocate {
- l = s_init, -- left
- d = s_medi, -- double
- c = s_medi, -- joiner
- r = s_fina, -- right
- u = s_isol, -- nonjoiner
+ l = s_init, -- left
+ d = s_medi, -- double
+ c = s_medi, -- joiner
+ r = s_fina, -- right
+ u = s_isol, -- nonjoiner
}
-- we can also use this trick for devanagari
diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 3e338f614..25083dfce 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -936,7 +936,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,skiphash,st
elseif b then -- #b > 0
local x, y, w, h = setposition(2,snext,factor,rlmode,b,injection)
if trace_kerns then
- local startchar = getchar(snext)
+ local startchar = getchar(start)
logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
end
start = snext -- cf spec
diff --git a/tex/context/base/mkiv/font-pre.mkiv b/tex/context/base/mkiv/font-pre.mkiv
index d09d871f0..b49bc560e 100644
--- a/tex/context/base/mkiv/font-pre.mkiv
+++ b/tex/context/base/mkiv/font-pre.mkiv
@@ -191,59 +191,139 @@
[semitic-simple]
[script=hebr]
-% \definefont [DevaOne] [file:chandas.ttf*devanagari-one at 12pt]
-% \definefont [DevaTwo] [file:kokila.ttf*devanagari-two at 18pt]
+% indic
\definefontfeature
- [devanagari-one]
+ [indic-common]
[mode=node,
language=dflt,
- script=deva,
+ % localized
+ locl=yes,
+ % positioning
+ kern=yes,
+ dist=yes,
+ % above/below base marks
+ abvm=yes,
+ blwm=yes,
+ % basic shaping
nukt=yes,
akhn=yes,
rphf=yes,
- blwf=yes,
- half=yes,
- vatu=yes,
+ % presentation
pres=yes,
abvs=yes,
blws=yes,
psts=yes,
haln=yes,
- abvm=yes,
- blwm=yes,
- dist=yes]
+ calt=yes]
\definefontfeature
- [devanagari-two]
[devanagari-one]
- [script=dev2,
- locl=yes,
- pref=yes,
+ [indic-common]
+ [script=deva,
+ % basic shaping
rkrf=yes,
+ blwf=yes,
+ half=yes,
+ vatu=yes,
+ cjct=yes]
+
+\definefontfeature
+ [bengali-one]
+ [indic-common]
+ [script=beng,
+ % basic shaping
+ blwf=yes,
+ half=yes,
pstf=yes,
+ vatu=yes,
cjct=yes,
- init=yes,
- calt=yes,
- kern=yes]
+ % presentation
+ init=yes]
\definefontfeature
- [malayalam-one]
- [mode=node,
- language=dflt,
- script=mlym,
- akhn=yes,
+ [gujarati-one]
+ [indic-common]
+ [script=gujr,
+ % basic shaping
+ rkrf=yes,
blwf=yes,
half=yes,
- pres=yes,
- blws=yes,
- psts=yes,
- haln=no]
+ vatu=yes,
+ cjct=yes]
+
+\definefontfeature
+ [gurmukhi-one]
+ [indic-common]
+ [script=guru,
+ % basic shaping
+ blwf=yes,
+ half=yes,
+ pstf=yes,
+ vatu=yes,
+ cjct=yes]
+
+\definefontfeature
+ [kannada-one]
+ [indic-common]
+ [script=knda,
+ % basic shaping
+ pref=yes,
+ blwf=yes,
+ half=yes,
+ pstf=yes,
+ cjct=yes]
\definefontfeature
- [malayalam-two]
[malayalam-one]
- [script=mlm2]
+ [indic-common]
+ [script=mlym,
+ % basic shaping
+ pref=yes,
+ blwf=yes,
+ half=yes,
+ pstf=yes,
+ cjct=yes]
+
+\definefontfeature
+ [oriya-one]
+ [indic-common]
+ [script=orya,
+ % basic shaping
+ blwf=yes,
+ pstf=yes,
+ cjct=yes]
+
+\definefontfeature
+ [tamil-one]
+ [indic-common]
+ [script=taml,
+ % basic shaping
+ pref=yes,
+ half=yes]
+
+\definefontfeature
+ [telugu-one]
+ [indic-common]
+ [script=telu,
+ % basic shaping
+ pref=yes,
+ blwf=yes,
+ half=yes,
+ pstf=yes,
+ cjct=yes]
+
+\definefontfeature [devanagari-two] [devanagari-one] [script=dev2]
+\definefontfeature [bengali-two] [bengali-one] [script=bng2]
+\definefontfeature [gujarati-two] [gujarati-one] [script=gjr2]
+\definefontfeature [gurmukhi-two] [gurmukhi-one] [script=gur2]
+\definefontfeature [kannada-two] [kannada-one] [script=knd2]
+\definefontfeature [malayalam-two] [malayalam-one] [script=mlm2]
+\definefontfeature [oriya-two] [oriya-one] [script=ory2]
+\definefontfeature [tamil-two] [tamil-one] [script=tml2]
+\definefontfeature [telugu-two] [telugu-one] [script=tel2]
+
+% cjk
\definefontfeature
[jamoforms]
@@ -251,8 +331,6 @@
tjmo=yes,
vjmo=yes]
-% cjk
-
% \definefontfeature
% [japanese]
% [default]
diff --git a/tex/context/base/mkiv/font-sel.lua b/tex/context/base/mkiv/font-sel.lua
index 0cf51cad3..e7f56047b 100644
--- a/tex/context/base/mkiv/font-sel.lua
+++ b/tex/context/base/mkiv/font-sel.lua
@@ -943,5 +943,5 @@ implement {
implement {
name = "definefontfamilypreset",
actions = selectfont.definefontfamilypreset,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/grph-fil.lua b/tex/context/base/mkiv/grph-fil.lua
index 3c069da37..540356c46 100644
--- a/tex/context/base/mkiv/grph-fil.lua
+++ b/tex/context/base/mkiv/grph-fil.lua
@@ -101,6 +101,6 @@ end
interfaces.implement {
name = "runcontextjob",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = { jobfiles.context, context }
}
diff --git a/tex/context/base/mkiv/grph-inc.lua b/tex/context/base/mkiv/grph-inc.lua
index 47eb7bbbb..f2d7847eb 100644
--- a/tex/context/base/mkiv/grph-inc.lua
+++ b/tex/context/base/mkiv/grph-inc.lua
@@ -487,7 +487,7 @@ function figures.setpaths(locationset,pathlist)
end
end
-implement { name = "setfigurepaths", actions = figures.setpaths, arguments = { "string", "string" } }
+implement { name = "setfigurepaths", actions = figures.setpaths, arguments = "2 strings" }
-- check conversions and handle it here
@@ -2014,7 +2014,7 @@ local ctx_doexternalfigurerepeat = context.doexternalfigurerepeat
implement {
name = "figure_register_page",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(a,b,c)
registered[#registered+1] = { a, b, c }
context(#registered)
diff --git a/tex/context/base/mkiv/java-ini.lua b/tex/context/base/mkiv/java-ini.lua
index 069eb5ab6..61ab15e7a 100644
--- a/tex/context/base/mkiv/java-ini.lua
+++ b/tex/context/base/mkiv/java-ini.lua
@@ -246,13 +246,13 @@ implement {
implement {
name = "setjavascriptpreamble",
actions = javascripts.setpreamble,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "addtojavascriptpreamble",
actions = javascripts.addtopreamble,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/l-macro.lua b/tex/context/base/mkiv/l-macro.lua
index d2b8c7ae4..30c7cbec6 100644
--- a/tex/context/base/mkiv/l-macro.lua
+++ b/tex/context/base/mkiv/l-macro.lua
@@ -14,7 +14,8 @@ if not modules then modules = { } end modules ['l-macros'] = {
local S, P, R, V, C, Cs, Cc, Ct, Carg = lpeg.S, lpeg.P, lpeg.R, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg
local lpegmatch = lpeg.match
local concat = table.concat
-local next = next
+local format, sub = string.format, string.sub
+local next, load, type = next, load, type
local newline = S("\n\r")^1
local continue = P("\\") * newline
@@ -41,6 +42,15 @@ local definitions = { }
local resolve
local subparser
+local report_lua = function(...)
+ if logs and logs.reporter then
+ report_lua = logs.reporter("system","lua")
+ report_lua(...)
+ else
+ print(format(...))
+ end
+end
+
-- todo: zero case
resolve = C(C(name) * arguments^-1) / function(raw,s,a)
@@ -160,6 +170,66 @@ function macros.resolving()
return next(patterns)
end
+local function loaded(name,trace,detail)
+ -- local c = io.loaddata(fullname) -- not yet available
+ local f = io.open(name,"rb")
+ if not f then
+ return false, format("file '%s' not found",name)
+ end
+ local c = f:read("*a")
+ if not c then
+ return false, format("file '%s' is invalid",name)
+ end
+ f:close()
+ local n = lpegmatch(parser,c)
+ if trace then
+ if #n ~= #c then
+ report_lua("macros expanded in '%s' (%i => %i bytes)",name,#c,#n)
+ if detail then
+ report_lua()
+ report_lua(n)
+ report_lua()
+ end
+ elseif detail then
+ report_lua("no macros expanded in '%s'",name)
+ end
+ end
+ if #name > 30 then
+ n = "--[[" .. sub(name,-30) .. "]] " .. n
+ else
+ n = "--[[" .. name .. "]] " .. n
+ end
+ return load(n)
+end
+
+macros.loaded = loaded
+
+function required(name,trace)
+ local filename = file.addsuffix(name,"lua")
+ local fullname = resolvers and resolvers.find_file(filename) or filename
+ if not fullname or fullname == "" then
+ return false
+ end
+ local codeblob = package.loaded[fullname]
+ if codeblob then
+ return codeblob
+ end
+ local code, message = loaded(fullname,macros,trace,trace)
+ if type(code) == "function" then
+ code = code()
+ else
+ report_lua("error when loading '%s'",fullname)
+ return false, message
+ end
+ if code == nil then
+ code = false
+ end
+ package.loaded[fullname] = code
+ return code
+end
+
+macros.required = required
+
-- local str = [[
-- #define check(p,q) (p ~= 0) and (p > q)
--
diff --git a/tex/context/base/mkiv/l-package.lua b/tex/context/base/mkiv/l-package.lua
index d43c5c5c6..4faee76bf 100644
--- a/tex/context/base/mkiv/l-package.lua
+++ b/tex/context/base/mkiv/l-package.lua
@@ -18,12 +18,12 @@ if not modules then modules = { } end modules ['l-package'] = {
local type = type
local gsub, format, find = string.gsub, string.format, string.find
+local insert, remove = table.insert, table.remove
local P, S, Cs, lpegmatch = lpeg.P, lpeg.S, lpeg.Cs, lpeg.match
-local package = package
-local searchers = package.searchers or package.loaders
-local insert, remove = table.insert, table.remove
+local package = package
+local searchers = package.searchers or package.loaders
-------.loaders = nil -- old stuff that we don't want
-------.seeall = nil -- old stuff that we don't want
diff --git a/tex/context/base/mkiv/l-table.lua b/tex/context/base/mkiv/l-table.lua
index 9d7152544..5cd65dd67 100644
--- a/tex/context/base/mkiv/l-table.lua
+++ b/tex/context/base/mkiv/l-table.lua
@@ -420,7 +420,7 @@ end
-- todo : copy without metatable
-local function copy(t, tables) -- taken from lua wiki, slightly adapted
+local function copy(t,tables) -- taken from lua wiki, slightly adapted
tables = tables or { }
local tcopy = { }
if not tables[t] then
@@ -431,7 +431,7 @@ local function copy(t, tables) -- taken from lua wiki, slightly adapted
if tables[i] then
i = tables[i]
else
- i = copy(i, tables)
+ i = copy(i,tables)
end
end
if type(v) ~= "table" then
@@ -439,7 +439,7 @@ local function copy(t, tables) -- taken from lua wiki, slightly adapted
elseif tables[v] then
tcopy[i] = tables[v]
else
- tcopy[i] = copy(v, tables)
+ tcopy[i] = copy(v,tables)
end
end
local mt = getmetatable(t)
@@ -1225,10 +1225,10 @@ function table.reversed(t)
end
end
-function table.reverse(t)
+function table.reverse(t) -- check with 5.3 ?
if t then
local n = #t
- for i=1,floor(n/2) do
+ for i=1,floor(n/2) do -- maybe just n//2
local j = n - i + 1
t[i], t[j] = t[j], t[i]
end
diff --git a/tex/context/base/mkiv/lang-hyp.lua b/tex/context/base/mkiv/lang-hyp.lua
index f73a51b3a..e29446b65 100644
--- a/tex/context/base/mkiv/lang-hyp.lua
+++ b/tex/context/base/mkiv/lang-hyp.lua
@@ -980,7 +980,7 @@ featureset.hyphenonly = hyphenonly == v_yes
implement {
name = "registerhyphenationexception",
actions = traditional.registerexception,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
-- This is a relative large function with local variables and local functions. A previous
@@ -1725,7 +1725,7 @@ featureset.hyphenonly = hyphenonly == v_yes
implement {
name = "showhyphenationtrace",
actions = hyphenators.showhyphenationtrace,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
function nodes.stripdiscretionaries(head)
diff --git a/tex/context/base/mkiv/lang-ini.lua b/tex/context/base/mkiv/lang-ini.lua
index 6d202ff5a..30e086e15 100644
--- a/tex/context/base/mkiv/lang-ini.lua
+++ b/tex/context/base/mkiv/lang-ini.lua
@@ -612,7 +612,7 @@ end)
implement {
name = "languagenumber",
actions = { languages.getnumber, context },
- arguments = { "string", "string", "string", "string" }
+ arguments = "4 strings"
}
implement {
@@ -623,25 +623,25 @@ implement {
implement {
name = "definelanguage",
actions = languages.define,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
name = "setlanguagesynonym",
actions = languages.setsynonym,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
name = "unloadlanguage",
actions = languages.unload,
- arguments = { "string" }
+ arguments = "string"
}
implement {
name = "setlanguageexceptions",
actions = languages.setexceptions,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
diff --git a/tex/context/base/mkiv/lang-rep.lua b/tex/context/base/mkiv/lang-rep.lua
index 172454fc2..a5c4d97c8 100644
--- a/tex/context/base/mkiv/lang-rep.lua
+++ b/tex/context/base/mkiv/lang-rep.lua
@@ -366,11 +366,11 @@ implement {
implement {
name = "addreplacements",
actions = replacements.add,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
name = "addreplacementslist",
actions = replacements.addlist,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/lang-url.lua b/tex/context/base/mkiv/lang-url.lua
index 651c6bd52..95d959206 100644
--- a/tex/context/base/mkiv/lang-url.lua
+++ b/tex/context/base/mkiv/lang-url.lua
@@ -214,7 +214,7 @@ end
implement {
name = "sethyphenatedurlcharacters",
actions = urls.setcharacters,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/lang-wrd.lua b/tex/context/base/mkiv/lang-wrd.lua
index b00375cc0..7363dbb31 100644
--- a/tex/context/base/mkiv/lang-wrd.lua
+++ b/tex/context/base/mkiv/lang-wrd.lua
@@ -420,6 +420,6 @@ implement {
implement {
name = "loadspellchecklist",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = words.load
}
diff --git a/tex/context/base/mkiv/lpdf-epd.lua b/tex/context/base/mkiv/lpdf-epd.lua
index 2fcd28473..cf02b5a22 100644
--- a/tex/context/base/mkiv/lpdf-epd.lua
+++ b/tex/context/base/mkiv/lpdf-epd.lua
@@ -374,6 +374,8 @@ local function get_array(object,document)
end
end
+-- todo: collect chunks
+
local function streamaccess(s,_,what)
if not what or what == "all" or what == "*all" then
local t, n = { }, 0
diff --git a/tex/context/base/mkiv/lpdf-ini.lua b/tex/context/base/mkiv/lpdf-ini.lua
index f8cff2032..8af1fb409 100644
--- a/tex/context/base/mkiv/lpdf-ini.lua
+++ b/tex/context/base/mkiv/lpdf-ini.lua
@@ -1082,10 +1082,28 @@ end
do
+ -- It's a bit of a historical mess here.
+
+ local metadata = nil
local timestamp = backends.timestamp()
- function lpdf.timestamp()
- return timestamp
+ function lpdf.getmetadata()
+ if not metadata then
+ local contextversion = environment.version
+ local luatexversion = format("%1.2f",LUATEXVERSION)
+ local luatexfunctionality = tostring(LUATEXFUNCTIONALITY)
+ metadata = {
+ producer = format("LuaTeX-%s",luatexversion),
+ creator = format("LuaTeX %s %s + ConTeXt MkIV %s",luatexversion,luatexfunctionality,contextversion),
+ luatexversion = luatexversion,
+ contextversion = contextversion,
+ luatexfunctionality = luatexfunctionality,
+ luaversion = tostring(LUAVERSION),
+ platform = os.platform,
+ time = timestamp,
+ }
+ end
+ return metadata
end
function lpdf.settime(n)
@@ -1096,6 +1114,9 @@ do
timestamp = backends.timestamp()
end
end
+ if metadata then
+ metadata.time = timestamp
+ end
return timestamp
end
@@ -1107,10 +1128,11 @@ do
end
function lpdf.id(nodate)
+ local banner = environment.jobname or tex.jobname or "unknown"
if nodate then
- return tex.jobname
+ return banner
else
- return format("%s.%s",tex.jobname,timestamp)
+ return format("%s.%s",banner,timestamp)
end
end
diff --git a/tex/context/base/mkiv/lpdf-mis.lua b/tex/context/base/mkiv/lpdf-mis.lua
index 07dc3dcf1..6d1b09ca0 100644
--- a/tex/context/base/mkiv/lpdf-mis.lua
+++ b/tex/context/base/mkiv/lpdf-mis.lua
@@ -52,6 +52,8 @@ local addtoinfo = lpdf.addtoinfo
local addtopageattributes = lpdf.addtopageattributes
local addtonames = lpdf.addtonames
+local pdfgetmetadata = lpdf.getmetadata
+
local variables = interfaces.variables
local v_stop = variables.stop
@@ -189,6 +191,12 @@ local done = false -- using "setupidentity = function() end" fails as the meani
local function setupidentity()
if not done then
+ local metadata = pdfgetmetadata()
+ local creator = metadata.creator
+ local version = metadata.contextversion
+ local time = metadata.time
+ local jobname = environment.jobname or tex.jobname or "unknown"
+ --
local title = identity.title
if not title or title == "" then
title = tex.jobname
@@ -202,21 +210,16 @@ local function setupidentity()
if author ~= "" then
addtoinfo("Author", pdfunicode(author), author) -- '/Author' in /Info, 'Creator' in XMP
end
- -- local creator = identity.creator or ""
- local creator = "LuaTeX + ConTeXt MkIV" -- has to be the same in CreatorTool
- if creator ~= "" then
- addtoinfo("Creator", pdfunicode(creator), creator) -- '/Creator' in /Info, 'CreatorTool' in XMP
- end
- local currenttimestamp = lpdf.timestamp()
- addtoinfo("CreationDate", pdfstring(formattedtimestamp(currenttimestamp)))
+ addtoinfo("Creator", pdfunicode(creator), creator)
+ addtoinfo("CreationDate", pdfstring(formattedtimestamp(time)))
local date = identity.date or ""
- local pdfdate = formattedtimestamp(date)
+ local pdfdate = date and formattedtimestamp(date)
if pdfdate then
addtoinfo("ModDate", pdfstring(pdfdate), date)
else
-- users should enter the date in 2010-01-19T23:27:50+01:00 format
-- and if not provided that way we use the creation time instead
- addtoinfo("ModDate", pdfstring(formattedtimestamp(currenttimestamp)), currenttimestamp)
+ addtoinfo("ModDate", pdfstring(formattedtimestamp(time)),time)
end
local keywords = identity.keywords or ""
if keywords ~= "" then
@@ -226,11 +229,12 @@ local function setupidentity()
local id = lpdf.id()
addtoinfo("ID", pdfstring(id), id) -- needed for pdf/x
--
- addtoinfo("ConTeXt.Version", environment.version)
- addtoinfo("ConTeXt.Time", os.date("%Y-%m-%d %H:%M"))
- addtoinfo("ConTeXt.Jobname", environment.jobname or tex.jobname)
- addtoinfo("ConTeXt.Url", "www.pragma-ade.com")
- addtoinfo("ConTeXt.Support", "contextgarden.net")
+ addtoinfo("ConTeXt.Version",version)
+ addtoinfo("ConTeXt.Time",os.date("%Y-%m-%d %H:%M"))
+ addtoinfo("ConTeXt.Jobname",jobname)
+ addtoinfo("ConTeXt.Url","www.pragma-ade.com")
+ addtoinfo("ConTeXt.Support","contextgarden.net")
+ addtoinfo("TeX.Support","tug.org")
--
done = true
else
diff --git a/tex/context/base/mkiv/lpdf-pda.xml b/tex/context/base/mkiv/lpdf-pda.xml
index 78ad47f21..efdfc4d7d 100644
--- a/tex/context/base/mkiv/lpdf-pda.xml
+++ b/tex/context/base/mkiv/lpdf-pda.xml
@@ -24,12 +24,17 @@
+
+
-
-
+
+
+
+
+
diff --git a/tex/context/base/mkiv/lpdf-pdx.xml b/tex/context/base/mkiv/lpdf-pdx.xml
index d55e1fdf3..889862c76 100644
--- a/tex/context/base/mkiv/lpdf-pdx.xml
+++ b/tex/context/base/mkiv/lpdf-pdx.xml
@@ -23,12 +23,17 @@
+
+
-
-
+
+
+
+
+
diff --git a/tex/context/base/mkiv/lpdf-pua.xml b/tex/context/base/mkiv/lpdf-pua.xml
index c50e1f05b..f985b54d3 100644
--- a/tex/context/base/mkiv/lpdf-pua.xml
+++ b/tex/context/base/mkiv/lpdf-pua.xml
@@ -23,12 +23,17 @@
+
+
-
-
+
+
+
+
+
diff --git a/tex/context/base/mkiv/lpdf-xmp.lua b/tex/context/base/mkiv/lpdf-xmp.lua
index 2eb573acb..eb15a3582 100644
--- a/tex/context/base/mkiv/lpdf-xmp.lua
+++ b/tex/context/base/mkiv/lpdf-xmp.lua
@@ -27,6 +27,8 @@ local pdfconstant = lpdf.constant
local pdfreference = lpdf.reference
local pdfflushstreamobject = lpdf.flushstreamobject
+local pdfgetmetadata = lpdf.getmetadata
+
-- The XMP packet wrapper is kind of fixed, see page 10 of XMPSpecificationsPart1.pdf from
-- XMP-Toolkit-SDK-CC201607.zip. So we hardcode the id.
@@ -39,47 +41,52 @@ local xpacket = format ( [[
local mapping = {
-- user defined keys (pdfx:)
- ["ConTeXt.Jobname"] = { "context", "rdf:Description/pdfx:ConTeXt.Jobname" },
- ["ConTeXt.Time"] = { "date", "rdf:Description/pdfx:ConTeXt.Time" },
- ["ConTeXt.Url"] = { "context", "rdf:Description/pdfx:ConTeXt.Url" },
- ["ConTeXt.Version"] = { "context", "rdf:Description/pdfx:ConTeXt.Version" },
- ["ID"] = { "id", "rdf:Description/pdfx:ID" }, -- has date
- ["PTEX.Fullbanner"] = { "metadata","rdf:Description/pdfx:PTEX.Fullbanner" },
+ ["ConTeXt.Jobname"] = { "context", "rdf:Description/pdfx:ConTeXt.Jobname" },
+ ["ConTeXt.Time"] = { "date", "rdf:Description/pdfx:ConTeXt.Time" },
+ ["ConTeXt.Url"] = { "context", "rdf:Description/pdfx:ConTeXt.Url" },
+ ["ConTeXt.Support"] = { "context", "rdf:Description/pdfx:ConTeXt.Support" },
+ ["ConTeXt.Version"] = { "context", "rdf:Description/pdfx:ConTeXt.Version" },
+ ["TeX.Support"] = { "metadata", "rdf:Description/pdfx:TeX.Support" },
+ ["LuaTeX.Version"] = { "metadata","rdf:Description/pdfx:LuaTeX.Version" },
+ ["LuaTeX.Functionality"] = { "metadata","rdf:Description/pdfx:LuaTeX.Functionality" },
+ ["LuaTeX.LuaVersion"] = { "metadata","rdf:Description/pdfx:LuaTeX.LuaVersion" },
+ ["LuaTeX.Platform"] = { "metadata","rdf:Description/pdfx:LuaTeX.Platform" },
+ ["ID"] = { "id", "rdf:Description/pdfx:ID" }, -- has date
-- Adobe PDF schema
- ["Keywords"] = { "metadata","rdf:Description/pdf:Keywords" },
- ["Producer"] = { "metadata","rdf:Description/pdf:Producer" },
- -- ["Trapped"] = { "pdf", "rdf:Description/pdf:Trapped" }, -- '/False' in /Info, but 'False' in XMP
+ ["Keywords"] = { "metadata","rdf:Description/pdf:Keywords" },
+ ["Producer"] = { "metadata","rdf:Description/pdf:Producer" },
+ -- ["Trapped"] = { "pdf", "rdf:Description/pdf:Trapped" }, -- '/False' in /Info, but 'False' in XMP
-- Dublin Core schema
- ["Author"] = { "metadata","rdf:Description/dc:creator/rdf:Seq/rdf:li" },
- ["Format"] = { "metadata","rdf:Description/dc:format" }, -- optional, but nice to have
- ["Subject"] = { "metadata","rdf:Description/dc:description/rdf:Alt/rdf:li" },
- ["Title"] = { "metadata","rdf:Description/dc:title/rdf:Alt/rdf:li" },
+ ["Author"] = { "metadata","rdf:Description/dc:creator/rdf:Seq/rdf:li" },
+ ["Format"] = { "metadata","rdf:Description/dc:format" }, -- optional, but nice to have
+ ["Subject"] = { "metadata","rdf:Description/dc:description/rdf:Alt/rdf:li" },
+ ["Title"] = { "metadata","rdf:Description/dc:title/rdf:Alt/rdf:li" },
-- XMP Basic schema
- ["CreateDate"] = { "date", "rdf:Description/xmp:CreateDate" },
- ["CreationDate"] = { "date", "rdf:Description/xmp:CreationDate" }, -- dummy
- ["Creator"] = { "metadata","rdf:Description/xmp:CreatorTool" },
- ["MetadataDate"] = { "date", "rdf:Description/xmp:MetadataDate" },
- ["ModDate"] = { "date", "rdf:Description/xmp:ModDate" }, -- dummy
- ["ModifyDate"] = { "date", "rdf:Description/xmp:ModifyDate" },
+ ["CreateDate"] = { "date", "rdf:Description/xmp:CreateDate" },
+ ["CreationDate"] = { "date", "rdf:Description/xmp:CreationDate" }, -- dummy
+ ["Creator"] = { "metadata","rdf:Description/xmp:CreatorTool" },
+ ["MetadataDate"] = { "date", "rdf:Description/xmp:MetadataDate" },
+ ["ModDate"] = { "date", "rdf:Description/xmp:ModDate" }, -- dummy
+ ["ModifyDate"] = { "date", "rdf:Description/xmp:ModifyDate" },
-- XMP Media Management schema
- ["DocumentID"] = { "id", "rdf:Description/xmpMM:DocumentID" }, -- uuid
- ["InstanceID"] = { "id", "rdf:Description/xmpMM:InstanceID" }, -- uuid
- ["RenditionClass"] = { "pdf", "rdf:Description/xmpMM:RenditionClass" }, -- PDF/X-4
- ["VersionID"] = { "pdf", "rdf:Description/xmpMM:VersionID" }, -- PDF/X-4
+ ["DocumentID"] = { "id", "rdf:Description/xmpMM:DocumentID" }, -- uuid
+ ["InstanceID"] = { "id", "rdf:Description/xmpMM:InstanceID" }, -- uuid
+ ["RenditionClass"] = { "pdf", "rdf:Description/xmpMM:RenditionClass" }, -- PDF/X-4
+ ["VersionID"] = { "pdf", "rdf:Description/xmpMM:VersionID" }, -- PDF/X-4
-- additional entries
-- PDF/X
- ["GTS_PDFXVersion"] = { "pdf", "rdf:Description/pdfxid:GTS_PDFXVersion" },
+ ["GTS_PDFXVersion"] = { "pdf", "rdf:Description/pdfxid:GTS_PDFXVersion" },
-- optional entries
-- all what is visible in the 'document properties --> additional metadata' window
-- XMP Rights Management schema (optional)
- ["Marked"] = { "pdf", "rdf:Description/xmpRights:Marked" },
- -- ["Owner"] = { "metadata", "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li" }, -- maybe useful (not visible)
- -- ["UsageTerms"] = { "metadata", "rdf:Description/xmpRights:UsageTerms" }, -- maybe useful (not visible)
- ["WebStatement"] = { "metadata", "rdf:Description/xmpRights:WebStatement" },
+ ["Marked"] = { "pdf", "rdf:Description/xmpRights:Marked" },
+ -- ["Owner"] = { "metadata", "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li" }, -- maybe useful (not visible)
+ -- ["UsageTerms"] = { "metadata", "rdf:Description/xmpRights:UsageTerms" }, -- maybe useful (not visible)
+ ["WebStatement"] = { "metadata", "rdf:Description/xmpRights:WebStatement" },
-- Photoshop PDF schema (optional)
- ["AuthorsPosition"] = { "metadata", "rdf:Description/photoshop:AuthorsPosition" },
- ["Copyright"] = { "metadata", "rdf:Description/photoshop:Copyright" },
- ["CaptionWriter"] = { "metadata", "rdf:Description/photoshop:CaptionWriter" },
+ ["AuthorsPosition"] = { "metadata", "rdf:Description/photoshop:AuthorsPosition" },
+ ["Copyright"] = { "metadata", "rdf:Description/photoshop:Copyright" },
+ ["CaptionWriter"] = { "metadata", "rdf:Description/photoshop:CaptionWriter" },
}
pdf.setsuppressoptionalinfo(
@@ -100,6 +107,12 @@ local included = backends.included
local pdfsettrailerid = pdf.settrailerid
+local lpdfid = lpdf.id
+
+function lpdf.id() -- overload of ini
+ return lpdfid(included.date)
+end
+
pdf.disablecommand("settrailerid")
function lpdf.settrailerid(v)
@@ -144,14 +157,6 @@ function lpdf.setdates(v)
end
end
-function lpdf.id() -- overload of ini
- local banner = tex.jobname
- if included.date then
- return format("%s.%s",banner,lpdf.timestamp())
- else
- return banner
- end
-end
directives.register("backend.trailerid", lpdf.settrailerid)
directives.register("backend.date", lpdf.setdates)
@@ -251,38 +256,36 @@ local function flushxmpinfo()
commands.pushrandomseed()
commands.setrandomseed(os.time())
- local version = status.luatex_version
- local revision = status.luatex_revision
-
local documentid = "no unique document id here"
local instanceid = "no unique instance id here"
- -- local producer = format("LuaTeX-%i.%02i.%s",math.div(version,100),math.mod(version,100),revision)
- local producer = format("LuaTeX-%0.2f.%s",version/100,revision)
- local creator = "LuaTeX + ConTeXt MkIV"
- local time = lpdf.timestamp()
- local fullbanner = status.banner
+ local metadata = pdfgetmetadata()
+ local time = metadata.time
+ local producer = metadata.producer
+ local creator = metadata.creator
if included.id ~= "fake" then
documentid = "uuid:" .. os.uuid()
instanceid = "uuid:" .. os.uuid()
end
- pdfaddtoinfo("Producer", producer)
- pdfaddtoinfo("Creator", creator)
- pdfaddtoinfo("CreationDate", time)
- pdfaddtoinfo("ModDate", time)
- -- pdfaddtoinfo("PTEX.Fullbanner", fullbanner) -- no checking done on existence
+ pdfaddtoinfo("Producer",producer)
+ pdfaddtoinfo("Creator",creator)
+ pdfaddtoinfo("CreationDate",time)
+ pdfaddtoinfo("ModDate",time)
if add_xmp_blob then
- pdfaddxmpinfo("DocumentID", documentid)
- pdfaddxmpinfo("InstanceID", instanceid)
- pdfaddxmpinfo("Producer", producer)
- pdfaddxmpinfo("CreatorTool", creator)
- pdfaddxmpinfo("CreateDate", time)
- pdfaddxmpinfo("ModifyDate", time)
- pdfaddxmpinfo("MetadataDate", time)
- pdfaddxmpinfo("PTEX.Fullbanner", fullbanner)
+ pdfaddxmpinfo("DocumentID",documentid)
+ pdfaddxmpinfo("InstanceID",instanceid)
+ pdfaddxmpinfo("Producer",producer)
+ pdfaddxmpinfo("CreatorTool",creator)
+ pdfaddxmpinfo("CreateDate",time)
+ pdfaddxmpinfo("ModifyDate",time)
+ pdfaddxmpinfo("MetadataDate",time)
+ pdfaddxmpinfo("LuaTeX.Version",metadata.luatexversion)
+ pdfaddxmpinfo("LuaTeX.Functionality",metadata.luatexfunctionality)
+ pdfaddxmpinfo("LuaTeX.LuaVersion",metadata.luaversion)
+ pdfaddxmpinfo("LuaTeX.Platform",metadata.platform)
local blob = xml.tostring(xml.first(xmp or valid_xmp(),"/x:xmpmeta"))
local md = pdfdictionary {
diff --git a/tex/context/base/mkiv/luat-ini.mkiv b/tex/context/base/mkiv/luat-ini.mkiv
index 25ad7e139..872d27e77 100644
--- a/tex/context/base/mkiv/luat-ini.mkiv
+++ b/tex/context/base/mkiv/luat-ini.mkiv
@@ -265,16 +265,52 @@
% \def\syst_helpers_checked_stripped_csname#1%
% {\if\noexpand#1\letterbackslash\else#1\fi}
-\normalprotected\def\installctxfunction#1#2%
+\normalprotected\def\installctxfunction#1#2% expandable
{\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxfunction("#2",true)}\relax
\expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
-\normalprotected\def\installctxscanner#1#2%
+\normalprotected\def\installctxscanner#1#2% expandable
{\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxscanner("\m_syst_name","#2",true)}\relax
\expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
+\normalprotected\def\installprotectedctxfunction#1#2% protected
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxfunction("#2",true)}\relax
+ \expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
+
+\normalprotected\def\installprotectedctxscanner#1#2% protected
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxscanner("\m_syst_name","#2",true)}\relax
+ \expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
+
+% not yet used
+
+\ifdefined\luafunctioncall \else
+ \protected\def\luafunctioncall{\luafunctioncall}
+\fi
+
+\normalprotected\def\installctxfunctioncall#1#2%
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxfunction("#2",true)}\relax
+ \expandafter\xdef\csname\m_syst_name\endcsname{\luafunctioncall\csname\??luafunction\m_syst_name\endcsname}}
+
+\normalprotected\def\installctxscannercall#1#2%
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxscanner("\m_syst_name","#2",true)}\relax
+ \expandafter\xdef\csname\m_syst_name\endcsname{\luafunctioncall\csname\??luafunction\m_syst_name\endcsname}}
+
+\normalprotected\def\installprotectedctxfunctioncall#1#2%
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxfunction("#2",true)}\relax
+ \normalprotected\expandafter\xdef\csname\m_syst_name\endcsname{\luafunctioncall\csname\??luafunction\m_syst_name\endcsname}}
+
+\normalprotected\def\installprotectedctxscannercall#1#2%
+ {\edef\m_syst_name{\csstring#1}%
+ \global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxscanner("\m_syst_name","#2",true)}\relax
+ \normalprotected\expandafter\xdef\csname\m_syst_name\endcsname{\luafunctioncall\csname\??luafunction\m_syst_name\endcsname}}
+
\normalprotected\def\resetctxscanner#1%
{\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\zerocount
diff --git a/tex/context/base/mkiv/luat-usr.lua b/tex/context/base/mkiv/luat-usr.lua
index e7406782b..ebcb0f0e8 100644
--- a/tex/context/base/mkiv/luat-usr.lua
+++ b/tex/context/base/mkiv/luat-usr.lua
@@ -101,7 +101,7 @@ interfaces.implement {
interfaces.implement {
name = "luathread",
actions = runthread,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
-- local scanners = interfaces.scanners
@@ -177,7 +177,7 @@ lua.registername = registername
implement {
name = "registernamedlua",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(name,message,csname)
if csname and csname ~= "" then
implement {
diff --git a/tex/context/base/mkiv/lxml-css.lua b/tex/context/base/mkiv/lxml-css.lua
index a4d15ba1f..1787c53df 100644
--- a/tex/context/base/mkiv/lxml-css.lua
+++ b/tex/context/base/mkiv/lxml-css.lua
@@ -985,11 +985,11 @@ end
interfaces.implement {
name = "xmlstylevalue",
actions = css.stylevalue,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
interfaces.implement {
name = "xmlmappedstylevalue",
actions = css.mappedstylevalue,
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
}
diff --git a/tex/context/base/mkiv/lxml-ini.lua b/tex/context/base/mkiv/lxml-ini.lua
index f7f882cee..b255477cb 100644
--- a/tex/context/base/mkiv/lxml-ini.lua
+++ b/tex/context/base/mkiv/lxml-ini.lua
@@ -23,16 +23,16 @@ local implement = interfaces.implement
implement { name = "lxmlid", actions = lxml.getid, arguments = "string" }
-implement { name = "xmldoif", actions = lxml.doif, arguments = { "string", "string" } }
-implement { name = "xmldoifnot", actions = lxml.doifnot, arguments = { "string", "string" } }
-implement { name = "xmldoifelse", actions = lxml.doifelse, arguments = { "string", "string" } }
-implement { name = "xmldoiftext", actions = lxml.doiftext, arguments = { "string", "string" } }
-implement { name = "xmldoifnottext", actions = lxml.doifnottext, arguments = { "string", "string" } }
-implement { name = "xmldoifelsetext", actions = lxml.doifelsetext, arguments = { "string", "string" } }
-
-implement { name = "xmldoifempty", actions = lxml.doifempty, arguments = { "string", "string" } }
-implement { name = "xmldoifnotempty", actions = lxml.doifnotempty, arguments = { "string", "string" } }
-implement { name = "xmldoifelseempty", actions = lxml.doifelseempty, arguments = { "string", "string" } }
+implement { name = "xmldoif", actions = lxml.doif, arguments = "2 strings" }
+implement { name = "xmldoifnot", actions = lxml.doifnot, arguments = "2 strings" }
+implement { name = "xmldoifelse", actions = lxml.doifelse, arguments = "2 strings" }
+implement { name = "xmldoiftext", actions = lxml.doiftext, arguments = "2 strings" }
+implement { name = "xmldoifnottext", actions = lxml.doifnottext, arguments = "2 strings" }
+implement { name = "xmldoifelsetext", actions = lxml.doifelsetext, arguments = "2 strings" }
+
+implement { name = "xmldoifempty", actions = lxml.doifempty, arguments = "2 strings" }
+implement { name = "xmldoifnotempty", actions = lxml.doifnotempty, arguments = "2 strings" }
+implement { name = "xmldoifelseempty", actions = lxml.doifelseempty, arguments = "2 strings" }
implement { name = "xmldoifselfempty", actions = lxml.doifempty, arguments = "string" } -- second arg is not passed (used)
implement { name = "xmldoifnotselfempty", actions = lxml.doifnotempty, arguments = "string" } -- second arg is not passed (used)
implement { name = "xmldoifelseselfempty", actions = lxml.doifelseempty, arguments = "string" } -- second arg is not passed (used)
@@ -40,88 +40,88 @@ implement { name = "xmldoifelseselfempty", actions = lxml.doifelseempty, arg
--------- { name = "xmlcontent", actions = lxml.content, arguments = "string" }
--------- { name = "xmlflushstripped", actions = lxml.strip, arguments = { "string", true } }
-implement { name = "xmlall", actions = lxml.all, arguments = { "string", "string" } }
-implement { name = "xmlatt", actions = lxml.att, arguments = { "string", "string" } }
-implement { name = "xmlattdef", actions = lxml.att, arguments = { "string", "string", "string" } }
-implement { name = "xmlattribute", actions = lxml.attribute, arguments = { "string", "string", "string" } }
-implement { name = "xmlattributedef", actions = lxml.attribute, arguments = { "string", "string", "string", "string" } }
+implement { name = "xmlall", actions = lxml.all, arguments = "2 strings" }
+implement { name = "xmlatt", actions = lxml.att, arguments = "2 strings" }
+implement { name = "xmlattdef", actions = lxml.att, arguments = "3 strings" }
+implement { name = "xmlattribute", actions = lxml.attribute, arguments = "3 strings" }
+implement { name = "xmlattributedef", actions = lxml.attribute, arguments = "4 strings" }
implement { name = "xmlbadinclusions", actions = lxml.badinclusions, arguments = "string" }
implement { name = "xmlchainatt", actions = lxml.chainattribute, arguments = { "string", "'/'", "string" } }
implement { name = "xmlchainattdef", actions = lxml.chainattribute, arguments = { "string", "'/'", "string", "string" } }
implement { name = "xmlchecknamespace", actions = xml.checknamespace, arguments = { "lxmlid", "string", "string" } }
-implement { name = "xmlcommand", actions = lxml.command, arguments = { "string", "string", "string" } }
-implement { name = "xmlconcat", actions = lxml.concat, arguments = { "string", "string", "string" } } -- \detokenize{#3}
+implement { name = "xmlcommand", actions = lxml.command, arguments = "3 strings" }
+implement { name = "xmlconcat", actions = lxml.concat, arguments = "3 strings" } -- \detokenize{#3}
implement { name = "xmlconcatrange", actions = lxml.concatrange, arguments = { "string", "string", "string", "string", "string" } } -- \detokenize{#5}
-implement { name = "xmlcontext", actions = lxml.context, arguments = { "string", "string" } }
-implement { name = "xmlcount", actions = lxml.count, arguments = { "string", "string" } }
-implement { name = "xmldelete", actions = lxml.delete, arguments = { "string", "string" } }
+implement { name = "xmlcontext", actions = lxml.context, arguments = "2 strings" }
+implement { name = "xmlcount", actions = lxml.count, arguments = "2 strings" }
+implement { name = "xmldelete", actions = lxml.delete, arguments = "2 strings" }
implement { name = "xmldirect", actions = lxml.direct, arguments = "string" }
implement { name = "xmldirectives", actions = lxml.directives.setup, arguments = "string" }
implement { name = "xmldirectivesafter", actions = lxml.directives.after, arguments = "string" }
implement { name = "xmldirectivesbefore", actions = lxml.directives.before, arguments = "string" }
implement { name = "xmldisplayverbatim", actions = lxml.displayverbatim, arguments = "string" }
-implement { name = "xmlelement", actions = lxml.element, arguments = { "string", "string" } } -- could be integer but now we can alias
-implement { name = "xmlfilter", actions = lxml.filter, arguments = { "string", "string" } }
-implement { name = "xmlfilterlist", actions = lxml.filterlist, arguments = { "string", "string" } }
-implement { name = "xmlfirst", actions = lxml.first, arguments = { "string", "string" } }
+implement { name = "xmlelement", actions = lxml.element, arguments = "2 strings" } -- could be integer but now we can alias
+implement { name = "xmlfilter", actions = lxml.filter, arguments = "2 strings" }
+implement { name = "xmlfilterlist", actions = lxml.filterlist, arguments = "2 strings" }
+implement { name = "xmlfirst", actions = lxml.first, arguments = "2 strings" }
implement { name = "xmlflush", actions = lxml.flush, arguments = "string" }
implement { name = "xmlflushcontext", actions = lxml.context, arguments = "string" }
implement { name = "xmlflushlinewise", actions = lxml.flushlinewise, arguments = "string" }
implement { name = "xmlflushpure", actions = lxml.pure, arguments = "string" }
implement { name = "xmlflushspacewise", actions = lxml.flushspacewise, arguments = "string" }
implement { name = "xmlflushtext", actions = lxml.text, arguments = "string" }
-implement { name = "xmlfunction", actions = lxml.applyfunction, arguments = { "string", "string" } }
+implement { name = "xmlfunction", actions = lxml.applyfunction, arguments = "2 strings" }
implement { name = "xmlinclude", actions = lxml.include, arguments = { "string", "string", "string", true } }
-implement { name = "xmlincludeoptions", actions = lxml.include, arguments = { "string", "string", "string", "string" } }
+implement { name = "xmlincludeoptions", actions = lxml.include, arguments = "4 strings" }
implement { name = "xmlinclusion", actions = lxml.inclusion, arguments = "string" }
implement { name = "xmlinclusionbase", actions = lxml.inclusion, arguments = { "string", false, true } }
implement { name = "xmlinclusions", actions = lxml.inclusions, arguments = "string" }
-implement { name = "xmlindex", actions = lxml.index, arguments = { "string", "string", "string" } } -- can be integer but now we can alias
+implement { name = "xmlindex", actions = lxml.index, arguments = "3 strings" } -- can be integer but now we can alias
implement { name = "xmlinlineverbatim", actions = lxml.inlineverbatim, arguments = "string" }
-implement { name = "xmllast", actions = lxml.last, arguments = { "string", "string" } }
+implement { name = "xmllast", actions = lxml.last, arguments = "2 strings" }
implement { name = "xmllastatt", actions = lxml.lastatt }
implement { name = "xmllastmatch", actions = lxml.lastmatch }
implement { name = "xmllastpar", actions = lxml.lastpar }
-implement { name = "xmlload", actions = lxml.load, arguments = { "string", "string", "string" } }
-implement { name = "xmlloadbuffer", actions = lxml.loadbuffer, arguments = { "string", "string", "string" } }
-implement { name = "xmlloaddata", actions = lxml.loaddata, arguments = { "string", "string", "string" } }
+implement { name = "xmlload", actions = lxml.load, arguments = "3 strings" }
+implement { name = "xmlloadbuffer", actions = lxml.loadbuffer, arguments = "3 strings" }
+implement { name = "xmlloaddata", actions = lxml.loaddata, arguments = "3 strings" }
implement { name = "xmlloaddirectives", actions = lxml.directives.load, arguments = "string" }
implement { name = "xmlmain", actions = lxml.main, arguments = "string" }
implement { name = "xmlmatch", actions = lxml.match, arguments = "string" }
implement { name = "xmlname", actions = lxml.name, arguments = "string" }
implement { name = "xmlnamespace", actions = lxml.namespace, arguments = "string" }
-implement { name = "xmlnonspace", actions = lxml.nonspace, arguments = { "string", "string" } }
-implement { name = "xmlpar", actions = lxml.par, arguments = { "string", "string" } }
-implement { name = "xmlparam", actions = lxml.param, arguments = { "string", "string", "string" } }
+implement { name = "xmlnonspace", actions = lxml.nonspace, arguments = "2 strings" }
+implement { name = "xmlpar", actions = lxml.par, arguments = "2 strings" }
+implement { name = "xmlparam", actions = lxml.param, arguments = "3 strings" }
implement { name = "xmlpath", actions = lxml.path, arguments = { "string", "'/'" } }
implement { name = "xmlpopmatch", actions = lxml.popmatch }
implement { name = "xmlpos", actions = lxml.pos, arguments = "string" }
-implement { name = "xmlpure", actions = lxml.pure, arguments = { "string", "string" } }
+implement { name = "xmlpure", actions = lxml.pure, arguments = "2 strings" }
implement { name = "xmlpushmatch", actions = lxml.pushmatch }
-implement { name = "xmlraw", actions = lxml.raw, arguments = { "string", "string" } }
-implement { name = "xmlrawtex", actions = lxml.rawtex, arguments = { "string", "string" } }
-implement { name = "xmlrefatt", actions = lxml.refatt, arguments = { "string", "string" } }
-implement { name = "xmlregisterns", actions = xml.registerns, arguments = { "string", "string" } }
+implement { name = "xmlraw", actions = lxml.raw, arguments = "2 strings" }
+implement { name = "xmlrawtex", actions = lxml.rawtex, arguments = "2 strings" }
+implement { name = "xmlrefatt", actions = lxml.refatt, arguments = "2 strings" }
+implement { name = "xmlregisterns", actions = xml.registerns, arguments = "2 strings" }
implement { name = "xmlremapname", actions = xml.remapname, arguments = { "lxmlid", "string","string","string" } }
implement { name = "xmlremapnamespace", actions = xml.renamespace, arguments = { "lxmlid", "string", "string" } }
-implement { name = "xmlsave", actions = lxml.save, arguments = { "string", "string" } }
-implement { name = "xmlsetatt", actions = lxml.setatt, arguments = { "string", "string", "string" } }
-implement { name = "xmlsetattribute", actions = lxml.setattribute, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlsetpar", actions = lxml.setpar, arguments = { "string", "string", "string" } }
-implement { name = "xmlsetparam", actions = lxml.setparam, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlsetsetup", actions = lxml.setsetup, arguments = { "string", "string", "string" } }
-implement { name = "xmlsnippet", actions = lxml.snippet, arguments = { "string", "string" } }
-implement { name = "xmlstrip", actions = lxml.strip, arguments = { "string", "string" } }
+implement { name = "xmlsave", actions = lxml.save, arguments = "2 strings" }
+implement { name = "xmlsetatt", actions = lxml.setatt, arguments = "3 strings" }
+implement { name = "xmlsetattribute", actions = lxml.setattribute, arguments = "4 strings" }
+implement { name = "xmlsetpar", actions = lxml.setpar, arguments = "3 strings" }
+implement { name = "xmlsetparam", actions = lxml.setparam, arguments = "4 strings" }
+implement { name = "xmlsetsetup", actions = lxml.setsetup, arguments = "3 strings" }
+implement { name = "xmlsnippet", actions = lxml.snippet, arguments = "2 strings" }
+implement { name = "xmlstrip", actions = lxml.strip, arguments = "2 strings" }
implement { name = "xmlstripanywhere", actions = lxml.strip, arguments = { "string", "string", true, true } }
implement { name = "xmlstripnolines", actions = lxml.strip, arguments = { "string", "string", true } }
-implement { name = "xmlstripped", actions = lxml.stripped, arguments = { "string", "string" } }
+implement { name = "xmlstripped", actions = lxml.stripped, arguments = "2 strings" }
implement { name = "xmlstrippednolines", actions = lxml.stripped, arguments = { "string", "string", true } }
implement { name = "xmltag", actions = lxml.tag, arguments = "string" }
-implement { name = "xmltext", actions = lxml.text, arguments = { "string", "string" } }
-implement { name = "xmltobuffer", actions = lxml.tobuffer, arguments = { "string", "string", "string" } }
+implement { name = "xmltext", actions = lxml.text, arguments = "2 strings" }
+implement { name = "xmltobuffer", actions = lxml.tobuffer, arguments = "3 strings" }
implement { name = "xmltobuffertextonly", actions = lxml.tobuffer, arguments = { "string", "string", "string", false } }
implement { name = "xmltobufferverbose", actions = lxml.tobuffer, arguments = { "string", "string", "string", true, true } }
-implement { name = "xmltofile", actions = lxml.tofile, arguments = { "string", "string", "string" } }
+implement { name = "xmltofile", actions = lxml.tofile, arguments = "3 strings" }
implement { name = "xmltoparameters", actions = lxml.toparameters, arguments = "string" }
implement { name = "xmlverbatim", actions = lxml.verbatim, arguments = "string" }
@@ -132,15 +132,15 @@ implement { name = "xmlprependsetup", actions = lxml.installsetup, arg
implement { name = "xmlappendsetup", actions = lxml.installsetup, arguments = { 2, "string", "string" } } -- 2:*
implement { name = "xmlbeforesetup", actions = lxml.installsetup, arguments = { 3, "string", "string", "string" } } -- 2:*
implement { name = "xmlaftersetup", actions = lxml.installsetup, arguments = { 4, "string", "string", "string" } } -- 2:*
-implement { name = "xmlremovesetup", actions = lxml.removesetup, arguments = { "string", "string" } } -- 1:*
-implement { name = "xmlflushsetups", actions = lxml.flushsetups, arguments = { "string", "string", "string" } } -- 2:*
+implement { name = "xmlremovesetup", actions = lxml.removesetup, arguments = "2 strings" } -- 1:*
+implement { name = "xmlflushsetups", actions = lxml.flushsetups, arguments = "3 strings" } -- 2:*
implement { name = "xmlresetsetups", actions = lxml.resetsetups, arguments = "string" }
-implement { name = "xmlgetindex", actions = lxml.getindex, arguments = { "string", "string" } }
-implement { name = "xmlwithindex", actions = lxml.withindex, arguments = { "string", "string", "string" } }
+implement { name = "xmlgetindex", actions = lxml.getindex, arguments = "2 strings" }
+implement { name = "xmlwithindex", actions = lxml.withindex, arguments = "3 strings" }
-implement { name = "xmlsetentity", actions = xml.registerentity, arguments = { "string", "string" } }
-implement { name = "xmltexentity", actions = lxml.registerentity, arguments = { "string", "string" } }
+implement { name = "xmlsetentity", actions = xml.registerentity, arguments = "2 strings" }
+implement { name = "xmltexentity", actions = lxml.registerentity, arguments = "2 strings" }
implement { name = "xmlsetcommandtotext", actions = lxml.setcommandtotext, arguments = "string" }
implement { name = "xmlsetcommandtonone", actions = lxml.setcommandtonone, arguments = "string" }
diff --git a/tex/context/base/mkiv/lxml-ini.mkiv b/tex/context/base/mkiv/lxml-ini.mkiv
index 6f64e545b..7c97ffb2c 100644
--- a/tex/context/base/mkiv/lxml-ini.mkiv
+++ b/tex/context/base/mkiv/lxml-ini.mkiv
@@ -187,6 +187,10 @@
\let\xmldoifnottext \clf_xmldoifnottext
\let\xmldoifelsetext \clf_xmldoifelsetext
+\let\xmldoifatt \clf_xmldoifatt
+\let\xmldoifnotatt \clf_xmldoifnotatt
+\let\xmldoifelseatt \clf_xmldoifelseatt
+
\let\xmldoifempty \clf_xmldoifempty
\let\xmldoifnotempty \clf_xmldoifnotempty
\let\xmldoifelseempty \clf_xmldoifelseempty
diff --git a/tex/context/base/mkiv/lxml-tex.lua b/tex/context/base/mkiv/lxml-tex.lua
index f1abab9e7..b8280ba9c 100644
--- a/tex/context/base/mkiv/lxml-tex.lua
+++ b/tex/context/base/mkiv/lxml-tex.lua
@@ -64,10 +64,11 @@ local xmlrename = xml.rename
local variables = interfaces and interfaces.variables or { }
-local settings_to_hash = utilities.parsers.settings_to_hash
-local settings_to_set = utilities.parsers.settings_to_set
-local options_to_hash = utilities.parsers.options_to_hash
-local options_to_array = utilities.parsers.options_to_array
+local parsers = utilities.parsers
+local settings_to_hash = parsers.settings_to_hash
+local settings_to_set = parsers.settings_to_set
+local options_to_hash = parsers.options_to_hash
+local options_to_array = parsers.options_to_array
local insertbeforevalue = utilities.tables.insertbeforevalue
local insertaftervalue = utilities.tables.insertaftervalue
@@ -468,7 +469,7 @@ lxml.addindex = addindex
implement {
name = "xmladdindex",
- arguments = { "string" },
+ arguments = "string",
actions = addindex,
}
@@ -820,7 +821,7 @@ local k_parser = class * spaces * key * spaces * rest --value
implement {
name = "xmlinstalldirective",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(name,csname)
if csname then
local keyvalueparser = k_parser / context[csname]
@@ -1989,6 +1990,37 @@ do
contextsprint(notcatcodes,att)
end
+ local ctx_doif = commands.doif
+ local ctx_doifnot = commands.doifnot
+ local ctx_doifelse = commands.doifelse
+
+ implement {
+ name = "xmldoifatt",
+ arguments = "3 strings",
+ actions = function(id,l,v)
+ local e = getid(id)
+ ctx_doif(e and e.at[k] == v or false)
+ end
+ }
+
+ implement {
+ name = "xmldoifnotatt",
+ arguments = "3 strings",
+ actions = function(id,l,v)
+ local e = getid(id)
+ ctx_doifnot(e and e.at[k] == v or false)
+ end
+ }
+
+ implement {
+ name = "xmldoifelseatt",
+ arguments = "3 strings",
+ actions = function(id,l,v)
+ local e = getid(id)
+ ctx_doifelse(e and e.at[k] == v or false)
+ end
+ }
+
end
do
diff --git a/tex/context/base/mkiv/lxml-xml.lua b/tex/context/base/mkiv/lxml-xml.lua
index d1520800f..47a6e8c85 100644
--- a/tex/context/base/mkiv/lxml-xml.lua
+++ b/tex/context/base/mkiv/lxml-xml.lua
@@ -19,6 +19,10 @@ local xmlserialize = xml.serialize
local xmlcollected = xml.collected
local xmlnewhandlers = xml.newhandlers
+local reparsedentity = xml.reparsedentitylpeg -- \Ux{...}
+local unescapedentity = xml.unescapedentitylpeg
+local parsedentity = reparsedentity
+
local function first(collected) -- wrong ?
return collected and collected[1]
end
@@ -355,6 +359,25 @@ function xml.text(id,pattern) -- brrr either content or element (when cdata)
end
end
+function xml.pure(id,pattern)
+ if pattern then
+ local collected = xmlfilter(id,pattern)
+ if collected and #collected > 0 then
+ parsedentity = unescapedentity
+ local s = collected and #collected > 0 and xmltotext(collected[1]) or ""
+ parsedentity = reparsedentity
+ return s
+ else
+ return ""
+ end
+ else
+ parsedentity = unescapedentity
+ local s = xmltotext(id) or ""
+ parsedentity = reparsedentity
+ return s
+ end
+end
+
xml.content = text
--
diff --git a/tex/context/base/mkiv/math-map.lua b/tex/context/base/mkiv/math-map.lua
index 47e5cda0b..2233722a0 100644
--- a/tex/context/base/mkiv/math-map.lua
+++ b/tex/context/base/mkiv/math-map.lua
@@ -651,7 +651,7 @@ end
implement {
name = "setmathattribute",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(alphabet,style)
local data = alphabets[alphabet] or regular
data = data[style] or data.tf
diff --git a/tex/context/base/mkiv/math-noa.lua b/tex/context/base/mkiv/math-noa.lua
index 4c1997a64..529837cfa 100644
--- a/tex/context/base/mkiv/math-noa.lua
+++ b/tex/context/base/mkiv/math-noa.lua
@@ -100,6 +100,7 @@ local setchar = nuts.setchar
local setfam = nuts.setfam
local setsubtype = nuts.setsubtype
local setattr = nuts.setattr
+local setattrlist = nuts.setattrlist
local getfield = nuts.getfield
local getnext = nuts.getnext
@@ -809,6 +810,8 @@ do
setfield(d,"small_fam",fam)
flush_node(sym)
end
+ setattrlist(d,char)
+ setattrlist(f,char)
setsubtype(f,what)
setfield(f,"delim",d)
setfield(f,"class",-1) -- tex itself does this, so not fenceclasses[what]
diff --git a/tex/context/base/mkiv/meta-grd.mkiv b/tex/context/base/mkiv/meta-grd.mkiv
index 8b1a934d6..15a4471e7 100644
--- a/tex/context/base/mkiv/meta-grd.mkiv
+++ b/tex/context/base/mkiv/meta-grd.mkiv
@@ -13,6 +13,8 @@
\writestatus{loading}{MetaPost Graphics / Grids}
+\unprotect
+
%D This used to be a \TEX\ method, and a rather old one too. We keep it around but
%D in a more modern way.
%D
@@ -31,85 +33,177 @@
%D {An example of a grid.}
%D {\getbuffer}
-\startuseMPgraphic{grid}{nx,ny,dx,dy,factor,scale,xstep,ystep,xoffset,yoffset,align}
+% \startuseMPgraphic{grid}{nx,ny,dx,dy,factor,scale,xstep,ystep,xoffset,yoffset,align,s:textcolor,s:rulecolor,rulethickness}
+% begingroup ;
+% save dx, dy, wd, ht, ox, oy, ax, ay ;
+%
+% (dx,dy) = (\MPvar{dx},\MPvar{dy})*\MPvar{factor}*\MPvar{scale} ;
+% (wd,ht) = (\MPvar{nx}*dx,\MPvar{ny}*dy) ;
+% (ox,oy) = (\MPvar{xoffset},\MPvar{yoffset}) ;
+% (ax,ay) = if \MPvar{align} = 1 : (dx,dy)/2 else : origin fi ;
+%
+% draw image (
+% for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ;
+% for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ;
+% )
+% withpen pencircle scaled \MPvar{rulethickness}
+% withcolor "\MPvar{rulecolor}" ;
+% draw image (
+% if \MPvar{xstep} > 0 :
+% for i=1 step \MPvar{xstep} until \MPvar{nx} :
+% draw thetextext.bot(decimal i,(i*dx-ax,-ox));
+% endfor ;
+% fi ;
+% if \MPvar{ystep} > 0 :
+% for i=1 step \MPvar{ystep} until \MPvar{ny} :
+% draw thetextext.lft(decimal i,(-oy,i*dy-ay)) ;
+% endfor ;
+% fi ;
+% )
+% withcolor "\MPvar{color}" ;
+% endgroup ;
+% \stopuseMPgraphic
+%
+% less tokens (not used often):
+%
+% \startuseMPgraphic{grid}{\c!nx,\c!ny,\c!dx,\c!dy,\c!factor,\c!scale,\c!xstep,\c!ystep,\c!xoffset,\c!yoffset,\c!align,s:\c!textcolor,s:\c!rulecolor,\c!rulethickness}
+% begingroup ;
+% save dx, dy, wd, ht, ox, oy, ax, ay ;
+%
+% (dx,dy) = (\MPvar\c!dx,\MPvar\c!dy)*\MPvar\c!factor*\MPvar\c!scale ;
+% (wd,ht) = (\MPvar\c!nx*dx,\MPvar\c!ny*dy) ;
+% (ox,oy) = (\MPvar\c!xoffset,\MPvar\c!yoffset) ;
+% (ax,ay) = if \MPvar\c!align = 1 : (\c!dx,\c!dy)/2 else : origin fi ;
+%
+% draw image (
+% for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ;
+% for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ;
+% )
+% withpen pencircle scaled \MPvar\c!rulethickness\space
+% withcolor "\MPvar\c!rulecolor" ;
+% draw image (
+% if \MPvar\c!xstep > 0 :
+% for i=1 step \MPvar\c!xstep until \MPvar\c!nx :
+% draw thetextext.bot(decimal i,(i*dx-ax,-ox));
+% endfor ;
+% fi ;
+% if \MPvar\c!ystep > 0 :
+% for i=1 step \MPvar\c!ystep until \MPvar\c!ny :
+% draw thetextext.lft(decimal i,(-oy,i*dy-ay)) ;
+% endfor ;
+% fi ;
+% )
+% withcolor "\MPvar\c!color" ;
+% endgroup ;
+% \stopuseMPgraphic
+%
+% \def\typo_grid_base[#1]%
+% {\dontleavehmode
+% \hbox\bgroup
+% \getdummyparameters
+% [\c!nx=10,\c!ny=10,\c!dx=.5,\c!dy=.5,\c!xstep=0,\c!ystep=0,%
+% \c!unit=\s!cm,\c!scale=1,\c!factor=1,%
+% \c!offset=.25ex,%
+% \c!xoffset=\directdummyparameter\c!offset,%
+% \c!yoffset=\directdummyparameter\c!offset,%
+% \c!align=,%
+% \c!color=\currentcolorname,%
+% \c!rulecolor=\currentcolorname,%
+% \c!rulethickness=\linewidth,%
+% #1]%
+% \usedummystyleandcolor\c!style\c!color
+% \edef\p_align{\directdummyparameter\c!align}%
+% \edef\p_unit {\directdummyparameter\c!unit}%
+% \useMPgraphic
+% {grid}%
+% {nx=\directdummyparameter\c!nx,%
+% ny=\directdummyparameter\c!ny,%
+% dx=\directdummyparameter\c!dx\p_unit,%
+% dy=\directdummyparameter\c!dy\p_unit,%
+% factor=\directdummyparameter\c!factor,%
+% scale=\directdummyparameter\c!scale,%
+% xstep=\directdummyparameter\c!xstep,%
+% ystep=\directdummyparameter\c!ystep,%
+% xoffset=\directdummyparameter\c!xoffset,%
+% yoffset=\directdummyparameter\c!yoffset,%
+% color=\directdummyparameter\c!color,%
+% rulecolor=\directdummyparameter\c!rulecolor,%
+% rulethickness=\directdummyparameter\c!rulethickness,%
+% align=\ifx\p_align\v!middle\!!plusone\else\!!zerocount\fi}%
+% \egroup}
+%
+% even less tokens wasted (no need to clog the core with hardly
+% used code):
+
+\startuseMPgraphic{meta:grd:basegrid}
begingroup ;
- save nx, ny, dx, dy, wd, ht, xstep, ystep, xoffset, yoffset, align, xalign, yalign ;
+ save sc, dx, dy, wd, ht, ox, oy, ax, ay ;
- numeric nx ; nx := \MPvar{nx} ;
- numeric ny ; ny := \MPvar{ny} ;
- numeric dx ; dx := \MPvar{factor} * \MPvar{scale} * \MPvar{dx} ;
- numeric dy ; dy := \MPvar{factor} * \MPvar{scale} * \MPvar{dy} ;
- numeric wd ; wd := nx * dx ;
- numeric ht ; ht := ny * dy ;
- numeric xstep ; xstep := \MPvar{xstep} ;
- numeric ystep ; ystep := \MPvar{ystep} ;
- numeric xoffset ; xoffset := \MPvar{xoffset} ;
- numeric yoffset ; yoffset := \MPvar{yoffset} ;
- numeric align ; align := \MPvar{align} ;
- numeric xalign ; xalign := 0 ;
- numeric yalign ; yalign := 0 ;
+ sc = \directdummyparameter\c!factor*\directdummyparameter\c!scale ;
+ dx = \MPdpar\directdummyparameter\c!dx*sc ;
+ dy = \MPdpar\directdummyparameter\c!dy*sc ;
+ wd = \directdummyparameter\c!nx*dx ;
+ ht = \directdummyparameter\c!ny*dy ;
+ ox = \MPdpar\directdummyparameter\c!xoffset\relax ;
+ oy = \MPdpar\directdummyparameter\c!yoffset\relax ;
- if align = 1 :
- xalign := dx/2 ;
- yalign := dy/2 ;
+ if "\directdummyparameter\c!align" = "\v!middle" :
+ ax = \MPdpar\directdummyparameter\c!dx/2
+ ay = \MPdpar\directdummyparameter\c!dy/2
+ else :
+ ax = 0 ;
+ ay = 0 ;
fi ;
- for i=0 step dx until wd :
- draw (i,0) -- (i,ht) ;
- endfor ;
- for i=0 step dy until ht :
- draw (0,i) -- (wd,i) ;
- endfor ;
+ draw image (
+ for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ;
+ for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ;
+ )
+ withpen pencircle scaled \MPdpar\directdummyparameter\c!rulethickness\space
+ withcolor "\directdummyparameter\c!rulecolor" ;
- if xstep > 0 :
- for i=1 step xstep until nx :
- draw thetextext.bot(decimal i,(i*dx-xalign,-xoffset)) ;
- endfor ;
- fi ;
- if ystep > 0 :
- for i=1 step ystep until ny :
- draw thetextext.lft(decimal i,(-yoffset,i*dy-yalign)) ;
- endfor ;
- fi ;
+ draw image (
+ if \directdummyparameter\c!xstep > 0 :
+ for i=1 step \directdummyparameter\c!xstep until \directdummyparameter\c!nx :
+ draw thetextext.bot(decimal i,(i*dx-ax,oy));
+ endfor ;
+ fi ;
+ if \directdummyparameter\c!ystep > 0 :
+ for i=1 step \directdummyparameter\c!ystep until \directdummyparameter\c!ny :
+ draw thetextext.lft(decimal i,(ox,i*dy-ay)) ;
+ endfor ;
+ fi ;
+ )
+ withcolor "\directdummyparameter\c!color" ;
endgroup ;
\stopuseMPgraphic
-\unprotect
-
-\unexpanded\def\basegrid
- {\dosingleempty\typo_grid_base}
-
\def\typo_grid_base[#1]%
- {\hbox\bgroup
+ {\dontleavehmode
+ \hbox\bgroup
\getdummyparameters
- [\c!nx=10,\c!ny=10,\c!dx=.5,\c!dy=.5,\c!xstep=0,\c!ystep=0,%
+ [\c!nx=10,\c!ny=10,%
+ \c!dx=.5,\c!dy=.5,%
+ \c!xstep=0,\c!ystep=0,%
\c!unit=\s!cm,\c!scale=1,\c!factor=1,%
- \c!offset=.25ex,\c!xoffset=\directdummyparameter\c!offset,\c!yoffset=\directdummyparameter\c!offset,%
- \c!align=,
+ \c!offset=.25\exheight,%
+ \c!xoffset=\directdummyparameter\c!offset,%
+ \c!yoffset=\directdummyparameter\c!offset,%
+ \c!align=,%
+ \c!color=\currentcolorname,%
+ \c!rulecolor=\currentcolorname,%
+ \c!rulethickness=\linewidth,%
#1]%
\usedummystyleandcolor\c!style\c!color
- \edef\p_align{\directdummyparameter\c!align}%
- \ifx\p_align\v!middle
- \let\p_align\!!plusone
- \else
- \let\p_align\!!zerocount
- \fi
- \useMPgraphic
- {grid}%
- {nx=\directdummyparameter\c!nx,%
- ny=\directdummyparameter\c!ny,%
- dx=\directdummyparameter\c!dx\directdummyparameter\c!unit,%
- dy=\directdummyparameter\c!dy\directdummyparameter\c!unit,%
- factor=\directdummyparameter\c!factor,%
- scale=\directdummyparameter\c!scale,%
- xstep=\directdummyparameter\c!xstep,%
- ystep=\directdummyparameter\c!ystep,%
- xoffset=\directdummyparameter\c!xoffset,%
- yoffset=\directdummyparameter\c!yoffset,%
- align=\p_align}%
- \egroup}
+ \setexpandeddummyparameter\c!dx{\directdummyparameter\c!dx\directdummyparameter\c!unit}%
+ \setexpandeddummyparameter\c!dy{\directdummyparameter\c!dy\directdummyparameter\c!unit}%
+ \useMPgraphic{meta:grd:basegrid}%
+ \egroup}
+
+\unexpanded\def\basegrid
+ {\dosingleempty\typo_grid_base}
\let\grid\basegrid
diff --git a/tex/context/base/mkiv/meta-imp-mat.mkiv b/tex/context/base/mkiv/meta-imp-mat.mkiv
index 11a9ded34..19a5ba385 100644
--- a/tex/context/base/mkiv/meta-imp-mat.mkiv
+++ b/tex/context/base/mkiv/meta-imp-mat.mkiv
@@ -11,78 +11,74 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D This is just an example library not meant for production.
-
% A few accents:
-
+%
% / for cambria
\startMPextensions
- vardef math_stacker_overbracket_shape =
+ vardef math_stacker_bracket_shape(expr delta, rotate) =
image (
draw
(0,OverlayOffset) --
- (0,OverlayHeight-OverlayOffset) --
- (OverlayWidth,OverlayHeight-OverlayOffset) --
+ (0,delta-OverlayOffset) --
+ (OverlayWidth,delta-OverlayOffset) --
(OverlayWidth,OverlayOffset)
withcolor
OverlayLineColor ;
setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_underbracket_shape =
- math_stacker_overbracket_shape rotated 180
- enddef ;
- vardef math_stacker_overparent_shape =
+ vardef math_stacker_parent_shape(expr delta, rotate) =
image (
draw
(0,OverlayOffset) ...
- (OverlayWidth/2,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth/2,delta-OverlayOffset) ...
(OverlayWidth,OverlayOffset)
withcolor
OverlayLineColor ;
setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_underparent_shape =
- math_stacker_overparent_shape rotated 180
- enddef ;
- vardef math_stacker_overbrace_shape =
+ vardef math_stacker_brace_shape(expr delta, rotate) =
image (
draw
(0,OverlayOffset) ...
- (OverlayWidth/4-OverlayOffset,OverlayHeight-OverlayOffset) ...
- (OverlayWidth/2-OverlayOffset,OverlayHeight-OverlayOffset) ...
- (OverlayWidth/2,OverlayHeight) &
- (OverlayWidth/2,OverlayHeight) ...
- (OverlayWidth/2+OverlayOffset,OverlayHeight-OverlayOffset) ...
- (3OverlayWidth/4+OverlayOffset,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth/4-OverlayOffset,delta-OverlayOffset) ...
+ (OverlayWidth/2-OverlayOffset,delta-OverlayOffset) ...
+ (OverlayWidth/2,delta) &
+ (OverlayWidth/2,delta) ...
+ (OverlayWidth/2+OverlayOffset,delta-OverlayOffset) ...
+ (3OverlayWidth/4+OverlayOffset,delta-OverlayOffset) ...
(OverlayWidth,OverlayOffset)
withcolor
OverlayLineColor ;
setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_underbrace_shape =
- math_stacker_overbrace_shape rotated 180
- enddef ;
- vardef math_stacker_overbar_shape =
+ vardef math_stacker_bar_shape(expr rotate) =
image (
draw
(0,OverlayOffset) -- (OverlayWidth,OverlayOffset)
withcolor
OverlayLineColor ;
setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_underbar_shape =
- math_stacker_overbar_shape rotated 180
- enddef ;
-
% arrows
-
- vardef math_stacker_arrow_shape(expr axis, ex, em) =
+ vardef math_stacker_arrow_shape(expr axis, ex, em, rotate) =
image (
interim ahlength := ex/2;
drawarrow
@@ -90,9 +86,12 @@
withcolor
OverlayLineColor ;
setbounds currentpicture to unitsquare xysized(OverlayWidth,ex) ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_leftrightarrow_shape(expr axis, ex, em) =
+ vardef math_stacker_leftrightarrow_shape(expr axis, ex, em, rotate) =
image (
interim ahlength := ex/2;
drawdblarrow
@@ -100,9 +99,12 @@
withcolor
OverlayLineColor ;
setbounds currentpicture to unitsquare xysized(OverlayWidth,ex) ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_rightoverleftarrow_shape(expr axis, ex, em) =
+ vardef math_stacker_rightoverleftarrow_shape(expr axis, ex, em, rotate) =
image (
interim ahlength := ex/2;
drawdoublearrows
@@ -110,14 +112,11 @@
withcolor
OverlayLineColor ;
setbounds currentpicture to unitsquare xysized(OverlayWidth,ex) ;
+ if rotate :
+ currentpicture := currentpicture rotated 180 ;
+ fi ;
)
enddef ;
- vardef math_stacker_leftarrow_shape(expr axis, ex, em) =
- math_stacker_arrow_shape(axis,ex,em)
- enddef ;
- vardef math_stacker_rightarrow_shape(expr axis, ex, em) =
- math_stacker_arrow_shape(axis,ex,em) rotated 180
- enddef ;
% main handler
@@ -131,55 +130,55 @@
\stopMPextensions
\startuniqueMPgraphic{math:stacker:\number"FE3B4}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_overbracket_shape) ;
+ math_stacker_draw_accent(math_stacker_bracket_shape(OverlayHeight,false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE3B5}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_underbracket_shape) ;
+ math_stacker_draw_accent(math_stacker_bracket_shape(OverlayDepth,true)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE3DC}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_overparent_shape) ;
+ math_stacker_draw_accent(math_stacker_parent_shape(OverlayHeight,false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE3DD}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_underparent_shape) ;
+ math_stacker_draw_accent(math_stacker_parent_shape(OverlayDepth,true)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE3DE}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_overbrace_shape) ;
+ math_stacker_draw_accent(math_stacker_brace_shape(OverlayHeight,false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE3DF}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_underbrace_shape) ;
+ math_stacker_draw_accent(math_stacker_brace_shape(OverlayDepth,true)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE33E}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_overbar_shape) ;
+ math_stacker_draw_accent(math_stacker_bar_shape(false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"FE33F}{axis,ex,em}
- math_stacker_draw_accent(math_stacker_underbar_shape) ;
+ math_stacker_draw_accent(math_stacker_bar_shape(true)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"2190}{axis,ex,em}
- math_stacker_draw_arrow(math_stacker_leftarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em})) ;
+ math_stacker_draw_arrow(math_stacker_arrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em},false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"2192}{axis,ex,em}
- math_stacker_draw_arrow(math_stacker_rightarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em})) ;
+ math_stacker_draw_arrow(math_stacker_arrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em},true)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"2194}{axis,ex,em}
- math_stacker_draw_arrow(math_stacker_leftrightarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em})) ;
+ math_stacker_draw_arrow(math_stacker_leftrightarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em},false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"27F7}{axis,ex,em}
- math_stacker_draw_arrow(math_stacker_leftrightarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em})) ;
+ math_stacker_draw_arrow(math_stacker_leftrightarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em},false)) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{math:stacker:\number"21C4}{axis,ex,em}
- math_stacker_draw_arrow(math_stacker_rightoverleftarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em})) ;
+ math_stacker_draw_arrow(math_stacker_rightoverleftarrow_shape(\MPvar{axis},\MPvar{ex},\MPvar{em},false)) ;
\stopuniqueMPgraphic
%D Radicals:
@@ -202,9 +201,46 @@
withcolor OverlayLineColor ;
\stopuniqueMPgraphic
-% \setupmathstackers
-% [vfenced]
-% [color=darkred,
-% alternative=mp]
-
-\endinput
+\continueifinputfile{meta-imp-mat.mkiv}
+
+\setupmathstackers [both] [color=darkred,alternative=mp]
+\setupmathstackers [top] [color=darkred,alternative=mp]
+\setupmathstackers [bottom] [color=darkred,alternative=mp]
+
+\startTEXpage[offset=10pt]
+
+$
+ \overbracket {a+b+c+d} \quad
+ \underbracket {a+b+c+d} \quad
+ \doublebracket {a+b+c+d}
+$
+\blank[2*big]
+$
+ \overparent {a+b+c+d} \quad
+ \underparent {a+b+c+d} \quad
+ \doubleparent {a+b+c+d}
+$
+\blank[2*big]
+$
+ \overbrace {a+b+c+d} \quad
+ \underbrace {a+b+c+d} \quad
+ \doublebrace {a+b+c+d}
+$
+\blank[2*big]
+$
+ \overbar {a+b+c+d} \quad
+ \underbar {a+b+c+d} \quad
+ \doublebar {a+b+c+d}
+$
+\blank[2*big]
+$
+ \overleftarrow {a+b+c+d} \quad
+ \overrightarrow {a+b+c+d}
+$
+\blank[2*big]
+$
+ \underleftarrow {a+b+c+d} \quad
+ \underrightarrow {a+b+c+d}
+$
+
+\stopTEXpage
diff --git a/tex/context/base/mkiv/meta-ini.mkiv b/tex/context/base/mkiv/meta-ini.mkiv
index 5fc89e2f6..61e3523e6 100644
--- a/tex/context/base/mkiv/meta-ini.mkiv
+++ b/tex/context/base/mkiv/meta-ini.mkiv
@@ -1481,6 +1481,12 @@
\fi
\to \everysetupMPgraphics
+%D Some more helpers (see \type {meta-grd.mkiv} for an example of usage):
+
+\def\MPdpar#1#2{\the\dimexpr#1#2\relax\empty}
+\def\MPnpar#1#2{\the\numexpr#1#2\relax\empty}
+\def\MPspar#1#2{"#1#2"}
+
%D Done.
\protect \endinput
diff --git a/tex/context/base/mkiv/meta-tex.lua b/tex/context/base/mkiv/meta-tex.lua
index d66eab069..fdf118424 100644
--- a/tex/context/base/mkiv/meta-tex.lua
+++ b/tex/context/base/mkiv/meta-tex.lua
@@ -117,13 +117,13 @@ do
implement {
name = "metapostformatted",
actions = metapost.svformat,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "metapostgraphformat",
actions = metapost.nvformat,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
if LUAVERSION < 5.2 then
diff --git a/tex/context/base/mkiv/mlib-ctx.lua b/tex/context/base/mkiv/mlib-ctx.lua
index 0ff28c1c4..c568b92a3 100644
--- a/tex/context/base/mkiv/mlib-ctx.lua
+++ b/tex/context/base/mkiv/mlib-ctx.lua
@@ -87,7 +87,7 @@ end
implement {
name = "setmpextensions",
actions = metapost.setextensions,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -172,7 +172,7 @@ implement {
implement {
name = "mprunset",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(name,connector)
local value = metapost.variables[name]
if value ~= nil then
diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua
index 5e6be614b..19e731b85 100644
--- a/tex/context/base/mkiv/mlib-lua.lua
+++ b/tex/context/base/mkiv/mlib-lua.lua
@@ -696,7 +696,7 @@ do
interfaces.implement {
name = "getMPstored",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(name,key)
context(stores[name][key])
end
diff --git a/tex/context/base/mkiv/mult-aux.lua b/tex/context/base/mkiv/mult-aux.lua
index bcd5ae5be..96cc056ac 100644
--- a/tex/context/base/mkiv/mult-aux.lua
+++ b/tex/context/base/mkiv/mult-aux.lua
@@ -159,7 +159,7 @@ end
interfaces.implement {
name = "definenamespace",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = namespaces.define
}
diff --git a/tex/context/base/mkiv/mult-aux.mkiv b/tex/context/base/mkiv/mult-aux.mkiv
index 96609c4f0..a1aecc354 100644
--- a/tex/context/base/mkiv/mult-aux.mkiv
+++ b/tex/context/base/mkiv/mult-aux.mkiv
@@ -802,10 +802,11 @@
\letvalue\??dummy\empty
- \def\dummyparameter #1{\begincsname\??dummy#1\endcsname}
- \def\directdummyparameter#1{\begincsname\??dummy#1\endcsname}
-\unexpanded\def\setdummyparameter #1{\expandafter\def\csname\??dummy#1\endcsname}
-\unexpanded\def\letdummyparameter #1{\expandafter\let\csname\??dummy#1\endcsname}
+ \def\dummyparameter #1{\begincsname\??dummy#1\endcsname}
+ \def\directdummyparameter #1{\begincsname\??dummy#1\endcsname}
+\unexpanded\def\setdummyparameter #1{\expandafter\def\csname\??dummy#1\endcsname}
+\unexpanded\def\setexpandeddummyparameter#1{\expandafter\edef\csname\??dummy#1\endcsname}
+\unexpanded\def\letdummyparameter #1{\expandafter\let\csname\??dummy#1\endcsname}
% \unexpanded\def\getdummyparameters
% {\mult_interfaces_get_parameters\??dummy}
diff --git a/tex/context/base/mkiv/mult-chk.lua b/tex/context/base/mkiv/mult-chk.lua
index 44a9f739f..712d91f81 100644
--- a/tex/context/base/mkiv/mult-chk.lua
+++ b/tex/context/base/mkiv/mult-chk.lua
@@ -52,13 +52,13 @@ end
implement {
name = "setvalidinterfacekeys",
actions = interfaces.setvalidkeys,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
implement {
name = "addvalidinterfacekeys",
actions = interfaces.addvalidkeys,
- arguments = { "string", "string" }
+ arguments = "2 strings"
}
-- weird code, looks incomplete ... probably an experiment
@@ -89,5 +89,5 @@ end
implement {
name = "getcheckedinterfaceparameters",
actions = interfaces.getcheckedparameters,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings"
}
diff --git a/tex/context/base/mkiv/mult-ini.lua b/tex/context/base/mkiv/mult-ini.lua
index b899d25f2..3f320bf7f 100644
--- a/tex/context/base/mkiv/mult-ini.lua
+++ b/tex/context/base/mkiv/mult-ini.lua
@@ -346,7 +346,7 @@ end
interfaces.implement {
name = "setuserinterface",
actions = interfaces.setuserinterface,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
interfaces.cachedsetups = interfaces.cachedsetups or { }
@@ -387,30 +387,30 @@ function interfaces.message(str)
end
implement { name = "registernamespace", actions = interfaces.registernamespace, arguments = { "integer", "string" } }
-implement { name = "setinterfaceconstant", actions = interfaces.setconstant, arguments = { "string", "string" } }
-implement { name = "setinterfacevariable", actions = interfaces.setvariable, arguments = { "string", "string" } }
-implement { name = "setinterfaceelement", actions = interfaces.setelement, arguments = { "string", "string" } }
-implement { name = "setinterfacemessage", actions = interfaces.setmessage, arguments = { "string", "string", "string" } }
-implement { name = "setinterfacemessages", actions = interfaces.setmessages, arguments = { "string", "string" } }
-implement { name = "showmessage", actions = interfaces.showmessage, arguments = { "string", "string", "string" } }
+implement { name = "setinterfaceconstant", actions = interfaces.setconstant, arguments = "2 strings" }
+implement { name = "setinterfacevariable", actions = interfaces.setvariable, arguments = "2 strings" }
+implement { name = "setinterfaceelement", actions = interfaces.setelement, arguments = "2 strings" }
+implement { name = "setinterfacemessage", actions = interfaces.setmessage, arguments = "3 strings" }
+implement { name = "setinterfacemessages", actions = interfaces.setmessages, arguments = "2 strings" }
+implement { name = "showmessage", actions = interfaces.showmessage, arguments = "3 strings" }
implement {
name = "doifelsemessage",
actions = { interfaces.doifelsemessage, commands.doifelse },
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "getmessage",
actions = { interfaces.getmessage, context },
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
}
implement {
name = "writestatus",
overload = true,
actions = interfaces.writestatus,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index 84b4189dc..0acba3b87 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -294,7 +294,7 @@ return {
--
"getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters",
--
- "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter",
+ "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "setexpandeddummyparameter",
"usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter",
--
"processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist",
@@ -402,7 +402,12 @@ return {
"obeylualines", "obeyluatokens",
"startluacode", "stopluacode", "startlua", "stoplua",
"startctxfunction","stopctxfunction","ctxfunction",
- "startctxfunctiondefinition","stopctxfunctiondefinition", "installctxfunction",
+ "startctxfunctiondefinition","stopctxfunctiondefinition",
+ "installctxfunction", "installctxfunctioncall",
+ "installprotectedctxfunction", "installprotectedctxfunctioncall",
+ "installctxscanner", "installctxscannercall",
+ "resetctxscanner",
+ "installprotectedctxscanner", "installprotectedctxscannercall",
"cldprocessfile", "cldloadfile", "cldcontext", "cldcommand",
--
"carryoverpar",
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index 601a615a0..1cd5f5810 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -282,6 +282,7 @@ return {
"lpcode",
"luaescapestring",
"luafunction",
+ "luafunctioncall",
"luatexbanner",
"luatexrevision",
"luatexversion",
diff --git a/tex/context/base/mkiv/pack-obj.lua b/tex/context/base/mkiv/pack-obj.lua
index f68c1ba0c..3f2b2edfe 100644
--- a/tex/context/base/mkiv/pack-obj.lua
+++ b/tex/context/base/mkiv/pack-obj.lua
@@ -96,13 +96,13 @@ jobobjects.page = getobjectpage
-- implement {
-- name = "objectnumber",
-- actions = { getobjectnumber, context },
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- }
--
-- implement {
-- name = "objectpage",
-- actions = { getobjectpage, context },
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- }
--
-- implement {
@@ -212,13 +212,13 @@ implement {
implement {
name = "restoreobject",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = objects.restore,
}
implement {
name = "doifelseobject",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(ns,id)
ctx_doifelse(data[ns][id])
-- ctx_doifelse(objects.reference(ns,id))
@@ -227,7 +227,7 @@ implement {
implement {
name = "doifelseobjectreference",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(ns,id)
-- ctx_doifelse(data[ns][id])
ctx_doifelse(objects.reference(ns,id))
@@ -252,7 +252,7 @@ implement {
implement {
name = "getobjectdimensions",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(ns,id)
local object = data[ns][id]
local w, h, d, o = 0, 0, 0, 0
diff --git a/tex/context/base/mkiv/page-cst.lua b/tex/context/base/mkiv/page-cst.lua
index 8b8214ab3..155d6e8b0 100644
--- a/tex/context/base/mkiv/page-cst.lua
+++ b/tex/context/base/mkiv/page-cst.lua
@@ -1271,13 +1271,13 @@ interfaces.implement {
interfaces.implement {
name = "preparecolumnsetflush",
actions = columnsets.prepareflush,
- arguments = { "string" },
+ arguments = "string",
}
interfaces.implement {
name = "finishcolumnsetflush",
actions = columnsets.finishflush,
- arguments = { "string" },
+ arguments = "string",
}
interfaces.implement {
@@ -1289,13 +1289,13 @@ interfaces.implement {
interfaces.implement {
name = "setvsizecolumnset",
actions = columnsets.setvsize,
- arguments = { "string" },
+ arguments = "string",
}
interfaces.implement {
name = "sethsizecolumnset",
actions = columnsets.sethsize,
- arguments = { "string" },
+ arguments = "string",
}
interfaces.implement {
@@ -1423,7 +1423,7 @@ interfaces.implement {
interfaces.implement {
name = "columnsetgoto",
actions = columnsets["goto"],
- arguments = { "string" , "string" },
+ arguments = "2 strings",
}
interfaces.implement {
diff --git a/tex/context/base/mkiv/page-ini.lua b/tex/context/base/mkiv/page-ini.lua
index 6325e1d39..5b73c9729 100644
--- a/tex/context/base/mkiv/page-ini.lua
+++ b/tex/context/base/mkiv/page-ini.lua
@@ -164,7 +164,7 @@ end)
interfaces.implement {
name = "markpage",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = pages.mark
}
diff --git a/tex/context/base/mkiv/page-inj.mkvi b/tex/context/base/mkiv/page-inj.mkvi
index e03569f23..cabd07bac 100644
--- a/tex/context/base/mkiv/page-inj.mkvi
+++ b/tex/context/base/mkiv/page-inj.mkvi
@@ -32,6 +32,11 @@
\let\page_boxes_flush_before\clf_flushpageinjectionsbefore
\let\page_boxes_flush_after \clf_flushpageinjectionsafter
+\def\page_injections_flush_indeed
+ {\scrn_canvas_synchronize_set{\pageinjectionparameter\c!width}{\pageinjectionparameter\c!height}%
+ \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}%
+ \scrn_canvas_synchronize_reset}
+
\def\page_injections_flush_saved#name#parameters%
{\begingroup
\edef\currentpageinjection{#name}%
@@ -39,7 +44,7 @@
\edef\currentpageinjectionalternative {\pageinjectionparameter \c!alternative }%
\edef\p_page_injectionalternative_rederingsetup{\pageinjectionalternativeparameter\c!renderingsetup}%
\page_injections_nextpage
- \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}%
+ \page_injections_flush_indeed
\endgroup}
\unexpanded\def\pageinjection
@@ -104,12 +109,23 @@
\page_injections_place
\endgroup}
+% \def\page_injections_place
+% {\edef\currentpageinjectionalternative {\pageinjectionparameter \c!alternative }%
+% \edef\p_page_injectionalternative_rederingsetup{\pageinjectionalternativeparameter\c!renderingsetup}%
+% \page_injections_nextpage
+% \ifx\currentpageinjectionalternative\v!none \else % increment counter but don’t generate output
+% \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}%
+% \fi}
+
\def\page_injections_place
{\edef\currentpageinjectionalternative {\pageinjectionparameter \c!alternative }%
\edef\p_page_injectionalternative_rederingsetup{\pageinjectionalternativeparameter\c!renderingsetup}%
\page_injections_nextpage
\ifx\currentpageinjectionalternative\v!none \else % increment counter but don’t generate output
- \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}%
+ \forgetparindent
+ \dontcomplain
+ \setconstant\shipoutfinalizemethod\zerocount
+ \page_injections_flush_indeed
\fi}
\def\page_injections_nextpage
diff --git a/tex/context/base/mkiv/page-ins.lua b/tex/context/base/mkiv/page-ins.lua
index 4791bc69b..0323952d0 100644
--- a/tex/context/base/mkiv/page-ins.lua
+++ b/tex/context/base/mkiv/page-ins.lua
@@ -102,7 +102,7 @@ implement {
implement {
name = "setinsertionlocation",
actions = inserts.setlocation,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index 5742ce8c4..a0fb63ca2 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -737,8 +737,9 @@
\def\page_sides_wrapup
{% we need to do this aftergroup
- \ignoreparskip \aftergroup\ignoreparskip
- \ignorespaces \aftergroup\ignorespaces
+ \aftergroup\par
+ \aftergroup\ignoreparskip
+ \aftergroup\ignorespaces
}
\def\page_sides_check_floats_indeed
diff --git a/tex/context/base/mkiv/phys-dim.lua b/tex/context/base/mkiv/phys-dim.lua
index 71c9b0bd4..363b4a79c 100644
--- a/tex/context/base/mkiv/phys-dim.lua
+++ b/tex/context/base/mkiv/phys-dim.lua
@@ -966,4 +966,4 @@ implement { name = "digits_normal", actions = makedigits, arguments = "string
implement { name = "digits_reverse", actions = makedigits, arguments = { "string", true } }
implement { name = "unit_normal", actions = makeunit, arguments = "string"}
implement { name = "unit_reverse", actions = makeunit, arguments = { "string", true } }
-implement { name = "registerunit", actions = registerunit, arguments = { "string", "string" } }
+implement { name = "registerunit", actions = registerunit, arguments = "2 strings" }
diff --git a/tex/context/base/mkiv/publ-aut.lua b/tex/context/base/mkiv/publ-aut.lua
index 91d38a8d9..be0c771a3 100644
--- a/tex/context/base/mkiv/publ-aut.lua
+++ b/tex/context/base/mkiv/publ-aut.lua
@@ -975,7 +975,7 @@ publications.sortmethods.authoryear = {
implement {
name = "btxremapauthor",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(k,v)
local a = { splitauthor(k,true) }
local s1 = sequentialhash(a)
diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua
index 038a15d5a..8497b190f 100644
--- a/tex/context/base/mkiv/publ-ini.lua
+++ b/tex/context/base/mkiv/publ-ini.lua
@@ -648,7 +648,7 @@ local findallused do
implement {
name = "btxdoifelsematches",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(dataset,tag,expression)
local find = publications.finder(dataset,expression)
local okay = false
@@ -1009,30 +1009,28 @@ function publications.lastofrange(dataset,tag,name)
end
end
-local three_strings = { "string", "string", "string" }
-
implement {
name = "btxsingularorplural",
actions = { publications.singularorplural, ctx_doifelse },
- arguments = three_strings
+ arguments = "3 strings"
}
implement {
name = "btxoneorrange",
actions = { publications.oneorrange, function(b) if b == nil then ctx_gobbletwoarguments() else ctx_doifelse(b) end end },
- arguments = three_strings
+ arguments = "3 strings"
}
implement {
name = "btxfirstofrange",
actions = { publications.firstofrange, context },
- arguments = three_strings
+ arguments = "3 strings"
}
implement {
name = "btxlastofrange",
actions = { publications.lastofrange, context },
- arguments = three_strings
+ arguments = "3 strings"
}
-- basic loading
@@ -1237,13 +1235,13 @@ end
implement {
name = "btxaddentry",
+ arguments = "3 strings",
actions = function(name,settings,content)
local dataset = datasets[name]
if dataset then
publications.addtexentry(dataset,settings,content)
end
end,
- arguments = { "string", "string", "string" }
}
function publications.checkeddataset(name,default)
@@ -1260,12 +1258,13 @@ end
implement {
name = "btxsetdataset",
+ arguments = "2 strings",
actions = { publications.checkeddataset, context },
- arguments = { "string", "string"}
}
implement {
name = "btxsetentry",
+ arguments = "2 strings",
actions = function(name,tag)
local dataset = rawget(datasets,name)
if dataset then
@@ -1278,7 +1277,6 @@ implement {
report("unknown dataset %a",name)
end
end,
- arguments = { "string", "string" },
}
-- rendering of fields
@@ -1558,19 +1556,19 @@ do
publications.okay = okay
- implement { name = "btxfield", actions = btxfield, arguments = { "string", "string", "string" } }
- implement { name = "btxdetail", actions = btxdetail, arguments = { "string", "string", "string" } }
- implement { name = "btxflush", actions = btxflush, arguments = { "string", "string", "string" } }
- implement { name = "btxdirect", actions = btxdirect, arguments = { "string", "string", "string" } }
+ implement { name = "btxfield", actions = btxfield, arguments = "3 strings" }
+ implement { name = "btxdetail", actions = btxdetail, arguments = "3 strings" }
+ implement { name = "btxflush", actions = btxflush, arguments = "3 strings" }
+ implement { name = "btxdirect", actions = btxdirect, arguments = "3 strings" }
implement { name = "btxfieldname", actions = { get, context }, arguments = { "string", "string", "string", false, false } }
implement { name = "btxfieldtype", actions = { get, context }, arguments = { "string", "string", "string", true, false } }
implement { name = "btxfoundname", actions = { get, context }, arguments = { "string", "string", "string", false, true } }
implement { name = "btxfoundtype", actions = { get, context }, arguments = { "string", "string", "string", true, true } }
- implement { name = "btxdoifelse", actions = { okay, ctx_doifelse }, arguments = { "string", "string", "string" } }
- implement { name = "btxdoif", actions = { okay, ctx_doif }, arguments = { "string", "string", "string" } }
- implement { name = "btxdoifnot", actions = { okay, ctx_doifnot }, arguments = { "string", "string", "string" } }
+ implement { name = "btxdoifelse", actions = { okay, ctx_doifelse }, arguments = "3 strings" }
+ implement { name = "btxdoif", actions = { okay, ctx_doif }, arguments = "3 strings" }
+ implement { name = "btxdoifnot", actions = { okay, ctx_doifnot }, arguments = "3 strings" }
end
@@ -2041,8 +2039,8 @@ do
implement {
name = "btxflushpages",
+ arguments = "2 strings",
actions = btxflushpages,
- arguments = { "string", "string" }
}
local function identical(a,b)
@@ -2277,20 +2275,20 @@ do
implement {
name = "btxuservariable",
+ arguments = "2 strings",
actions = { getuserdata, context },
- arguments = { "string", "string" }
}
implement {
name = "btxdoifelseuservariable",
+ arguments = "2 strings",
actions = { getuserdata, ctx_doifelse },
- arguments = { "string", "string" }
}
-- implement {
-- name = "btxresolvelistreference",
+ -- arguments = "2 strings",
-- actions = lists.resolve,
- -- arguments = { "string", "string" }
-- }
implement {
@@ -2315,32 +2313,32 @@ do
implement {
name = "btxpreparelistentries",
+ arguments = "string",
actions = lists.prepareentries,
- arguments = { "string" },
}
implement {
name = "btxfetchlistentries",
+ arguments = "string",
actions = lists.fetchentries,
- arguments = { "string" },
}
implement {
name = "btxflushlistentry",
+ arguments = "2 strings",
actions = lists.flushentry,
- arguments = { "string", "integer" }
}
implement {
name = "btxflushlisttag",
+ arguments = "2 strings",
actions = lists.flushtag,
- arguments = { "string", "integer" }
}
implement {
name = "btxflushlistcombi",
+ arguments = "2 strings",
actions = lists.flushcombi,
- arguments = { "string", "string" }
}
implement {
@@ -2351,8 +2349,8 @@ do
implement {
name = "btxdoifelsecombiinlist",
+ arguments = "2 strings",
actions = { lists.combiinlist, ctx_doifelse },
- arguments = { "string", "string" }
}
end
@@ -3374,8 +3372,8 @@ do
implement {
name = "btxlistvariant",
+ arguments = "5 strings",
actions = btxlistvariant,
- arguments = { "string", "string", "string", "string", "string" } -- not integer here
}
function listvariants.default(dataset,block,tag,variant)
@@ -3440,7 +3438,7 @@ do
implement {
name = "checkinterfacechain",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(str,command)
local chain = lpegmatch(splitter,str)
if #chain > 0 then
diff --git a/tex/context/base/mkiv/publ-jrn.lua b/tex/context/base/mkiv/publ-jrn.lua
index 0cc41862f..fba994466 100644
--- a/tex/context/base/mkiv/publ-jrn.lua
+++ b/tex/context/base/mkiv/publ-jrn.lua
@@ -156,7 +156,7 @@ if implement then
implement {
name = "btxaddjournal",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = { journals.add, context }
}
diff --git a/tex/context/base/mkiv/publ-reg.lua b/tex/context/base/mkiv/publ-reg.lua
index b40fbc80a..9ee574929 100644
--- a/tex/context/base/mkiv/publ-reg.lua
+++ b/tex/context/base/mkiv/publ-reg.lua
@@ -121,7 +121,7 @@ implement {
implement {
name = "btxtoregister",
actions = btxtoregister,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
-- context.setregisterentry (
@@ -221,5 +221,5 @@ publications.authortoregister = authortoregister
implement {
name = "btxauthortoregister",
actions = authortoregister,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/scrn-but.lua b/tex/context/base/mkiv/scrn-but.lua
index c791f9718..da0d5e9f4 100644
--- a/tex/context/base/mkiv/scrn-but.lua
+++ b/tex/context/base/mkiv/scrn-but.lua
@@ -22,5 +22,5 @@ end
interfaces.implement {
name = "registerbuttons",
actions = registerbuttons,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
diff --git a/tex/context/base/mkiv/scrn-fld.lua b/tex/context/base/mkiv/scrn-fld.lua
index f68cc039d..046b7864f 100644
--- a/tex/context/base/mkiv/scrn-fld.lua
+++ b/tex/context/base/mkiv/scrn-fld.lua
@@ -66,7 +66,7 @@ implement {
implement {
name = "definefieldset",
actions = defineset,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/scrn-fld.mkvi b/tex/context/base/mkiv/scrn-fld.mkvi
index 38c4e1461..dec334209 100644
--- a/tex/context/base/mkiv/scrn-fld.mkvi
+++ b/tex/context/base/mkiv/scrn-fld.mkvi
@@ -47,7 +47,7 @@
%D A definition can refer to this category:
%D
%D \starttyping
-%D \definefieldbody [email] [type=line,category=all-email,default=pragma@wxs.nl]
+%D \definefieldbody [email] [type=line,category=all-email,default=pragma@xs4all.nl]
%D \stoptyping
%D
%D A copy of a field is made as follows:
diff --git a/tex/context/base/mkiv/scrn-pag.mkvi b/tex/context/base/mkiv/scrn-pag.mkvi
index d96d8d3c1..7695443ad 100644
--- a/tex/context/base/mkiv/scrn-pag.mkvi
+++ b/tex/context/base/mkiv/scrn-pag.mkvi
@@ -203,11 +203,16 @@
paperheight \printpaperheight
\relax}
-\def\scrn_canvas_synchronize_simple_indeed
+\def\scrn_canvas_synchronize_set#1#2%
{\clf_setupcanvas
- paperwidth \printpaperwidth
- paperheight \printpaperheight
- \relax
+ paperwidth \dimexpr#1\relax
+ paperheight \dimexpr#2\relax
+ \relax}
+
+\let\scrn_canvas_synchronize_reset\scrn_canvas_synchronize_only
+
+\def\scrn_canvas_synchronize_simple_indeed
+ {\scrn_canvas_synchronize_only
%\global\let\scrn_canvas_synchronize_simple \relax
\global\let\scrn_canvas_synchronize_complex\relax}
diff --git a/tex/context/base/mkiv/scrn-wid.lua b/tex/context/base/mkiv/scrn-wid.lua
index 636d547da..5b70bec75 100644
--- a/tex/context/base/mkiv/scrn-wid.lua
+++ b/tex/context/base/mkiv/scrn-wid.lua
@@ -288,7 +288,7 @@ end
implement {
name = "renderingvar",
actions = { renderings.var, context },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/scrp-ini.lua b/tex/context/base/mkiv/scrp-ini.lua
index d5cad643f..9bd70e30a 100644
--- a/tex/context/base/mkiv/scrp-ini.lua
+++ b/tex/context/base/mkiv/scrp-ini.lua
@@ -973,7 +973,7 @@ implement {
implement {
name = "setscript",
actions = scripts.set,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
diff --git a/tex/context/base/mkiv/sort-ini.lua b/tex/context/base/mkiv/sort-ini.lua
index 7cd28d08f..f90b70be5 100644
--- a/tex/context/base/mkiv/sort-ini.lua
+++ b/tex/context/base/mkiv/sort-ini.lua
@@ -53,14 +53,15 @@ have language etc properties that then can be used.
local gsub, find, rep, sub, sort, concat, tohash, format = string.gsub, string.find, string.rep, string.sub, table.sort, table.concat, table.tohash, string.format
local utfbyte, utfchar, utfcharacters, utfvalues = utf.byte, utf.char, utf.characters, utf.values
local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset
-local P, Cs, R, S, lpegmatch = lpeg.P, lpeg.Cs, lpeg.R, lpeg.S, lpeg.match
+local P, Cs, R, S, lpegmatch, lpegpatterns = lpeg.P, lpeg.Cs, lpeg.R, lpeg.S, lpeg.match, lpeg.patterns
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
-local trace_tests = false trackers.register("sorters.tests", function(v) trace_tests = v end)
-local trace_methods = false trackers.register("sorters.methods", function(v) trace_methods = v end)
-local trace_orders = false trackers.register("sorters.orders", function(v) trace_orders = v end)
+local trace_tests = false trackers.register("sorters.tests", function(v) trace_tests = v end)
+local trace_methods = false trackers.register("sorters.methods", function(v) trace_methods = v end)
+local trace_orders = false trackers.register("sorters.orders", function(v) trace_orders = v end)
+local trace_replacements= false trackers.register("sorters.replacements", function(v) trace_replacements = v end)
local report_sorters = logs.reporter("languages","sorters")
@@ -523,7 +524,7 @@ local function prepare() -- todo: test \Ux{hex}
return pattern
end
-function sorters.strip(str) -- todo: only letters and such
+local function strip(str) -- todo: only letters and such
if str and str ~= "" then
return lpegmatch(pattern or prepare(),str)
else
@@ -531,6 +532,8 @@ function sorters.strip(str) -- todo: only letters and such
end
end
+sorters.strip = strip
+
local function firstofsplit(entry)
-- numbers are left padded by spaces
local split = entry.split
@@ -553,15 +556,35 @@ sorters.firstofsplit = firstofsplit
-- we know what combinations make sense we can optimize this
function splitters.utf(str,checked) -- we could append m and u but this is cleaner, s is for tracing
- if #replacements > 0 then
+ local nofreplacements = #replacements
+ if nofreplacements > 0 then
-- todo make an lpeg for this
- for k=1,#replacements do
- local v = replacements[k]
- local s = v[1]
- if find(str,s) then
- str = gsub(str,s,v[2])
+ local replacer = replacements.replacer
+ if not replacer then
+ local rep = { }
+ for i=1,nofreplacements do
+ local r = replacements[i]
+ rep[strip(r[1])] = strip(r[2])
+ end
+ replacer = lpeg.utfchartabletopattern(rep)
+ replacer = Cs((replacer/rep + lpegpatterns.utf8character)^0)
+ replacements.replacer = replacer
+ end
+ local rep = lpegmatch(replacer,str)
+ if rep and rep ~= str then
+ if trace_replacements then
+ report_sorters("original : %s",str)
+ report_sorters("replacement: %s",rep)
end
+ str = rep
end
+ -- for k=1,#replacements do
+ -- local v = replacements[k]
+ -- local s = v[1]
+ -- if find(str,s) then
+ -- str = gsub(str,s,v[2])
+ -- end
+ -- end
end
local m_case, z_case, p_case, m_mapping, z_mapping, p_mapping, char, byte, n = { }, { }, { }, { }, { }, { }, { }, { }, 0
local nm, nz, np = 0, 0, 0
@@ -797,3 +820,16 @@ function sorters.sort(entries,cmp)
end)
end
end
+
+-- helper
+
+function sorters.replacementlist(list)
+ local replacements = { }
+ for i=1,#list do
+ replacements[i] = {
+ list[i],
+ utfchar(replacementoffset+i),
+ }
+ end
+ return replacements
+end
diff --git a/tex/context/base/mkiv/spac-ver.lua b/tex/context/base/mkiv/spac-ver.lua
index 288630a5d..969a195e1 100644
--- a/tex/context/base/mkiv/spac-ver.lua
+++ b/tex/context/base/mkiv/spac-ver.lua
@@ -2180,7 +2180,7 @@ do
name = "vspacingdefine",
actions = vspacing.setmap,
scope = "private",
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -2208,7 +2208,7 @@ do
name = "definesnapmethod",
actions = vspacing.definesnapmethod,
scope = "private",
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
-- local remove_node = nodes.remove
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 531068f8a..aa6ed92ea 100644
Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 22eee2a81..70204080a 100644
Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ
diff --git a/tex/context/base/mkiv/strc-bkm.lua b/tex/context/base/mkiv/strc-bkm.lua
index e30a91820..ee9233a9a 100644
--- a/tex/context/base/mkiv/strc-bkm.lua
+++ b/tex/context/base/mkiv/strc-bkm.lua
@@ -523,5 +523,5 @@ implement {
implement {
name = "overloadbookmark",
actions = bookmarks.overload,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
diff --git a/tex/context/base/mkiv/strc-blk.lua b/tex/context/base/mkiv/strc-blk.lua
index 492abc768..703d36379 100644
--- a/tex/context/base/mkiv/strc-blk.lua
+++ b/tex/context/base/mkiv/strc-blk.lua
@@ -157,6 +157,6 @@ end
-- interface
implement { name = "definestructureblock", actions = blocks.define, arguments = "string" }
-implement { name = "savestructureblock", actions = blocks.save, arguments = { "string", "string" ,"string" } }
-implement { name = "selectstructureblock", actions = blocks.select, arguments = { "string", "string" ,"string", "string" } }
-implement { name = "setstructureblockstate", actions = blocks.setstate, arguments = { "string", "string" ,"string" } }
+implement { name = "savestructureblock", actions = blocks.save, arguments = "3 strings" }
+implement { name = "selectstructureblock", actions = blocks.select, arguments = "4 strings" }
+implement { name = "setstructureblockstate", actions = blocks.setstate, arguments = "3 strings" }
diff --git a/tex/context/base/mkiv/strc-doc.lua b/tex/context/base/mkiv/strc-doc.lua
index 93d8db56b..2de26ac64 100644
--- a/tex/context/base/mkiv/strc-doc.lua
+++ b/tex/context/base/mkiv/strc-doc.lua
@@ -1029,11 +1029,11 @@ implement { name = "structurecatcodedget", actions = sections.structuredat
implement { name = "structuregivencatcodedget", actions = sections.structuredata, arguments = { false, "string", false, "integer" } }
implement { name = "structureautocatcodedget", actions = sections.structuredata, arguments = { false, "string", false, "string" } }
-implement { name = "namedstructurevariable", actions = sections.structuredata, arguments = { "string", "string" } }
-implement { name = "namedstructureuservariable", actions = sections.userdata, arguments = { "string", "string" } }
+implement { name = "namedstructurevariable", actions = sections.structuredata, arguments = "2 strings" }
+implement { name = "namedstructureuservariable", actions = sections.userdata, arguments = "2 strings" }
-implement { name = "setstructurelevel", actions = sections.setlevel, arguments = { "string", "string" } }
-implement { name = "getstructurelevel", actions = sections.getcurrentlevel, arguments = { "string" } }
+implement { name = "setstructurelevel", actions = sections.setlevel, arguments = "2 strings" }
+implement { name = "getstructurelevel", actions = sections.getcurrentlevel, arguments = "string" }
implement { name = "setstructurenumber", actions = sections.setnumber, arguments = { "integer", "string" } } -- string as we support +-
implement { name = "getstructurenumber", actions = sections.getnumber, arguments = { "integer" } }
implement { name = "getsomestructurenumber", actions = sections.getnumber, arguments = { "integer", "string" } }
diff --git a/tex/context/base/mkiv/strc-lev.lua b/tex/context/base/mkiv/strc-lev.lua
index c06e209f6..74b64a09c 100644
--- a/tex/context/base/mkiv/strc-lev.lua
+++ b/tex/context/base/mkiv/strc-lev.lua
@@ -83,7 +83,7 @@ end
implement {
name = "definesectionlevels",
actions = definesectionlevels,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua
index a235fac75..13bdf7786 100644
--- a/tex/context/base/mkiv/strc-lst.lua
+++ b/tex/context/base/mkiv/strc-lst.lua
@@ -1159,7 +1159,7 @@ implement { name = "listsize", actions = { lists.size, context } }
implement { name = "listlocation", actions = { lists.location, context }, arguments = "integer" }
implement { name = "listlabel", actions = { lists.label, context }, arguments = { "integer", "string" } }
implement { name = "listrealpage", actions = { lists.realpage, context }, arguments = { "string", "integer" } }
-implement { name = "listgroupindex", actions = { lists.groupindex, context }, arguments = { "string", "string" } }
+implement { name = "listgroupindex", actions = { lists.groupindex, context }, arguments = "2 strings", }
implement {
name = "currentsectiontolist",
diff --git a/tex/context/base/mkiv/strc-mar.lua b/tex/context/base/mkiv/strc-mar.lua
index 80fcf126a..24a7fd491 100644
--- a/tex/context/base/mkiv/strc-mar.lua
+++ b/tex/context/base/mkiv/strc-mar.lua
@@ -714,17 +714,17 @@ end
-- interface
-implement { name = "markingtitle", actions = marks.title, arguments = { "string", "string" } }
-implement { name = "markingnumber", actions = marks.number, arguments = { "string", "string" } }
+implement { name = "markingtitle", actions = marks.title, arguments = "2 strings" }
+implement { name = "markingnumber", actions = marks.number, arguments = "2 strings" }
-implement { name = "definemarking", actions = marks.define, arguments = { "string", "string" } }
-implement { name = "relatemarking", actions = marks.relate, arguments = { "string", "string" } }
-implement { name = "setmarking", actions = marks.set, arguments = { "string", "string" } }
-implement { name = "resetmarking", actions = marks.reset, arguments = { "string" } }
+implement { name = "definemarking", actions = marks.define, arguments = "2 strings" }
+implement { name = "relatemarking", actions = marks.relate, arguments = "2 strings" }
+implement { name = "setmarking", actions = marks.set, arguments = "2 strings" }
+implement { name = "resetmarking", actions = marks.reset, arguments = "string" }
implement { name = "synchronizemarking", actions = marks.synchronize, arguments = { "string", "integer", "string" } }
-implement { name = "getmarking", actions = marks.fetch, arguments = { "string", "string", "string" } }
-implement { name = "fetchonemark", actions = marks.fetchonemark, arguments = { "string", "string", "string" } }
-implement { name = "fetchtwomarks", actions = marks.fetchtwomarks, arguments = { "string", "string" } }
-implement { name = "fetchallmarks", actions = marks.fetchallmarks, arguments = { "string", "string" } }
+implement { name = "getmarking", actions = marks.fetch, arguments = "3 strings" }
+implement { name = "fetchonemark", actions = marks.fetchonemark, arguments = "3 strings" }
+implement { name = "fetchtwomarks", actions = marks.fetchtwomarks, arguments = "2 strings" }
+implement { name = "fetchallmarks", actions = marks.fetchallmarks, arguments = "2 strings" }
implement { name = "doifelsemarking", actions = { marks.exists, commands.doifelse }, arguments = "string" }
diff --git a/tex/context/base/mkiv/strc-not.lua b/tex/context/base/mkiv/strc-not.lua
index eff357eea..bb9d64beb 100644
--- a/tex/context/base/mkiv/strc-not.lua
+++ b/tex/context/base/mkiv/strc-not.lua
@@ -151,7 +151,7 @@ notes.getstate = getstate
implement {
name = "setnotestate",
actions = setstate,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -199,8 +199,8 @@ function notes.restore(tag,forcedstate)
end
end
-implement { name = "savenote", actions = notes.save, arguments = { "string", "string" } }
-implement { name = "restorenote", actions = notes.restore, arguments = { "string", "string" } }
+implement { name = "savenote", actions = notes.save, arguments = "2 strings" }
+implement { name = "restorenote", actions = notes.restore, arguments = "2 strings" }
local function hascontent(tag)
local ok = notestates[tag]
@@ -420,7 +420,7 @@ implement {
implement {
name = "flushnotes",
actions = flushnotes,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
function notes.resetpostponed()
diff --git a/tex/context/base/mkiv/strc-ref.lua b/tex/context/base/mkiv/strc-ref.lua
index 73f1ca886..f20d93161 100644
--- a/tex/context/base/mkiv/strc-ref.lua
+++ b/tex/context/base/mkiv/strc-ref.lua
@@ -355,19 +355,19 @@ references.setcomponent = setcomponent
implement {
name = "setnextreferenceorder",
actions = setnextorder,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "setnextinternalreference",
actions = setnextinternal,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "currentreferenceorder",
actions = { currentorder, context },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
function references.set(data)
@@ -432,7 +432,7 @@ end
implement {
name = "enhancereference",
actions = references.enhance,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
-- -- -- related to strc-ini.lua -- -- --
@@ -633,7 +633,7 @@ implement {
implement {
name = "useurl",
actions = urls.define,
- arguments = { "string", "string", "string", "string" }
+ arguments = "4 strings",
}
implement {
@@ -684,7 +684,7 @@ implement {
implement {
name = "usefile",
actions = files.define,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings"
}
implement {
@@ -774,7 +774,7 @@ end
implement {
name = "defineprogram",
actions = programs.define,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
local function getprogram(name)
@@ -863,13 +863,13 @@ end
implement {
name = "definereference",
actions = references.define,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
implement {
name = "resetreference",
actions = references.reset,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
setmetatableindex(defined,"table")
diff --git a/tex/context/base/mkiv/strc-reg.lua b/tex/context/base/mkiv/strc-reg.lua
index 51771e3b8..2c667fba3 100644
--- a/tex/context/base/mkiv/strc-reg.lua
+++ b/tex/context/base/mkiv/strc-reg.lua
@@ -428,13 +428,13 @@ registers.setmethod = defineregister -- and we might have a difference so
implement {
name = "defineregister",
actions = defineregister,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "setregistermethod",
actions = defineregister, -- duplicate use
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
@@ -643,13 +643,13 @@ end
implement {
name = "enhanceregister",
actions = registers.enhance,
- arguments = { "string", "integer" }
+ arguments = { "string", "integer" },
}
implement {
name = "extendregister",
actions = registers.extend,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/strc-syn.lua b/tex/context/base/mkiv/strc-syn.lua
index ecc5e19ae..eec025593 100644
--- a/tex/context/base/mkiv/strc-syn.lua
+++ b/tex/context/base/mkiv/strc-syn.lua
@@ -259,23 +259,23 @@ end
-- todo: local higher up
-implement { name = "registerusedsynonym", actions = synonyms.registerused, arguments = { "string", "string" } }
-implement { name = "registershownsynonym", actions = synonyms.registershown, arguments = { "string", "string" } }
-implement { name = "synonymmeaning", actions = synonyms.meaning, arguments = { "string", "string" } }
-implement { name = "synonymname", actions = synonyms.synonym, arguments = { "string", "string" } }
+implement { name = "registerusedsynonym", actions = synonyms.registerused, arguments = "2 strings" }
+implement { name = "registershownsynonym", actions = synonyms.registershown, arguments = "2 strings" }
+implement { name = "synonymmeaning", actions = synonyms.meaning, arguments = "2 strings" }
+implement { name = "synonymname", actions = synonyms.synonym, arguments = "2 strings" }
implement { name = "resetusedsynonyms", actions = synonyms.resetused, arguments = "string" }
implement { name = "resetshownsynonyms", actions = synonyms.resetshown, arguments = "string" }
implement {
name = "doifelsesynonymused",
actions = { synonyms.isused, commands.doifelse },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "doifelsesynonymshown",
actions = { synonyms.isshown, commands.doifelse },
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
diff --git a/tex/context/base/mkiv/strc-tag.lua b/tex/context/base/mkiv/strc-tag.lua
index 1be44821e..649465a6a 100644
--- a/tex/context/base/mkiv/strc-tag.lua
+++ b/tex/context/base/mkiv/strc-tag.lua
@@ -464,7 +464,7 @@ local starttag = tags.start
implement {
name = "starttag",
actions = starttag,
- arguments = { "string" }
+ arguments = "string",
}
implement {
@@ -476,26 +476,25 @@ implement {
name = "starttag_u",
scope = "private",
actions = function(tag,userdata) starttag(tag,{ userdata = userdata }) end,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "starttag_d",
scope = "private",
actions = function(tag,detail) starttag(tag,{ detail = detail }) end,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
name = "starttag_c",
scope = "private",
actions = function(tag,detail,parents) starttag(tag,{ detail = detail, parents = parents }) end,
- arguments = { "string", "string", "string" }
+ arguments = "3 strings",
}
-implement { name = "settagaspect", actions = tags.setaspect, arguments = { "string", "string" } }
-
-implement { name = "settagproperty", actions = tags.setproperty, arguments = { "string", "string", "string" } }
+implement { name = "settagaspect", actions = tags.setaspect, arguments = "2 strings" }
+implement { name = "settagproperty", actions = tags.setproperty, arguments = "3 strings" }
implement { name = "settagproperty_b", actions = tags.setproperty, arguments = { "string", "'backend'", "string" }, scope = "private" }
implement { name = "settagproperty_n", actions = tags.setproperty, arguments = { "string", "'nature'", "string" }, scope = "private" }
@@ -505,7 +504,7 @@ implement {
name = "setelementuserproperties",
scope = "private",
actions = tags.setuserproperties,
- arguments = { "string", "string" }
+ arguments = "2 strings",
}
implement {
@@ -517,5 +516,5 @@ implement {
implement {
name = "settaggedmetadata",
actions = tags.registermetadata,
- arguments = "string"
+ arguments = "string",
}
diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua
index 664477cfc..40047167c 100644
--- a/tex/context/base/mkiv/supp-box.lua
+++ b/tex/context/base/mkiv/supp-box.lua
@@ -562,7 +562,7 @@ do
implement {
name = "directboxfromcache",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = { boxes.direct, context },
-- actions = function(category,name) local b = boxes.direct(category,name) if b then context(b) end end,
}
@@ -582,13 +582,13 @@ do
implement {
name = "doifelseboxincache",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = { boxes.found, doifelse },
}
implement {
name = "resetboxesincache",
- arguments = { "string" },
+ arguments = "string",
actions = boxes.reset,
}
diff --git a/tex/context/base/mkiv/syst-aux.lua b/tex/context/base/mkiv/syst-aux.lua
index 06f6176b1..f9d8505f1 100644
--- a/tex/context/base/mkiv/syst-aux.lua
+++ b/tex/context/base/mkiv/syst-aux.lua
@@ -61,7 +61,7 @@ local ctx_doifelse = commands.doifelse
implement {
name = "doifelsefirstchar",
- arguments = { "string", "string" },
+ arguments = "2 strings",
actions = function(str,chr)
ctx_doifelse(lpegmatch(pattern,str) == chr)
end
@@ -69,7 +69,7 @@ implement {
implement {
name = "getsubstring",
- arguments = { "string", "string", "string" },
+ arguments = "3 strings",
actions = function(str,first,last)
context(utfsub(str,tonumber(first),tonumber(last)))
end
@@ -581,42 +581,42 @@ end
implement {
name = "doifelsecommon",
actions = doifelsecommon,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "doifcommon",
actions = doifcommon,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "doifnotcommon",
actions = doifnotcommon,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "doifelseinset",
actions = doifelseinset,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "doifinset",
actions = doifinset,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
implement {
name = "doifnotinset",
actions = doifnotinset,
- arguments = { "string", "string" },
+ arguments = "2 strings",
}
-- implement {
-- name = "stringcompare",
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- actions = function(a,b)
-- context((a == b and 0) or (a > b and 1) or -1)
-- end
@@ -624,7 +624,7 @@ implement {
--
-- implement {
-- name = "doifelsestringafter",
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- actions = function(a,b)
-- ctx_doifelse((a == b and 0) or (a > b and 1) or -1)
-- end
@@ -632,7 +632,7 @@ implement {
--
-- implement {
-- name = "doifelsestringbefore",
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- actions = function(a,b)
-- ctx_doifelse((a == b and 0) or (a < b and -1) or 1)
-- end
@@ -640,7 +640,7 @@ implement {
-- implement { -- not faster than addtocommalist
-- name = "additemtolist", -- unique
--- arguments = { "string", "string" },
+-- arguments = "2 strings",
-- actions = function(l,s)
-- if l == "" or s == l then
-- -- s = s
diff --git a/tex/context/base/mkiv/toks-ini.lua b/tex/context/base/mkiv/toks-ini.lua
index 8f95f6692..15e5df267 100644
--- a/tex/context/base/mkiv/toks-ini.lua
+++ b/tex/context/base/mkiv/toks-ini.lua
@@ -58,6 +58,7 @@ end
local scan_toks = token.scan_toks
local scan_string = token.scan_string
+local scan_argument = token.scan_argument
local scan_int = token.scan_int
local scan_code = token.scan_code
local scan_dimen = token.scan_dimen
@@ -241,6 +242,7 @@ tokens.scanners = { -- these expand
integer = scan_int,
count = scan_int,
string = scan_string,
+ argument = scan_argument,
code = scan_code,
word = scan_word,
number = scan_number,
diff --git a/tex/context/base/mkiv/toks-scn.lua b/tex/context/base/mkiv/toks-scn.lua
index f3781d022..fe32a1de4 100644
--- a/tex/context/base/mkiv/toks-scn.lua
+++ b/tex/context/base/mkiv/toks-scn.lua
@@ -21,6 +21,7 @@ local scanners = tokens.scanners
local tokenbits = tokens.bits
local scanstring = scanners.string
+local scanargument = scanners.argument
local scaninteger = scanners.integer
local scannumber = scanners.number
local scankeyword = scanners.keyword
@@ -240,6 +241,19 @@ local f_check = formatters[ [[
end
]] ]
+-- using these shortcuts saves temporary small tables (okay, it looks uglier)
+
+local presets = {
+ ["1 string" ] = { "string" },
+ ["2 strings"] = { "string", "string" },
+ ["3 strings"] = { "string", "string", "string" },
+ ["4 strings"] = { "string", "string", "string", "string" },
+ ["5 strings"] = { "string", "string", "string", "string", "string" },
+ ["6 strings"] = { "string", "string", "string", "string", "string", "string" },
+ ["7 strings"] = { "string", "string", "string", "string", "string", "string", "string" },
+ ["8 strings"] = { "string", "string", "string", "string", "string", "string", "string", "string" },
+}
+
function tokens.compile(specification)
local f = { }
local n = 0
@@ -305,6 +319,10 @@ function tokens.compile(specification)
return c
end
end
+ local p = t and presets[t]
+ if p then
+ t = p
+ end
local tt = type(t)
if tt == "string" then
if a then
diff --git a/tex/context/base/mkiv/trac-ctx.lua b/tex/context/base/mkiv/trac-ctx.lua
index 29159d130..33637fd66 100644
--- a/tex/context/base/mkiv/trac-ctx.lua
+++ b/tex/context/base/mkiv/trac-ctx.lua
@@ -57,16 +57,16 @@ implement {
implement {
name = "installtextracker",
+ arguments = "3 strings",
actions = function(tag,enable,disable)
install(textrackers,trackers.register,tag,enable,disable)
end,
- arguments = { "string", "string", "string" }
}
implement {
name = "installtexdirective",
+ arguments = "3 strings",
actions = function(tag,enable,disable)
install(texdirectives,directives.register,tag,enable,disable)
end,
- arguments = { "string", "string", "string" }
}
diff --git a/tex/context/base/mkiv/trac-inf.lua b/tex/context/base/mkiv/trac-inf.lua
index 5810e2059..439e8b2dc 100644
--- a/tex/context/base/mkiv/trac-inf.lua
+++ b/tex/context/base/mkiv/trac-inf.lua
@@ -177,10 +177,7 @@ function statistics.show()
register("control sequences", function()
return format("%s of %s + %s", status.cs_count, status.hash_size,status.hash_extra)
end)
- register("callbacks", function()
- local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0
- return format("%s direct, %s indirect, %s total", total-indirect, indirect, total)
- end)
+ register("callbacks", statistics.callbacks)
if TEXENGINE == "luajittex" and JITSUPPORTED then
local jitstatus = jit.status
if jitstatus then
diff --git a/tex/context/base/mkiv/trac-log.lua b/tex/context/base/mkiv/trac-log.lua
index c7b6f6d2d..1471bd4c7 100644
--- a/tex/context/base/mkiv/trac-log.lua
+++ b/tex/context/base/mkiv/trac-log.lua
@@ -10,7 +10,6 @@ if not modules then modules = { } end modules ['trac-log'] = {
-- terminal handler in lua then. Ok, maybe it's slower then, so a no-go.
local next, type, select, print = next, type, select, print
-local write_nl, write = texio and texio.write_nl or print, texio and texio.write or io.write
local format, gmatch, find = string.format, string.gmatch, string.find
local concat, insert, remove = table.concat, table.insert, table.remove
local topattern = string.topattern
@@ -18,6 +17,13 @@ local utfchar = utf.char
local datetime = os.date
local openfile = io.open
+local runningtex = tex and (tex.jobname or tex.formatname)
+-- local write_nl = texio and texio.write_nl or print
+-- local write = texio and texio.write or io.write
+
+local write_nl = runningtex and texio and texio.write_nl or print
+local write = runningtex and texio and texio.write or io.write
+
local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
local settings_to_hash = utilities.parsers.settings_to_hash
@@ -108,7 +114,7 @@ local direct, subdirect, writer, pushtarget, poptarget, setlogfile, settimedlog,
-- we don't want this overhead for single messages (not that there are that
-- many; we could have a special weak table)
-if tex and (tex.jobname or tex.formatname) then
+if runningtex then
if texio.setescape then
texio.setescape(0) -- or (false)
diff --git a/tex/context/base/mkiv/typo-inj.lua b/tex/context/base/mkiv/typo-inj.lua
index 786c3c287..44b6c0a14 100644
--- a/tex/context/base/mkiv/typo-inj.lua
+++ b/tex/context/base/mkiv/typo-inj.lua
@@ -91,8 +91,8 @@ end
implement { name = "resetinjector", actions = injectors.reset, arguments = "string" }
implement { name = "showinjector", actions = injectors.show, arguments = "string" }
-implement { name = "setinjector", actions = injectors.set, arguments = { "string", "string", "string" } }
+implement { name = "setinjector", actions = injectors.set, arguments = "3 strings" }
implement { name = "markinjector", actions = injectors.mark, arguments = "string" }
-implement { name = "checkinjector", actions = injectors.check, arguments = { "string", "string" } }
+implement { name = "checkinjector", actions = injectors.check, arguments = "2 strings" }
--------- { name = "checkpreviousinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_previous) } }
--------- { name = "checknextinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_next) } }
diff --git a/tex/context/base/mkiv/util-lua.lua b/tex/context/base/mkiv/util-lua.lua
index bd74d0843..b7de11936 100644
--- a/tex/context/base/mkiv/util-lua.lua
+++ b/tex/context/base/mkiv/util-lua.lua
@@ -42,7 +42,7 @@ luautilities.suffixes = {
-- environment.loadpreprocessedfile can be set to a preprocessor
-local function register(name)
+local function register(name) -- makes no sense runtime
if tracestripping then
report_lua("stripped bytecode from %a",name or "unknown")
end
@@ -75,18 +75,12 @@ end
function luautilities.loadedluacode(fullname,forcestrip,name,macros)
-- quite subtle ... doing this wrong incidentally can give more bytes
name = name or fullname
- local code, message
if macros then
macros = lua.macros
end
- if macros and macros.enabled then
- -- local c = io.loaddata(fullname) -- not yet available
- local f = io.open(fullname,"rb") local c = f:read("*a") f:close()
- local n = c and macros.resolvestring("--[["..fullname.."]] "..c)
- if n and #n ~= #c then
- report_lua("preprocessed file %a: %i => %i bytes",fullname,#c,#n)
- end
- code, message = load(n or c)
+ local code, message
+ if macros then
+ code, message = macros.loaded(fullname,true,false)
else
code, message = loadfile(fullname)
end
diff --git a/tex/context/base/mkiv/util-sql-imp-ffi.lua b/tex/context/base/mkiv/util-sql-imp-ffi.lua
index 07c4752cd..2a2bc6569 100644
--- a/tex/context/base/mkiv/util-sql-imp-ffi.lua
+++ b/tex/context/base/mkiv/util-sql-imp-ffi.lua
@@ -365,10 +365,10 @@ local function connect(session,specification)
end
local function error_in_connection(specification,action)
- report_state("error in connection: [%s] %s@%s to %s:%s",
+ report_state("error in connection: [%s] user %s into %s at %s:%s",
action or "unknown",
- specification.database or "no database",
specification.username or "no username",
+ specification.database or "no database",
specification.host or "no host",
specification.port or "no port"
)
diff --git a/tex/context/base/mkiv/util-str.lua b/tex/context/base/mkiv/util-str.lua
index 9da0c6a2f..f76895aaf 100644
--- a/tex/context/base/mkiv/util-str.lua
+++ b/tex/context/base/mkiv/util-str.lua
@@ -12,7 +12,8 @@ local strings = utilities.strings
local format, gsub, rep, sub, find = string.format, string.gsub, string.rep, string.sub, string.find
local load, dump = load, string.dump
-local tonumber, type, tostring, next = tonumber, type, tostring, next
+local tonumber, type, tostring, next, setmetatable = tonumber, type, tostring, next, setmetatable
+local unpack, concat = table.unpack, table.concat
local unpack, concat = table.unpack, table.concat
local P, V, C, S, R, Ct, Cs, Cp, Carg, Cc = lpeg.P, lpeg.V, lpeg.C, lpeg.S, lpeg.R, lpeg.Ct, lpeg.Cs, lpeg.Cp, lpeg.Carg, lpeg.Cc
local patterns, lpegmatch = lpeg.patterns, lpeg.match
@@ -22,8 +23,9 @@ local utfchar, utfbyte, utflen = utf.char, utf.byte, utf.len
----- setmetatableindex = table.setmetatableindex
local loadstripped = nil
+local oldfashioned = LUAVERSION < 5.2
-if LUAVERSION < 5.2 then
+if oldfashioned then
loadstripped = function(str,shortcuts)
return load(str)
@@ -296,7 +298,7 @@ end
--
-- integer %...i number
-- integer %...d number
--- unsigned %...u number -- no tused
+-- unsigned %...u number -- not used
-- character %...c number
-- hexadecimal %...x number
-- HEXADECIMAL %...X number
@@ -524,7 +526,7 @@ return function(%s) return %s end
local preamble, environment = "", { }
-if LUAVERSION < 5.2 then
+if oldfashioned then
preamble = [[
local lpeg=lpeg
@@ -574,7 +576,7 @@ else
sequenced = table.sequenced,
formattednumber = number.formatted,
sparseexponent = number.sparseexponent,
- formattedfloat = number.formattedfloat
+ formattedfloat = number.formattedfloat,
}
end
@@ -1044,42 +1046,31 @@ local builder = Cs { "start",
["!"] = Carg(2) * prefix_any * P("!") * C((1-P("!"))^1) * P("!") / format_extension,
}
--- we can be clever and only alias what is needed
-
--- local direct = Cs (
--- P("%")/""
--- * Cc([[local format = string.format return function(str) return format("%]])
--- * (S("+- .") + R("09"))^0
--- * S("sqidfgGeExXo")
--- * Cc([[",str) end]])
--- * P(-1)
--- )
-
-local direct = Cs (
- P("%")
- * (S("+- .") + R("09"))^0
- * S("sqidfgGeExXo")
- * P(-1) / [[local format = string.format return function(str) return format("%0",str) end]]
-)
+-- We can be clever and only alias what is needed:
+
+local xx = setmetatable({ }, { __index = function(t,k) local v = format("%02x",k) t[k] = v return v end })
+local XX = setmetatable({ }, { __index = function(t,k) local v = format("%02X",k) t[k] = v return v end })
--- local direct = Cs (
--- P("%")
--- * (S("+- .") + R("09"))^0
--- * S("sqidfgGeExXo")
--- * (1-P("%"))^0
--- * P(-1) / [[local format = string.format return function(str) return format([==[%0]==],str) end]]
--- )
+local preset = {
+ ["%02x"] = function(n) return xx[n] end,
+ ["%02X"] = function(n) return XX[n] end,
+}
+
+local direct =
+ P("%") * (S("+- .") + R("09"))^0 * S("sqidfgGeExXo") * P(-1)
+ / [[local format = string.format return function(str) return format("%0",str) end]]
local function make(t,str)
- local f
- local p
+ local f = preset[str]
+ if f then
+ return f
+ end
local p = lpegmatch(direct,str)
if p then
- -- f = loadstripped(p)()
-- print("builder 1 >",p)
f = loadstripped(p)()
else
- n = 0
+ n = 0 -- used in patterns
-- p = lpegmatch(builder,str,1,"..",t._extensions_) -- after this we know n
p = lpegmatch(builder,str,1,t._connector_,t._extensions_) -- after this we know n
if n > 0 then
@@ -1142,7 +1133,7 @@ strings.formatters = { }
-- _connector_ is an experiment
-if LUAVERSION < 5.2 then
+if oldfashioned then
function strings.formatters.new(noconcat)
local t = { _type_ = "formatter", _connector_ = noconcat and "," or "..", _extensions_ = { }, _preamble_ = preamble, _environment_ = { } }
@@ -1202,7 +1193,7 @@ patterns.luaquoted = Cs(Cc('"') * ((1-S('"\n'))^1 + P('"')/'\\"' + P('\n')/'\\n"
-- escaping by lpeg is faster for strings without quotes, slower on a string with quotes, but
-- faster again when other q-escapables are found (the ones we don't need to escape)
-if LUAVERSION < 5.2 then
+if oldfashioned then
add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],"local xmlescape = lpeg.patterns.xmlescape")
add(formatters,"tex",[[lpegmatch(texescape,%s)]],"local texescape = lpeg.patterns.texescape")
diff --git a/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv
new file mode 100644
index 000000000..a3f4762f1
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv
@@ -0,0 +1,69 @@
+%D \module
+%D [ file=type-imp-modernlatin,
+%D version=2018.03.25,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Modern Latin Modern,
+%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[modernlatin]
+
+ \definefontfeature[lm-rm-regular][effect={width=0.15,delta=1.00}]
+ \definefontfeature[lm-rm-bold] [effect={width=0.30,delta=1.00}]
+ \definefontfeature[lm-ss-regular][effect={width=0.10,delta=1.00}]
+ \definefontfeature[lm-ss-bold] [effect={width=0.20,delta=1.00}]
+ \definefontfeature[lm-tt-regular][effect={width=0.20,delta=1.00}]
+ \definefontfeature[lm-tt-bold] [effect={width=0.30,delta=1.00}]
+
+ \starttypescript [\s!serif] [modern-latin]
+ % \loadfontgoodies[lm]
+ \definefontsynonym [Serif] [\s!file:lmroman10-regular] [\s!features={\s!default,lm-rm-regular}]
+ \definefontsynonym [SerifItalic] [\s!file:lmroman10-italic] [\s!features={\s!default,lm-rm-regular}]
+ \definefontsynonym [SerifSlanted] [\s!file:lmromanslant10-regular] [\s!features={\s!default,lm-rm-regular}]
+ \definefontsynonym [SerifBold] [\s!file:lmroman10-regular] [\s!features={\s!default,lm-rm-bold}]
+ \definefontsynonym [SerifBoldItalic] [\s!file:lmroman10-italic] [\s!features={\s!default,lm-rm-bold}]
+ \definefontsynonym [SerifBoldSlanted][\s!file:lmromanslant10-regular] [\s!features={\s!default,lm-rm-bold}]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [modern-latin]
+ % \loadfontgoodies[lm]
+ \definefontsynonym [Sans] [\s!file:lmsans10-regular] [\s!features={\s!default,lm-ss-regular}]
+ \definefontsynonym [SansItalic] [\s!file:lmsans10-oblique] [\s!features={\s!default,lm-ss-regular}]
+ \definefontsynonym [SansSlanted] [\s!file:lmsans10-oblique] [\s!features={\s!default,lm-ss-regular}]
+ \definefontsynonym [SansBold] [\s!file:lmsans10-regular] [\s!features={\s!default,lm-ss-bold}]
+ \definefontsynonym [SansBoldItalic] [\s!file:lmsans10-oblique] [\s!features={\s!default,lm-ss-bold}]
+ \definefontsynonym [SansBoldSlanted][\s!file:lmsans10-oblique] [\s!features={\s!default,lm-ss-bold}]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [modern-latin]
+ % \loadfontgoodies[lm]
+ \definefontsynonym [Mono] [\s!file:lmmono10-regular] [\s!features={\s!default,lm-tt-regular}]
+ \definefontsynonym [MonoItalic] [\s!file:lmmono10-italic] [\s!features={\s!default,lm-tt-regular}]
+ \definefontsynonym [MonoSlanted] [\s!file:lmmonoslant10-regular] [\s!features={\s!default,lm-tt-regular}]
+ \definefontsynonym [MonoBold] [\s!file:lmmono10-regular] [\s!features={\s!default,lm-tt-bold}]
+ \definefontsynonym [MonoBoldItalic] [\s!file:lmmono10-italic] [\s!features={\s!default,lm-tt-bold}]
+ \definefontsynonym [MonoBoldSlanted][\s!file:lmmonoslant10-regular] [\s!features={\s!default,lm-tt-bold}]
+ \stoptypescript
+
+ \starttypescript [\s!math] [modern-latin]
+ \loadfontgoodies[lm]
+ \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm]
+ \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm]
+ \stoptypescript
+
+ \starttypescript [modern-latin]
+ \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern-latin] [\s!default]
+ \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern-latin] [\s!default]
+ \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern-latin] [\s!default]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern-latin] [\s!default]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 7b808f8da..6ff801846 100644
Binary files a/tex/context/interface/mkiv/i-context.pdf and b/tex/context/interface/mkiv/i-context.pdf differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index aad96f1a7..f86da332a 100644
Binary files a/tex/context/interface/mkiv/i-readme.pdf and b/tex/context/interface/mkiv/i-readme.pdf differ
diff --git a/tex/context/modules/common/s-faq-01.tex b/tex/context/modules/common/s-faq-01.tex
index f6ee3ce06..e031d79d5 100644
--- a/tex/context/modules/common/s-faq-01.tex
+++ b/tex/context/modules/common/s-faq-01.tex
@@ -8,8 +8,8 @@
%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.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
\usemodule[faq-00]
@@ -25,7 +25,7 @@
width=fit,
footer=0pt,
bottomdistance=12pt,
- bottom=18pt]
+ bottom=18pt]
\setupinteractionscreen
[width=fit,
@@ -152,7 +152,7 @@
\blank[3*big]
\midaligned{\tta \ListOfFAQ}
\vfill
- \midaligned{\tta pragma@wxs.nl}
+ \midaligned{\tta pragma@xs4all.nl}
\blank[3*big]
\stopstandardmakeup}
@@ -187,7 +187,7 @@
\def\EndFAQ
{\stopframedtext
- \egroup
+ \egroup
\button
[color=,contrastcolor=,frame=overlay,offset=overlay]
{\copy0}
@@ -205,7 +205,7 @@
\startuniqueMPgraphic{Frame}
path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
- pickup pencircle scaled 2pt ;
+ pickup pencircle scaled 2pt ;
fill p withcolor \MPcolor{\overlaycolor} ;
draw p withcolor \MPcolor{\overlaylinecolor} ;
\stopuniqueMPgraphic
diff --git a/tex/context/modules/common/s-faq-02.tex b/tex/context/modules/common/s-faq-02.tex
index 92aa1eca2..c39ae1046 100644
--- a/tex/context/modules/common/s-faq-02.tex
+++ b/tex/context/modules/common/s-faq-02.tex
@@ -8,8 +8,8 @@
%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.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
\usemodule[faq-00]
@@ -37,7 +37,7 @@
\blank[3*big]
\midaligned{\tta \ListOfFAQ}
\vfill
- \midaligned{\tta pragma@wxs.nl}
+ \midaligned{\tta pragma@xs4all.nl}
\blank[3*big]
\stopstandardmakeup}
diff --git a/tex/context/modules/mkiv/m-punk.mkiv b/tex/context/modules/mkiv/m-punk.mkiv
index b72abd64d..08a066359 100644
--- a/tex/context/modules/mkiv/m-punk.mkiv
+++ b/tex/context/modules/mkiv/m-punk.mkiv
@@ -11,6 +11,12 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D You can actually turn a punk font into music (wintergatan):
+%D
+%D \starttyping
+%D https://www.youtube.com/watch?v=g5c2Htj8Vtw
+%D \stoptyping
+
\startluacode
local concat = table.concat
local round = math.round
diff --git a/tex/context/modules/mkiv/s-fonts-basics.mkiv b/tex/context/modules/mkiv/s-fonts-basics.mkiv
new file mode 100644
index 000000000..e9d0a21a2
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-basics.mkiv
@@ -0,0 +1,175 @@
+%D \module
+%D [ file=s-fnt-01,
+%D version=2006.10.10, % guess
+%D title=\CONTEXT\ Style File,
+%D subtitle=Listing Glyphs in Large 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 module is just a check for \type {luatex-basics-prepare}.
+
+\usemodule[article]
+
+\setupbodyfont[9pt]
+
+\starttext
+
+\definefontfeature
+ [boundingbox]
+ [boundingbox=yes]
+
+\definefont
+ [TestFont]
+ [file:arialuni.ttf*boundingbox]
+
+\startluacode
+
+local data = characters.data
+
+local indicscripts = table.sorted {
+ "devanagari",
+ "kannada",
+ "malayalam",
+ "tamil",
+ "bengali",
+ "gurmukhi",
+ "gujarati",
+ "oriya",
+ "telugu",
+}
+
+local arabicscripts = table.sorted {
+ "arabic",
+ "syriac",
+ "mandiac",
+ "nko",
+}
+
+local allindic = true
+local allarabic = true
+local dotted = utf.char(0x25CC)
+
+local left = table.setmetatableindex (
+ { r = dotted, b = dotted, t = dotted, s = dotted },
+ function(t,k) local v = "" if k then t[k] = v end return v end
+)
+
+local right = table.setmetatableindex (
+ { l = dotted },
+ function(t,k) local v = "" if k then t[k] = v end return v end
+)
+
+for i=1,#indicscripts do
+ local script = indicscripts[i]
+ local first, last = characters.blockrange(script)
+ context.starttitle { title = script }
+ context.starttabulate { "|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tp|" }
+ context.FL()
+ context.BC() context("unicode")
+ context.BC() context("glyph")
+ context.BC() context("category")
+ context.BC() context("indic")
+ context.BC() context("mark")
+ context.BC() context("class")
+ context.BC() context("order")
+ context.BC() context("description")
+ context.NC() context.NR()
+ context.ML()
+ for i=first,last do
+ local d = data[i]
+ if d and d.unicodeslot then
+ local indic = d.indic
+ local category = d.category or "?"
+ local description = d.description
+ if not indic then
+ context.NC() context("\\red %U",i)
+ context.NC() context("\\red\\showstruts\\strut\\TestFont %c",i)
+ context.NC() context("\\red %s",category)
+ context.NC()
+ context.NC()
+ context.NC()
+ context.NC()
+ context.NC() context(description)
+ context.NC() context.NR()
+ else
+ local indicclass = d.indicclass
+ local indicmark = d.indicmark
+ local indicorder = d.indicorder
+ if allindic or indic == "d" or indicmark or indicclass or indicorder then
+ local l = left [indicmark]
+ local r = right[indicmark]
+ context.NC() context("%U",i)
+ context.NC() context("\\showstruts\\strut\\TestFont %s%c%s",l,i,r)
+ context.NC() context(category)
+ context.NC() context(indic or "?")
+ context.NC() context(indicmark or "")
+ context.NC() context(indicclass or "")
+ context.NC() context(indicorder or "")
+ context.NC() context(description)
+ context.NC() context.NR()
+ end
+ end
+ end
+ end
+ context.LL()
+ context.stoptabulate()
+ context.stoptitle()
+end
+
+for i=1,#arabicscripts do
+ local script = arabicscripts[i]
+ local first, last = characters.blockrange(script)
+ context.starttitle { title = script }
+ context.starttabulate { "|Tc|Tc|Tc|Tc|Tp|" }
+ context.FL()
+ context.BC() context("unicode")
+ context.BC() context("glyph")
+ context.BC() context("category")
+ context.BC() context("arabic")
+ context.BC() context("description")
+ context.NC() context.NR()
+ context.ML()
+ for i=first,last do
+ local d = data[i]
+ if d and d.unicodeslot then
+ local arabic = d.arabic
+ local category = d.category or ""
+ local description = d.description or ""
+ if arabic then
+ context.NC() context("%U",i)
+ context.NC() context("\\showstruts\\strut\\TestFont %c",i)
+ context.NC() context(category)
+ context.NC() context(arabic)
+ context.NC() context(description)
+ context.NC() context.NR()
+ elseif allarabic then
+ context.NC() context("\\red %U",i)
+ context.NC() context("\\red\\showstruts\\strut\\TestFont %c",i)
+ context.NC() context("\\red %s",category)
+ context.NC()
+ context.NC() context("\\red %s",description)
+ context.NC() context.NR()
+ end
+ end
+ end
+ context.LL()
+ context.stoptabulate()
+ context.stoptitle()
+end
+
+-- local olddata = io.loaddata("char-def.lua")
+-- local preamble = string.gsub(olddata,"characters%.data%s*=%s*%{.*","")
+
+-- local newdata = table.serialize(data,"characters.data", { hexify = true, noquotes = true })
+-- local newdata = string.gsub(newdata,"%{%s+%[0xFE0E%]=\"text style\",%s+%[0xFE0F%]=\"emoji style\",%s+%}","variants_emoji")
+
+-- io.savedata("char-def-new.lua",newdata)
+
+\stopluacode
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-fonts-overlay.mkiv b/tex/context/modules/mkiv/s-fonts-overlay.mkiv
new file mode 100644
index 000000000..fccc977d4
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-overlay.mkiv
@@ -0,0 +1,107 @@
+%D \module
+%D [ file=s-fonts-overlay,
+%D version=2018.03.25,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Glyph Similarity,
+%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 : overlay glyphs in fonts
+%
+% comment : show glyphs in two fonts
+% status : experimental, used for font feature development
+%
+% end info
+
+%D This module is for Luigi/Idris as part of the Husayni development where the
+%D gpos pair, single, mark and cursive features are just linear transformations.
+
+\startmodule[fonts-coverage]
+
+\unprotect
+
+\definecolor[ColorOne][r=1,t=.5,a=1]
+\definecolor[ColorTwo][b=1,t=.5,a=1]
+
+\startluacode
+ moduledata.fonts = moduledata.fonts or { }
+ moduledata.fonts.overlay = moduledata.fonts.overlay or { }
+
+ function moduledata.fonts.overlay(id)
+ for k, v in table.sortedhash(fonts.hashes.identifiers[id or true].characters) do
+ context.showoverlayedglyphs(k)
+ end
+ end
+\stopluacode
+
+\starttexdefinition unexpanded showoverlayedglyphs#1
+ \startTEXpage[offset=.25\scratchdimentwo,height=10\scratchdimentwo,width=4\scratchdimenone]
+ \ruledhbox to \hsize\bgroup
+ \hss
+ \FontOne\setstrut\strut\showglyphs
+ \startoverlay
+ {\ColorOne\ruledhbox{\FontOne\char#1}}
+ {\ColorTwo\ruledhbox{\FontTwo\char#1}}
+ \stopoverlay
+ \hss
+ \egroup
+ \vfill
+ \dontleavehmode
+ \hbox to \hsize\bgroup
+ \hss
+ \infofont0x\uchexnumbers{#1}
+ \hss
+ \egroup
+ \stopTEXpage
+\stoptexdefinition
+
+\starttexdefinition unexpanded showoverlayedfonts[#1]
+ \start
+ \getdummyparameters[\c!list=,#1]
+ \doifsomething {\dummyparameter\c!list} {
+ \page
+ \getfromcommacommand[\dummyparameter\c!list][1]\let\NameOne\commalistelement
+ \getfromcommacommand[\dummyparameter\c!list][2]\let\NameTwo\commalistelement
+ \definefont[FontOne][\NameOne]
+ \definefont[FontTwo][\NameTwo]
+ \FontOne\expandafter\edef\expandafter\OneID\expandafter{\number\fontid\font}%
+ \FontTwo\expandafter\edef\expandafter\TwoID\expandafter{\number\fontid\font}%
+ \scratchdimenone\emwidth
+ \scratchdimentwo\exheight
+ \ctxlua{moduledata.fonts.overlay(\OneID)}%
+ \page
+ % \startTEXpage[offset=.25\scratchdimentwo,height=10\scratchdimentwo,width=4\scratchdimenone]
+ % \vfill
+ % \hbox to \hsize{\ColorOne\infofont\hss\OneN\hss}
+ % \vfill
+ % \hbox to \hsize{\ColorTwo\infofont\hss\TwoN\hss}
+ % \vfill
+ % \stopTEXpage
+ % \page
+ }
+ \stop
+\stoptexdefinition
+
+\protect
+
+\stopmodule
+
+\continueifinputfile{s-fonts-overlay.mkiv}
+
+\starttext
+
+% \showoverlayedfonts
+% [list={file:husayni-script-regular.ttf @ 48.0pt,
+% file:husayni-note-bold.ttf @ 34.2pt}] % 34.18726pt
+
+ \showoverlayedfonts
+ [list={Serif,SerifBold}]
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.lua b/tex/context/modules/mkiv/s-fonts-shapes.lua
index ebdf04c22..748c5a92a 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.lua
+++ b/tex/context/modules/mkiv/s-fonts-shapes.lua
@@ -109,12 +109,9 @@ local characters = nil
local function showglyphshape(specification)
specification = interfaces.checkedspecification(specification)
- local id, cs = fonts.definers.internal(specification,"")
+ local id, cs = fonts.definers.internal(specification,"")
local tfmdata = fontdata[id]
- local charnum = tonumber(specification.character)
- if not charnum then
- charnum = fonts.helpers.nametoslot(specification.character)
- end
+ local charnum = tonumber(specification.character) or fonts.helpers.nametoslot(specification.character)
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local parameters = tfmdata.parameters
@@ -133,64 +130,75 @@ local function showglyphshape(specification)
context.startMPcode()
context("numeric lw ; lw := .125bp ;")
context("pickup pencircle scaled lw ;")
- context('picture p ; p := image(draw textext.drt("\\getuvalue{%s}\\gray\\char%s");); draw p ;',cs,charnum)
+ if width < 0.01 then
+ -- catches zero width marks
+ context('picture p ; p := textext.drt("\\hskip5sp\\getuvalue{%s}\\gray\\char%s"); draw p ;',cs,charnum)
+ else
+ context('picture p ; p := textext.drt("\\getuvalue{%s}\\gray\\char%s"); draw p ;',cs,charnum)
+ end
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 or 0, vv.kern or 0
- if h and k then
- l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ local slant = {
+ function(v,dx,dy,txt,xsign,ysign,loc,labloc)
+ local n = #v
+ if n > 0 then
+ local l = { }
+ for i=1,n do
+ local c = v[i]
+ local h = c.height or 0
+ local k = c.kern or 0
+ l[i] = 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 1/16) 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 1/16) 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 2lw ;",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 or 0, vv.kern or 0
- if h and k then
- l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1])
+-- context("draw laddered (%s) withcolor .5white ;",table.concat(l,".."))
+ context("draw laddered (%..t) withcolor .5white ;",l)
+ context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l])
+ for i=1,n do
+ context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i])
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 or 0, vv.kern or 0
- if h and k then
- context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[kk])
+ end,
+ function(v,dx,dy,txt,xsign,ysign,loc,labloc)
+ local n = #v
+ if n > 0 then
+ local l = { }
+ for i=1,n do
+ local c = v[i]
+ local h = c.height or 0
+ local k = c.kern or 0
+ l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ end
+ if loc == "top" then
+ context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[n])
+ else
+ context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1])
+ end
+ for i=1,n do
+ local c = v[i]
+ local h = c.height or 0
+ local k = c.kern or 0
+ context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[i])
end
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
+ for i=1,#slant do
+ local s = slant[i]
+ for k, v in next, kerns do
if k == "topright" then
- slant(v,width+italic,0,k,1,1,"top","ulft")
+ s(v,width+italic,0,k,1,1,"top","ulft")
elseif k == "bottomright" then
- slant(v,width,0,k,1,1,"bot","lrt")
+ s(v,width,0,k,1,1,"bot","lrt")
elseif k == "topleft" then
- slant(v,0,0,k,-1,1,"top","ulft")
+ s(v,0,0,k,-1,1,"top","ulft")
elseif k == "bottomleft" then
- slant(v,0,0,k,-1,1,"bot","lrt")
+ s(v,0,0,k,-1,1,"bot","lrt")
end
end
end
@@ -205,33 +213,34 @@ local function showglyphshape(specification)
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)
+ for k, v in next, a do
+ for i=1,#v do
+ local p = v[i]
+ show(p[1],p[2],k .. ":" .. i)
end
end
end
local a = anchors.mark
if a then
- for k, v in pairs(a) do
+ for k, v in next, a do
show(v[1],v[2],k)
end
end
local a = anchors.basechar
if a then
- for k, v in pairs(a) do
+ for k, v in next, a do
show(v[1],v[2],k)
end
end
local ba = anchors.centry
if a then
- for k, v in pairs(a) do
+ for k, v in next, a do
show(v[1],v[2],k)
end
end
local a = anchors.cexit
if a then
- for k, v in pairs(a) do
+ for k, v in next, a do
show(v[1],v[2],k)
end
end
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
index 4a0377ada..53ed1b426 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
@@ -109,7 +109,11 @@
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
% \page
-\showallglyphshapes[name=name:cambria-math,size=100bp]
+\startTEXpage[offset=0pt]\ShowGlyphShape{file:husayninotebold.ttf}{50bp}{0xF034A}\stopTEXpage
+\startTEXpage[offset=0pt]\ShowGlyphShape{file:husayninotebold.ttf}{50bp}{0x006DD}\stopTEXpage
+
+% \showallglyphshapes[name=name:cambria-math,size=100bp]
+% \showallglyphshapes[name=file:husayninotebold.ttf,size=100bp]
% \showallglyphshapes[name=name:dejavuserif,size=100bp]
% \showallglyphshapes[name=file:brill.otf,size=100bp]
diff --git a/tex/context/modules/mkiv/s-tugboat.mkiv b/tex/context/modules/mkiv/s-tugboat.mkiv
index 2b3b07d11..d3d15c3e7 100644
--- a/tex/context/modules/mkiv/s-tugboat.mkiv
+++ b/tex/context/modules/mkiv/s-tugboat.mkiv
@@ -23,8 +23,7 @@
[tugboat]
[type=article,
columns=no,
- grid=yes
- ]
+ grid=yes]
\setvariables
[tugboat]
@@ -45,7 +44,7 @@
email={tugboat@tug.org}]
%D \section Font Setup %<<<1
-%D
+%D
%D \TUGBOAT\ uses slightly different interline space than the default.
%D So we change the interline space.
@@ -121,7 +120,7 @@
\setupdescriptions [indentnext=no]
-%D \section Itemize
+%D \section Itemize
%D
%D And these. We typeset itemizations ragged right.
@@ -158,7 +157,7 @@
subject, subsubject, subsubsubject]
[style=bold,
align=right,
- before={\blank[8pt]},
+ before={\blank[8pt]},
after={\blank[4pt]}]
%D \section Spacing <<<1
@@ -173,8 +172,8 @@
\setupitemize[1][before={\blank[tugblank]},after={\blank[tugblank]},
inbetween={\blank[tugblank]}]
-\setuplines[before={\blank[tugblank]},after={\blank[tugblank]},
- inbetween={\blank[tugblank]}]
+\setuplines[before={\blank[tugblank]},after={\blank[tugblank]},
+ inbetween={\blank[tugblank]}]
%D \section Typing %<<<1
%D
@@ -232,7 +231,7 @@
\definereferenceformat[cite][left={[},right={]}]
\defineitemgroup [bibliography] [levels=1]
-\setupitemgroup [bibliography]
+\setupitemgroup [bibliography]
[symbol=n,
left={[},
right={]},
diff --git a/tex/context/modules/mkiv/x-asciimath.lua b/tex/context/modules/mkiv/x-asciimath.lua
index 7785d5587..b0d45659e 100644
--- a/tex/context/modules/mkiv/x-asciimath.lua
+++ b/tex/context/modules/mkiv/x-asciimath.lua
@@ -50,9 +50,12 @@ local formatters = string.formatters
local entities = characters.entities or { }
local xmltext = xml.text
+local xmlpure = xml.pure
local xmlinclusion = xml.inclusion
local xmlcollected = xml.collected
+local lxmlgetid = lxml.getid
+
-- todo: use private unicodes as temporary slots ... easier to compare
local s_lparent = "\\left\\lparent"
@@ -2089,6 +2092,14 @@ interfaces.implement {
arguments = { "string", true },
}
+interfaces.implement {
+ name = "xmlasciimath",
+ actions = function(id)
+ convert(xmlpure(lxmlgetid(id)))
+ end,
+ arguments = "string"
+}
+
local ctx_typebuffer = context.typebuffer
local ctx_mathematics = context.mathematics
local ctx_color = context.color
@@ -2192,7 +2203,7 @@ end
function show.filter(id,element)
collected, indexed, ignored = { }, { }, { }
- asciimath.filter(lxml.getid(id),element or "am",collected,indexed)
+ asciimath.filter(lxmlgetid(id),element or "am",collected,indexed)
end
function show.max()
diff --git a/tex/context/modules/mkiv/x-asciimath.mkiv b/tex/context/modules/mkiv/x-asciimath.mkiv
index 1b0567dbd..32eaf2af2 100644
--- a/tex/context/modules/mkiv/x-asciimath.mkiv
+++ b/tex/context/modules/mkiv/x-asciimath.mkiv
@@ -182,6 +182,23 @@
{\the\everyasciimath
\clf_justasciimath{\detokenize\expandafter{\normalexpanded{#1}}}}}
+% \unexpanded\def\xmlasciimath
+% {\clf_xmlasciimath}
+
+\unexpanded\def\xmlasciimath
+ {\doifnextoptionalelse\xmlasciimath_yes\xmlasciimath_nop}
+
+\def\xmlasciimath_yes[#1]#2%
+ {\mathematics
+ [#1]%
+ {\the\everyasciimath%
+ \clf_xmlasciimath{#2}}}
+
+\def\xmlasciimath_nop#1%
+ {\mathematics
+ {\the\everyasciimath
+ \clf_xmlasciimath{#1}}}
+
\unexpanded\def\ctxmoduleasciimath#1%
{\ctxlua{moduledata.asciimath.#1}}
diff --git a/tex/generic/context/luatex/luatex-basics-chr.lua b/tex/generic/context/luatex/luatex-basics-chr.lua
index 75dffd192..14a55d7b0 100644
--- a/tex/generic/context/luatex/luatex-basics-chr.lua
+++ b/tex/generic/context/luatex/luatex-basics-chr.lua
@@ -676,6 +676,17 @@ characters.classifiers={
[2137]=5,
[2138]=5,
[2139]=5,
+ [2144]=2,
+ [2145]=4,
+ [2146]=2,
+ [2147]=2,
+ [2148]=2,
+ [2149]=2,
+ [2150]=4,
+ [2151]=3,
+ [2152]=2,
+ [2153]=3,
+ [2154]=3,
[2208]=2,
[2209]=2,
[2210]=2,
@@ -808,6 +819,12 @@ characters.classifiers={
[2765]=5,
[2786]=5,
[2787]=5,
+ [2810]=5,
+ [2811]=5,
+ [2812]=5,
+ [2813]=5,
+ [2814]=5,
+ [2815]=5,
[2817]=5,
[2876]=5,
[2879]=5,
@@ -845,7 +862,10 @@ characters.classifiers={
[3277]=5,
[3298]=5,
[3299]=5,
+ [3328]=5,
[3329]=5,
+ [3387]=5,
+ [3388]=5,
[3393]=5,
[3394]=5,
[3395]=5,
@@ -1342,6 +1362,10 @@ characters.classifiers={
[7667]=5,
[7668]=5,
[7669]=5,
+ [7670]=5,
+ [7671]=5,
+ [7672]=5,
+ [7673]=5,
[7675]=5,
[7676]=5,
[7677]=5,
@@ -1831,6 +1855,49 @@ characters.classifiers={
[71465]=5,
[71466]=5,
[71467]=5,
+ [72193]=5,
+ [72194]=5,
+ [72195]=5,
+ [72196]=5,
+ [72197]=5,
+ [72198]=5,
+ [72201]=5,
+ [72202]=5,
+ [72243]=5,
+ [72244]=5,
+ [72245]=5,
+ [72246]=5,
+ [72247]=5,
+ [72248]=5,
+ [72251]=5,
+ [72252]=5,
+ [72253]=5,
+ [72254]=5,
+ [72263]=5,
+ [72273]=5,
+ [72274]=5,
+ [72275]=5,
+ [72276]=5,
+ [72277]=5,
+ [72278]=5,
+ [72281]=5,
+ [72282]=5,
+ [72283]=5,
+ [72330]=5,
+ [72331]=5,
+ [72332]=5,
+ [72333]=5,
+ [72334]=5,
+ [72335]=5,
+ [72336]=5,
+ [72337]=5,
+ [72338]=5,
+ [72339]=5,
+ [72340]=5,
+ [72341]=5,
+ [72342]=5,
+ [72344]=5,
+ [72345]=5,
[72752]=5,
[72753]=5,
[72754]=5,
@@ -1878,6 +1945,23 @@ characters.classifiers={
[72883]=5,
[72885]=5,
[72886]=5,
+ [73009]=5,
+ [73010]=5,
+ [73011]=5,
+ [73012]=5,
+ [73013]=5,
+ [73014]=5,
+ [73018]=5,
+ [73020]=5,
+ [73021]=5,
+ [73023]=5,
+ [73024]=5,
+ [73025]=5,
+ [73026]=5,
+ [73027]=5,
+ [73028]=5,
+ [73029]=5,
+ [73031]=5,
[92912]=5,
[92913]=5,
[92914]=5,
@@ -2171,4 +2255,992 @@ characters.classifiers={
[1042752]=5,
}
+characters.indicgroups={
+ ["above_mark"]={
+ [2304]=true,
+ [2305]=true,
+ [2306]=true,
+ [2362]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2385]=true,
+ [2387]=true,
+ [2388]=true,
+ [2389]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2879]=true,
+ [3008]=true,
+ [3021]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3142]=true,
+ [3143]=true,
+ [3144]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3149]=true,
+ [3263]=true,
+ [3270]=true,
+ [3406]=true,
+ [43232]=true,
+ [43233]=true,
+ [43234]=true,
+ [43235]=true,
+ [43236]=true,
+ [43237]=true,
+ [43238]=true,
+ [43239]=true,
+ [43240]=true,
+ [43241]=true,
+ [43242]=true,
+ [43243]=true,
+ [43244]=true,
+ [43245]=true,
+ [43246]=true,
+ [43247]=true,
+ [43248]=true,
+ [43249]=true,
+ },
+ ["after_half"]={},
+ ["after_main"]={
+ [2864]=true,
+ [2879]=true,
+ [2902]=true,
+ [3376]=true,
+ },
+ ["after_postscript"]={
+ [2433]=true,
+ [2494]=true,
+ [2496]=true,
+ [2519]=true,
+ [2561]=true,
+ [2562]=true,
+ [2622]=true,
+ [2624]=true,
+ [2625]=true,
+ [2626]=true,
+ [2672]=true,
+ [2673]=true,
+ [2750]=true,
+ [2752]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2786]=true,
+ [2787]=true,
+ [2878]=true,
+ [2880]=true,
+ [2903]=true,
+ [2992]=true,
+ [3006]=true,
+ [3007]=true,
+ [3009]=true,
+ [3010]=true,
+ [3031]=true,
+ [3120]=true,
+ [3248]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3415]=true,
+ },
+ ["after_subscript"]={
+ [2366]=true,
+ [2368]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2402]=true,
+ [2403]=true,
+ [2480]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2530]=true,
+ [2531]=true,
+ [2544]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [3008]=true,
+ [3139]=true,
+ [3140]=true,
+ [3267]=true,
+ [3268]=true,
+ [3285]=true,
+ [3286]=true,
+ },
+ ["anudatta"]={
+ [2386]=true,
+ },
+ ["before_half"]={
+ [2367]=true,
+ [2382]=true,
+ [2495]=true,
+ [2503]=true,
+ [2504]=true,
+ [2623]=true,
+ [2751]=true,
+ [2887]=true,
+ },
+ ["before_main"]={
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ },
+ ["before_postscript"]={
+ [2352]=true,
+ [2736]=true,
+ },
+ ["before_subscript"]={
+ [2608]=true,
+ [2817]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3137]=true,
+ [3138]=true,
+ [3142]=true,
+ [3143]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3157]=true,
+ [3158]=true,
+ [3262]=true,
+ [3263]=true,
+ [3265]=true,
+ [3266]=true,
+ [3270]=true,
+ [3276]=true,
+ [3298]=true,
+ [3299]=true,
+ },
+ ["below_mark"]={
+ [2364]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2381]=true,
+ [2386]=true,
+ [2390]=true,
+ [2391]=true,
+ [2402]=true,
+ [2403]=true,
+ [2492]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2509]=true,
+ [2620]=true,
+ [2625]=true,
+ [2626]=true,
+ [2637]=true,
+ [2748]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2765]=true,
+ [2876]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [2884]=true,
+ [2893]=true,
+ [2914]=true,
+ [2915]=true,
+ [3009]=true,
+ [3010]=true,
+ [3170]=true,
+ [3171]=true,
+ [3260]=true,
+ [3298]=true,
+ [3299]=true,
+ [3426]=true,
+ [3427]=true,
+ },
+ ["consonant"]={
+ [2325]=true,
+ [2326]=true,
+ [2327]=true,
+ [2328]=true,
+ [2329]=true,
+ [2330]=true,
+ [2331]=true,
+ [2332]=true,
+ [2333]=true,
+ [2334]=true,
+ [2335]=true,
+ [2336]=true,
+ [2337]=true,
+ [2338]=true,
+ [2339]=true,
+ [2340]=true,
+ [2341]=true,
+ [2342]=true,
+ [2343]=true,
+ [2344]=true,
+ [2345]=true,
+ [2346]=true,
+ [2347]=true,
+ [2348]=true,
+ [2349]=true,
+ [2350]=true,
+ [2351]=true,
+ [2352]=true,
+ [2353]=true,
+ [2354]=true,
+ [2355]=true,
+ [2356]=true,
+ [2357]=true,
+ [2358]=true,
+ [2359]=true,
+ [2360]=true,
+ [2361]=true,
+ [2392]=true,
+ [2393]=true,
+ [2394]=true,
+ [2395]=true,
+ [2396]=true,
+ [2397]=true,
+ [2398]=true,
+ [2399]=true,
+ [2424]=true,
+ [2425]=true,
+ [2426]=true,
+ [2453]=true,
+ [2454]=true,
+ [2455]=true,
+ [2456]=true,
+ [2457]=true,
+ [2458]=true,
+ [2459]=true,
+ [2460]=true,
+ [2461]=true,
+ [2462]=true,
+ [2463]=true,
+ [2464]=true,
+ [2465]=true,
+ [2466]=true,
+ [2467]=true,
+ [2468]=true,
+ [2469]=true,
+ [2470]=true,
+ [2471]=true,
+ [2472]=true,
+ [2474]=true,
+ [2475]=true,
+ [2476]=true,
+ [2477]=true,
+ [2478]=true,
+ [2479]=true,
+ [2480]=true,
+ [2482]=true,
+ [2486]=true,
+ [2487]=true,
+ [2488]=true,
+ [2489]=true,
+ [2510]=true,
+ [2524]=true,
+ [2525]=true,
+ [2527]=true,
+ [2581]=true,
+ [2582]=true,
+ [2583]=true,
+ [2584]=true,
+ [2585]=true,
+ [2586]=true,
+ [2587]=true,
+ [2588]=true,
+ [2589]=true,
+ [2590]=true,
+ [2591]=true,
+ [2592]=true,
+ [2593]=true,
+ [2594]=true,
+ [2595]=true,
+ [2596]=true,
+ [2597]=true,
+ [2598]=true,
+ [2599]=true,
+ [2600]=true,
+ [2602]=true,
+ [2603]=true,
+ [2604]=true,
+ [2605]=true,
+ [2606]=true,
+ [2607]=true,
+ [2608]=true,
+ [2610]=true,
+ [2611]=true,
+ [2613]=true,
+ [2614]=true,
+ [2616]=true,
+ [2617]=true,
+ [2649]=true,
+ [2650]=true,
+ [2651]=true,
+ [2652]=true,
+ [2654]=true,
+ [2709]=true,
+ [2710]=true,
+ [2711]=true,
+ [2712]=true,
+ [2713]=true,
+ [2714]=true,
+ [2715]=true,
+ [2716]=true,
+ [2717]=true,
+ [2718]=true,
+ [2719]=true,
+ [2720]=true,
+ [2721]=true,
+ [2722]=true,
+ [2723]=true,
+ [2724]=true,
+ [2725]=true,
+ [2726]=true,
+ [2727]=true,
+ [2728]=true,
+ [2730]=true,
+ [2731]=true,
+ [2732]=true,
+ [2733]=true,
+ [2734]=true,
+ [2735]=true,
+ [2736]=true,
+ [2738]=true,
+ [2739]=true,
+ [2741]=true,
+ [2742]=true,
+ [2743]=true,
+ [2744]=true,
+ [2745]=true,
+ [2837]=true,
+ [2838]=true,
+ [2839]=true,
+ [2840]=true,
+ [2841]=true,
+ [2842]=true,
+ [2843]=true,
+ [2844]=true,
+ [2845]=true,
+ [2846]=true,
+ [2847]=true,
+ [2848]=true,
+ [2849]=true,
+ [2850]=true,
+ [2851]=true,
+ [2852]=true,
+ [2853]=true,
+ [2854]=true,
+ [2855]=true,
+ [2856]=true,
+ [2858]=true,
+ [2859]=true,
+ [2860]=true,
+ [2861]=true,
+ [2862]=true,
+ [2863]=true,
+ [2864]=true,
+ [2866]=true,
+ [2867]=true,
+ [2869]=true,
+ [2870]=true,
+ [2871]=true,
+ [2872]=true,
+ [2873]=true,
+ [2908]=true,
+ [2909]=true,
+ [2929]=true,
+ [2965]=true,
+ [2969]=true,
+ [2970]=true,
+ [2972]=true,
+ [2974]=true,
+ [2975]=true,
+ [2979]=true,
+ [2980]=true,
+ [2984]=true,
+ [2985]=true,
+ [2986]=true,
+ [2990]=true,
+ [2991]=true,
+ [2992]=true,
+ [2993]=true,
+ [2994]=true,
+ [2995]=true,
+ [2996]=true,
+ [2997]=true,
+ [2998]=true,
+ [2999]=true,
+ [3000]=true,
+ [3001]=true,
+ [3093]=true,
+ [3094]=true,
+ [3095]=true,
+ [3096]=true,
+ [3097]=true,
+ [3098]=true,
+ [3099]=true,
+ [3100]=true,
+ [3101]=true,
+ [3102]=true,
+ [3103]=true,
+ [3104]=true,
+ [3105]=true,
+ [3106]=true,
+ [3107]=true,
+ [3108]=true,
+ [3109]=true,
+ [3110]=true,
+ [3111]=true,
+ [3112]=true,
+ [3114]=true,
+ [3115]=true,
+ [3116]=true,
+ [3117]=true,
+ [3118]=true,
+ [3119]=true,
+ [3120]=true,
+ [3121]=true,
+ [3122]=true,
+ [3123]=true,
+ [3124]=true,
+ [3125]=true,
+ [3126]=true,
+ [3127]=true,
+ [3128]=true,
+ [3129]=true,
+ [3133]=true,
+ [3221]=true,
+ [3222]=true,
+ [3223]=true,
+ [3224]=true,
+ [3225]=true,
+ [3226]=true,
+ [3227]=true,
+ [3228]=true,
+ [3229]=true,
+ [3230]=true,
+ [3231]=true,
+ [3232]=true,
+ [3233]=true,
+ [3234]=true,
+ [3235]=true,
+ [3236]=true,
+ [3237]=true,
+ [3238]=true,
+ [3239]=true,
+ [3240]=true,
+ [3242]=true,
+ [3243]=true,
+ [3244]=true,
+ [3245]=true,
+ [3246]=true,
+ [3247]=true,
+ [3248]=true,
+ [3249]=true,
+ [3250]=true,
+ [3251]=true,
+ [3253]=true,
+ [3254]=true,
+ [3255]=true,
+ [3256]=true,
+ [3257]=true,
+ [3294]=true,
+ [3349]=true,
+ [3350]=true,
+ [3351]=true,
+ [3352]=true,
+ [3353]=true,
+ [3354]=true,
+ [3355]=true,
+ [3356]=true,
+ [3357]=true,
+ [3358]=true,
+ [3359]=true,
+ [3360]=true,
+ [3361]=true,
+ [3362]=true,
+ [3363]=true,
+ [3364]=true,
+ [3365]=true,
+ [3366]=true,
+ [3367]=true,
+ [3368]=true,
+ [3369]=true,
+ [3370]=true,
+ [3371]=true,
+ [3372]=true,
+ [3373]=true,
+ [3374]=true,
+ [3375]=true,
+ [3376]=true,
+ [3377]=true,
+ [3378]=true,
+ [3379]=true,
+ [3380]=true,
+ [3381]=true,
+ [3382]=true,
+ [3383]=true,
+ [3384]=true,
+ [3385]=true,
+ [3386]=true,
+ },
+ ["dependent_vowel"]={
+ [2362]=true,
+ [2363]=true,
+ [2366]=true,
+ [2367]=true,
+ [2368]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2382]=true,
+ [2383]=true,
+ [2389]=true,
+ [2390]=true,
+ [2391]=true,
+ [2402]=true,
+ [2403]=true,
+ [2494]=true,
+ [2495]=true,
+ [2496]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2503]=true,
+ [2504]=true,
+ [2622]=true,
+ [2623]=true,
+ [2624]=true,
+ [2625]=true,
+ [2626]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2750]=true,
+ [2751]=true,
+ [2752]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2878]=true,
+ [2879]=true,
+ [2880]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [2884]=true,
+ [2887]=true,
+ [2888]=true,
+ [2891]=true,
+ [2892]=true,
+ [2914]=true,
+ [2915]=true,
+ [3006]=true,
+ [3007]=true,
+ [3008]=true,
+ [3009]=true,
+ [3010]=true,
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3018]=true,
+ [3019]=true,
+ [3020]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3137]=true,
+ [3138]=true,
+ [3139]=true,
+ [3140]=true,
+ [3142]=true,
+ [3143]=true,
+ [3144]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3170]=true,
+ [3171]=true,
+ [3262]=true,
+ [3263]=true,
+ [3264]=true,
+ [3265]=true,
+ [3266]=true,
+ [3267]=true,
+ [3268]=true,
+ [3270]=true,
+ [3271]=true,
+ [3272]=true,
+ [3274]=true,
+ [3275]=true,
+ [3276]=true,
+ [3298]=true,
+ [3299]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3396]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ [3402]=true,
+ [3403]=true,
+ [3404]=true,
+ [3415]=true,
+ [3426]=true,
+ [3427]=true,
+ },
+ ["halant"]={
+ [2381]=true,
+ [2509]=true,
+ [2637]=true,
+ [2765]=true,
+ [2893]=true,
+ [3021]=true,
+ [3149]=true,
+ [3277]=true,
+ [3405]=true,
+ },
+ ["independent_vowel"]={
+ [2308]=true,
+ [2309]=true,
+ [2310]=true,
+ [2311]=true,
+ [2312]=true,
+ [2313]=true,
+ [2314]=true,
+ [2315]=true,
+ [2316]=true,
+ [2317]=true,
+ [2318]=true,
+ [2319]=true,
+ [2320]=true,
+ [2321]=true,
+ [2322]=true,
+ [2323]=true,
+ [2324]=true,
+ [2400]=true,
+ [2401]=true,
+ [2418]=true,
+ [2419]=true,
+ [2420]=true,
+ [2421]=true,
+ [2422]=true,
+ [2423]=true,
+ [2437]=true,
+ [2438]=true,
+ [2439]=true,
+ [2440]=true,
+ [2441]=true,
+ [2442]=true,
+ [2443]=true,
+ [2444]=true,
+ [2447]=true,
+ [2448]=true,
+ [2451]=true,
+ [2452]=true,
+ [2528]=true,
+ [2529]=true,
+ [2530]=true,
+ [2531]=true,
+ [2565]=true,
+ [2566]=true,
+ [2567]=true,
+ [2568]=true,
+ [2569]=true,
+ [2570]=true,
+ [2575]=true,
+ [2576]=true,
+ [2579]=true,
+ [2580]=true,
+ [2693]=true,
+ [2694]=true,
+ [2695]=true,
+ [2696]=true,
+ [2697]=true,
+ [2698]=true,
+ [2699]=true,
+ [2700]=true,
+ [2701]=true,
+ [2703]=true,
+ [2704]=true,
+ [2705]=true,
+ [2707]=true,
+ [2708]=true,
+ [2784]=true,
+ [2785]=true,
+ [2786]=true,
+ [2787]=true,
+ [2821]=true,
+ [2822]=true,
+ [2823]=true,
+ [2824]=true,
+ [2825]=true,
+ [2826]=true,
+ [2827]=true,
+ [2828]=true,
+ [2831]=true,
+ [2832]=true,
+ [2835]=true,
+ [2836]=true,
+ [2912]=true,
+ [2913]=true,
+ [2949]=true,
+ [2950]=true,
+ [2951]=true,
+ [2952]=true,
+ [2953]=true,
+ [2954]=true,
+ [2958]=true,
+ [2959]=true,
+ [2960]=true,
+ [2962]=true,
+ [2963]=true,
+ [2964]=true,
+ [3077]=true,
+ [3078]=true,
+ [3079]=true,
+ [3080]=true,
+ [3081]=true,
+ [3082]=true,
+ [3083]=true,
+ [3084]=true,
+ [3086]=true,
+ [3087]=true,
+ [3088]=true,
+ [3090]=true,
+ [3091]=true,
+ [3092]=true,
+ [3168]=true,
+ [3169]=true,
+ [3205]=true,
+ [3206]=true,
+ [3207]=true,
+ [3208]=true,
+ [3209]=true,
+ [3210]=true,
+ [3211]=true,
+ [3212]=true,
+ [3214]=true,
+ [3215]=true,
+ [3216]=true,
+ [3218]=true,
+ [3219]=true,
+ [3220]=true,
+ [3296]=true,
+ [3297]=true,
+ [3333]=true,
+ [3334]=true,
+ [3335]=true,
+ [3336]=true,
+ [3337]=true,
+ [3338]=true,
+ [3339]=true,
+ [3340]=true,
+ [3342]=true,
+ [3343]=true,
+ [3344]=true,
+ [3346]=true,
+ [3347]=true,
+ [3348]=true,
+ [3423]=true,
+ [3424]=true,
+ [3425]=true,
+ },
+ ["nukta"]={
+ [2364]=true,
+ [2492]=true,
+ [2620]=true,
+ [2748]=true,
+ [2876]=true,
+ [3260]=true,
+ },
+ ["post_mark"]={
+ [2307]=true,
+ [2363]=true,
+ [2366]=true,
+ [2368]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2383]=true,
+ [2494]=true,
+ [2496]=true,
+ [2503]=true,
+ [2504]=true,
+ [2622]=true,
+ [2624]=true,
+ [2750]=true,
+ [2752]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2878]=true,
+ [2880]=true,
+ [3006]=true,
+ [3007]=true,
+ [3137]=true,
+ [3138]=true,
+ [3139]=true,
+ [3140]=true,
+ [3262]=true,
+ [3264]=true,
+ [3265]=true,
+ [3266]=true,
+ [3267]=true,
+ [3268]=true,
+ [3271]=true,
+ [3272]=true,
+ [3274]=true,
+ [3275]=true,
+ [3276]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3396]=true,
+ [3415]=true,
+ },
+ ["pre_mark"]={
+ [2367]=true,
+ [2382]=true,
+ [2495]=true,
+ [2623]=true,
+ [2751]=true,
+ [2887]=true,
+ [2888]=true,
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ },
+ ["ra"]={
+ [2352]=true,
+ [2480]=true,
+ [2608]=true,
+ [2736]=true,
+ [2864]=true,
+ [2992]=true,
+ [3120]=true,
+ [3248]=true,
+ [3376]=true,
+ },
+ ["stress_tone_mark"]={
+ [2385]=true,
+ [2386]=true,
+ [2387]=true,
+ [2388]=true,
+ [2507]=true,
+ [2508]=true,
+ [3277]=true,
+ [3405]=true,
+ },
+ ["twopart_mark"]={
+ [2891]={ 2887, 2878 },
+ [2892]={ 2887, 2903 },
+ [3018]={ 3014, 3006 },
+ [3019]={ 3015, 3006 },
+ [3020]={ 3014, 3031 },
+ [3402]={ 3398, 3390 },
+ [3403]={ 3399, 3390 },
+ [3404]={ 3398, 3415 },
+ },
+ ["vowel_modifier"]={
+ [2304]=true,
+ [2305]=true,
+ [2306]=true,
+ [2307]=true,
+ [3330]=true,
+ [3331]=true,
+ [43232]=true,
+ [43233]=true,
+ [43234]=true,
+ [43235]=true,
+ [43236]=true,
+ [43237]=true,
+ [43238]=true,
+ [43239]=true,
+ [43240]=true,
+ [43241]=true,
+ [43242]=true,
+ [43243]=true,
+ [43244]=true,
+ [43245]=true,
+ [43246]=true,
+ [43247]=true,
+ [43248]=true,
+ [43249]=true,
+ },
+}
+
-- done
diff --git a/tex/generic/context/luatex/luatex-basics-prepare.tex b/tex/generic/context/luatex/luatex-basics-prepare.tex
index 76a35cc94..47eaa7341 100644
--- a/tex/generic/context/luatex/luatex-basics-prepare.tex
+++ b/tex/generic/context/luatex/luatex-basics-prepare.tex
@@ -15,6 +15,8 @@
%D is needed because we don't want to load the (mostly not used in generic) data
%D files.
+%D Indicorder is not yet filled in completely.
+
\startluacode
-- dofile("t:/sources/char-ini.lua")
@@ -43,6 +45,7 @@ local first_mandiac, last_mandiac = characters.blockrange("mandiac")
local first_nko, last_nko = characters.blockrange("nko")
local classifiers = { }
+local indicgroups = characters.indicgroups
for k, c in next, chardata do
if k > 0 then
@@ -78,11 +81,14 @@ characters.blockrange = { }
%s
+%s
+
-- done
]] ]
io.savedata("luatex-basics-chr.lua",template(
- table.serialize(classifiers,"characters.classifiers")
+ table.serialize(classifiers,"characters.classifiers"),
+ table.serialize(indicgroups,"characters.indicgroups")
))
\stopluacode
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index e91fdbd93..97503d8a7 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 03/16/18 22:20:58
+-- merge date : 04/02/18 15:43:20
do -- begin closure to overcome local limits and interference
@@ -1976,10 +1976,10 @@ function table.reversed(t)
return tt
end
end
-function table.reverse(t)
+function table.reverse(t)
if t then
local n=#t
- for i=1,floor(n/2) do
+ for i=1,floor(n/2) do
local j=n-i+1
t[i],t[j]=t[j],t[i]
end
@@ -3745,13 +3745,15 @@ utilities.strings=utilities.strings or {}
local strings=utilities.strings
local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
-local tonumber,type,tostring,next=tonumber,type,tostring,next
+local tonumber,type,tostring,next,setmetatable=tonumber,type,tostring,next,setmetatable
+local unpack,concat=table.unpack,table.concat
local unpack,concat=table.unpack,table.concat
local P,V,C,S,R,Ct,Cs,Cp,Carg,Cc=lpeg.P,lpeg.V,lpeg.C,lpeg.S,lpeg.R,lpeg.Ct,lpeg.Cs,lpeg.Cp,lpeg.Carg,lpeg.Cc
local patterns,lpegmatch=lpeg.patterns,lpeg.match
local utfchar,utfbyte,utflen=utf.char,utf.byte,utf.len
local loadstripped=nil
-if LUAVERSION<5.2 then
+local oldfashioned=LUAVERSION<5.2
+if oldfashioned then
loadstripped=function(str,shortcuts)
return load(str)
end
@@ -4023,7 +4025,7 @@ local template=[[
return function(%s) return %s end
]]
local preamble,environment="",{}
-if LUAVERSION<5.2 then
+if oldfashioned then
preamble=[[
local lpeg=lpeg
local type=type
@@ -4070,7 +4072,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
- formattedfloat=number.formattedfloat
+ formattedfloat=number.formattedfloat,
}
end
local arguments={ "a1" }
@@ -4427,12 +4429,18 @@ local builder=Cs { "start",
["?"]=Cs(((1-P("%"))^1 )^1)/format_rest,
["!"]=Carg(2)*prefix_any*P("!")*C((1-P("!"))^1)*P("!")/format_extension,
}
-local direct=Cs (
- P("%")*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*P(-1)/[[local format = string.format return function(str) return format("%0",str) end]]
-)
+local xx=setmetatable({},{ __index=function(t,k) local v=format("%02x",k) t[k]=v return v end })
+local XX=setmetatable({},{ __index=function(t,k) local v=format("%02X",k) t[k]=v return v end })
+local preset={
+ ["%02x"]=function(n) return xx[n] end,
+ ["%02X"]=function(n) return XX[n] end,
+}
+local direct=P("%")*(S("+- .")+R("09"))^0*S("sqidfgGeExXo")*P(-1)/[[local format = string.format return function(str) return format("%0",str) end]]
local function make(t,str)
- local f
- local p
+ local f=preset[str]
+ if f then
+ return f
+ end
local p=lpegmatch(direct,str)
if p then
f=loadstripped(p)()
@@ -4453,7 +4461,7 @@ local function use(t,fmt,...)
return t[fmt](...)
end
strings.formatters={}
-if LUAVERSION<5.2 then
+if oldfashioned then
function strings.formatters.new(noconcat)
local t={ _type_="formatter",_connector_=noconcat and "," or "..",_extensions_={},_preamble_=preamble,_environment_={} }
setmetatable(t,{ __index=make,__call=use })
@@ -4490,7 +4498,7 @@ patterns.xmlescape=Cs((P("<")/"<"+P(">")/">"+P("&")/"&"+P('"')/""
patterns.texescape=Cs((C(S("#$%\\{}"))/"\\%1"+P(1))^0)
patterns.luaescape=Cs(((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0)
patterns.luaquoted=Cs(Cc('"')*((1-S('"\n'))^1+P('"')/'\\"'+P('\n')/'\\n"')^0*Cc('"'))
-if LUAVERSION<5.2 then
+if oldfashioned then
add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],"local xmlescape = lpeg.patterns.xmlescape")
add(formatters,"tex",[[lpegmatch(texescape,%s)]],"local texescape = lpeg.patterns.texescape")
add(formatters,"lua",[[lpegmatch(luaescape,%s)]],"local luaescape = lpeg.patterns.luaescape")
@@ -6274,6 +6282,17 @@ characters.classifiers={
[2137]=5,
[2138]=5,
[2139]=5,
+ [2144]=2,
+ [2145]=4,
+ [2146]=2,
+ [2147]=2,
+ [2148]=2,
+ [2149]=2,
+ [2150]=4,
+ [2151]=3,
+ [2152]=2,
+ [2153]=3,
+ [2154]=3,
[2208]=2,
[2209]=2,
[2210]=2,
@@ -6406,6 +6425,12 @@ characters.classifiers={
[2765]=5,
[2786]=5,
[2787]=5,
+ [2810]=5,
+ [2811]=5,
+ [2812]=5,
+ [2813]=5,
+ [2814]=5,
+ [2815]=5,
[2817]=5,
[2876]=5,
[2879]=5,
@@ -6443,7 +6468,10 @@ characters.classifiers={
[3277]=5,
[3298]=5,
[3299]=5,
+ [3328]=5,
[3329]=5,
+ [3387]=5,
+ [3388]=5,
[3393]=5,
[3394]=5,
[3395]=5,
@@ -6940,6 +6968,10 @@ characters.classifiers={
[7667]=5,
[7668]=5,
[7669]=5,
+ [7670]=5,
+ [7671]=5,
+ [7672]=5,
+ [7673]=5,
[7675]=5,
[7676]=5,
[7677]=5,
@@ -7429,6 +7461,49 @@ characters.classifiers={
[71465]=5,
[71466]=5,
[71467]=5,
+ [72193]=5,
+ [72194]=5,
+ [72195]=5,
+ [72196]=5,
+ [72197]=5,
+ [72198]=5,
+ [72201]=5,
+ [72202]=5,
+ [72243]=5,
+ [72244]=5,
+ [72245]=5,
+ [72246]=5,
+ [72247]=5,
+ [72248]=5,
+ [72251]=5,
+ [72252]=5,
+ [72253]=5,
+ [72254]=5,
+ [72263]=5,
+ [72273]=5,
+ [72274]=5,
+ [72275]=5,
+ [72276]=5,
+ [72277]=5,
+ [72278]=5,
+ [72281]=5,
+ [72282]=5,
+ [72283]=5,
+ [72330]=5,
+ [72331]=5,
+ [72332]=5,
+ [72333]=5,
+ [72334]=5,
+ [72335]=5,
+ [72336]=5,
+ [72337]=5,
+ [72338]=5,
+ [72339]=5,
+ [72340]=5,
+ [72341]=5,
+ [72342]=5,
+ [72344]=5,
+ [72345]=5,
[72752]=5,
[72753]=5,
[72754]=5,
@@ -7476,6 +7551,23 @@ characters.classifiers={
[72883]=5,
[72885]=5,
[72886]=5,
+ [73009]=5,
+ [73010]=5,
+ [73011]=5,
+ [73012]=5,
+ [73013]=5,
+ [73014]=5,
+ [73018]=5,
+ [73020]=5,
+ [73021]=5,
+ [73023]=5,
+ [73024]=5,
+ [73025]=5,
+ [73026]=5,
+ [73027]=5,
+ [73028]=5,
+ [73029]=5,
+ [73031]=5,
[92912]=5,
[92913]=5,
[92914]=5,
@@ -7768,6 +7860,993 @@ characters.classifiers={
[125258]=5,
[1042752]=5,
}
+characters.indicgroups={
+ ["above_mark"]={
+ [2304]=true,
+ [2305]=true,
+ [2306]=true,
+ [2362]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2385]=true,
+ [2387]=true,
+ [2388]=true,
+ [2389]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2879]=true,
+ [3008]=true,
+ [3021]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3142]=true,
+ [3143]=true,
+ [3144]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3149]=true,
+ [3263]=true,
+ [3270]=true,
+ [3406]=true,
+ [43232]=true,
+ [43233]=true,
+ [43234]=true,
+ [43235]=true,
+ [43236]=true,
+ [43237]=true,
+ [43238]=true,
+ [43239]=true,
+ [43240]=true,
+ [43241]=true,
+ [43242]=true,
+ [43243]=true,
+ [43244]=true,
+ [43245]=true,
+ [43246]=true,
+ [43247]=true,
+ [43248]=true,
+ [43249]=true,
+ },
+ ["after_half"]={},
+ ["after_main"]={
+ [2864]=true,
+ [2879]=true,
+ [2902]=true,
+ [3376]=true,
+ },
+ ["after_postscript"]={
+ [2433]=true,
+ [2494]=true,
+ [2496]=true,
+ [2519]=true,
+ [2561]=true,
+ [2562]=true,
+ [2622]=true,
+ [2624]=true,
+ [2625]=true,
+ [2626]=true,
+ [2672]=true,
+ [2673]=true,
+ [2750]=true,
+ [2752]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2786]=true,
+ [2787]=true,
+ [2878]=true,
+ [2880]=true,
+ [2903]=true,
+ [2992]=true,
+ [3006]=true,
+ [3007]=true,
+ [3009]=true,
+ [3010]=true,
+ [3031]=true,
+ [3120]=true,
+ [3248]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3415]=true,
+ },
+ ["after_subscript"]={
+ [2366]=true,
+ [2368]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2402]=true,
+ [2403]=true,
+ [2480]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2530]=true,
+ [2531]=true,
+ [2544]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [3008]=true,
+ [3139]=true,
+ [3140]=true,
+ [3267]=true,
+ [3268]=true,
+ [3285]=true,
+ [3286]=true,
+ },
+ ["anudatta"]={
+ [2386]=true,
+ },
+ ["before_half"]={
+ [2367]=true,
+ [2382]=true,
+ [2495]=true,
+ [2503]=true,
+ [2504]=true,
+ [2623]=true,
+ [2751]=true,
+ [2887]=true,
+ },
+ ["before_main"]={
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ },
+ ["before_postscript"]={
+ [2352]=true,
+ [2736]=true,
+ },
+ ["before_subscript"]={
+ [2608]=true,
+ [2817]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3137]=true,
+ [3138]=true,
+ [3142]=true,
+ [3143]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3157]=true,
+ [3158]=true,
+ [3262]=true,
+ [3263]=true,
+ [3265]=true,
+ [3266]=true,
+ [3270]=true,
+ [3276]=true,
+ [3298]=true,
+ [3299]=true,
+ },
+ ["below_mark"]={
+ [2364]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2381]=true,
+ [2386]=true,
+ [2390]=true,
+ [2391]=true,
+ [2402]=true,
+ [2403]=true,
+ [2492]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2509]=true,
+ [2620]=true,
+ [2625]=true,
+ [2626]=true,
+ [2637]=true,
+ [2748]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2765]=true,
+ [2876]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [2884]=true,
+ [2893]=true,
+ [2914]=true,
+ [2915]=true,
+ [3009]=true,
+ [3010]=true,
+ [3170]=true,
+ [3171]=true,
+ [3260]=true,
+ [3298]=true,
+ [3299]=true,
+ [3426]=true,
+ [3427]=true,
+ },
+ ["consonant"]={
+ [2325]=true,
+ [2326]=true,
+ [2327]=true,
+ [2328]=true,
+ [2329]=true,
+ [2330]=true,
+ [2331]=true,
+ [2332]=true,
+ [2333]=true,
+ [2334]=true,
+ [2335]=true,
+ [2336]=true,
+ [2337]=true,
+ [2338]=true,
+ [2339]=true,
+ [2340]=true,
+ [2341]=true,
+ [2342]=true,
+ [2343]=true,
+ [2344]=true,
+ [2345]=true,
+ [2346]=true,
+ [2347]=true,
+ [2348]=true,
+ [2349]=true,
+ [2350]=true,
+ [2351]=true,
+ [2352]=true,
+ [2353]=true,
+ [2354]=true,
+ [2355]=true,
+ [2356]=true,
+ [2357]=true,
+ [2358]=true,
+ [2359]=true,
+ [2360]=true,
+ [2361]=true,
+ [2392]=true,
+ [2393]=true,
+ [2394]=true,
+ [2395]=true,
+ [2396]=true,
+ [2397]=true,
+ [2398]=true,
+ [2399]=true,
+ [2424]=true,
+ [2425]=true,
+ [2426]=true,
+ [2453]=true,
+ [2454]=true,
+ [2455]=true,
+ [2456]=true,
+ [2457]=true,
+ [2458]=true,
+ [2459]=true,
+ [2460]=true,
+ [2461]=true,
+ [2462]=true,
+ [2463]=true,
+ [2464]=true,
+ [2465]=true,
+ [2466]=true,
+ [2467]=true,
+ [2468]=true,
+ [2469]=true,
+ [2470]=true,
+ [2471]=true,
+ [2472]=true,
+ [2474]=true,
+ [2475]=true,
+ [2476]=true,
+ [2477]=true,
+ [2478]=true,
+ [2479]=true,
+ [2480]=true,
+ [2482]=true,
+ [2486]=true,
+ [2487]=true,
+ [2488]=true,
+ [2489]=true,
+ [2510]=true,
+ [2524]=true,
+ [2525]=true,
+ [2527]=true,
+ [2581]=true,
+ [2582]=true,
+ [2583]=true,
+ [2584]=true,
+ [2585]=true,
+ [2586]=true,
+ [2587]=true,
+ [2588]=true,
+ [2589]=true,
+ [2590]=true,
+ [2591]=true,
+ [2592]=true,
+ [2593]=true,
+ [2594]=true,
+ [2595]=true,
+ [2596]=true,
+ [2597]=true,
+ [2598]=true,
+ [2599]=true,
+ [2600]=true,
+ [2602]=true,
+ [2603]=true,
+ [2604]=true,
+ [2605]=true,
+ [2606]=true,
+ [2607]=true,
+ [2608]=true,
+ [2610]=true,
+ [2611]=true,
+ [2613]=true,
+ [2614]=true,
+ [2616]=true,
+ [2617]=true,
+ [2649]=true,
+ [2650]=true,
+ [2651]=true,
+ [2652]=true,
+ [2654]=true,
+ [2709]=true,
+ [2710]=true,
+ [2711]=true,
+ [2712]=true,
+ [2713]=true,
+ [2714]=true,
+ [2715]=true,
+ [2716]=true,
+ [2717]=true,
+ [2718]=true,
+ [2719]=true,
+ [2720]=true,
+ [2721]=true,
+ [2722]=true,
+ [2723]=true,
+ [2724]=true,
+ [2725]=true,
+ [2726]=true,
+ [2727]=true,
+ [2728]=true,
+ [2730]=true,
+ [2731]=true,
+ [2732]=true,
+ [2733]=true,
+ [2734]=true,
+ [2735]=true,
+ [2736]=true,
+ [2738]=true,
+ [2739]=true,
+ [2741]=true,
+ [2742]=true,
+ [2743]=true,
+ [2744]=true,
+ [2745]=true,
+ [2837]=true,
+ [2838]=true,
+ [2839]=true,
+ [2840]=true,
+ [2841]=true,
+ [2842]=true,
+ [2843]=true,
+ [2844]=true,
+ [2845]=true,
+ [2846]=true,
+ [2847]=true,
+ [2848]=true,
+ [2849]=true,
+ [2850]=true,
+ [2851]=true,
+ [2852]=true,
+ [2853]=true,
+ [2854]=true,
+ [2855]=true,
+ [2856]=true,
+ [2858]=true,
+ [2859]=true,
+ [2860]=true,
+ [2861]=true,
+ [2862]=true,
+ [2863]=true,
+ [2864]=true,
+ [2866]=true,
+ [2867]=true,
+ [2869]=true,
+ [2870]=true,
+ [2871]=true,
+ [2872]=true,
+ [2873]=true,
+ [2908]=true,
+ [2909]=true,
+ [2929]=true,
+ [2965]=true,
+ [2969]=true,
+ [2970]=true,
+ [2972]=true,
+ [2974]=true,
+ [2975]=true,
+ [2979]=true,
+ [2980]=true,
+ [2984]=true,
+ [2985]=true,
+ [2986]=true,
+ [2990]=true,
+ [2991]=true,
+ [2992]=true,
+ [2993]=true,
+ [2994]=true,
+ [2995]=true,
+ [2996]=true,
+ [2997]=true,
+ [2998]=true,
+ [2999]=true,
+ [3000]=true,
+ [3001]=true,
+ [3093]=true,
+ [3094]=true,
+ [3095]=true,
+ [3096]=true,
+ [3097]=true,
+ [3098]=true,
+ [3099]=true,
+ [3100]=true,
+ [3101]=true,
+ [3102]=true,
+ [3103]=true,
+ [3104]=true,
+ [3105]=true,
+ [3106]=true,
+ [3107]=true,
+ [3108]=true,
+ [3109]=true,
+ [3110]=true,
+ [3111]=true,
+ [3112]=true,
+ [3114]=true,
+ [3115]=true,
+ [3116]=true,
+ [3117]=true,
+ [3118]=true,
+ [3119]=true,
+ [3120]=true,
+ [3121]=true,
+ [3122]=true,
+ [3123]=true,
+ [3124]=true,
+ [3125]=true,
+ [3126]=true,
+ [3127]=true,
+ [3128]=true,
+ [3129]=true,
+ [3133]=true,
+ [3221]=true,
+ [3222]=true,
+ [3223]=true,
+ [3224]=true,
+ [3225]=true,
+ [3226]=true,
+ [3227]=true,
+ [3228]=true,
+ [3229]=true,
+ [3230]=true,
+ [3231]=true,
+ [3232]=true,
+ [3233]=true,
+ [3234]=true,
+ [3235]=true,
+ [3236]=true,
+ [3237]=true,
+ [3238]=true,
+ [3239]=true,
+ [3240]=true,
+ [3242]=true,
+ [3243]=true,
+ [3244]=true,
+ [3245]=true,
+ [3246]=true,
+ [3247]=true,
+ [3248]=true,
+ [3249]=true,
+ [3250]=true,
+ [3251]=true,
+ [3253]=true,
+ [3254]=true,
+ [3255]=true,
+ [3256]=true,
+ [3257]=true,
+ [3294]=true,
+ [3349]=true,
+ [3350]=true,
+ [3351]=true,
+ [3352]=true,
+ [3353]=true,
+ [3354]=true,
+ [3355]=true,
+ [3356]=true,
+ [3357]=true,
+ [3358]=true,
+ [3359]=true,
+ [3360]=true,
+ [3361]=true,
+ [3362]=true,
+ [3363]=true,
+ [3364]=true,
+ [3365]=true,
+ [3366]=true,
+ [3367]=true,
+ [3368]=true,
+ [3369]=true,
+ [3370]=true,
+ [3371]=true,
+ [3372]=true,
+ [3373]=true,
+ [3374]=true,
+ [3375]=true,
+ [3376]=true,
+ [3377]=true,
+ [3378]=true,
+ [3379]=true,
+ [3380]=true,
+ [3381]=true,
+ [3382]=true,
+ [3383]=true,
+ [3384]=true,
+ [3385]=true,
+ [3386]=true,
+ },
+ ["dependent_vowel"]={
+ [2362]=true,
+ [2363]=true,
+ [2366]=true,
+ [2367]=true,
+ [2368]=true,
+ [2369]=true,
+ [2370]=true,
+ [2371]=true,
+ [2372]=true,
+ [2373]=true,
+ [2374]=true,
+ [2375]=true,
+ [2376]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2382]=true,
+ [2383]=true,
+ [2389]=true,
+ [2390]=true,
+ [2391]=true,
+ [2402]=true,
+ [2403]=true,
+ [2494]=true,
+ [2495]=true,
+ [2496]=true,
+ [2497]=true,
+ [2498]=true,
+ [2499]=true,
+ [2500]=true,
+ [2503]=true,
+ [2504]=true,
+ [2622]=true,
+ [2623]=true,
+ [2624]=true,
+ [2625]=true,
+ [2626]=true,
+ [2631]=true,
+ [2632]=true,
+ [2635]=true,
+ [2636]=true,
+ [2750]=true,
+ [2751]=true,
+ [2752]=true,
+ [2753]=true,
+ [2754]=true,
+ [2755]=true,
+ [2756]=true,
+ [2757]=true,
+ [2759]=true,
+ [2760]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2878]=true,
+ [2879]=true,
+ [2880]=true,
+ [2881]=true,
+ [2882]=true,
+ [2883]=true,
+ [2884]=true,
+ [2887]=true,
+ [2888]=true,
+ [2891]=true,
+ [2892]=true,
+ [2914]=true,
+ [2915]=true,
+ [3006]=true,
+ [3007]=true,
+ [3008]=true,
+ [3009]=true,
+ [3010]=true,
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3018]=true,
+ [3019]=true,
+ [3020]=true,
+ [3134]=true,
+ [3135]=true,
+ [3136]=true,
+ [3137]=true,
+ [3138]=true,
+ [3139]=true,
+ [3140]=true,
+ [3142]=true,
+ [3143]=true,
+ [3144]=true,
+ [3146]=true,
+ [3147]=true,
+ [3148]=true,
+ [3170]=true,
+ [3171]=true,
+ [3262]=true,
+ [3263]=true,
+ [3264]=true,
+ [3265]=true,
+ [3266]=true,
+ [3267]=true,
+ [3268]=true,
+ [3270]=true,
+ [3271]=true,
+ [3272]=true,
+ [3274]=true,
+ [3275]=true,
+ [3276]=true,
+ [3298]=true,
+ [3299]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3396]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ [3402]=true,
+ [3403]=true,
+ [3404]=true,
+ [3415]=true,
+ [3426]=true,
+ [3427]=true,
+ },
+ ["halant"]={
+ [2381]=true,
+ [2509]=true,
+ [2637]=true,
+ [2765]=true,
+ [2893]=true,
+ [3021]=true,
+ [3149]=true,
+ [3277]=true,
+ [3405]=true,
+ },
+ ["independent_vowel"]={
+ [2308]=true,
+ [2309]=true,
+ [2310]=true,
+ [2311]=true,
+ [2312]=true,
+ [2313]=true,
+ [2314]=true,
+ [2315]=true,
+ [2316]=true,
+ [2317]=true,
+ [2318]=true,
+ [2319]=true,
+ [2320]=true,
+ [2321]=true,
+ [2322]=true,
+ [2323]=true,
+ [2324]=true,
+ [2400]=true,
+ [2401]=true,
+ [2418]=true,
+ [2419]=true,
+ [2420]=true,
+ [2421]=true,
+ [2422]=true,
+ [2423]=true,
+ [2437]=true,
+ [2438]=true,
+ [2439]=true,
+ [2440]=true,
+ [2441]=true,
+ [2442]=true,
+ [2443]=true,
+ [2444]=true,
+ [2447]=true,
+ [2448]=true,
+ [2451]=true,
+ [2452]=true,
+ [2528]=true,
+ [2529]=true,
+ [2530]=true,
+ [2531]=true,
+ [2565]=true,
+ [2566]=true,
+ [2567]=true,
+ [2568]=true,
+ [2569]=true,
+ [2570]=true,
+ [2575]=true,
+ [2576]=true,
+ [2579]=true,
+ [2580]=true,
+ [2693]=true,
+ [2694]=true,
+ [2695]=true,
+ [2696]=true,
+ [2697]=true,
+ [2698]=true,
+ [2699]=true,
+ [2700]=true,
+ [2701]=true,
+ [2703]=true,
+ [2704]=true,
+ [2705]=true,
+ [2707]=true,
+ [2708]=true,
+ [2784]=true,
+ [2785]=true,
+ [2786]=true,
+ [2787]=true,
+ [2821]=true,
+ [2822]=true,
+ [2823]=true,
+ [2824]=true,
+ [2825]=true,
+ [2826]=true,
+ [2827]=true,
+ [2828]=true,
+ [2831]=true,
+ [2832]=true,
+ [2835]=true,
+ [2836]=true,
+ [2912]=true,
+ [2913]=true,
+ [2949]=true,
+ [2950]=true,
+ [2951]=true,
+ [2952]=true,
+ [2953]=true,
+ [2954]=true,
+ [2958]=true,
+ [2959]=true,
+ [2960]=true,
+ [2962]=true,
+ [2963]=true,
+ [2964]=true,
+ [3077]=true,
+ [3078]=true,
+ [3079]=true,
+ [3080]=true,
+ [3081]=true,
+ [3082]=true,
+ [3083]=true,
+ [3084]=true,
+ [3086]=true,
+ [3087]=true,
+ [3088]=true,
+ [3090]=true,
+ [3091]=true,
+ [3092]=true,
+ [3168]=true,
+ [3169]=true,
+ [3205]=true,
+ [3206]=true,
+ [3207]=true,
+ [3208]=true,
+ [3209]=true,
+ [3210]=true,
+ [3211]=true,
+ [3212]=true,
+ [3214]=true,
+ [3215]=true,
+ [3216]=true,
+ [3218]=true,
+ [3219]=true,
+ [3220]=true,
+ [3296]=true,
+ [3297]=true,
+ [3333]=true,
+ [3334]=true,
+ [3335]=true,
+ [3336]=true,
+ [3337]=true,
+ [3338]=true,
+ [3339]=true,
+ [3340]=true,
+ [3342]=true,
+ [3343]=true,
+ [3344]=true,
+ [3346]=true,
+ [3347]=true,
+ [3348]=true,
+ [3423]=true,
+ [3424]=true,
+ [3425]=true,
+ },
+ ["nukta"]={
+ [2364]=true,
+ [2492]=true,
+ [2620]=true,
+ [2748]=true,
+ [2876]=true,
+ [3260]=true,
+ },
+ ["post_mark"]={
+ [2307]=true,
+ [2363]=true,
+ [2366]=true,
+ [2368]=true,
+ [2377]=true,
+ [2378]=true,
+ [2379]=true,
+ [2380]=true,
+ [2383]=true,
+ [2494]=true,
+ [2496]=true,
+ [2503]=true,
+ [2504]=true,
+ [2622]=true,
+ [2624]=true,
+ [2750]=true,
+ [2752]=true,
+ [2761]=true,
+ [2763]=true,
+ [2764]=true,
+ [2878]=true,
+ [2880]=true,
+ [3006]=true,
+ [3007]=true,
+ [3137]=true,
+ [3138]=true,
+ [3139]=true,
+ [3140]=true,
+ [3262]=true,
+ [3264]=true,
+ [3265]=true,
+ [3266]=true,
+ [3267]=true,
+ [3268]=true,
+ [3271]=true,
+ [3272]=true,
+ [3274]=true,
+ [3275]=true,
+ [3276]=true,
+ [3390]=true,
+ [3391]=true,
+ [3392]=true,
+ [3393]=true,
+ [3394]=true,
+ [3395]=true,
+ [3396]=true,
+ [3415]=true,
+ },
+ ["pre_mark"]={
+ [2367]=true,
+ [2382]=true,
+ [2495]=true,
+ [2623]=true,
+ [2751]=true,
+ [2887]=true,
+ [2888]=true,
+ [3014]=true,
+ [3015]=true,
+ [3016]=true,
+ [3398]=true,
+ [3399]=true,
+ [3400]=true,
+ },
+ ["ra"]={
+ [2352]=true,
+ [2480]=true,
+ [2608]=true,
+ [2736]=true,
+ [2864]=true,
+ [2992]=true,
+ [3120]=true,
+ [3248]=true,
+ [3376]=true,
+ },
+ ["stress_tone_mark"]={
+ [2385]=true,
+ [2386]=true,
+ [2387]=true,
+ [2388]=true,
+ [2507]=true,
+ [2508]=true,
+ [3277]=true,
+ [3405]=true,
+ },
+ ["twopart_mark"]={
+ [2891]={ 2887,2878 },
+ [2892]={ 2887,2903 },
+ [3018]={ 3014,3006 },
+ [3019]={ 3015,3006 },
+ [3020]={ 3014,3031 },
+ [3402]={ 3398,3390 },
+ [3403]={ 3399,3390 },
+ [3404]={ 3398,3415 },
+ },
+ ["vowel_modifier"]={
+ [2304]=true,
+ [2305]=true,
+ [2306]=true,
+ [2307]=true,
+ [3330]=true,
+ [3331]=true,
+ [43232]=true,
+ [43233]=true,
+ [43234]=true,
+ [43235]=true,
+ [43236]=true,
+ [43237]=true,
+ [43238]=true,
+ [43239]=true,
+ [43240]=true,
+ [43241]=true,
+ [43242]=true,
+ [43243]=true,
+ [43244]=true,
+ [43245]=true,
+ [43246]=true,
+ [43247]=true,
+ [43248]=true,
+ [43249]=true,
+ },
+}
end -- closure
@@ -8167,12 +9246,22 @@ function constructors.scale(tfmdata,specification)
else
target.slant=0
end
+ local mode=parameters.mode or 0
+ if mode~=0 then
+ target.mode=mode
+ end
+ local width=parameters.width or 0
+ if width~=0 then
+ target.width=width
+ end
targetparameters.factor=delta
targetparameters.hfactor=hdelta
targetparameters.vfactor=vdelta
targetparameters.size=scaledpoints
targetparameters.units=units
targetparameters.scaledpoints=askedscaledpoints
+ targetparameters.mode=mode
+ targetparameters.width=width
local isvirtual=properties.virtualized or tfmdata.type=="virtual"
local hasquality=parameters.expansion or parameters.protrusion
local hasitalics=properties.hasitalics
@@ -8508,7 +9597,9 @@ function constructors.scale(tfmdata,specification)
constructors.aftercopyingcharacters(target,tfmdata)
constructors.trytosharefont(target,tfmdata)
local vfonts=target.fonts
- if isvirtual then
+if isvirtual or target.type=="virtual" or properties.virtualized then
+ properties.virtualized=true
+target.type="virtual"
if not vfonts or #vfonts==0 then
target.fonts={ { id=0 } }
end
@@ -8545,6 +9636,12 @@ function constructors.finalize(tfmdata)
if not parameters.size then
parameters.size=tfmdata.size
end
+ if not parameters.mode then
+ parameters.mode=0
+ end
+ if not parameters.width then
+ parameters.width=0
+ end
if not parameters.extendfactor then
parameters.extendfactor=tfmdata.extend or 0
end
@@ -8627,6 +9724,8 @@ function constructors.finalize(tfmdata)
tfmdata.step=nil
tfmdata.extend=nil
tfmdata.slant=nil
+ tfmdata.mode=nil
+ tfmdata.width=nil
tfmdata.units=nil
tfmdata.units_per_em=nil
tfmdata.cache=nil
@@ -23720,7 +24819,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,skiphash,st
elseif b then
local x,y,w,h=setposition(2,snext,factor,rlmode,b,injection)
if trace_kerns then
- local startchar=getchar(snext)
+ local startchar=getchar(start)
logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
end
start=snext
@@ -26618,7 +27717,7 @@ if not modules then modules={} end modules ['font-osd']={
}
local insert,imerge,copy=table.insert,table.imerge,table.copy
local next,type=next,type
-local report_devanagari=logs.reporter("otf","devanagari")
+local report=logs.reporter("otf","devanagari")
fonts=fonts or {}
fonts.analyzers=fonts.analyzers or {}
fonts.analyzers.methods=fonts.analyzers.methods or { node={ otf={} } }
@@ -26655,6 +27754,9 @@ local fontdata=fonts.hashes.identifiers
local a_state=attributes.private('state')
local a_syllabe=attributes.private('syllabe')
local dotted_circle=0x25CC
+local c_nbsp=0x00A0
+local c_zwnj=0x200C
+local c_zwj=0x200D
local states=fonts.analyzers.states
local s_rphf=states.rphf
local s_half=states.half
@@ -26683,199 +27785,144 @@ end
local function processcharacters(head,font)
return tonut(xprocesscharacters(tonode(head)))
end
-local consonant={
- [0x0915]=true,[0x0916]=true,[0x0917]=true,[0x0918]=true,
- [0x0919]=true,[0x091A]=true,[0x091B]=true,[0x091C]=true,
- [0x091D]=true,[0x091E]=true,[0x091F]=true,[0x0920]=true,
- [0x0921]=true,[0x0922]=true,[0x0923]=true,[0x0924]=true,
- [0x0925]=true,[0x0926]=true,[0x0927]=true,[0x0928]=true,
- [0x0929]=true,[0x092A]=true,[0x092B]=true,[0x092C]=true,
- [0x092D]=true,[0x092E]=true,[0x092F]=true,[0x0930]=true,
- [0x0931]=true,[0x0932]=true,[0x0933]=true,[0x0934]=true,
- [0x0935]=true,[0x0936]=true,[0x0937]=true,[0x0938]=true,
- [0x0939]=true,[0x0958]=true,[0x0959]=true,[0x095A]=true,
- [0x095B]=true,[0x095C]=true,[0x095D]=true,[0x095E]=true,
- [0x095F]=true,[0x0979]=true,[0x097A]=true,
- [0x0C95]=true,[0x0C96]=true,[0x0C97]=true,[0x0C98]=true,
- [0x0C99]=true,[0x0C9A]=true,[0x0C9B]=true,[0x0C9C]=true,
- [0x0C9D]=true,[0x0C9E]=true,[0x0C9F]=true,[0x0CA0]=true,
- [0x0CA1]=true,[0x0CA2]=true,[0x0CA3]=true,[0x0CA4]=true,
- [0x0CA5]=true,[0x0CA6]=true,[0x0CA7]=true,[0x0CA8]=true,
- [0x0CA9]=true,[0x0CAA]=true,[0x0CAB]=true,[0x0CAC]=true,
- [0x0CAD]=true,[0x0CAE]=true,[0x0CAF]=true,[0x0CB0]=true,
- [0x0CB1]=true,[0x0CB2]=true,[0x0CB3]=true,[0x0CB4]=true,
- [0x0CB5]=true,[0x0CB6]=true,[0x0CB7]=true,[0x0CB8]=true,
- [0x0CB9]=true,
- [0x0CDE]=true,
- [0x0D15]=true,[0x0D16]=true,[0x0D17]=true,[0x0D18]=true,
- [0x0D19]=true,[0x0D1A]=true,[0x0D1B]=true,[0x0D1C]=true,
- [0x0D1D]=true,[0x0D1E]=true,[0x0D1F]=true,[0x0D20]=true,
- [0x0D21]=true,[0x0D22]=true,[0x0D23]=true,[0x0D24]=true,
- [0x0D25]=true,[0x0D26]=true,[0x0D27]=true,[0x0D28]=true,
- [0x0D29]=true,[0x0D2A]=true,[0x0D2B]=true,[0x0D2C]=true,
- [0x0D2D]=true,[0x0D2E]=true,[0x0D2F]=true,[0x0D30]=true,
- [0x0D31]=true,[0x0D32]=true,[0x0D33]=true,[0x0D34]=true,
- [0x0D35]=true,[0x0D36]=true,[0x0D37]=true,[0x0D38]=true,
- [0x0D39]=true,[0x0D3A]=true,
-}
-local independent_vowel={
- [0x0904]=true,[0x0905]=true,[0x0906]=true,[0x0907]=true,
- [0x0908]=true,[0x0909]=true,[0x090A]=true,[0x090B]=true,
- [0x090C]=true,[0x090D]=true,[0x090E]=true,[0x090F]=true,
- [0x0910]=true,[0x0911]=true,[0x0912]=true,[0x0913]=true,
- [0x0914]=true,[0x0960]=true,[0x0961]=true,[0x0972]=true,
- [0x0973]=true,[0x0974]=true,[0x0975]=true,[0x0976]=true,
- [0x0977]=true,
- [0x0C85]=true,[0x0C86]=true,[0x0C87]=true,[0x0C88]=true,
- [0x0C89]=true,[0x0C8A]=true,[0x0C8B]=true,[0x0C8C]=true,
- [0x0C8D]=true,[0x0C8E]=true,[0x0C8F]=true,[0x0C90]=true,
- [0x0C91]=true,[0x0C92]=true,[0x0C93]=true,[0x0C94]=true,
- [0x0D05]=true,[0x0D06]=true,[0x0D07]=true,[0x0D08]=true,
- [0x0D09]=true,[0x0D0A]=true,[0x0D0B]=true,[0x0D0C]=true,
- [0x0D0E]=true,[0x0D0F]=true,[0x0D10]=true,[0x0D12]=true,
- [0x0D13]=true,[0x0D14]=true,
-}
-local dependent_vowel={
- [0x093A]=true,[0x093B]=true,[0x093E]=true,[0x093F]=true,
- [0x0940]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
- [0x0944]=true,[0x0945]=true,[0x0946]=true,[0x0947]=true,
- [0x0948]=true,[0x0949]=true,[0x094A]=true,[0x094B]=true,
- [0x094C]=true,[0x094E]=true,[0x094F]=true,[0x0955]=true,
- [0x0956]=true,[0x0957]=true,[0x0962]=true,[0x0963]=true,
- [0x0CBE]=true,[0x0CBF]=true,[0x0CC0]=true,[0x0CC1]=true,
- [0x0CC2]=true,[0x0CC3]=true,[0x0CC4]=true,[0x0CC5]=true,
- [0x0CC6]=true,[0x0CC7]=true,[0x0CC8]=true,[0x0CC9]=true,
- [0x0CCA]=true,[0x0CCB]=true,[0x0CCC]=true,
- [0x0D3E]=true,[0x0D3F]=true,[0x0D40]=true,[0x0D41]=true,
- [0x0D42]=true,[0x0D43]=true,[0x0D44]=true,[0x0D46]=true,
- [0x0D47]=true,[0x0D48]=true,[0x0D4A]=true,[0x0D4B]=true,
- [0x0D4C]=true,[0x0D57]=true,
-}
-local vowel_modifier={
- [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x0903]=true,
- [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
- [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
- [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
- [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
- [0xA8F0]=true,[0xA8F1]=true,
- [0x0D02]=true,[0x0D03]=true,
-}
-local stress_tone_mark={
- [0x0951]=true,[0x0952]=true,[0x0953]=true,[0x0954]=true,
- [0x0CCD]=true,
- [0x0D4D]=true,
-}
-local nukta={
- [0x093C]=true,
- [0x0CBC]=true,
-}
-local halant={
- [0x094D]=true,
- [0x0CCD]=true,
- [0x0D4D]=true,
-}
-local ra={
- [0x0930]=true,
- [0x0CB0]=true,
- [0x0D30]=true,
-}
-local c_anudatta=0x0952
-local c_nbsp=0x00A0
-local c_zwnj=0x200C
-local c_zwj=0x200D
+local indicgroups=characters and characters.indicgroups
+if not indicgroups and characters then
+ local indic={
+ c={},
+ i={},
+ d={},
+ m={},
+ s={},
+ o={},
+ }
+ local indicmarks={
+ l={},
+ t={},
+ b={},
+ r={},
+ s={},
+ }
+ local indicclasses={
+ nukta={},
+ halant={},
+ ra={},
+ anudatta={},
+ }
+ local indicorders={
+ bp={},
+ ap={},
+ bs={},
+ as={},
+ bh={},
+ ah={},
+ bm={},
+ am={},
+ }
+ for k,v in next,characters.data do
+ local i=v.indic
+ if i then
+ indic[i][k]=true
+ i=v.indicmark
+ if i then
+ if i=="s" then
+ local s=v.specials
+ indicmarks[i][k]={ s[2],s[3] }
+ else
+ indicmarks[i][k]=true
+ end
+ end
+ i=v.indicclass
+ if i then
+ indicclasses[i][k]=true
+ end
+ i=v.indicorder
+ if i then
+ indicorders[i][k]=true
+ end
+ end
+ end
+ indicgroups={
+ consonant=indic.c,
+ independent_vowel=indic.i,
+ dependent_vowel=indic.d,
+ vowel_modifier=indic.m,
+ stress_tone_mark=indic.s,
+ pre_mark=indicmarks.l,
+ above_mark=indicmarks.t,
+ below_mark=indicmarks.b,
+ post_mark=indicmarks.r,
+ twopart_mark=indicmarks.s,
+ nukta=indicclasses.nukta,
+ halant=indicclasses.halant,
+ ra=indicclasses.ra,
+ anudatta=indicclasses.anudatta,
+ before_postscript=indicorders.bp,
+ after_postscript=indicorders.ap,
+ before_half=indicorders.bh,
+ after_half=indicorders.ah,
+ before_subscript=indicorders.bs,
+ after_subscript=indicorders.as,
+ before_main=indicorders.bm,
+ after_main=indicorders.am,
+ }
+ indic=nil
+ indicmarks=nil
+ indicclasses=nil
+ indicorders=nil
+ characters.indicgroups=indicgroups
+else
+ indicgroups=table.setmetatableindex("table")
+end
+local consonant=indicgroups.consonant
+local independent_vowel=indicgroups.independent_vowel
+local dependent_vowel=indicgroups.dependent_vowel
+local vowel_modifier=indicgroups.vowel_modifier
+local stress_tone_mark=indicgroups.stress_tone_mark
+local pre_mark=indicgroups.pre_mark
+local above_mark=indicgroups.above_mark
+local below_mark=indicgroups.below_mark
+local post_mark=indicgroups.post_mark
+local twopart_mark=indicgroups.twopart_mark
+local nukta=indicgroups.nukta
+local halant=indicgroups.halant
+local ra=indicgroups.ra
+local anudatta=indicgroups.anudatta
+local before_postscript=indicgroups.before_postscript
+local after_postscript=indicgroups.after_postscript
+local before_half=indicgroups.before_half
+local after_half=indicgroups.after_half
+local before_subscript=indicgroups.before_subscript
+local after_subscript=indicgroups.after_subscript
+local before_main=indicgroups.before_main
+local after_main=indicgroups.after_main
+local mark_four=table.merged (
+ pre_mark,
+ above_mark,
+ below_mark,
+ post_mark
+)
+local mark_above_below_post=table.merged (
+ above_mark,
+ below_mark,
+ post_mark
+)
local zw_char={
- [0x200C]=true,
- [0x200D]=true,
-}
-local pre_mark={
- [0x093F]=true,[0x094E]=true,
- [0x0D46]=true,[0x0D47]=true,[0x0D48]=true,
-}
-local above_mark={
- [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x093A]=true,
- [0x0945]=true,[0x0946]=true,[0x0947]=true,[0x0948]=true,
- [0x0951]=true,[0x0953]=true,[0x0954]=true,[0x0955]=true,
- [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
- [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
- [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
- [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
- [0xA8F0]=true,[0xA8F1]=true,
- [0x0D4E]=true,
-}
-local below_mark={
- [0x093C]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
- [0x0944]=true,[0x094D]=true,[0x0952]=true,[0x0956]=true,
- [0x0957]=true,[0x0962]=true,[0x0963]=true,
-}
-local post_mark={
- [0x0903]=true,[0x093B]=true,[0x093E]=true,[0x0940]=true,
- [0x0949]=true,[0x094A]=true,[0x094B]=true,[0x094C]=true,
- [0x094F]=true,
-}
-local twopart_mark={
- [0x0D4A]={ 0x0D46,0x0D3E,},
- [0x0D4B]={ 0x0D47,0x0D3E,},
- [0x0D4C]={ 0x0D46,0x0D57,},
-}
-local mark_four={}
-for k,v in next,pre_mark do mark_four[k]=pre_mark end
-for k,v in next,above_mark do mark_four[k]=above_mark end
-for k,v in next,below_mark do mark_four[k]=below_mark end
-for k,v in next,post_mark do mark_four[k]=post_mark end
-local mark_above_below_post={}
-for k,v in next,above_mark do mark_above_below_post[k]=above_mark end
-for k,v in next,below_mark do mark_above_below_post[k]=below_mark end
-for k,v in next,post_mark do mark_above_below_post[k]=post_mark end
-local reorder_class={
- [0x0930]="before postscript",
- [0x093F]="before half",
- [0x0940]="after subscript",
- [0x0941]="after subscript",
- [0x0942]="after subscript",
- [0x0943]="after subscript",
- [0x0944]="after subscript",
- [0x0945]="after subscript",
- [0x0946]="after subscript",
- [0x0947]="after subscript",
- [0x0948]="after subscript",
- [0x0949]="after subscript",
- [0x094A]="after subscript",
- [0x094B]="after subscript",
- [0x094C]="after subscript",
- [0x0962]="after subscript",
- [0x0963]="after subscript",
- [0x093E]="after subscript",
- [0x0CB0]="after postscript",
- [0x0CBF]="before subscript",
- [0x0CC6]="before subscript",
- [0x0CCC]="before subscript",
- [0x0CBE]="before subscript",
- [0x0CE2]="before subscript",
- [0x0CE3]="before subscript",
- [0x0CC1]="before subscript",
- [0x0CC2]="before subscript",
- [0x0CC3]="after subscript",
- [0x0CC4]="after subscript",
- [0x0CD5]="after subscript",
- [0x0CD6]="after subscript",
+ [c_zwnj]=true,
+ [c_zwj ]=true,
}
local dflt_true={
dflt=true
}
-local dev2_defaults={
+local two_defaults={
dev2=dflt_true,
}
-local deva_defaults={
+local one_defaults={
dev2=dflt_true,
deva=dflt_true,
}
local false_flags={ false,false,false,false }
-local both_joiners_true={
- [0x200C]=true,
- [0x200D]=true,
-}
local sequence_reorder_matras={
- features={ dv01=dev2_defaults },
+ features={ dv01=two_defaults },
flags=false_flags,
name="dv01_reorder_matras",
order={ "dv01" },
@@ -26888,7 +27935,7 @@ local sequence_reorder_matras={
}
}
local sequence_reorder_reph={
- features={ dv02=dev2_defaults },
+ features={ dv02=two_defaults },
flags=false_flags,
name="dv02_reorder_reph",
order={ "dv02" },
@@ -26901,7 +27948,7 @@ local sequence_reorder_reph={
}
}
local sequence_reorder_pre_base_reordering_consonants={
- features={ dv03=dev2_defaults },
+ features={ dv03=two_defaults },
flags=false_flags,
name="dv03_reorder_pre_base_reordering_consonants",
order={ "dv03" },
@@ -26914,7 +27961,7 @@ local sequence_reorder_pre_base_reordering_consonants={
}
}
local sequence_remove_joiners={
- features={ dv04=deva_defaults },
+ features={ dv04=one_defaults },
flags=false_flags,
name="dv04_remove_joiners",
order={ "dv04" },
@@ -26922,40 +27969,73 @@ local sequence_remove_joiners={
nofsteps=1,
steps={
{
- coverage=both_joiners_true,
+ coverage=zw_char,
},
}
}
local basic_shaping_forms={
- nukt=true,
+ init=true,
+ abvs=true,
akhn=true,
- rphf=true,
- pref=true,
- rkrf=true,
blwf=true,
+ calt=true,
+ cjct=true,
half=true,
+ haln=true,
+ nukt=true,
+ pref=true,
+ pres=true,
pstf=true,
+ psts=true,
+ rkrf=true,
+ rphf=true,
vatu=true,
- cjct=true,
}
local valid={
+ abvs=true,
akhn=true,
- rphf=true,
- pref=true,
- half=true,
blwf=true,
+ calt=true,
+ cjct=true,
+ half=true,
+ haln=true,
+ nukt=true,
+ pref=true,
+ pres=true,
pstf=true,
+ psts=true,
+ rkrf=true,
+ rphf=true,
+ vatu=true,
pres=true,
+ abvs=true,
blws=true,
psts=true,
+ haln=true,
+ calt=true,
}
+local scripts={}
+local scripts_one={ "deva","mlym","beng","gujr","guru","knda","orya","taml","telu" }
+local scripts_two={ "dev2","mlm2","bng2","gjr2","gur2","knd2","ory2","tml2","tel2" }
+local nofscripts=#scripts_one
+for i=1,nofscripts do
+ local one=scripts_one[i]
+ local two=scripts_two[i]
+ scripts[one]=true
+ scripts[two]=true
+ two_defaults[one]=dflt_true
+ one_defaults[one]=dflt_true
+ one_defaults[two]=dflt_true
+end
+local function valid_one(s) for i=1,nofscripts do if s[scripts_one[i]] then return true end end end
+local function valid_two(s) for i=1,nofscripts do if s[scripts_two[i]] then return true end end end
local function initializedevanagi(tfmdata)
local script,language=otf.scriptandlanguage(tfmdata,attr)
- if script=="deva" or script=="dev2" or script=="mlym" or script=="mlm2" then
+ if scripts[script] then
local resources=tfmdata.resources
local devanagari=resources.devanagari
if not devanagari then
- report_devanagari("adding devanagari features to font")
+ report("adding devanagari features to font")
local gsubfeatures=resources.features.gsub
local sequences=resources.sequences
local sharedfeatures=tfmdata.shared.features
@@ -26971,10 +28051,10 @@ local function initializedevanagi(tfmdata)
end
end
local insertindex=lastmatch+1
- gsubfeatures["dv01"]=dev2_defaults
- gsubfeatures["dv02"]=dev2_defaults
- gsubfeatures["dv03"]=dev2_defaults
- gsubfeatures["dv04"]=deva_defaults
+ gsubfeatures["dv01"]=two_defaults
+ gsubfeatures["dv02"]=two_defaults
+ gsubfeatures["dv03"]=two_defaults
+ gsubfeatures["dv04"]=one_defaults
local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
local reorder_reph=copy(sequence_reorder_reph)
local reorder_matras=copy(sequence_reorder_matras)
@@ -27022,8 +28102,8 @@ local function initializedevanagi(tfmdata)
end
end
end
- for kind,spec in next,features do
- if spec.dev2 and valid[kind] then
+ for kind,spec in next,features do
+ if valid[kind] and valid_two(spec)then
for i=1,nofsteps do
local step=steps[i]
local coverage=step.coverage
@@ -27047,7 +28127,9 @@ local function initializedevanagi(tfmdata)
end
end
end
- seqsubset[#seqsubset+1]={ kind,coverage,reph }
+if reph then
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
+end
end
end
end
@@ -27092,8 +28174,14 @@ local function initializedevanagi(tfmdata)
sharedfeatures["pstf"]=true
sharedfeatures["pref"]=true
sharedfeatures["dv03"]=true
- gsubfeatures ["dv03"]=dev2_defaults
+ gsubfeatures ["dv03"]=two_defaults
insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ elseif script=="taml" then
+ sharedfeatures["dv04"]=true
+sharedfeatures["pstf"]=true
+ elseif script=="tml2" then
+ else
+ report("todo: enable the right features for script %a",script)
end
end
end
@@ -27106,7 +28194,7 @@ registerotffeature {
node=initializedevanagi,
},
}
-local function deva_initialize(font,attr)
+local function initialize_one(font,attr)
local tfmdata=fontdata[font]
local datasets=otf.dataset(tfmdata,font,attr)
local devanagaridata=datasets.devanagari
@@ -27134,8 +28222,8 @@ local function deva_initialize(font,attr)
end
return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
end
-local function deva_reorder(head,start,stop,font,attr,nbspaces)
- local reph,vattu,blwfcache=deva_initialize(font,attr)
+local function reorder_one(head,start,stop,font,attr,nbspaces)
+ local reph,vattu,blwfcache=initialize_one(font,attr)
local current=start
local n=getnext(start)
local base=nil
@@ -27166,40 +28254,40 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
lastcons=current
current=getnext(current)
if current~=stop then
- if nukta[getchar(current)] then
+ local char=getchar(current)
+ if nukta[char] then
current=getnext(current)
+ char=getchar(current)
end
- if getchar(current)==c_zwj then
- if current~=stop then
- local next=getnext(current)
- if next~=stop and halant[getchar(next)] then
- current=next
- next=getnext(current)
- local tmp=next and getnext(next) or nil
- local changestop=next==stop
- local tempcurrent=copy_node(next)
- copyinjection(tempcurrent,next)
- local nextcurrent=copy_node(current)
- copyinjection(nextcurrent,current)
- setlink(tempcurrent,nextcurrent)
- setprop(tempcurrent,a_state,s_blwf)
- tempcurrent=processcharacters(tempcurrent,font)
- setprop(tempcurrent,a_state,unsetvalue)
- if getchar(next)==getchar(tempcurrent) then
- flush_list(tempcurrent)
- local n=copy_node(current)
- copyinjection(n,current)
- setchar(current,dotted_circle)
- head=insert_node_after(head,current,n)
- else
- setchar(current,getchar(tempcurrent))
- local freenode=getnext(current)
- setlink(current,tmp)
- flush_node(freenode)
- flush_list(tempcurrent)
- if changestop then
- stop=current
- end
+ if char==c_zwj and current~=stop then
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=next and getnext(next) or nil
+ local changestop=next==stop
+ local tempcurrent=copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent=copy_node(current)
+ copyinjection(nextcurrent,current)
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent=processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next)==getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n=copy_node(current)
+ copyinjection(n,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,n)
+ else
+ setchar(current,getchar(tempcurrent))
+ local freenode=getnext(current)
+ setlink(current,tmp)
+ flush_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop=current
end
end
end
@@ -27472,9 +28560,11 @@ function handlers.devanagari_reorder_reph(head,start)
local startprev=nil
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
+ ::step_1::
+ ::step_2::
while current do
local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
+ if char and getprop(current,a_syllabe)==startattr then
if halant[char] and not getprop(current,a_state) then
local next=getnext(current)
if next then
@@ -27497,11 +28587,13 @@ function handlers.devanagari_reorder_reph(head,start)
break
end
end
+ ::step_3::
+ ::step_4::
if not startnext then
current=getnext(start)
while current do
local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
+ if char and getprop(current,a_syllabe)==startattr then
if getprop(current,a_state)==s_pstf then
startnext=getnext(start)
head=remove_node(head,start)
@@ -27517,13 +28609,14 @@ function handlers.devanagari_reorder_reph(head,start)
end
end
end
+ ::step_5::
if not startnext then
current=getnext(start)
local c=nil
while current do
local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
- if not c and mark_above_below_post[char] and reorder_class[char]~="after subscript" then
+ if char and getprop(current,a_syllabe)==startattr then
+ if not c and mark_above_below_post[char] and after_subscript[char] then
c=current
end
current=getnext(current)
@@ -27540,12 +28633,13 @@ function handlers.devanagari_reorder_reph(head,start)
startattr=getprop(start,a_syllabe)
end
end
+ ::step_6::
if not startnext then
current=start
local next=getnext(current)
while next do
local nextchar=ischar(next,startfont)
- if nextchar and getprop(next,a_syllabe)==startattr then
+ if nextchar and getprop(next,a_syllabe)==startattr then
current=next
next=getnext(current)
else
@@ -27637,12 +28731,12 @@ function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replaceme
setnext(prev)
end
if head==start then
- head=stop
+ head=stop
end
flush_list(start)
return head,stop,true
end
-local function dev2_initialize(font,attr)
+local function initialize_two(font,attr)
local devanagari=fontdata[font].resources.devanagari
if devanagari then
return devanagari.seqsubset or {},devanagari.reorderreph or {}
@@ -27650,8 +28744,8 @@ local function dev2_initialize(font,attr)
return {},{}
end
end
-local function dev2_reorder(head,start,stop,font,attr,nbspaces)
- local seqsubset,reorderreph=dev2_initialize(font,attr)
+local function reorder_two(head,start,stop,font,attr,nbspaces)
+ local seqsubset,reorderreph=initialize_two(font,attr)
local reph=false
local halfpos=nil
local basepos=nil
@@ -27676,8 +28770,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
if found[n] then
local afternext=next~=stop and getnext(next)
if afternext and zw_char[getchar(afternext)] then
- current=next
- current=getnext(current)
+ current=afternext
elseif current==start then
setprop(current,a_state,s_rphf)
current=next
@@ -27814,7 +28907,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
if halant[getchar(current)] then
setnext(getnext(current),tmp)
local nc=copy_node(current)
- copyinjection(nc,current)
+ copyinjection(nc,current)
setchar(current,dotted_circle)
head=insert_node_after(head,current,nc)
else
@@ -28185,7 +29278,7 @@ local function analyze_next_chars_two(c,font)
if not v then
return c
end
- if v==c_anudatta then
+ if anudatta[v] then
c=n
n=getnext(c)
if not n then
@@ -28280,31 +29373,32 @@ local function analyze_next_chars_two(c,font)
return c
end
end
-local function inject_syntax_error(head,current,mark)
+local show_syntax_errors=false
+local function inject_syntax_error(head,current,char)
local signal=copy_node(current)
- copyinjection(signal,current)
- if mark==pre_mark then
+ copyinjection(signal,current)
+ if pre_mark[char] then
setchar(signal,dotted_circle)
else
setchar(current,dotted_circle)
end
return insert_node_after(head,current,signal)
end
-function methods.deva(head,font,attr)
+local function method_one(head,font,attr)
head=tonut(head)
local current=head
local start=true
local done=false
local nbspaces=0
while current do
- local char=ischar(current,font)
+ local char=ischar(current,font)
if char then
done=true
local syllablestart=current
local syllableend=nil
local c=current
local n=getnext(c)
- local first=char
+ local first=char
if n and ra[first] then
local second=ischar(n,font)
if second and halant[second] then
@@ -28332,10 +29426,10 @@ function methods.deva(head,font,attr)
end
end
if standalone then
- local syllableend=analyze_next_chars_one(c,font,2)
- current=getnext(syllableend)
+ local syllableend=analyze_next_chars_one(c,font,2)
+ current=getnext(syllableend)
if syllablestart~=syllableend then
- head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head,current,nbspaces=reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current=getnext(current)
end
else
@@ -28432,7 +29526,7 @@ function methods.deva(head,font,attr)
end
end
if syllablestart~=syllableend then
- head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head,current,nbspaces=reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current=getnext(current)
end
elseif independent_vowel[char] then
@@ -28453,9 +29547,11 @@ function methods.deva(head,font,attr)
end
end
else
- local mark=mark_four[char]
- if mark then
- head,current=inject_syntax_error(head,current,mark)
+ if show_syntax_errors then
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,char)
+ end
end
current=getnext(current)
end
@@ -28468,10 +29564,9 @@ function methods.deva(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
- head=tonode(head)
- return head,done
+ return tonode(head),done
end
-function methods.dev2(head,font,attr)
+local function method_two(head,font,attr)
head=tonut(head)
local current=head
local start=true
@@ -28495,7 +29590,7 @@ function methods.dev2(head,font,attr)
local nextnextchar=ischar(n,font)
if nextnextchar then
c=n
- char=nextnextchar
+ char=nextnextchar
end
end
end
@@ -28534,14 +29629,14 @@ function methods.dev2(head,font,attr)
end
end
if syllableend and syllablestart~=syllableend then
- head,current,nbspaces=dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ head,current,nbspaces=reorder_two(head,syllablestart,syllableend,font,attr,nbspaces)
end
- if not syllableend then
+ if not syllableend and show_syntax_errors then
local char=ischar(current,font)
if char and not getprop(current,a_state) then
local mark=mark_four[char]
if mark then
- head,current=inject_syntax_error(head,current,mark)
+ head,current=inject_syntax_error(head,current,char)
end
end
end
@@ -28551,11 +29646,12 @@ function methods.dev2(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
- head=tonode(head)
- return head,done
+ return tonode(head),done
+end
+for i=1,nofscripts do
+ methods[scripts_one[i]]=method_one
+ methods[scripts_two[i]]=method_two
end
-methods.mlym=methods.deva
-methods.mlm2=methods.dev2
end -- closure
diff --git a/tex/generic/context/luatex/luatex-fonts.lua b/tex/generic/context/luatex/luatex-fonts.lua
index ef3bb74dc..5806debd2 100644
--- a/tex/generic/context/luatex/luatex-fonts.lua
+++ b/tex/generic/context/luatex/luatex-fonts.lua
@@ -226,7 +226,7 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule('font-map.lua') -- for loading lum file (will be stripped)
-- We use a bit simpler database because using the context one demands loading more helper
- -- code and although it is more flexible (more wauys to resolve and so) it will never be
+ -- code and although it is more flexible (more ways to resolve and so) it will never be
-- uses in plain/latex anyway, so let's stick to a simple approach.
loadmodule('luatex-fonts-syn.lua')
--
cgit v1.2.3