summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-07-20 21:48:33 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2018-07-20 21:48:33 +0200
commitdeab0bfe7f4be57121779e93bf291e518fda7cf3 (patch)
treed206a8e495944e2f6ce1d3dea688309012904825
parente09328e5e3230ee408f6af2cd454848c4d056702 (diff)
downloadcontext-deab0bfe7f4be57121779e93bf291e518fda7cf3.tar.gz
2018-07-20 21:28:00
-rw-r--r--doc/context/documents/general/manuals/luatex.pdfbin1521742 -> 1521933 bytes
-rw-r--r--doc/context/documents/general/manuals/onandon.pdfbin4750536 -> 6602776 bytes
-rw-r--r--doc/context/documents/general/manuals/tiptrick.pdfbin47528 -> 47908 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin842777 -> 842775 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin841990 -> 841991 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin846612 -> 846605 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin841044 -> 841039 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin844311 -> 844307 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin346144 -> 346140 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-de.pdfbin429316 -> 429311 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin343646 -> 343638 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin346246 -> 346244 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin344850 -> 344846 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin343940 -> 343935 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin598649 -> 598646 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin837087 -> 837082 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin839541 -> 839552 bytes
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-lua.tex2
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-53.tex288
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-execute.tex396
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-expansion.tex307
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-media.tex220
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-000.tex116
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-001.tex15
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-002.tex16
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-003.tex15
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-005.tex17
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-006.tex17
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-007.tex31
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-008.tex32
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-009.tex15
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-010.tex15
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-011.tex20
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-speed-012.tex20
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon.tex37
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/char-def.lua4957
-rw-r--r--tex/context/base/mkiv/char-emj.lua260
-rw-r--r--tex/context/base/mkiv/char-ini.lua11
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/lpdf-epd.lua2
-rw-r--r--tex/context/base/mkiv/node-bck.lua2
-rw-r--r--tex/context/base/mkiv/node-ini.lua4
-rw-r--r--tex/context/base/mkiv/node-par.lua8
-rw-r--r--tex/context/base/mkiv/node-pro.lua6
-rw-r--r--tex/context/base/mkiv/node-ref.lua83
-rw-r--r--tex/context/base/mkiv/node-rul.lua1
-rw-r--r--tex/context/base/mkiv/node-tsk.lua25
-rw-r--r--tex/context/base/mkiv/pack-rul.lua4
-rw-r--r--tex/context/base/mkiv/page-ini.lua43
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26146 -> 26134 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin264927 -> 265034 bytes
-rw-r--r--tex/context/base/mkiv/strc-blk.lua93
-rw-r--r--tex/context/base/mkiv/strc-blk.mkiv27
-rw-r--r--tex/context/base/mkiv/supp-box.lua49
-rw-r--r--tex/context/base/mkiv/task-ini.lua2
-rw-r--r--tex/context/base/mkiv/trac-vis.lua14
-rw-r--r--tex/context/base/mkiv/typo-bld.lua9
-rw-r--r--tex/context/base/mkiv/typo-wrp.lua75
-rw-r--r--tex/context/base/mkiv/typo-wrp.mkiv9
-rw-r--r--tex/context/base/mkiv/util-seq.lua12
-rw-r--r--tex/context/base/mkiv/util-sql-logins.lua5
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin846612 -> 846605 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin61212 -> 61206 bytes
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
67 files changed, 6725 insertions, 565 deletions
diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf
index 032c5b1b6..545e55d68 100644
--- a/doc/context/documents/general/manuals/luatex.pdf
+++ b/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/onandon.pdf b/doc/context/documents/general/manuals/onandon.pdf
index 3195b7ebd..add044367 100644
--- a/doc/context/documents/general/manuals/onandon.pdf
+++ b/doc/context/documents/general/manuals/onandon.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/tiptrick.pdf b/doc/context/documents/general/manuals/tiptrick.pdf
index 55d65029a..ea55ab7d8 100644
--- a/doc/context/documents/general/manuals/tiptrick.pdf
+++ b/doc/context/documents/general/manuals/tiptrick.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index 597e89e0c..329441f3c 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
index 4838c00e5..70c658b2b 100644
--- a/doc/context/documents/general/qrcs/setup-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index b467a753e..f2279cf49 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index 2f550ac44..5a3e45afe 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index 4e39b5e08..b03853499 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index faf79f9b7..ec2d100e3 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
index 7037db2c0..a94f73894 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index 5f495892a..f44fe7c4a 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index c92fdf0d9..71ee87097 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index ad7c68621..f37ab1589 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index d09218df0..dab7f627a 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index 3312cbd36..3021a6ac5 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 20965c2b7..b6d12170c 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index 729ff45d1..09040ae71 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/luatex/luatex-lua.tex b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
index e9007e964..0f7cae3a3 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-lua.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
@@ -673,6 +673,8 @@ accept a string and return a string with the hash.
\startsubsection[title={Locales}]
+\index {locales}
+
In stock \LUA, many things depend on the current locale. In \LUATEX, we can't do
that, because it makes documents unportable. While \LUATEX\ is running if
forces the following locale settings:
diff --git a/doc/context/sources/general/manuals/onandon/onandon-53.tex b/doc/context/sources/general/manuals/onandon/onandon-53.tex
new file mode 100644
index 000000000..0d5dc1b9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/onandon/onandon-53.tex
@@ -0,0 +1,288 @@
+% language=uk
+
+\startcomponent onandon-53
+
+\environment onandon-environment
+
+\startchapter[title={From \LUA\ 5.2 to 5.3}]
+
+When we started with \LUATEX\ we used \LUA\ 5.1 and moved to 5.2 when that became
+available. We didn't run into issues then because there were no fundamental
+changes that could not be dealt with. However, when \LUA\ 5.3 was announced in
+2015 we were not sure if we should make the move. The main reason was that we'd
+chosen \LUA\ because of its clean design which meant that we had only one number
+type: double. In 5.3 on the other hand, deep down a number can be either an
+integer or a floating point quantity.
+
+Internally \TEX\ is mostly (up to) 32-bit integers and when we go from \LUA\ to
+\TEX\ we round numbers. Nonetheless one can expect some benefits in using
+integers. Performance|-|wise we didn't expect much, and memory consumption would
+be the same too. So, the main question then was: can we get the same output and
+not run into trouble due to possible differences in serializing numbers; after
+all \TEX\ is about stability. The serialization aspect is for instance important
+when we compare quantities and|/|or use numbers in hashes.
+
+Apart from this change in number model, which comes with a few extra helpers,
+another extension in 5.3 was that bit|-|wise operations are now part of the
+language. The lpeg library is still not part of stock \LUA. There is some minimal
+\UTF8 support, but less than we provide in \LUATEX\ already. So, looking at these
+changes, we were not in a hurry to update. Also, it made sense to wait till this
+important number|-|related change was stable.
+
+But, a few years later, we still had it on our agenda to test, and after the
+\CONTEXT\ 2017 meeting we decided to give it a try; here are some observations. A
+quick test was just dropping in the new \LUA\ code and seeing if we could make a
+\CONTEXT\ format. Indeed that was no big deal but a test run failed because at
+some point a (for instance) \type {1} became a \type {1.0}. It turned out that
+serializing has some side effects. And with some ad hoc prints for tracing (in
+the \LUATEX\ source) I could figure out what went on. How numbers are seen can
+(to some extent) be deduced from the \type {string.format} function, which is in
+\LUA\ a combination of parsing, splitting and concatenation combined with piping
+to the \CCODE\ \type {sprintf} function. \footnote {Actually, at some point I
+decided to write my own formatter on top of \type {format} and I ended up with
+splitting as well. It's only now that I realize why this is working out so well
+(in terms of performance): simple format (single items) are passed more or less
+directly to \type {sprintf} and as \LUA\ itself is fast, due to some caching, the
+overhead is small compared to the built|-|in splitter method. And the \CONTEXT\
+formatter has many more options and is extensible.}
+
+\starttyping
+local a = 2 * (1/2) print(string.format("%s", a),math.type(x))
+local b = 2 * (1/2) print(string.format("%d", b),math.type(x))
+local c = 2 print(string.format("%d", c),math.type(x))
+local d = -2 print(string.format("%d", d),math.type(x))
+local e = 2 * (1/2) print(string.format("%i", e),math.type(x))
+local f = 2.1 print(string.format("%.0f",f),math.type(x))
+local g = 2.0 print(string.format("%.0f",g),math.type(x))
+local h = 2.1 print(string.format("%G", h),math.type(x))
+local i = 2.0 print(string.format("%G", i),math.type(x))
+local j = 2 print(string.format("%.0f",j),math.type(x))
+local k = -2 print(string.format("%.0f",k),math.type(x))
+\stoptyping
+
+This gives the following results:
+
+\starttabulate[|cBT|c|T|c|cT|]
+\BC a \NC 2 * (1/2)\NC s \NC 1.0 \NC float \NC \NR
+\BC b \NC 2 * (1/2)\NC d \NC 1 \NC float \NC \NR
+\BC c \NC 2 \NC d \NC 2 \NC integer \NC \NR
+\BC d \NC -2 \NC d \NC 2 \NC integer \NC \NR
+\BC e \NC 2 * (1/2)\NC i \NC 1 \NC float \NC \NR
+\BC f \NC 2.1 \NC .0f \NC 2 \NC float \NC \NR
+\BC g \NC 2.0 \NC .0f \NC 2 \NC float \NC \NR
+\BC h \NC 2.1 \NC G \NC 2.1 \NC float \NC \NR
+\BC i \NC 2.0 \NC G \NC 2 \NC float \NC \NR
+\BC j \NC 2 \NC .0f \NC 2 \NC integer \NC \NR
+\BC k \NC -2 \NC .0f \NC 2 \NC integer \NC \NR
+\stoptabulate
+
+This demonstrates that we have to be careful when we need these numbers
+represented as strings. In \CONTEXT\ the number of places where we had to check
+for that was not that large; in fact, only some hashing related to font sizes had
+to be done using explicit rounding.
+
+Another surprising side effect is the following. Instead of:
+
+\starttyping
+local n = 2^6
+\stoptyping
+
+we now need to use:
+
+\starttyping
+local n = 0x40
+\stoptyping
+
+or just:
+
+\starttyping
+local n = 64
+\stoptyping
+
+because we don't want this to be serialized to \type {64.0} which is due to the
+fact that a power results in a float. One can wonder if this makes sense when we
+apply it to an integer.
+
+At any rate, once we could process a file, two documents were chosen for a
+performance test. Some experiments with loops and casts had demonstrated that we
+could expect a small performance hit and indeed, this was the case. Processing
+the \LUATEX\ manual takes 10.7 seconds with 5.2 on my 5-year-old laptop and 11.6
+seconds with 5.3. If we consider that \CONTEXT\ spends 50\% of its time in \LUA,
+then we see a 20\% performance penalty. Processing the \METAFUN\ manual (which
+has lots of \METAPOST\ images) went from less than 20 seconds (\LUAJITTEX\ does
+it in 16 seconds) up to more than 27 seconds. So there we lose more than 50\% on
+the \LUA\ end. When we observed these kinds of differences, Luigi and I
+immediately got into debugging mode, partly out of curiosity, but also because
+consistent performance is important to~us.
+
+Because these numbers made no sense, we traced different sub-mechanisms and
+eventually it became clear that the reason for the speed penalty was that the
+core \typ {string.format} function was behaving quite badly in the \type {mingw}
+cross-compiled binary, as seen by this test:
+
+\starttyping
+local t = os.clock()
+for i=1,1000*1000 do
+ -- local a = string.format("%.3f",1.23)
+ -- local b = string.format("%i",123)
+ local c = string.format("%s",123)
+end
+print(os.clock()-t)
+\stoptyping
+
+\starttabulate[|c|c|c|c|c|]
+\BC \BC lua 5.3 \BC lua 5.2 \BC texlua 5.3 \BC texlua 5.2 \BC \NR
+\BC a \NC 0.43 \NC 0.54 \NC 3.71 (0.47) \NC 0.53 \NC \NR
+\BC b \NC 0.18 \NC 0.24 \NC 3.78 (0.17) \NC 0.22 \NC \NR
+\BC c \NC 0.26 \NC 0.68 \NC 3.67 (0.29) \NC 0.66 \NC \NR
+\stoptabulate
+
+The 5.2 binaries perform the same but the 5.3 Lua binary greatly outperforms
+\LUATEX, and so we had to figure out why. After all, all this integer
+optimization could bring some gain! It took us a while to figure this out. The
+numbers in parentheses are the results after fixing this.
+
+Because font internals are specified in integers one would expect a gain
+in running:
+
+\starttyping
+mtxrun --script font --reload force
+\stoptyping
+
+and indeed that is the case. On my machine a scan results in 2561 registered
+fonts from 4906 read files and with 5.2 that takes 9.1 seconds while 5.3 needs a
+bit less: 8.6 seconds (with the bad format performance) and even less once that
+was fixed. For a test:
+
+\starttyping
+\setupbodyfont[modern] \tf \bf \it \bs
+\setupbodyfont[pagella] \tf \bf \it \bs
+\setupbodyfont[dejavu] \tf \bf \it \bs
+\setupbodyfont[termes] \tf \bf \it \bs
+\setupbodyfont[cambria] \tf \bf \it \bs
+\starttext \stoptext
+\stoptyping
+
+This code needs 30\% more runtime so the question is: how often do we call \type
+{string.format} there? A first run (when we wipe the font cache) needs some
+715,000 calls while successive runs need 115,000 calls so that slow down
+definitely comes from the bad handling of \type {string.format}. When we drop in
+a \LUA\ update or whatever other dependency we don't want this kind of impact. In
+fact, when one uses external libraries that are or can be compiled under the
+\TEX\ Live infrastructure and the impact would be such, it's bad advertising,
+especially when one considers the occasional complaint about \LUATEX\ being
+slower than other engines.
+
+The good news is that eventually Luigi was able to nail down this issue and we
+got a binary that performed well. It looks like \LUA\ 5.3.4 (cross|)|compiles
+badly with \GCC\ 5.3.0 and 6.3.0.
+
+So in the end caching the fonts takes:
+
+\starttabulate[||c|c|]
+\BC \BC caching \BC running \NC \NR
+\BC 5.2 stock \NC 8.3 \NC 1.2 \NC \NR
+\BC 5.3 bugged \NC 12.6 \NC 2.1 \NC \NR
+\BC 5.3 fixed \NC 6.3 \NC 1.0 \NC \NR
+\stoptabulate
+
+So indeed it looks like 5.3 is able to speed up \LUATEX\ a bit, given that one
+integrates it in the right way! Using a recent compiler is needed too, although
+one can wonder when a bad case will show up again. One can also wonder why such a
+slow down can mostly go unnoticed, because for sure \LUATEX\ is not the only
+compiled program.
+
+The next examples are some edge cases that show you need to be aware
+that
+\startitemize[n,text,nostopper]
+ \startitem an integer has its limits, \stopitem
+ \startitem that hexadecimal numbers are integers and \stopitem
+ \startitem that \LUA\ and \LUAJIT\ can be different in details. \stopitem
+\stopitemize
+
+\starttabulate[||T|T|]
+\NC \NC \tx print(0xFFFFFFFFFFFFFFFF) \NC \tx print(0x7FFFFFFFFFFFFFFF) \NC \NR
+\HL
+\BC lua 52 \NC 1.844674407371e+019 \NC 9.2233720368548e+018 \NC \NR
+\BC luajit \NC 1.844674407371e+19 \NC 9.2233720368548e+18 \NC \NR
+\BC lua 53 \NC -1 \NC 9223372036854775807 \NC \NR
+\stoptabulate
+
+So, to summarize the process. A quick test was relatively easy: move 5.3 into the
+code base, adapt a little bit of internals (there were some \LUATEX\ interfacing
+bits where explicit rounding was needed), run tests and eventually fix some
+issues related to the Makefile (compatibility) and \CCODE\ obscurities (the slow
+\type {sprintf}). Adapting \CONTEXT\ was also not much work, and the test suite
+uncovered some nasty side effects. For instance, the valid 5.2 solution:
+
+\starttyping
+local s = string.format("02X",u/1024)
+local s = string.char (u/1024)
+\stoptyping
+
+now has to become (both 5.2 and 5.3):
+
+\starttyping
+local s = string.format("02X",math.floor(u/1024))
+local s = string.char (math.floor(u/1024))
+\stoptyping
+
+or (both 5.2 and (emulated or real) 5.3):
+
+\starttyping
+local s = string.format("02X",bit32.rshift(u,10))
+local s = string.char (bit32.rshift(u,10))
+\stoptyping
+
+or (only 5.3):
+
+\starttyping
+local s = string.format("02X",u >> 10))
+local s = string.char (u >> 10)
+\stoptyping
+
+or (only 5.3):
+
+\starttyping
+local s = string.format("02X",u//1024)
+local s = string.char (u//1024)
+\stoptyping
+
+A conditional section like:
+
+\starttyping
+if LUAVERSION >= 5.3 then
+ local s = string.format("02X",u >> 10))
+ local s = string.char (u >> 10)
+else
+ local s = string.format("02X",bit32.rshift(u,10))
+ local s = string.char (bit32.rshift(u,10))
+end
+\stoptyping
+
+will fail because (of course) the 5.2 parser doesn't like that. In \CONTEXT\ we
+have some experimental solutions for that but that is beyond this summary.
+
+In the process a few \UTF\ helpers were added to the string library so that we
+have a common set for \LUAJIT\ and \LUA\ (the \type {utf8} library that was added
+to 5.3 is not that important for \LUATEX). For now we keep the \type {bit32}
+library on board. Of course we'll not mention all the details here.
+
+When we consider a gain in speed of 5-10\% with 5.3 that also means that the gain
+of \LUAJITTEX\ compared to 5.2 becomes less. For instance in font processing both
+engines now perform closer to the same.
+
+As I write this, we've just entered 2018 and after a few months of testing
+\LUATEX\ with \LUA\ 5.3 we're confident that we can move the code to the
+experimental branch. This means that we will use this version in the \CONTEXT\
+distribution and likely will ship this version as 1.10 in 2019, where it becomes
+the default. The 2018 version of \TEX~Live will have 1.07 with \LUA\ 5.2 while
+intermediate versions of the \LUA\ 5.3 binary will end up on the \CONTEXT\
+garden, probably with number 1.08 and 1.09 (who knows what else we will add or
+change in the meantime).
+
+\stopchapter
+
+\stopcomponent
+
+% collectgarbage("count") -- two return values in 2
diff --git a/doc/context/sources/general/manuals/onandon/onandon-execute.tex b/doc/context/sources/general/manuals/onandon/onandon-execute.tex
new file mode 100644
index 000000000..abb3b4d8a
--- /dev/null
+++ b/doc/context/sources/general/manuals/onandon/onandon-execute.tex
@@ -0,0 +1,396 @@
+% language=uk
+
+\startcomponent onandon-execute
+
+\environment onandon-environment
+
+\startchapter[title={Executing \TEX}]
+
+Much of the \LUA\ code in \CONTEXT\ originates from experiments. When it survives
+in the source code it is probably used, waiting to be used or kept for
+educational purposes. The functionality that we describe here has already been
+present for a while in \CONTEXT, but improved a little starting with \LUATEX\
+1.08 due to an extra helper. The code shown here is generic and not used in
+\CONTEXT\ as such.
+
+Say that we have this code:
+
+\startbuffer
+for i=1,10000 do
+ tex.sprint("1")
+ tex.sprint("2")
+ for i=1,3 do
+ tex.sprint("3")
+ tex.sprint("4")
+ tex.sprint("5")
+ end
+ tex.sprint("\\space")
+end
+\stopbuffer
+
+\typebuffer
+
+% \ctxluabuffer
+
+When we call \type {\directlua} with this snippet we get some 30 pages of \type
+{12345345345}. The printed text is saved till the end of the \LUA\ call, so
+basically we pipe some 170.000 characters to \TEX\ that get interpreted as one
+paragraph.
+
+Now imagine this:
+
+\startbuffer
+\setbox0\hbox{xxxxxxxxxxx} \number\wd0
+\stopbuffer
+
+\typebuffer
+
+which gives \getbuffer. If we check the box in \LUA, with:
+
+\startbuffer
+tex.sprint(tex.box[0].width)
+tex.sprint("\\enspace")
+tex.sprint("\\setbox0\\hbox{!}")
+tex.sprint(tex.box[0].width)
+\stopbuffer
+
+\typebuffer
+
+the result is {\tttf \ctxluabuffer}, which is not what you would expect at first
+sight. However, if you consider that we just pipe to a \TEX\ buffer that gets
+parsed after the \LUA\ call, it will be clear that the reported width is the
+width that we started with. It will work all right if we say:
+
+\startbuffer
+tex.sprint(tex.box[0].width)
+tex.sprint("\\enspace")
+tex.sprint("\\setbox0\\hbox{!}")
+tex.sprint("\\directlua{tex.sprint(tex.box[0].width)}")
+\stopbuffer
+
+\typebuffer
+
+because now we get: {\tttf\ctxluabuffer}. It's not that complex to write some
+support code that makes this more convenient. This can work out quite well but
+there is a drawback. If we use this code:
+
+\startbuffer
+print(status.input_ptr)
+tex.sprint(tex.box[0].width)
+tex.sprint("\\enspace")
+tex.sprint("\\setbox0\\hbox{!}")
+tex.sprint("\\directlua{print(status.input_ptr)\
+ tex.sprint(tex.box[0].width)}")
+\stopbuffer
+
+\typebuffer
+
+Here we get \type {6} and \type {7} reported. You can imagine that when a lot of
+nested \type {\directlua} calls happen, we can get an overflow of the input level
+or (depending on what we do) the input stack size. Ideally we want to do a \LUA\
+call, temporarily go to \TEX, return to \LUA, etc.\ without needing to worry
+about nesting and possible crashes due to \LUA\ itself running into problems. One
+charming solution is to use so|-|called coroutines: independent \LUA\ threads
+that one can switch between --- you jump out from the current routine to another
+and from there back to the current one. However, when we use \type {\directlua}
+for that, we still have this nesting issue and what is worse, we keep nesting
+function calls too. This can be compared to:
+
+\starttyping
+\def\whatever{\ifdone\whatever\fi}
+\stoptyping
+
+where at some point \type {\ifdone} is false so we quit. But we keep nesting when
+the condition is met, so eventually we can end up with some nesting related
+overflow. The following:
+
+\starttyping
+\def\whatever{\ifdone\expandafter\whatever\fi}
+\stoptyping
+
+is less likely to overflow because there we have tail recursion which basically
+boils down to not nesting but continuing. Do we have something similar in
+\LUATEX\ for \LUA ? Yes, we do. We can register a function, for instance:
+
+\starttyping
+lua.get_functions_table()[1] = function() print("Hi there!") end
+\stoptyping
+
+and call that one with:
+
+\starttyping
+\luafunction 1
+\stoptyping
+
+This is a bit faster than calling a function like:
+
+\starttyping
+\directlua{HiThere()}
+\stoptyping
+
+which can also be achieved by
+
+\starttyping
+\directlua{print("Hi there!")}
+\stoptyping
+
+which sometimes can be more convenient. Anyway, a function call is what we can
+use for our purpose as it doesn't involve interpretation and effectively behaves
+like a tail call. The following snippet shows what we have in mind:
+
+\startbuffer[code]
+local stepper = nil
+local stack = { }
+local fid = 0xFFFFFF
+local goback = "\\luafunction" .. fid .. "\\relax"
+
+function tex.resume()
+ if coroutine.status(stepper) == "dead" then
+ stepper = table.remove(stack)
+ end
+ if stepper then
+ coroutine.resume(stepper)
+ end
+end
+
+lua.get_functions_table()[fid] = tex.resume
+
+function tex.yield()
+ tex.sprint(goback)
+ coroutine.yield()
+ texio.closeinput()
+end
+
+function tex.routine(f)
+ table.insert(stack,stepper)
+ stepper = coroutine.create(f)
+ tex.sprint(goback)
+end
+\stopbuffer
+
+\ctxluabuffer[code]
+
+\startbuffer[demo]
+tex.routine(function()
+ tex.sprint(tex.box[0].width)
+ tex.sprint("\\enspace")
+ tex.sprint("\\setbox0\\hbox{!}")
+ tex.yield()
+ tex.sprint(tex.box[0].width)
+end)
+\stopbuffer
+
+\typebuffer[demo]
+We start a routine, jump out to \TEX\ in the middle, come back when we're done
+and continue. This gives us: \ctxluabuffer [demo], which is what we expect.
+
+\setbox0\hbox{xxxxxxxxxxx}
+
+\ctxluabuffer[demo]
+
+This mechanism permits efficient (nested) loops like:
+
+\startbuffer[demo]
+tex.routine(function()
+ for i=1,10000 do
+ tex.sprint("1")
+ tex.yield()
+ tex.sprint("2")
+ tex.routine(function()
+ for i=1,3 do
+ tex.sprint("3")
+ tex.yield()
+ tex.sprint("4")
+ tex.yield()
+ tex.sprint("5")
+ end
+ end)
+ tex.sprint("\\space")
+ tex.yield()
+ end
+end)
+\stopbuffer
+
+\typebuffer[demo]
+
+We do create coroutines, go back and forwards between \LUA\ and \TEX, but avoid
+memory being filled up with printed content. If we flush paragraphs (instead of
+e.g.\ the space) then the main difference is that instead of a small delay due to
+the loop unfolding in a large set of prints and accumulated content, we now get a
+steady flushing and processing.
+
+However, we can still have an overflow of input buffers because we still nest
+them: the limitation at the \TEX\ end has moved to a limitation at the \LUA\ end.
+How come? Here is the code that we use:
+
+\typebuffer[code]
+
+The \type {routine} creates a coroutine, and \type {yield} gives control to \TEX.
+The \type {resume} is done at the \TEX\ end when we're finished there. In
+practice this works fine and when you permit enough nesting and levels in \TEX\
+then you will not easily overflow.
+
+When I picked up this side project and wondered how to get around it, it suddenly
+struck me that if we could just quit the current input level then nesting would
+not be a problem. Adding a simple helper to the engine made that possible (of
+course figuring it out took a while):
+
+\startbuffer[code]
+local stepper = nil
+local stack = { }
+local fid = 0xFFFFFF
+local goback = "\\luafunction" .. fid .. "\\relax"
+
+function tex.resume()
+ if coroutine.status(stepper) == "dead" then
+ stepper = table.remove(stack)
+ end
+ if stepper then
+ coroutine.resume(stepper)
+ end
+end
+
+lua.get_functions_table()[fid] = tex.resume
+
+if texio.closeinput then
+ function tex.yield()
+ tex.sprint(goback)
+ coroutine.yield()
+ texio.closeinput()
+ end
+else
+ function tex.yield()
+ tex.sprint(goback)
+ coroutine.yield()
+ end
+end
+
+function tex.routine(f)
+ table.insert(stack,stepper)
+ stepper = coroutine.create(f)
+ tex.sprint(goback)
+end
+\stopbuffer
+
+\ctxluabuffer[code]
+
+\typebuffer[code]
+
+The trick is in \type {texio.closeinput}, a recent helper and one that should be
+used with care. We assume that the user knows what she or he is doing. On an old
+laptop with a i7-3840 processor running \WINDOWS\ 10 the following snippet takes
+less than 0.35 seconds with \LUATEX\ and 0.26 seconds with \LUAJITTEX.
+
+\startbuffer[code]
+tex.routine(function()
+ for i=1,10000 do
+ tex.sprint("\\setbox0\\hpack{x}")
+ tex.yield()
+ tex.sprint(tex.box[0].width)
+ tex.routine(function()
+ for i=1,3 do
+ tex.sprint("\\setbox0\\hpack{xx}")
+ tex.yield()
+ tex.sprint(tex.box[0].width)
+ end
+ end)
+ end
+end)
+\stopbuffer
+
+\typebuffer[code]
+
+% \testfeatureonce {1} {\setbox0\hpack{\ctxluabuffer[code]}} \elapsedtime
+
+Say that we run the bad snippet:
+
+\startbuffer[code]
+for i=1,10000 do
+ tex.sprint("\\setbox0\\hpack{x}")
+ tex.sprint(tex.box[0].width)
+ for i=1,3 do
+ tex.sprint("\\setbox0\\hpack{xx}")
+ tex.sprint(tex.box[0].width)
+ end
+end
+\stopbuffer
+
+\typebuffer[code]
+
+% \testfeatureonce {1} {\setbox0\hpack{\ctxluabuffer[code]}} \elapsedtime
+
+This time we need 0.12 seconds in both engines. So what if we run this:
+
+\startbuffer[code]
+\dorecurse{10000}{%
+ \setbox0\hpack{x}
+ \number\wd0
+ \dorecurse{3}{%
+ \setbox0\hpack{xx}
+ \number\wd0
+ }%
+}
+\stopbuffer
+
+\typebuffer[code]
+
+% \testfeatureonce {1} {\setbox0\hpack{\getbuffer[code]}} \elapsedtime
+
+Pure \TEX\ needs 0.30 seconds for both engines but there we lose 0.13 seconds on
+the loop code. In the \LUA\ example where we yield, the loop code takes hardly
+any time. As we need only 0.05 seconds more it demonstrates that when we use the
+power of \LUA\ the performance hit of the switch is quite small: we yield 40.000
+times! In general, such differences are far exceeded by the overhead: the time
+needed to typeset the content (which \type {\hpack} doesn't do), breaking
+paragraphs into lines, constructing pages and other overhead involved in the run.
+In \CONTEXT\ we use a slightly different variant which has 0.30 seconds more
+overhead, but that is probably true for all \LUA\ usage in \CONTEXT, but again,
+it disappears in other runtime.
+
+Here is another example:
+
+\startbuffer[code]
+\def\TestWord#1%
+ {\directlua{
+ tex.routine(function()
+ tex.sprint("\\setbox0\\hbox{\\tttf #1}")
+ tex.yield()
+ tex.sprint(math.round(100 * tex.box[0].width/tex.hsize))
+ tex.sprint(" percent of the hsize: ")
+ tex.sprint("\\box0")
+ end)
+ }}
+\stopbuffer
+
+\typebuffer[code] \getbuffer[code]
+
+\startbuffer
+The width of next word is \TestWord {inline}!
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now, in order to stay realistic, this macro can also be defined as:
+
+\startbuffer[code]
+\def\TestWord#1%
+ {\setbox0\hbox{\tttf #1}%
+ \directlua{
+ tex.sprint(math.round(100 * tex.box[0].width/tex.hsize))
+ } %
+ percent of the hsize: \box0\relax}
+\stopbuffer
+
+\typebuffer[code]
+
+We get the same result: \quotation {\getbuffer}.
+
+We have been using a \LUA|-|\TEX\ mix for over a decade now in \CONTEXT, and have
+never really needed this mixed model. There are a few places where we could
+(have) benefitted from it and we might use it in a few places, but so far we have
+done fine without it. In fact, in most cases typesetting can be done fine at the
+\TEX\ end. It's all a matter of imagination.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/onandon/onandon-expansion.tex b/doc/context/sources/general/manuals/onandon/onandon-expansion.tex
new file mode 100644
index 000000000..73a0b4953
--- /dev/null
+++ b/doc/context/sources/general/manuals/onandon/onandon-expansion.tex
@@ -0,0 +1,307 @@
+% language=uk
+
+\startcomponent onandon-expansion
+
+\environment onandon-environment
+
+\startchapter[title={More (new) expansion trickery}]
+
+Contrary to what one might expect when looking at macro definitions, \TEX\ is
+pretty efficient. Occasionally I wonder if some extra built in functionality
+could help me write better code but when you program with a bit care there is
+often not much to gain in terms of tokens and performance. \footnote {The long
+trip to the yearly Bacho\TeX\ meeting is always a good opportunity to ponder
+\TEX\ and its features. The new functionality discussed here is a side effect of
+the most recent trip.} Also, some possible extensions probably only would be
+applied a few times which makes them low priority. When you look at the
+extensions brought by \ETEX\ the number is not that large, and \LUATEX\ only
+added a few that deal with the language, for instance \tex {expanded} which is
+like an \tex {edef} without the defining a macro and acts on a token list wrapped
+in (normally) curly braces. Just as reference we mention some of the expansion
+related helpers.
+
+\starttabulate[|l|l|p|]
+\BC command \BC argument \BC
+ comment
+\NC \NR
+\HL
+\NC \tex {expandafter} \NC \type {token} \NC
+ The token after the next token gets expanded (one level only). In tricky
+ \TEX\ code you can often see multiple such commands in sequence which makes a
+ nice puzzle.
+\NC \NR
+\NC \tex {noexpand} \NC \type {token} \NC
+ The token after this command is not expanded in the context of expansion.
+\NC \NR
+\NC \tex {expanded} \NC \type {{tokens}} \NC
+ The given token list is expanded. This command showed up early in \LUATEX\
+ development and was taken from \ETEX\ follow|-|ups. I have mails from 2011
+ mentioning its presence in \PDFTEX\ 1.50 (which was targeted in 2008) but
+ somehow it never ended up in a production version at that time (and we're
+ still not at that version). In \CONTEXT\ we already had a command with that
+ name so there we use \tex {normalexpanded}. Users normally can just use the
+ \CONTEXT\ variant of \type {\expanded}.
+\NC \NR
+\NC \tex {unexpanded} \NC \type {{tokens}} \NC
+ The given token list is hidden from expansion. Again, in \CONTEXT\ we already
+ had a command serving as prefix for definitions so instead we use \tex
+ {normalunexpanded}. In the core of \CONTEXT\ this new \ETEX\ command is hardly
+ used.
+\NC \NR
+\NC \tex {detokenize} \NC \type {{tokens}} \NC
+ The given tokenlist becomes (basically) verbatim \TEX\ code. We had something
+ like that in \CONTEXT\ but have no nameclash. It is used in a few places. It's
+ also an \ETEX\ command.
+\NC \NR
+\NC \tex {scantokens} \NC \type {{tokens}} \NC
+ This primitive interprets its argument as a pseudo file. We don't really use it.
+\NC \NR %
+\NC \tex {scantextokens} \NC \type {{tokens}} \NC
+ This \LUATEX\ primitive does the same but has no end|-|of|-|file side
+ effects. This one is also not really used in \CONTEXT.
+\NC \NR
+\NC \tex {protected} \NC \type {\.def} \NC
+ The definition following this prefix, introduced in \ETEX, is unexpandable in
+ the context of expansion. We already used such a command in \CONTEXT\ but
+ with a completely different meaning so use \tex {normalprotected} as prefix
+ or \tex {unexpanded} which is an alias.
+\NC \NR
+\stoptabulate
+
+Here I will present two other extensions in \LUATEX\ that can come in handy, and
+they are there simply because their effect can hardly be realized otherwise
+(never say never in \TEX). One has to do with immediately applying a definition,
+the other with user defined conditions. The first one relates directly to
+expansion, the second one concerns conditions and relates more to parsing
+branches which on purpose avoids expansion.
+
+For the first one I use some silly examples. I must admit that although I can
+envision useful application, I really need to go over the large amount of
+\CONTEXT\ source code to really find a place where it is making things better.
+Take the following definitions:
+
+\startbuffer
+\newcount\NumberOfCalls
+
+\def\TestMe{\advance\NumberOfCalls1 }
+
+\edef\Tested{\TestMe foo:\the\NumberOfCalls}
+\edef\Tested{\TestMe foo:\the\NumberOfCalls}
+\edef\Tested{\TestMe foo:\the\NumberOfCalls}
+
+\meaning\Tested
+\stopbuffer
+
+\typebuffer
+
+The result is a macro \tex {Tested} that not only has the unexpanded incrementing
+code in its body but also hasn't done any advancing:
+
+\getbuffer
+
+Of course when you're typesetting something, this kind of expansion normally is
+not needed. Instead of the above definition we can define \tex {TestMe} in a way
+that expands the assignment immediately. You need of course to be aware of
+preventing look ahead interference by using a space or \tex {relax} (often an
+expression works better as it doesn't leave an \tex {relax}).
+
+\startbuffer
+\def\TestMe{\immediateassignment\advance\NumberOfCalls1 }
+
+\edef\Tested{\TestMe bar:\the\NumberOfCalls}
+\edef\Tested{\TestMe bar:\the\NumberOfCalls}
+\edef\Tested{\TestMe bar:\the\NumberOfCalls}
+
+\meaning\Tested
+\stopbuffer
+
+\typebuffer
+
+This time the counter gets updated and we don't see interference in the resulting
+\tex {Tested} macro:
+
+\getbuffer
+
+Here is a somewhat silly example of an expanded comparison of two \quote
+{strings}:
+
+\startbuffer
+\def\expandeddoifelse#1#2#3#4%
+ {\immediateassignment\edef\tempa{#1}%
+ \immediateassignment\edef\tempb{#2}%
+ \ifx\tempa\tempb
+ \immediateassignment\def\next{#3}%
+ \else
+ \immediateassignment\def\next{#4}%
+ \fi
+ \next}
+
+\edef\Tested
+ {(\expandeddoifelse{abc}{def}{yes}{nop}/%
+ \expandeddoifelse{abc}{abc}{yes}{nop})}
+
+\meaning\Tested
+\stopbuffer
+
+\typebuffer
+
+I don't remember many cases where I needed such an expanded comparison. We have a
+variant in \CONTEXT\ that uses \LUA\ but that one is not really used in the core.
+Anyway, the above code gives:
+
+\getbuffer
+
+You can do the same assignments as in preambles of \tex {halign} and after \tex
+{accent} which means that assignments to box registers are blocked (boxing
+involves grouping and delayed assignments and so). The error you will get when
+you use a non||assignment command refers to a prefix, because internally such
+commands are called prefixed commands. Leading spaces and \tex {relax} are
+ignored.
+
+In addition to this one|-|time immediate assignment a pseudo token list variant
+is provided, so the above could be rewritten to:
+
+\starttyping
+\def\expandeddoifelse#1#2#3#4%
+ {\immediateassigned {
+ \edef\tempa{#1}
+ \edef\tempb{#2}
+ }%
+ \ifx\tempa\tempb
+ \immediateassignment\def\next{#3}%
+ \else
+ \immediateassignment\def\next{#4}%
+ \fi
+ \next}
+\stoptyping
+
+While \tex {expanded} first builds a token lists that then gets used, the \tex
+{immediateassigned} primitive just walls over the list delimited by curly braces.
+
+A next extension concerns conditions. If you have done a bit of extensive \TEX\
+programming you know that nested conditions need to be properly constructed in
+for instance macro bodies. This is because (for good reason) \TEX\ goes into a
+fast scanning mode when there is a match and it has to skip the \tex {else} upto
+\tex {fi} branch. In order to do that properly a nested \tex {if} in there needs
+to have a matching \tex {fi}.
+
+In practice this is no real problem and careful coding will never give a problem
+here: you can either hide nested code in a macro or somehow jump over nested
+conditions if really needed. Actually you only need to care when you pickup a
+token inside the branch because likely you don't want to pick up for instance a
+\tex {fi} but something that comes after it. Say that we have a sane conditional
+setup like this:
+
+\starttyping
+\newif\iffoo \foofalse
+\newif\ifbar \bartrue
+
+\ifoo
+ \ifbar \else \fi
+\else
+ \ifbar \else \fi
+\fi
+\stoptyping
+
+Here the \tex {iffoo} and \tex {ifbar} need to be equivalent to \tex {iftrue} or
+\tex {iffalse} in order to succeed well and that is what for instance \tex
+{footrue} and \tex {foofalse} will do: change the meaning of \tex {iffoo}.
+
+But imagine that you want something more complex. You want for instance to let
+\tex {ifbar} do some calculations. In that case you want it to behave a bit like
+what a so called \type {vardef} in \METAPOST\ does: the end result is what
+matters. Now, because \TEX\ macros often are a complex mix of expandable and
+non|-|expandable this is not that trivial. One solution is a dedicated definer,
+say \tex {cdef} for defining a macro with conditional properties. I actually
+implemented such a definer a few years ago but left it so long in a folder with
+ideas that I only found it back after I had come up with another solution. It was
+probably proof that it was not that good an idea.
+
+The solution implemented in \LUATEX\ is just a special case of a test: \tex
+{ifcondition}. When looking at the next example, keep in mind that from the
+perspective of \TEX's scanner it only needs to know if something is a token that
+does some test and has a matching \tex {fi}. For that purpose you can consider
+\tex {ifcondition} to be \tex {iftrue}. When \TEX\ actually wants to do a test,
+which is the case in the true branch, then it will simply ignore this \tex
+{ifcondition} primitive and expands what comes after it (which is \TEX's natural
+behaviour). Effectively \tex {ifcondition} has no meaning except from when it has
+to be skipped, in which case it's a token flagged as \tex {if} kind of command.
+
+\starttyping
+\unexpanded\def\something#1#2%
+ {\edef\tempa{#1}%
+ \edef\tempb{#2}
+ \ifx\tempa\tempb}
+
+\ifcondition\something{a}{b}%
+ \ifcondition\something{a}{a}%
+ true 1
+ \else
+ false 1
+ \fi
+\else
+ \ifcondition\something{a}{a}%
+ true 2
+ \else
+ false 2
+ \fi
+\fi
+\stoptyping
+
+Wrapped in a macro you can actually make this fully expandable when you use the
+previously mentioned immediate assignment. Here is another example:
+
+\starttyping
+\unexpanded\def\onoddpage
+ {\ifodd\count0 }
+
+\ifcondition\onoddpage odd \else even \fi page
+\stoptyping
+
+The previously defined comparison macro can now be rewritten as:
+
+\starttyping
+\def\equaltokens#1#2%
+ {\immediateassignment\edef\tempa{#1}%
+ \immediateassignment\edef\tempb{#2}%
+ \ifx\tempa\tempb}
+
+\def\expandeddoifelse#1#2#3#4%
+ {\ifcondition\equaltokens{#1}{#2}%
+ \immediateassignment\def\next{#3}%
+ \else
+ \immediateassignment\def\next{#4}%
+ \fi
+ \next}
+\stoptyping
+
+When used this way it will of course also work without the \tex {ifcondition} but
+when used nested it can be like this. This last example also demonstrates that
+this feature probably only makes sense in more complicated cases where more work
+is done in the \tex {onoddpage} or \tex {equaltokens} macro. And again, I am not
+sure if for instance in \CONTEXT\ I have a real use for it because there are only
+a few cases where nesting like this could benefit. I did some tests with a low
+level macro where it made the code look nicer. It was actually a bit faster but
+most core macros are not called that often. Although the overhead of this feature
+can be neglected, performance should not be the reason for using it: in \CONTEXT\
+for instance one can often only measure such possible speed|-|ups on macros that
+are called tens or hundreds of thousands of times and that seldom happens in a
+real run end even then a change from say 0.827 seconds to 0.815 seconds for 10K
+calls of a complex case is just noise as the opposite can also happen.
+
+Although not strictly necessary these extensions might make some code look better
+so that is why they officially will be available in the 1.09 release of \LUATEX\
+in fall 2018. It might eventually inspire me to go over some code and see where I
+can improve the look and feel.
+
+The last few years I have implemented some more ideas as local experiments, for
+instance \tex {futurelet} variant or a simple (one level) \tex {expand}, but in
+the end rejected them because there is no real benefit in them (no better looking
+code, no gain in performance, hard to document, possible side effects, etc.), so
+it is very unlikely that we will have more extensions like this. After all, we
+could do more than 40 years without them. Although \unknown\ who knows what we
+will provide in \LUATEX\ version~2.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/onandon/onandon-media.tex b/doc/context/sources/general/manuals/onandon/onandon-media.tex
new file mode 100644
index 000000000..f44c3bb19
--- /dev/null
+++ b/doc/context/sources/general/manuals/onandon/onandon-media.tex
@@ -0,0 +1,220 @@
+% language=uk
+
+\startcomponent onandon-media
+
+\environment onandon-environment
+
+\startchapter[title={The state of \PDF}]
+
+\startsection[title={Introduction}]
+
+Below I will spend some words on the state of \PDF\ in \CONTEXT\ mid 2018. These
+are just some reflections, not an in|-|depth discussion of the state of affairs. I
+sometimes feel the need to wrap up.
+
+\stopsection
+
+\startsection[title={Media}]
+
+For over two decades \CONTEXT\ has supported fancy \PDF\ features like movies and
+sound. In fact, as happens more, the flexibility of \TEX\ made it possible to
+support such features right after they became available, often even before other
+applications supported them.
+
+The first approach to support such media clips was relatively easy. In \PDF\ one
+has the text flow, resulting from the typesetting process, either or not enhanced
+with images that are referred to from the flow. In that respect images are an
+integral part of \PDF. On a separate layer there can be annotations. There are
+many kinds and they are originally a sort of extension mechanism that permits
+plugins to add features to a document. Examples of this are hyperlinks and the
+already mentioned media clips. Video was supported by the quicktime movie plugin.
+As far as I know in the meantime that plugin has been dropped as official part of
+Acrobat but one can still plug it in.
+
+Later an extra mechanism was introduced, tagged renditions. It separates the
+views from the media and was more complex. When I first played with it, quite
+some media were possible, and I made a demo that could handle mov, mp3, smi and
+swf files. But last time I checked none of these really worked, apart from the
+swf file. One gets pop|-|ups for missing viewers and a look at the reader
+preferences makes one pessimistic about future support anyway. But one should be
+able to set up a list of useable players with this mechanism (although only an
+Adobe one seems to be okay so we're back to where we started).
+
+At some point support for u3d was added. Interesting is that there is quite some
+infrastructure described in the \PDF\ standard. Also something called rich media
+was introduced and that should replace the former video and audio annotations
+(definitely in \PDF\ version 2) and probably some day the renditions will no
+longer be supported either. Open source \PDF\ viewers just stuck to supporting
+text and static images.
+
+Now, do these rich media work well? Hardly. The standard leaves it to the viewer
+and provides ways to define viewers (although it's unclear to me how that works
+out in practice.) Basically in \PDF\ version 2 there is no native support for
+simple straightforward video. One has to construct a complex set of related
+annotations.
+
+One can give arguments (like security risks) for not supporting all these fancy
+features but then why make rich media part of the specification at all? Browsers
+beat \PDF\ viewers in showing media and as browsers can operate in kiosk mode I
+suppose that it's not that hard to delegate showing whatever you want in an
+embedded window in the \PDF\ viewer. Or why not simply support videolan out of
+the box. All we need is the ability to view movies and control them (play, pause,
+stop, rewind, etc). Where \HTML\ evolved towards easier media support, \PDF\
+evolved to more obscurity.
+
+So, how bad is it really? There are \PDF\ files around that have video! Indeed,
+but the way they're supposed to do this is as follows: currently one actually has
+to embed a shockwave video player (a user interface around something built|-|in)
+and let that player show for instance an mp4 movie. However, support for
+shockwave (flash) will be dropped in 2020 and that renders documents that use it
+obsolete. This even makes one wonder about \JAVASCRIPT\ and widgets like form
+fields, also a rather moving and somewhat unstable target. (I must have a
+document being a calculator somewhere made in the previous century, in the early
+days of \PDF.)
+
+I think that the plugin model failed already rather early in the \PDF\ history if
+only because it made no sense to develop them when in a next version of Acrobat
+the functionality was copied in the core. In a similar fashion \JAVASCRIPT\
+support seems to have stalled.
+
+Unfortunately the open source viewers never catched on with media, forms and
+\JAVASCRIPT\ and therefore there has been no momentum created to keep things
+supported. It all makes efforts spent on supporting this kind of \PDF\ features a
+waste of time. It also makes one careful in using them: it only works on the
+short term.
+
+Get me right, I'm not talking of complex media like 3d or animations but of
+straightforward video support. I understand that the rich media framework tries
+to cover complex cases but it's simple cases that carry the format. On the other
+hand, one can wonder why the \PDF\ format makes it possible to specify behaviour
+that in practice depends on \JAVASCRIPT\ and therefore could as well have been
+delegated to \JAVASCRIPT\ as well. It would probably have been much cleaner.
+\footnote {It looks like mu\PDF\ in 2018 got some support related to widgets aka
+fields but alas not for layers which would be quite useful.}
+
+The \PDF\ version 2 specification mentions \type {3D}, \type {Video} and \type
+{Audio} as primary content types so maybe future viewers will support video out
+of the box. Who knows. We try to keep up in \CONTEXT\ because it's often not that
+complex to support \PDF\ features but with hardly any possibility to test them,
+they have a low priority. And with Acrobat moving to the cloud and thereby
+creating a more of less lifelong dependency on remote resources it doesn't become
+much interesting to explore those routes either.
+
+\stopsection
+
+\startsection[title={Accessibility}]
+
+A popular \PDF\ related topic is accessibility. One aspect of that is tagged
+\PDF. This substandard is in my opinion not something that deserves a price for
+beauty. I know that there are \CONTEXT\ users who need to be compliant but I
+always wonder what a publisher really does with such a file. It's a bit like
+requiring \XML\ as source but at the same time sacrificing really rich encoded
+and sources for tweaks that suite the current limitations of for instance browsers,
+tool|-|chains and competence. We've seen it happen.
+
+Support for tagged \PDF\ has been available in \CONTEXT\ already for a while but
+as far as I know only Acrobat professional can do something with it. The reason
+for tagging is that a document is then useable for (for instance) visually
+impaired users, but aren't they better served with a proper complete and very
+structured source in some format that tools suitable for it can use? How many
+publishers distribute \PDF\ files while they can still make money on prints? How
+many are really interested in distributing enriched content that then can be
+reused somehow? And how many are willing to invest in tools instead of waiting
+for it to happen for free? It's a bit cheap trick to just expect authors (and
+their in the case of \TEX\ free tools) to suit a publishers needs. Anyway, just
+as with advanced interactive documents or forms, I wonder if it will catch on. At
+least no publisher ever asked us and by the time they might do the competition of
+web based dissemination could have driven \PDF\ to the background. But, in
+\CONTEXT\ we will keep supporting such features anyway, if only because it's
+quite doable. But \unknown\ it's user demand that drives development, not the
+market, which means that the motivation for implementing such features depends on
+user input as well as challenging aspects that make it somewhat fun to spend time
+on them.
+
+\stopsection
+
+\startsection[title={Quality assurance}]
+
+Another aspect popping up occasionally is validation. I'm not entirely sure what
+drives that but delegating a problem can be one reason. Often we see publishers
+and printers use old versions of \PDF\ related tools. Also, some workflows are
+kind of ancient anyway and are more driven by \POSTSCRIPT\ history than \PDF\
+possibilities. I sometimes get the impression that it takes at least a decade for
+these things to catch on, and by that time it doesn't matter any more that \TEX\
+and friends were at the front: their users are harassed by what the market
+demands by then.
+
+Support for several standards related to validation is already part of \CONTEXT\
+for quite a while. For instance the bump from \PDF\ 1.7 to 2.0 was hardly worth
+noticing, simply because there are not that many fundamental changes. Adapting
+\LUATEX\ was trivial (and actually not really needed), and macro packages can
+provide what is needed without much problems. So, yes, we can support it without
+much hassle. Personally I never ran into a case where validation was really
+needed. The danger of validation is that it can give a false impression of
+quality. And as with everything quality control created a market. As with other
+features it is users who drive the availability of support for this. After all,
+they are the ones testing it and figuring out the often fuzzy specifications.
+These are things that one can always look at in retrospect (like: it has to be
+done this or that way) while in practice in order to be an early adopter one has
+to gamble a bit and see where it fails or succeeds. Fortunately it's relatively
+easy to adapt macro packages and \CONTEXT\ users are willing to update so it's
+not really an issue.
+
+Putting a stamp of approval on a \PDF\ cannot hide the inconsistencies between
+for instance vector graphics produced by a third party. They also don't expose
+inconsistent use of color and fonts. The page streams produced by \LUATEX\ are
+simple and clean enough to not give problems with validation. The problem lays
+more with resources coming from elsewhere. When you're phoned by a printing house
+about an issue with \RGB\ images in a file where there is no sign of \RGB\ being
+used but where a validator reports an issue, you're lucky when an experienced
+printer dating back decades then replies that he already had that impression and
+will contact the origin. There is no easy way out of this but educating users
+(authors) is an option. However, they are often dependent on the publishers and
+departments that deal with these and those tend to come with directives that the
+authors cannot really argue with (or about).
+
+\stopsection
+
+\startsection[title={Interactivity}]
+
+This is an area where \TEX\ (an therefore also \CONTEXT) always had an edge,
+There is a lot possible and in principle all that \PDF\ provides can be
+supported. But the more fancy one goes, the more one depends on Acrobat.
+Interactivity in \PDF\ evolved stepwise and is mostly market driven. As a result
+it is (or was) not always consistent. This is partly due to the fact that we have
+a chicken|-|egg issue: you need typesetting machinery, viewer as well as a
+standard.
+
+The regular hyperlinks, page or named driven are normally supported by viewers.
+Some redefined named destinations (like going to a next page, or going back in a
+chain of followed links) not always. Launching applications, as it also relates
+to security, can be qualified as an unreliable mechanism. More advanced linking,
+for instance using \JAVASCRIPT\ is hardly supported. In that respect \PDF\
+viewers lag way behind \HTML\ browsers. I understand that there can be security
+risks involved. It's interesting to see that in Acrobat one can mess with
+internals of files which makes the \API\ large and complex, but if we stick to
+the useful core, the amount of interfacing needed is quite small. Lack of support
+in open source viewers (we're talking of about two decades now) made me loose
+interest in these features but they are and will be supported in \CONTEXT. We'll
+see if and when viewers catch up.
+
+Comments and attachments are also part of interactivity and of course we
+supported them right from the start. Some free viewers also support them by now.
+Personally I never use comments but they can be handy for popping up information
+or embedding snippets or (structured) sources (like \MATHML\ or bibliographic
+data). In \CONTEXT\ we can even support \PDF\ inclusion with (a reasonable)
+subset of these so called annotations. As the \PDF\ standard no longer evolves
+much we can expect all these features to become stable.
+
+\stopsection
+
+\startsection[title={Summary}]
+
+We have always supported the fancy \PDF\ features and we will continue doing so
+in \CONTEXT . However, many of them depends on what viewers support, and after
+decades of \PDF\ that is still kind of disappointing, which is not that
+motivating. We'll see what happens.
+
+\stopsection
+
+\stopchapter
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-000.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-000.tex
deleted file mode 100644
index f48af866d..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-000.tex
+++ /dev/null
@@ -1,116 +0,0 @@
-% \startenvironment onandon-speed-000
-
-% \dontcomplain
-
-\edef\sapolsky{\ignorespaces\cldloadfile{sapolsky}\removeunwantedspaces}
-
-\startluacode
-
- function document.ResetSample(title)
- document.elapsed = {
- title = title,
- times = { },
- }
- end
-
- function document.RegisterSample(bodyfont,elapsed)
- table.insert(document.elapsed.times, {
- bodyfont = bodyfont,
- elapsed = elapsed
- })
- end
-
- function document.SaveSample()
- if LUATEXENGINE == "luajittex" then
- table.save(tex.jobname.."-jit.lua",document.elapsed)
- else
- table.save(tex.jobname..".lua",document.elapsed)
- end
- end
-
- function document.ShowSample(filename)
- -- context.typefile(filename..".tex")
- local elapsed = table.load(file.nameonly(filename)..".lua")
- local elapsedjit = table.load(file.nameonly(filename).."-jit.lua")
- if elapsed and elapsedjit then
- context.testpage { 6 }
- context.starttabulate { "|l|l|lp|" }
- context.HL()
- context.NC() context.formatted.rlap("\\bf %s",elapsed.title)
- context.NC()
- context.NC()
- context.NC() context.NR()
- context.HL()
- local times = elapsed.times
- local timesjit = elapsedjit.times
- for j=1,#times do
- local t = times[j]
- local tjit = timesjit[j]
- context.NC() context(t.bodyfont)
- context.NC() context(t.elapsed)
- context.NC() context(tjit.elapsed)
- context.NC() context.NR()
- end
- context.HL()
- context.stoptabulate()
- end
- end
-
- function document.SampleTitle(filename)
- local elapsed = table.load(filename..".lua")
- if elapsed then
- context(elapsed.title)
- end
- end
-\stopluacode
-
-\appendtoks
- \ctxlua{document.SaveSample()}%
-\to \everystoptext
-
-\def\SampleCount{1000}
-\def\SampleCount{100}
-
-\unexpanded\def\RegisterSample#1%
- {\ctxlua{document.RegisterSample("#1","\elapsedtime")}}
-
-\unexpanded\def\ProcessSample#1%
- {\page
- \ctxlua{document.ResetSample("#1")}%
- \resettimer \Sample {modern} \RegisterSample {modern}
- \resettimer \Sample {pagella} \RegisterSample {pagella}
- \resettimer \Sample {termes} \RegisterSample {termes}
- \resettimer \Sample {cambria} \RegisterSample {cambria}
- \resettimer \Sample {dejavu} \RegisterSample {dejavu}
- \resettimer \Sample {ebgaramond} \RegisterSample {ebgaramond}
- \resettimer \Sample {lucidaot} \RegisterSample {lucidaot}
- \page }
-
-\unexpanded\def\ProcessBaselineSample#1%
- {\page
- \ctxlua{document.ResetSample("#1")}%
- \resettimer \Sample {baseline} \RegisterSample {baseline}
- \page }
-
-\unexpanded\def\Sample#1%
- {\setupbodyfont[#1]}
-
-\unexpanded\def\ShowSample#1%
- {\ctxlua{document.ShowSample("#1")}}
-
-\unexpanded\def\SampleTitle#1%
- {\ctxlua{document.SampleTitle("#1.lua")}}
-
-\continueifinputfile{onandon-speed-000.tex}
-
-\starttext
-
-\ProcessSample{bodyfont}
-
-\setbox\scratchbox\vbox{\hsize1pt\tttf\sapolsky} \getnoflines{\htdp\scratchbox}
-
-\writestatus{!!!!!!}{noflines : \the\noflines}
-
-\stoptext
-
-% \stopenvironment
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-001.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-001.tex
deleted file mode 100644
index b6c241752..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-001.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \setbox\scratchbox\hbox{\tf\bf\it\bi}%
- \stop}
-
-\ProcessSample{bodyfont switch and 4 style changes (first time)}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-002.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-002.tex
deleted file mode 100644
index edd6dd0f7..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-002.tex
+++ /dev/null
@@ -1,16 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \setbox\scratchbox\hbox{\tf\bf\it\bi}%
- \stop}
-
-\ProcessSample{bodyfont switch and 4 style changes (first time)}
-\ProcessSample{bodyfont switch and 4 style changes (follow up)}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-003.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-003.tex
deleted file mode 100644
index 4362ccb4f..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-003.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \dorecurse\SampleCount{\setbox\scratchbox\hbox{\sapolsky\space\sapolsky\space\sapolsky\space\sapolsky}}%
- \stop}
-
-\ProcessSample{\SampleCount\space hboxes with 4 texts using one font}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-005.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-005.tex
deleted file mode 100644
index 7aeb53b4b..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-005.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \dorecurse\SampleCount{\sapolsky\space\sapolsky\space\sapolsky\space\sapolsky\par}%
- \stop}
-
-\startlayout[page]
- \ProcessSample{\SampleCount\space times 4 texts on pages}
-\stoplayout
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-006.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-006.tex
deleted file mode 100644
index d15ef428e..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-006.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \dorecurse\SampleCount{\tf\sapolsky\space\bf\sapolsky\space\it\sapolsky\space\bi\sapolsky\space\par}%
- \stop}
-
-\startlayout[page]
- \ProcessSample{\SampleCount\space times 4 texts on pages using 4 styles}
-\stoplayout
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-007.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-007.tex
deleted file mode 100644
index 7a4eed497..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-007.tex
+++ /dev/null
@@ -1,31 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\sapolsky{%
- Agriculture is a fairly recent human invention, and in many ways it was one of
- the great {\bf stupid} moves of all time. Hunter|-|gatherers have thousands of wild
- sources of food to subsist on. Agriculture changed that all, generating an
- overwhelming reliance on a few dozen domesticated food sources, making you
- extremely vulnerable to the next famine, the next locust infestation, the next
- potato blight. Agriculture allowed for stockpiling of surplus resources and thus,
- {\bf inevitably}, the unequal stockpiling of them --- stratification of society and
- the invention of classes. Thus, it allowed for the invention of poverty. I think
- that the punch line of the primate|-|human difference is that when humans
- invented poverty, they came up with a way of subjugating the low|-|ranking like
- {\bf nothing ever seen before} in the primate world.
-}%
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \dorecurse\SampleCount{\sapolsky\par}%
- \stop}
-
-\startlayout[page]
- \ProcessSample{\SampleCount\space texts on pages with [1,2,4] bold font switches}
-\stoplayout
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-008.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-008.tex
deleted file mode 100644
index ae968bc10..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-008.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\sapolsky{%
- Agriculture is a fairly recent human invention, and in many ways it was one
- of the great \type {stupid} moves of all time. Hunter|-|gatherers have
- thousands of wild sources of food to subsist on. Agriculture changed that
- all, generating an overwhelming reliance on a few dozen domesticated food
- sources, making you extremely vulnerable to the next famine, the next locust
- infestation, the next potato blight. Agriculture allowed for stockpiling of
- surplus resources and thus, \type {inevitably}, the unequal stockpiling of
- them --- stratification of society and the invention of classes. Thus, it
- allowed for the invention of poverty. I think that the punch line of the
- primate|-|human difference is that when humans invented poverty, they came up
- with a way of subjugating the low|-|ranking like \type {nothing ever seen
- before} in the primate world.
-}%
-
-\def\Sample#1%
- {\start
- \switchtobodyfont[#1]
- \dorecurse\SampleCount{\sapolsky\par}%
- \stop}
-
-\startlayout[page]
- \ProcessSample{\SampleCount\space texts on pages with [1,2,4] word verbatim switches}
-\stoplayout
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-009.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-009.tex
deleted file mode 100644
index 61116e652..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-009.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \infofont
- \dorecurse\SampleCount{\setbox\scratchbox\hpack{\sapolsky\space\sapolsky\space\sapolsky\space\sapolsky}}%
- \stop}
-
-\ProcessBaselineSample{\SampleCount\space hboxes with 4 texts and no font handling}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-010.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-010.tex
deleted file mode 100644
index 673c2b1e5..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-010.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\starttext
-
-\def\Sample#1%
- {\start
- \infofont
- \dorecurse\SampleCount{\setbox\scratchbox\hbox{\sapolsky\space\sapolsky\space\sapolsky\space\sapolsky}}%
- \stop}
-
-\ProcessBaselineSample{\SampleCount\space hboxes with 4 texts and no features}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-011.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-011.tex
deleted file mode 100644
index 90d924c00..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-011.tex
+++ /dev/null
@@ -1,20 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\dontcomplain
-
-\starttext
-
-\def\Sample#1%
- {\start
- \tttf\tx
- \dorecurse\SampleCount{\sapolsky\space\sapolsky\space\sapolsky\space\sapolsky\par}%
- \stop}
-
-\startlayout[page]
- \ProcessBaselineSample {\SampleCount\space paragraphs with 4 texts and no features}
-\stoplayout
-
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon-speed-012.tex b/doc/context/sources/general/manuals/onandon/onandon-speed-012.tex
deleted file mode 100644
index e2d51e195..000000000
--- a/doc/context/sources/general/manuals/onandon/onandon-speed-012.tex
+++ /dev/null
@@ -1,20 +0,0 @@
-\environment onandon-speed-000
-
-\ProcessSample{bodyfont} \setupbodyfont[dejavu]
-
-\dontcomplain
-
-\starttext
-
-\def\SampleCount{1000}
-
-\def\Sample#1%
- {\start
-% \switchtobodyfont[#1]
- \dorecurse\SampleCount{\sapolsky\par}
- \stop}
-
-% \ProcessSample{\SampleCount\space pages no features}
-\ProcessBaselineSample{\SampleCount\space paragraphs text}
-
-\stoptext
diff --git a/doc/context/sources/general/manuals/onandon/onandon.tex b/doc/context/sources/general/manuals/onandon/onandon.tex
index 2352907fc..00b01f9ae 100644
--- a/doc/context/sources/general/manuals/onandon/onandon.tex
+++ b/doc/context/sources/general/manuals/onandon/onandon.tex
@@ -34,42 +34,19 @@
\startbodymatter
\component onandon-decade
-
\component onandon-ffi
-
- % \startchapter[title=Variable fonts] First published in user group magazines. \stopchapter
- \component onandon-variable
-
+ \component onandon-variable % first published in user group magazines
\component onandon-emoji
-
- \startchapter[title={Children of \TEX}] First published in user group magazines. \stopchapter
- % \component onandon-children
-
\component onandon-performance
-
\component onandon-editing
-
- \startchapter[title={Advertising \TEX}] First published in user group magazines. \stopchapter
- % \component onandon-perception
-
- \startchapter[title={Tricky fences}] First published in user group magazines. \stopchapter
- % \component onandon-fences
-
- % \component onandon-media
-
- \startchapter[title={From 5.2 to 5.3}] First published in user group magazines. \stopchapter
- % \component onandon-53
-
- \startchapter[title={Executing \TEX}] First published in user group magazines. \stopchapter
- % \component onandon-execute
-
+ \component onandon-fences % first published in user group magazines
+ \component onandon-media
+ \component onandon-53 % first published in user group magazines
+ \component onandon-execute % first published in user group magazines
\component onandon-modern
-
- \startchapter[title={More expansion}] Maybe first published in user group magazines. \stopchapter
- % \component onandon-expansion
-
- \component onandon-110
+ \component onandon-expansion
\component onandon-runtoks
+ \component onandon-110
\stopbodymatter
\stopproduct
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 26e92909a..ce3ef17ee 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.07.18 17:33}
+\newcontextversion{2018.07.20 21:20}
%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 0ce44438c..ba5135d80 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.07.18 17:33}
+\edef\contextversion{2018.07.20 21:20}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua
index fcbf01900..8f2583afe 100644
--- a/tex/context/base/mkiv/char-def.lua
+++ b/tex/context/base/mkiv/char-def.lua
@@ -14164,6 +14164,13 @@ characters.data={
synonyms={ "armenian patiw" },
unicodeslot=0x55F,
},
+ [0x560]={
+ category="ll",
+ description="ARMENIAN SMALL LETTER TURNED AYB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x560,
+ },
[0x561]={
adobename="aybarmenian",
category="ll",
@@ -14515,6 +14522,13 @@ characters.data={
specials={ "compat", 0x565, 0x582 },
unicodeslot=0x587,
},
+ [0x588]={
+ category="ll",
+ description="ARMENIAN SMALL LETTER YI WITH STROKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x588,
+ },
[0x589]={
adobename="periodarmenian",
category="po",
@@ -15283,6 +15297,13 @@ characters.data={
linebreak="hl",
unicodeslot=0x5EA,
},
+ [0x5EF]={
+ category="lo",
+ description="HEBREW YOD TRIANGLE",
+ direction="r",
+ linebreak="hl",
+ unicodeslot=0x5EF,
+ },
[0x5F0]={
adobename="vavvavhebrew",
category="lo",
@@ -17638,6 +17659,7 @@ characters.data={
unicodeslot=0x70D,
},
[0x70F]={
+ arabic="t",
category="cf",
description="SYRIAC ABBREVIATION MARK",
direction="al",
@@ -19362,6 +19384,28 @@ characters.data={
linebreak="al",
unicodeslot=0x7FA,
},
+ [0x7FD]={
+ category="mn",
+ combining=0xDC,
+ description="NKO DANTAYALAN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x7FD,
+ },
+ [0x7FE]={
+ category="sc",
+ description="NKO DOROME SIGN",
+ direction="r",
+ linebreak="pr",
+ unicodeslot=0x7FE,
+ },
+ [0x7FF]={
+ category="sc",
+ description="NKO TAMAN SIGN",
+ direction="r",
+ linebreak="pr",
+ unicodeslot=0x7FF,
+ },
[0x800]={
category="lo",
description="SAMARITAN LETTER ALAF",
@@ -20361,6 +20405,14 @@ characters.data={
linebreak="al",
unicodeslot=0x8BD,
},
+ [0x8D3]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC SMALL LOW WAW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D3,
+ },
[0x8D4]={
category="mn",
combining=0xE6,
@@ -21284,8 +21336,8 @@ characters.data={
description="DEVANAGARI SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0x93C,
},
@@ -21522,8 +21574,8 @@ characters.data={
description="DEVANAGARI STRESS SIGN ANUDATTA",
direction="nsm",
indic="s",
- indicmark="b",
indicclass="anudatta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0x952,
},
@@ -22376,8 +22428,8 @@ characters.data={
description="BENGALI SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0x9BC,
},
@@ -22823,6 +22875,14 @@ characters.data={
linebreak="al",
unicodeslot=0x9FD,
},
+ [0x9FE]={
+ category="mn",
+ combining=0xE6,
+ description="BENGALI SANDHI MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x9FE,
+ },
[0xA01]={
category="mn",
description="GURMUKHI SIGN ADAK BINDI",
@@ -23247,8 +23307,8 @@ characters.data={
description="GURMUKHI SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xA3C,
},
@@ -23565,6 +23625,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xA75,
},
+ [0xA76]={
+ category="po",
+ description="GURMUKHI ABBREVIATION SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA76,
+ },
[0xA81]={
adobename="candrabindugujarati",
category="mn",
@@ -24032,8 +24099,8 @@ characters.data={
description="GUJARATI SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xABC,
},
@@ -24807,8 +24874,8 @@ characters.data={
description="ORIYA SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xB3C,
},
@@ -25809,6 +25876,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xC03,
},
+ [0xC04]={
+ category="mn",
+ description="TELUGU SIGN COMBINING ANUSVARA ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xC04,
+ },
[0xC05]={
category="lo",
description="TELUGU LETTER A",
@@ -26175,9 +26249,9 @@ characters.data={
category="lo",
description="TELUGU LETTER VA",
direction="l",
+ indic="c",
linebreak="al",
unicodeslot=0xC35,
- indic="c",
},
[0xC36]={
category="lo",
@@ -26614,6 +26688,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xC83,
},
+ [0xC84]={
+ category="po",
+ description="KANNADA SIGN SIDDHAM",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0xC84,
+ },
[0xC85]={
category="lo",
description="KANNADA LETTER A",
@@ -27014,8 +27095,8 @@ characters.data={
description="KANNADA SIGN NUKTA",
direction="nsm",
indic="o",
- indicmark="b",
indicclass="nukta",
+ indicmark="b",
linebreak="cm",
unicodeslot=0xCBC,
},
@@ -46377,6 +46458,14 @@ characters.data={
linebreak="al",
unicodeslot=0x1877,
},
+ [0x1878]={
+ arabic="d",
+ category="lo",
+ description="MONGOLIAN LETTER CHA WITH TWO DOTS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1878,
+ },
[0x1880]={
arabic="u",
category="lo",
@@ -52619,6 +52708,328 @@ characters.data={
linebreak="al",
unicodeslot=0x1C88,
},
+ [0x1C90]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER AN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C90,
+ },
+ [0x1C91]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER BAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C91,
+ },
+ [0x1C92]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER GAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C92,
+ },
+ [0x1C93]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER DON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C93,
+ },
+ [0x1C94]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER EN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C94,
+ },
+ [0x1C95]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER VIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C95,
+ },
+ [0x1C96]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER ZEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C96,
+ },
+ [0x1C97]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER TAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C97,
+ },
+ [0x1C98]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C98,
+ },
+ [0x1C99]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER KAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C99,
+ },
+ [0x1C9A]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER LAS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9A,
+ },
+ [0x1C9B]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER MAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9B,
+ },
+ [0x1C9C]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER NAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9C,
+ },
+ [0x1C9D]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER ON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9D,
+ },
+ [0x1C9E]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER PAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9E,
+ },
+ [0x1C9F]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER ZHAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C9F,
+ },
+ [0x1CA0]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER RAE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA0,
+ },
+ [0x1CA1]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER SAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA1,
+ },
+ [0x1CA2]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER TAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA2,
+ },
+ [0x1CA3]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER UN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA3,
+ },
+ [0x1CA4]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER PHAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA4,
+ },
+ [0x1CA5]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER KHAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA5,
+ },
+ [0x1CA6]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER GHAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA6,
+ },
+ [0x1CA7]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER QAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA7,
+ },
+ [0x1CA8]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER SHIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA8,
+ },
+ [0x1CA9]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER CHIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CA9,
+ },
+ [0x1CAA]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER CAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAA,
+ },
+ [0x1CAB]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER JIL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAB,
+ },
+ [0x1CAC]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER CIL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAC,
+ },
+ [0x1CAD]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER CHAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAD,
+ },
+ [0x1CAE]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER XAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAE,
+ },
+ [0x1CAF]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER JHAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CAF,
+ },
+ [0x1CB0]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HAE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB0,
+ },
+ [0x1CB1]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB1,
+ },
+ [0x1CB2]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HIE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB2,
+ },
+ [0x1CB3]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER WE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB3,
+ },
+ [0x1CB4]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB4,
+ },
+ [0x1CB5]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HOE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB5,
+ },
+ [0x1CB6]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER FI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB6,
+ },
+ [0x1CB7]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER YN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB7,
+ },
+ [0x1CB8]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER ELIFI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB8,
+ },
+ [0x1CB9]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CB9,
+ },
+ [0x1CBA]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER AIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CBA,
+ },
+ [0x1CBD]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER AEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CBD,
+ },
+ [0x1CBE]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CBE,
+ },
+ [0x1CBF]={
+ category="lu",
+ description="GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CBF,
+ },
[0x1CC0]={
category="po",
description="SUNDANESE PUNCTUATION BINDU SURYA",
@@ -65371,6 +65782,7 @@ characters.data={
linebreak="ai",
mathclass="ordinary",
mathname="rightangle",
+ mirror=0x2BFE,
unicodeslot=0x221F,
},
[0x2220]={
@@ -65382,6 +65794,7 @@ characters.data={
linebreak="ai",
mathclass="ordinary",
mathname="angle",
+ mirror=0x29A3,
unicodeslot=0x2220,
},
[0x2221]={
@@ -65391,6 +65804,7 @@ characters.data={
linebreak="al",
mathclass="ordinary",
mathname="measuredangle",
+ mirror=0x299B,
unicodeslot=0x2221,
},
[0x2222]={
@@ -65400,6 +65814,7 @@ characters.data={
linebreak="al",
mathclass="ordinary",
mathname="sphericalangle",
+ mirror=0x29A0,
synonyms={ "angle arc" },
unicodeslot=0x2222,
},
@@ -65430,6 +65845,7 @@ characters.data={
name="nmid",
},
},
+ mirror=0x2AEE,
specials={ "char", 0x2223, 0x338 },
unicodeslot=0x2224,
},
@@ -65834,6 +66250,7 @@ characters.data={
name="cong",
},
},
+ mirror=0x224C,
unicodeslot=0x2245,
},
[0x2246]={
@@ -65909,6 +66326,7 @@ characters.data={
direction="on",
linebreak="ai",
mathclass="relation",
+ mirror=0x2245,
unicodeslot=0x224C,
},
[0x224D]={
@@ -67110,6 +67528,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="multimap",
+ mirror=0x27DC,
unicodeslot=0x22B8,
},
[0x22B9]={
@@ -73450,8 +73869,8 @@ characters.data={
},
[0x25CC]={
adobename="dottedcircle",
- contextname="dottedcircle",
category="so",
+ contextname="dottedcircle",
description="DOTTED CIRCLE",
direction="on",
linebreak="al",
@@ -77559,6 +77978,7 @@ characters.data={
description="LEFT MULTIMAP",
direction="on",
linebreak="al",
+ mirror=0x22B8,
unicodeslot=0x27DC,
},
[0x27DD]={
@@ -80944,6 +81364,7 @@ characters.data={
description="MEASURED ANGLE OPENING LEFT",
direction="on",
linebreak="al",
+ mirror=0x2221,
unicodeslot=0x299B,
},
[0x299C]={
@@ -80979,6 +81400,7 @@ characters.data={
description="SPHERICAL ANGLE OPENING LEFT",
direction="on",
linebreak="al",
+ mirror=0x2222,
unicodeslot=0x29A0,
},
[0x29A1]={
@@ -81000,6 +81422,7 @@ characters.data={
description="REVERSED ANGLE",
direction="on",
linebreak="al",
+ mirror=0x2220,
unicodeslot=0x29A3,
},
[0x29A4]={
@@ -81007,6 +81430,7 @@ characters.data={
description="ANGLE WITH UNDERBAR",
direction="on",
linebreak="al",
+ mirror=0x29A5,
unicodeslot=0x29A4,
},
[0x29A5]={
@@ -81014,6 +81438,7 @@ characters.data={
description="REVERSED ANGLE WITH UNDERBAR",
direction="on",
linebreak="al",
+ mirror=0x29A4,
unicodeslot=0x29A5,
},
[0x29A6]={
@@ -81035,6 +81460,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT",
direction="on",
linebreak="al",
+ mirror=0x29A9,
unicodeslot=0x29A8,
},
[0x29A9]={
@@ -81042,6 +81468,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT",
direction="on",
linebreak="al",
+ mirror=0x29A8,
unicodeslot=0x29A9,
},
[0x29AA]={
@@ -81049,6 +81476,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT",
direction="on",
linebreak="al",
+ mirror=0x29AB,
unicodeslot=0x29AA,
},
[0x29AB]={
@@ -81056,6 +81484,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT",
direction="on",
linebreak="al",
+ mirror=0x29AA,
unicodeslot=0x29AB,
},
[0x29AC]={
@@ -81063,6 +81492,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP",
direction="on",
linebreak="al",
+ mirror=0x29AD,
unicodeslot=0x29AC,
},
[0x29AD]={
@@ -81070,6 +81500,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP",
direction="on",
linebreak="al",
+ mirror=0x29AC,
unicodeslot=0x29AD,
},
[0x29AE]={
@@ -81077,6 +81508,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN",
direction="on",
linebreak="al",
+ mirror=0x29AF,
unicodeslot=0x29AE,
},
[0x29AF]={
@@ -81084,6 +81516,7 @@ characters.data={
description="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN",
direction="on",
linebreak="al",
+ mirror=0x29AE,
unicodeslot=0x29AF,
},
[0x29B0]={
@@ -81502,6 +81935,7 @@ characters.data={
description="DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK",
direction="on",
linebreak="al",
+ mirror=0x29E9,
unicodeslot=0x29E8,
},
[0x29E9]={
@@ -81509,6 +81943,7 @@ characters.data={
description="DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK",
direction="on",
linebreak="al",
+ mirror=0x29E8,
unicodeslot=0x29E9,
},
[0x29EA]={
@@ -82608,6 +83043,7 @@ characters.data={
description="LESS-THAN WITH QUESTION MARK ABOVE",
direction="on",
linebreak="al",
+ mirror=0x2A7C,
unicodeslot=0x2A7B,
},
[0x2A7C]={
@@ -82615,6 +83051,7 @@ characters.data={
description="GREATER-THAN WITH QUESTION MARK ABOVE",
direction="on",
linebreak="al",
+ mirror=0x2A7B,
unicodeslot=0x2A7C,
},
[0x2A7D]={
@@ -82692,6 +83129,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="lessapprox",
+ mirror=0x2A86,
unicodeslot=0x2A85,
},
[0x2A86]={
@@ -82701,6 +83139,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="gtrapprox",
+ mirror=0x2A85,
unicodeslot=0x2A86,
},
[0x2A87]={
@@ -82710,6 +83149,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="lneq",
+ mirror=0x2A88,
unicodeslot=0x2A87,
},
[0x2A88]={
@@ -82719,6 +83159,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="rneq",
+ mirror=0x2A87,
unicodeslot=0x2A88,
},
[0x2A89]={
@@ -82728,6 +83169,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="lnapprox",
+ mirror=0x2A8A,
unicodeslot=0x2A89,
},
[0x2A8A]={
@@ -82737,6 +83179,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="gnapprox",
+ mirror=0x2A89,
unicodeslot=0x2A8A,
},
[0x2A8B]={
@@ -82766,6 +83209,7 @@ characters.data={
description="LESS-THAN ABOVE SIMILAR OR EQUAL",
direction="on",
linebreak="al",
+ mirror=0x2A8E,
unicodeslot=0x2A8D,
},
[0x2A8E]={
@@ -82773,6 +83217,7 @@ characters.data={
description="GREATER-THAN ABOVE SIMILAR OR EQUAL",
direction="on",
linebreak="al",
+ mirror=0x2A8D,
unicodeslot=0x2A8E,
},
[0x2A8F]={
@@ -82780,6 +83225,7 @@ characters.data={
description="LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN",
direction="on",
linebreak="al",
+ mirror=0x2A90,
unicodeslot=0x2A8F,
},
[0x2A90]={
@@ -82787,6 +83233,7 @@ characters.data={
description="GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN",
direction="on",
linebreak="al",
+ mirror=0x2A8F,
unicodeslot=0x2A90,
},
[0x2A91]={
@@ -82894,6 +83341,7 @@ characters.data={
description="SIMILAR OR LESS-THAN",
direction="on",
linebreak="al",
+ mirror=0x2A9E,
unicodeslot=0x2A9D,
variants={
[0xFE00]="with similar following the slant of the upper leg",
@@ -82904,6 +83352,7 @@ characters.data={
description="SIMILAR OR GREATER-THAN",
direction="on",
linebreak="al",
+ mirror=0x2A9D,
unicodeslot=0x2A9E,
variants={
[0xFE00]="with similar following the slant of the upper leg",
@@ -82914,6 +83363,7 @@ characters.data={
description="SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN",
direction="on",
linebreak="al",
+ mirror=0x2AA0,
unicodeslot=0x2A9F,
},
[0x2AA0]={
@@ -82921,6 +83371,7 @@ characters.data={
description="SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN",
direction="on",
linebreak="al",
+ mirror=0x2A9F,
unicodeslot=0x2AA0,
},
[0x2AA1]={
@@ -83065,6 +83516,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="precneq",
+ mirror=0x2AB2,
unicodeslot=0x2AB1,
},
[0x2AB2]={
@@ -83074,6 +83526,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="succneq",
+ mirror=0x2AB1,
unicodeslot=0x2AB2,
},
[0x2AB3]={
@@ -83103,6 +83556,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="precneqq",
+ mirror=0x2AB6,
unicodeslot=0x2AB5,
},
[0x2AB6]={
@@ -83112,6 +83566,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="succneqq",
+ mirror=0x2AB5,
unicodeslot=0x2AB6,
},
[0x2AB7]={
@@ -83121,6 +83576,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="precapprox",
+ mirror=0x2AB8,
unicodeslot=0x2AB7,
},
[0x2AB8]={
@@ -83130,6 +83586,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="succapprox",
+ mirror=0x2AB7,
unicodeslot=0x2AB8,
},
[0x2AB9]={
@@ -83139,6 +83596,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="precnapprox",
+ mirror=0x2ABA,
unicodeslot=0x2AB9,
},
[0x2ABA]={
@@ -83148,6 +83606,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="succnapprox",
+ mirror=0x2AB9,
unicodeslot=0x2ABA,
},
[0x2ABB]={
@@ -83255,6 +83714,7 @@ characters.data={
description="SUBSET OF ABOVE TILDE OPERATOR",
direction="on",
linebreak="al",
+ mirror=0x2AC8,
unicodeslot=0x2AC7,
},
[0x2AC8]={
@@ -83262,6 +83722,7 @@ characters.data={
description="SUPERSET OF ABOVE TILDE OPERATOR",
direction="on",
linebreak="al",
+ mirror=0x2AC7,
unicodeslot=0x2AC8,
},
[0x2AC9]={
@@ -83269,6 +83730,7 @@ characters.data={
description="SUBSET OF ABOVE ALMOST EQUAL TO",
direction="on",
linebreak="al",
+ mirror=0x2ACA,
unicodeslot=0x2AC9,
},
[0x2ACA]={
@@ -83276,6 +83738,7 @@ characters.data={
description="SUPERSET OF ABOVE ALMOST EQUAL TO",
direction="on",
linebreak="al",
+ mirror=0x2AC9,
unicodeslot=0x2ACA,
},
[0x2ACB]={
@@ -83285,6 +83748,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="subsetneqq",
+ mirror=0x2ACC,
unicodeslot=0x2ACB,
variants={
[0xFE00]="with stroke through bottom members",
@@ -83297,6 +83761,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="supsetneqq",
+ mirror=0x2ACB,
unicodeslot=0x2ACC,
variants={
[0xFE00]="with stroke through bottom members",
@@ -83559,6 +84024,7 @@ characters.data={
description="DOES NOT DIVIDE WITH REVERSED NEGATION SLASH",
direction="on",
linebreak="al",
+ mirror=0x2224,
unicodeslot=0x2AEE,
},
[0x2AEF]={
@@ -84998,6 +85464,27 @@ characters.data={
synonyms={ "escape" },
unicodeslot=0x2BB9,
},
+ [0x2BBA]={
+ category="so",
+ description="OVERLAPPING WHITE SQUARES",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BBA,
+ },
+ [0x2BBB]={
+ category="so",
+ description="OVERLAPPING WHITE AND BLACK SQUARES",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BBB,
+ },
+ [0x2BBC]={
+ category="so",
+ description="OVERLAPPING BLACK SQUARES",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BBC,
+ },
[0x2BBD]={
category="so",
description="BALLOT BOX WITH LIGHT X",
@@ -85145,6 +85632,181 @@ characters.data={
linebreak="al",
unicodeslot=0x2BD2,
},
+ [0x2BD3]={
+ category="so",
+ description="PLUTO FORM TWO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD3,
+ },
+ [0x2BD4]={
+ category="so",
+ description="PLUTO FORM THREE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD4,
+ },
+ [0x2BD5]={
+ category="so",
+ description="PLUTO FORM FOUR",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD5,
+ },
+ [0x2BD6]={
+ category="so",
+ description="PLUTO FORM FIVE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD6,
+ },
+ [0x2BD7]={
+ category="so",
+ description="TRANSPLUTO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD7,
+ },
+ [0x2BD8]={
+ category="so",
+ description="PROSERPINA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD8,
+ },
+ [0x2BD9]={
+ category="so",
+ description="ASTRAEA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BD9,
+ },
+ [0x2BDA]={
+ category="so",
+ description="HYGIEA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDA,
+ },
+ [0x2BDB]={
+ category="so",
+ description="PHOLUS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDB,
+ },
+ [0x2BDC]={
+ category="so",
+ description="NESSUS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDC,
+ },
+ [0x2BDD]={
+ category="so",
+ description="WHITE MOON SELENA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDD,
+ },
+ [0x2BDE]={
+ category="so",
+ description="BLACK DIAMOND ON CROSS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDE,
+ },
+ [0x2BDF]={
+ category="so",
+ description="TRUE LIGHT MOON ARTA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BDF,
+ },
+ [0x2BE0]={
+ category="so",
+ description="CUPIDO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE0,
+ },
+ [0x2BE1]={
+ category="so",
+ description="HADES",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE1,
+ },
+ [0x2BE2]={
+ category="so",
+ description="ZEUS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE2,
+ },
+ [0x2BE3]={
+ category="so",
+ description="KRONOS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE3,
+ },
+ [0x2BE4]={
+ category="so",
+ description="APOLLON",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE4,
+ },
+ [0x2BE5]={
+ category="so",
+ description="ADMETOS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE5,
+ },
+ [0x2BE6]={
+ category="so",
+ description="VULCANUS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE6,
+ },
+ [0x2BE7]={
+ category="so",
+ description="POSEIDON",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE7,
+ },
+ [0x2BE8]={
+ category="so",
+ description="LEFT HALF BLACK STAR",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE8,
+ },
+ [0x2BE9]={
+ category="so",
+ description="RIGHT HALF BLACK STAR",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BE9,
+ },
+ [0x2BEA]={
+ category="so",
+ description="STAR WITH LEFT HALF BLACK",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEA,
+ },
+ [0x2BEB]={
+ category="so",
+ description="STAR WITH RIGHT HALF BLACK",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEB,
+ },
[0x2BEC]={
category="so",
description="LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
@@ -85173,6 +85835,112 @@ characters.data={
linebreak="al",
unicodeslot=0x2BEF,
},
+ [0x2BF0]={
+ category="so",
+ description="ERIS FORM ONE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF0,
+ },
+ [0x2BF1]={
+ category="so",
+ description="ERIS FORM TWO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF1,
+ },
+ [0x2BF2]={
+ category="so",
+ description="SEDNA",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF2,
+ },
+ [0x2BF3]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF3,
+ },
+ [0x2BF4]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL NOVILE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF4,
+ },
+ [0x2BF5]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL QUINTILE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF5,
+ },
+ [0x2BF6]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL BINOVILE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF6,
+ },
+ [0x2BF7]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL SENTAGON",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF7,
+ },
+ [0x2BF8]={
+ category="so",
+ description="RUSSIAN ASTROLOGICAL SYMBOL TREDECILE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF8,
+ },
+ [0x2BF9]={
+ category="so",
+ description="EQUALS SIGN WITH INFINITY BELOW",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BF9,
+ },
+ [0x2BFA]={
+ category="so",
+ description="UNITED SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BFA,
+ },
+ [0x2BFB]={
+ category="so",
+ description="SEPARATED SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BFB,
+ },
+ [0x2BFC]={
+ category="so",
+ description="DOUBLED SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BFC,
+ },
+ [0x2BFD]={
+ category="so",
+ description="PASSED SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BFD,
+ },
+ [0x2BFE]={
+ category="so",
+ description="REVERSED RIGHT ANGLE",
+ direction="on",
+ linebreak="al",
+ mirror=0x221F,
+ unicodeslot=0x2BFE,
+ },
[0x2C00]={
category="lu",
description="GLAGOLITIC CAPITAL LETTER AZU",
@@ -89226,6 +89994,41 @@ characters.data={
linebreak="ba",
unicodeslot=0x2E49,
},
+ [0x2E4A]={
+ category="po",
+ description="DOTTED SOLIDUS",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E4A,
+ },
+ [0x2E4B]={
+ category="po",
+ description="TRIPLE DAGGER",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2E4B,
+ },
+ [0x2E4C]={
+ category="po",
+ description="MEDIEVAL COMMA",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E4C,
+ },
+ [0x2E4D]={
+ category="po",
+ description="PARAGRAPHUS MARK",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2E4D,
+ },
+ [0x2E4E]={
+ category="po",
+ description="PUNCTUS ELEVATUS MARK",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E4E,
+ },
[0x2E80]={
category="so",
cjkwd="w",
@@ -95434,6 +96237,14 @@ characters.data={
linebreak="id",
unicodeslot=0x312E,
},
+ [0x312F]={
+ category="lo",
+ cjkwd="w",
+ description="BOPOMOFO LETTER NN",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x312F,
+ },
[0x3131]={
adobename="kiyeokkorean",
category="lo",
@@ -117174,6 +117985,13 @@ characters.data={
linebreak="al",
unicodeslot=0xA7AE,
},
+ [0xA7AF]={
+ category="ll",
+ description="LATIN LETTER SMALL CAPITAL Q",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7AF,
+ },
[0xA7B0]={
category="lu",
description="LATIN CAPITAL LETTER TURNED K",
@@ -117230,6 +118048,20 @@ characters.data={
linebreak="al",
unicodeslot=0xA7B7,
},
+ [0xA7B8]={
+ category="lu",
+ description="LATIN CAPITAL LETTER U WITH STROKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B8,
+ },
+ [0xA7B9]={
+ category="ll",
+ description="LATIN SMALL LETTER U WITH STROKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B9,
+ },
[0xA7F7]={
category="lo",
description="LATIN EPIGRAPHIC LETTER SIDEWAYS I",
@@ -118975,6 +119807,20 @@ characters.data={
linebreak="al",
unicodeslot=0xA8FD,
},
+ [0xA8FE]={
+ category="lo",
+ description="DEVANAGARI LETTER AY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA8FE,
+ },
+ [0xA8FF]={
+ category="mn",
+ description="DEVANAGARI VOWEL SIGN AY",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xA8FF,
+ },
[0xA900]={
category="nd",
description="KAYAH LI DIGIT ZERO",
@@ -136230,6 +137076,9 @@ characters.data={
linebreak="id",
specials={ "wide", 0x30 },
unicodeslot=0xFF10,
+ variants={
+ [0xFE00]="short diagonal stroke form",
+ },
},
[0xFF11]={
adobename="onemonospace",
@@ -150982,6 +151831,20 @@ characters.data={
linebreak="al",
unicodeslot=0x10A33,
},
+ [0x10A34]={
+ category="lo",
+ description="KHAROSHTHI LETTER TTTA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10A34,
+ },
+ [0x10A35]={
+ category="lo",
+ description="KHAROSHTHI LETTER VHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10A35,
+ },
[0x10A38]={
category="mn",
combining=0xE6,
@@ -151070,6 +151933,13 @@ characters.data={
linebreak="al",
unicodeslot=0x10A47,
},
+ [0x10A48]={
+ category="no",
+ description="KHAROSHTHI FRACTION ONE HALF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10A48,
+ },
[0x10A50]={
category="po",
description="KHAROSHTHI PUNCTUATION DOT",
@@ -154318,6 +155188,396 @@ characters.data={
linebreak="al",
unicodeslot=0x10CFF,
},
+ [0x10D00]={
+ arabic="l",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER A",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D00,
+ },
+ [0x10D01]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER BA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D01,
+ },
+ [0x10D02]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER PA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D02,
+ },
+ [0x10D03]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER TA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D03,
+ },
+ [0x10D04]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER TTA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D04,
+ },
+ [0x10D05]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER JA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D05,
+ },
+ [0x10D06]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER CA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D06,
+ },
+ [0x10D07]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER HA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D07,
+ },
+ [0x10D08]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER KHA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D08,
+ },
+ [0x10D09]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER FA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D09,
+ },
+ [0x10D0A]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER DA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0A,
+ },
+ [0x10D0B]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER DDA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0B,
+ },
+ [0x10D0C]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER RA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0C,
+ },
+ [0x10D0D]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER RRA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0D,
+ },
+ [0x10D0E]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER ZA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0E,
+ },
+ [0x10D0F]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER SA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D0F,
+ },
+ [0x10D10]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER SHA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D10,
+ },
+ [0x10D11]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER KA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D11,
+ },
+ [0x10D12]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER GA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D12,
+ },
+ [0x10D13]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER LA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D13,
+ },
+ [0x10D14]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER MA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D14,
+ },
+ [0x10D15]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER NA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D15,
+ },
+ [0x10D16]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER WA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D16,
+ },
+ [0x10D17]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER KINNA WA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D17,
+ },
+ [0x10D18]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER YA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D18,
+ },
+ [0x10D19]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER KINNA YA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D19,
+ },
+ [0x10D1A]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER NGA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1A,
+ },
+ [0x10D1B]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER NYA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1B,
+ },
+ [0x10D1C]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA LETTER VA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1C,
+ },
+ [0x10D1D]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA VOWEL A",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1D,
+ },
+ [0x10D1E]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA VOWEL I",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1E,
+ },
+ [0x10D1F]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA VOWEL U",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D1F,
+ },
+ [0x10D20]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA VOWEL E",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D20,
+ },
+ [0x10D21]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA VOWEL O",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D21,
+ },
+ [0x10D22]={
+ arabic="r",
+ category="lo",
+ description="HANIFI ROHINGYA MARK SAKIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D22,
+ },
+ [0x10D23]={
+ arabic="d",
+ category="lo",
+ description="HANIFI ROHINGYA MARK NA KHONNA",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10D23,
+ },
+ [0x10D24]={
+ category="mn",
+ combining=0xE6,
+ description="HANIFI ROHINGYA SIGN HARBAHAY",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10D24,
+ },
+ [0x10D25]={
+ category="mn",
+ combining=0xE6,
+ description="HANIFI ROHINGYA SIGN TAHALA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10D25,
+ },
+ [0x10D26]={
+ category="mn",
+ combining=0xE6,
+ description="HANIFI ROHINGYA SIGN TANA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10D26,
+ },
+ [0x10D27]={
+ category="mn",
+ combining=0xE6,
+ description="HANIFI ROHINGYA SIGN TASSI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10D27,
+ },
+ [0x10D30]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT ZERO",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D30,
+ },
+ [0x10D31]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT ONE",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D31,
+ },
+ [0x10D32]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT TWO",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D32,
+ },
+ [0x10D33]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT THREE",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D33,
+ },
+ [0x10D34]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT FOUR",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D34,
+ },
+ [0x10D35]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT FIVE",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D35,
+ },
+ [0x10D36]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT SIX",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D36,
+ },
+ [0x10D37]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT SEVEN",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D37,
+ },
+ [0x10D38]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT EIGHT",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D38,
+ },
+ [0x10D39]={
+ category="nd",
+ description="HANIFI ROHINGYA DIGIT NINE",
+ direction="an",
+ linebreak="nu",
+ unicodeslot=0x10D39,
+ },
[0x10E60]={
category="no",
description="RUMI DIGIT ONE",
@@ -154535,6 +155795,617 @@ characters.data={
linebreak="al",
unicodeslot=0x10E7E,
},
+ [0x10F00]={
+ category="lo",
+ description="OLD SOGDIAN LETTER ALEPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F00,
+ },
+ [0x10F01]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL ALEPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F01,
+ },
+ [0x10F02]={
+ category="lo",
+ description="OLD SOGDIAN LETTER BETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F02,
+ },
+ [0x10F03]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL BETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F03,
+ },
+ [0x10F04]={
+ category="lo",
+ description="OLD SOGDIAN LETTER GIMEL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F04,
+ },
+ [0x10F05]={
+ category="lo",
+ description="OLD SOGDIAN LETTER HE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F05,
+ },
+ [0x10F06]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL HE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F06,
+ },
+ [0x10F07]={
+ category="lo",
+ description="OLD SOGDIAN LETTER WAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F07,
+ },
+ [0x10F08]={
+ category="lo",
+ description="OLD SOGDIAN LETTER ZAYIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F08,
+ },
+ [0x10F09]={
+ category="lo",
+ description="OLD SOGDIAN LETTER HETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F09,
+ },
+ [0x10F0A]={
+ category="lo",
+ description="OLD SOGDIAN LETTER YODH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0A,
+ },
+ [0x10F0B]={
+ category="lo",
+ description="OLD SOGDIAN LETTER KAPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0B,
+ },
+ [0x10F0C]={
+ category="lo",
+ description="OLD SOGDIAN LETTER LAMEDH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0C,
+ },
+ [0x10F0D]={
+ category="lo",
+ description="OLD SOGDIAN LETTER MEM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0D,
+ },
+ [0x10F0E]={
+ category="lo",
+ description="OLD SOGDIAN LETTER NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0E,
+ },
+ [0x10F0F]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F0F,
+ },
+ [0x10F10]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F10,
+ },
+ [0x10F11]={
+ category="lo",
+ description="OLD SOGDIAN LETTER SAMEKH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F11,
+ },
+ [0x10F12]={
+ category="lo",
+ description="OLD SOGDIAN LETTER AYIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F12,
+ },
+ [0x10F13]={
+ category="lo",
+ description="OLD SOGDIAN LETTER ALTERNATE AYIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F13,
+ },
+ [0x10F14]={
+ category="lo",
+ description="OLD SOGDIAN LETTER PE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F14,
+ },
+ [0x10F15]={
+ category="lo",
+ description="OLD SOGDIAN LETTER SADHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F15,
+ },
+ [0x10F16]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL SADHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F16,
+ },
+ [0x10F17]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F17,
+ },
+ [0x10F18]={
+ category="lo",
+ description="OLD SOGDIAN LETTER RESH-AYIN-DALETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F18,
+ },
+ [0x10F19]={
+ category="lo",
+ description="OLD SOGDIAN LETTER SHIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F19,
+ },
+ [0x10F1A]={
+ category="lo",
+ description="OLD SOGDIAN LETTER TAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1A,
+ },
+ [0x10F1B]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL TAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1B,
+ },
+ [0x10F1C]={
+ category="lo",
+ description="OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1C,
+ },
+ [0x10F1D]={
+ category="no",
+ description="OLD SOGDIAN NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1D,
+ },
+ [0x10F1E]={
+ category="no",
+ description="OLD SOGDIAN NUMBER TWO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1E,
+ },
+ [0x10F1F]={
+ category="no",
+ description="OLD SOGDIAN NUMBER THREE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F1F,
+ },
+ [0x10F20]={
+ category="no",
+ description="OLD SOGDIAN NUMBER FOUR",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F20,
+ },
+ [0x10F21]={
+ category="no",
+ description="OLD SOGDIAN NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F21,
+ },
+ [0x10F22]={
+ category="no",
+ description="OLD SOGDIAN NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F22,
+ },
+ [0x10F23]={
+ category="no",
+ description="OLD SOGDIAN NUMBER TWENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F23,
+ },
+ [0x10F24]={
+ category="no",
+ description="OLD SOGDIAN NUMBER THIRTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F24,
+ },
+ [0x10F25]={
+ category="no",
+ description="OLD SOGDIAN NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F25,
+ },
+ [0x10F26]={
+ category="no",
+ description="OLD SOGDIAN FRACTION ONE HALF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F26,
+ },
+ [0x10F27]={
+ category="lo",
+ description="OLD SOGDIAN LIGATURE AYIN-DALETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10F27,
+ },
+ [0x10F30]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER ALEPH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F30,
+ },
+ [0x10F31]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER BETH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F31,
+ },
+ [0x10F32]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER GIMEL",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F32,
+ },
+ [0x10F33]={
+ arabic="r",
+ category="lo",
+ description="SOGDIAN LETTER HE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F33,
+ },
+ [0x10F34]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER WAW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F34,
+ },
+ [0x10F35]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER ZAYIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F35,
+ },
+ [0x10F36]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER HETH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F36,
+ },
+ [0x10F37]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER YODH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F37,
+ },
+ [0x10F38]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER KAPH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F38,
+ },
+ [0x10F39]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER LAMEDH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F39,
+ },
+ [0x10F3A]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER MEM",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3A,
+ },
+ [0x10F3B]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER NUN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3B,
+ },
+ [0x10F3C]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER SAMEKH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3C,
+ },
+ [0x10F3D]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER AYIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3D,
+ },
+ [0x10F3E]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER PE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3E,
+ },
+ [0x10F3F]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER SADHE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F3F,
+ },
+ [0x10F40]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER RESH-AYIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F40,
+ },
+ [0x10F41]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER SHIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F41,
+ },
+ [0x10F42]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER TAW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F42,
+ },
+ [0x10F43]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER FETH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F43,
+ },
+ [0x10F44]={
+ arabic="d",
+ category="lo",
+ description="SOGDIAN LETTER LESH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F44,
+ },
+ [0x10F45]={
+ arabic="u",
+ category="lo",
+ description="SOGDIAN INDEPENDENT SHIN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F45,
+ },
+ [0x10F46]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING DOT BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F46,
+ },
+ [0x10F47]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING TWO DOTS BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F47,
+ },
+ [0x10F48]={
+ category="mn",
+ combining=0xE6,
+ description="SOGDIAN COMBINING DOT ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F48,
+ },
+ [0x10F49]={
+ category="mn",
+ combining=0xE6,
+ description="SOGDIAN COMBINING TWO DOTS ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F49,
+ },
+ [0x10F4A]={
+ category="mn",
+ combining=0xE6,
+ description="SOGDIAN COMBINING CURVE ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4A,
+ },
+ [0x10F4B]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING CURVE BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4B,
+ },
+ [0x10F4C]={
+ category="mn",
+ combining=0xE6,
+ description="SOGDIAN COMBINING HOOK ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4C,
+ },
+ [0x10F4D]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING HOOK BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4D,
+ },
+ [0x10F4E]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING LONG HOOK BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4E,
+ },
+ [0x10F4F]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING RESH BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F4F,
+ },
+ [0x10F50]={
+ category="mn",
+ combining=0xDC,
+ description="SOGDIAN COMBINING STROKE BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10F50,
+ },
+ [0x10F51]={
+ arabic="d",
+ category="no",
+ description="SOGDIAN NUMBER ONE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F51,
+ },
+ [0x10F52]={
+ arabic="d",
+ category="no",
+ description="SOGDIAN NUMBER TEN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F52,
+ },
+ [0x10F53]={
+ arabic="d",
+ category="no",
+ description="SOGDIAN NUMBER TWENTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F53,
+ },
+ [0x10F54]={
+ arabic="r",
+ category="no",
+ description="SOGDIAN NUMBER ONE HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F54,
+ },
+ [0x10F55]={
+ category="po",
+ description="SOGDIAN PUNCTUATION TWO VERTICAL BARS",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F55,
+ },
+ [0x10F56]={
+ category="po",
+ description="SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F56,
+ },
+ [0x10F57]={
+ category="po",
+ description="SOGDIAN PUNCTUATION CIRCLE WITH DOT",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F57,
+ },
+ [0x10F58]={
+ category="po",
+ description="SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F58,
+ },
+ [0x10F59]={
+ category="po",
+ description="SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x10F59,
+ },
[0x11000]={
category="mc",
description="BRAHMI SIGN CANDRABINDU",
@@ -155733,6 +157604,7 @@ characters.data={
unicodeslot=0x110BC,
},
[0x110BD]={
+ arabic="u",
category="cf",
description="KAITHI NUMBER SIGN",
direction="l",
@@ -155767,6 +157639,14 @@ characters.data={
linebreak="ba",
unicodeslot=0x110C1,
},
+ [0x110CD]={
+ arabic="u",
+ category="cf",
+ description="KAITHI NUMBER SIGN ABOVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x110CD,
+ },
[0x110D0]={
category="lo",
description="SORA SOMPENG LETTER SAH",
@@ -156488,6 +158368,27 @@ characters.data={
linebreak="ba",
unicodeslot=0x11143,
},
+ [0x11144]={
+ category="lo",
+ description="CHAKMA LETTER LHAA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11144,
+ },
+ [0x11145]={
+ category="mc",
+ description="CHAKMA VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11145,
+ },
+ [0x11146]={
+ category="mc",
+ description="CHAKMA VOWEL SIGN EI",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11146,
+ },
[0x11150]={
category="lo",
description="MAHAJANI LETTER A",
@@ -157277,8 +159178,8 @@ characters.data={
[0x111C9]={
category="po",
description="SHARADA SANDHI MARK",
- direction="l",
- linebreak="al",
+ direction="nsm",
+ linebreak="cm",
unicodeslot=0x111C9,
},
[0x111CA]={
@@ -159099,6 +161000,14 @@ characters.data={
linebreak="al",
unicodeslot=0x11339,
},
+ [0x1133B]={
+ category="mn",
+ combining=0x7,
+ description="COMBINING BINDU BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1133B,
+ },
[0x1133C]={
category="mn",
combining=0x7,
@@ -160006,6 +161915,14 @@ characters.data={
linebreak="al",
unicodeslot=0x1145D,
},
+ [0x1145E]={
+ category="mn",
+ combining=0xE6,
+ description="NEWA SANDHI MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1145E,
+ },
[0x11480]={
category="lo",
description="TIRHUTA ANJI",
@@ -162524,6 +164441,13 @@ characters.data={
linebreak="sa",
unicodeslot=0x11719,
},
+ [0x1171A]={
+ category="lo",
+ description="AHOM LETTER ALTERNATE BA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1171A,
+ },
[0x1171D]={
category="mn",
description="AHOM CONSONANT SIGN MEDIAL LA",
@@ -162742,6 +164666,428 @@ characters.data={
linebreak="sa",
unicodeslot=0x1173F,
},
+ [0x11800]={
+ category="lo",
+ description="DOGRA LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11800,
+ },
+ [0x11801]={
+ category="lo",
+ description="DOGRA LETTER AA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11801,
+ },
+ [0x11802]={
+ category="lo",
+ description="DOGRA LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11802,
+ },
+ [0x11803]={
+ category="lo",
+ description="DOGRA LETTER II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11803,
+ },
+ [0x11804]={
+ category="lo",
+ description="DOGRA LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11804,
+ },
+ [0x11805]={
+ category="lo",
+ description="DOGRA LETTER UU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11805,
+ },
+ [0x11806]={
+ category="lo",
+ description="DOGRA LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11806,
+ },
+ [0x11807]={
+ category="lo",
+ description="DOGRA LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11807,
+ },
+ [0x11808]={
+ category="lo",
+ description="DOGRA LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11808,
+ },
+ [0x11809]={
+ category="lo",
+ description="DOGRA LETTER AU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11809,
+ },
+ [0x1180A]={
+ category="lo",
+ description="DOGRA LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180A,
+ },
+ [0x1180B]={
+ category="lo",
+ description="DOGRA LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180B,
+ },
+ [0x1180C]={
+ category="lo",
+ description="DOGRA LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180C,
+ },
+ [0x1180D]={
+ category="lo",
+ description="DOGRA LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180D,
+ },
+ [0x1180E]={
+ category="lo",
+ description="DOGRA LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180E,
+ },
+ [0x1180F]={
+ category="lo",
+ description="DOGRA LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1180F,
+ },
+ [0x11810]={
+ category="lo",
+ description="DOGRA LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11810,
+ },
+ [0x11811]={
+ category="lo",
+ description="DOGRA LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11811,
+ },
+ [0x11812]={
+ category="lo",
+ description="DOGRA LETTER JHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11812,
+ },
+ [0x11813]={
+ category="lo",
+ description="DOGRA LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11813,
+ },
+ [0x11814]={
+ category="lo",
+ description="DOGRA LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11814,
+ },
+ [0x11815]={
+ category="lo",
+ description="DOGRA LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11815,
+ },
+ [0x11816]={
+ category="lo",
+ description="DOGRA LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11816,
+ },
+ [0x11817]={
+ category="lo",
+ description="DOGRA LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11817,
+ },
+ [0x11818]={
+ category="lo",
+ description="DOGRA LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11818,
+ },
+ [0x11819]={
+ category="lo",
+ description="DOGRA LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11819,
+ },
+ [0x1181A]={
+ category="lo",
+ description="DOGRA LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181A,
+ },
+ [0x1181B]={
+ category="lo",
+ description="DOGRA LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181B,
+ },
+ [0x1181C]={
+ category="lo",
+ description="DOGRA LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181C,
+ },
+ [0x1181D]={
+ category="lo",
+ description="DOGRA LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181D,
+ },
+ [0x1181E]={
+ category="lo",
+ description="DOGRA LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181E,
+ },
+ [0x1181F]={
+ category="lo",
+ description="DOGRA LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1181F,
+ },
+ [0x11820]={
+ category="lo",
+ description="DOGRA LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11820,
+ },
+ [0x11821]={
+ category="lo",
+ description="DOGRA LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11821,
+ },
+ [0x11822]={
+ category="lo",
+ description="DOGRA LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11822,
+ },
+ [0x11823]={
+ category="lo",
+ description="DOGRA LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11823,
+ },
+ [0x11824]={
+ category="lo",
+ description="DOGRA LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11824,
+ },
+ [0x11825]={
+ category="lo",
+ description="DOGRA LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11825,
+ },
+ [0x11826]={
+ category="lo",
+ description="DOGRA LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11826,
+ },
+ [0x11827]={
+ category="lo",
+ description="DOGRA LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11827,
+ },
+ [0x11828]={
+ category="lo",
+ description="DOGRA LETTER SSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11828,
+ },
+ [0x11829]={
+ category="lo",
+ description="DOGRA LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11829,
+ },
+ [0x1182A]={
+ category="lo",
+ description="DOGRA LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1182A,
+ },
+ [0x1182B]={
+ category="lo",
+ description="DOGRA LETTER RRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1182B,
+ },
+ [0x1182C]={
+ category="mc",
+ description="DOGRA VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x1182C,
+ },
+ [0x1182D]={
+ category="mc",
+ description="DOGRA VOWEL SIGN I",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x1182D,
+ },
+ [0x1182E]={
+ category="mc",
+ description="DOGRA VOWEL SIGN II",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x1182E,
+ },
+ [0x1182F]={
+ category="mn",
+ description="DOGRA VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1182F,
+ },
+ [0x11830]={
+ category="mn",
+ description="DOGRA VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11830,
+ },
+ [0x11831]={
+ category="mn",
+ description="DOGRA VOWEL SIGN VOCALIC R",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11831,
+ },
+ [0x11832]={
+ category="mn",
+ description="DOGRA VOWEL SIGN VOCALIC RR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11832,
+ },
+ [0x11833]={
+ category="mn",
+ description="DOGRA VOWEL SIGN E",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11833,
+ },
+ [0x11834]={
+ category="mn",
+ description="DOGRA VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11834,
+ },
+ [0x11835]={
+ category="mn",
+ description="DOGRA VOWEL SIGN O",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11835,
+ },
+ [0x11836]={
+ category="mn",
+ description="DOGRA VOWEL SIGN AU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11836,
+ },
+ [0x11837]={
+ category="mn",
+ description="DOGRA SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11837,
+ },
+ [0x11838]={
+ category="mc",
+ description="DOGRA SIGN VISARGA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11838,
+ },
+ [0x11839]={
+ category="mn",
+ combining=0x9,
+ description="DOGRA SIGN VIRAMA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11839,
+ },
+ [0x1183A]={
+ category="mn",
+ combining=0x7,
+ description="DOGRA SIGN NUKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1183A,
+ },
+ [0x1183B]={
+ category="po",
+ description="DOGRA ABBREVIATION SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1183B,
+ },
[0x118A0]={
category="lu",
description="WARANG CITI CAPITAL LETTER NGAA",
@@ -164362,6 +166708,13 @@ characters.data={
linebreak="ba",
unicodeslot=0x11A9C,
},
+ [0x11A9D]={
+ category="lo",
+ description="SOYOMBO MARK PLUTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11A9D,
+ },
[0x11A9E]={
category="po",
description="SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME",
@@ -166480,6 +168833,623 @@ characters.data={
linebreak="nu",
unicodeslot=0x11D59,
},
+ [0x11D60]={
+ category="lo",
+ description="GUNJALA GONDI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D60,
+ },
+ [0x11D61]={
+ category="lo",
+ description="GUNJALA GONDI LETTER AA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D61,
+ },
+ [0x11D62]={
+ category="lo",
+ description="GUNJALA GONDI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D62,
+ },
+ [0x11D63]={
+ category="lo",
+ description="GUNJALA GONDI LETTER II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D63,
+ },
+ [0x11D64]={
+ category="lo",
+ description="GUNJALA GONDI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D64,
+ },
+ [0x11D65]={
+ category="lo",
+ description="GUNJALA GONDI LETTER UU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D65,
+ },
+ [0x11D67]={
+ category="lo",
+ description="GUNJALA GONDI LETTER EE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D67,
+ },
+ [0x11D68]={
+ category="lo",
+ description="GUNJALA GONDI LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D68,
+ },
+ [0x11D6A]={
+ category="lo",
+ description="GUNJALA GONDI LETTER OO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6A,
+ },
+ [0x11D6B]={
+ category="lo",
+ description="GUNJALA GONDI LETTER AU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6B,
+ },
+ [0x11D6C]={
+ category="lo",
+ description="GUNJALA GONDI LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6C,
+ },
+ [0x11D6D]={
+ category="lo",
+ description="GUNJALA GONDI LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6D,
+ },
+ [0x11D6E]={
+ category="lo",
+ description="GUNJALA GONDI LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6E,
+ },
+ [0x11D6F]={
+ category="lo",
+ description="GUNJALA GONDI LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D6F,
+ },
+ [0x11D70]={
+ category="lo",
+ description="GUNJALA GONDI LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D70,
+ },
+ [0x11D71]={
+ category="lo",
+ description="GUNJALA GONDI LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D71,
+ },
+ [0x11D72]={
+ category="lo",
+ description="GUNJALA GONDI LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D72,
+ },
+ [0x11D73]={
+ category="lo",
+ description="GUNJALA GONDI LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D73,
+ },
+ [0x11D74]={
+ category="lo",
+ description="GUNJALA GONDI LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D74,
+ },
+ [0x11D75]={
+ category="lo",
+ description="GUNJALA GONDI LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D75,
+ },
+ [0x11D76]={
+ category="lo",
+ description="GUNJALA GONDI LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D76,
+ },
+ [0x11D77]={
+ category="lo",
+ description="GUNJALA GONDI LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D77,
+ },
+ [0x11D78]={
+ category="lo",
+ description="GUNJALA GONDI LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D78,
+ },
+ [0x11D79]={
+ category="lo",
+ description="GUNJALA GONDI LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D79,
+ },
+ [0x11D7A]={
+ category="lo",
+ description="GUNJALA GONDI LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7A,
+ },
+ [0x11D7B]={
+ category="lo",
+ description="GUNJALA GONDI LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7B,
+ },
+ [0x11D7C]={
+ category="lo",
+ description="GUNJALA GONDI LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7C,
+ },
+ [0x11D7D]={
+ category="lo",
+ description="GUNJALA GONDI LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7D,
+ },
+ [0x11D7E]={
+ category="lo",
+ description="GUNJALA GONDI LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7E,
+ },
+ [0x11D7F]={
+ category="lo",
+ description="GUNJALA GONDI LETTER LLA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D7F,
+ },
+ [0x11D80]={
+ category="lo",
+ description="GUNJALA GONDI LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D80,
+ },
+ [0x11D81]={
+ category="lo",
+ description="GUNJALA GONDI LETTER JHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D81,
+ },
+ [0x11D82]={
+ category="lo",
+ description="GUNJALA GONDI LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D82,
+ },
+ [0x11D83]={
+ category="lo",
+ description="GUNJALA GONDI LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D83,
+ },
+ [0x11D84]={
+ category="lo",
+ description="GUNJALA GONDI LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D84,
+ },
+ [0x11D85]={
+ category="lo",
+ description="GUNJALA GONDI LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D85,
+ },
+ [0x11D86]={
+ category="lo",
+ description="GUNJALA GONDI LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D86,
+ },
+ [0x11D87]={
+ category="lo",
+ description="GUNJALA GONDI LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D87,
+ },
+ [0x11D88]={
+ category="lo",
+ description="GUNJALA GONDI LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D88,
+ },
+ [0x11D89]={
+ category="lo",
+ description="GUNJALA GONDI LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D89,
+ },
+ [0x11D8A]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D8A,
+ },
+ [0x11D8B]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN I",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D8B,
+ },
+ [0x11D8C]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN II",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D8C,
+ },
+ [0x11D8D]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN U",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D8D,
+ },
+ [0x11D8E]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN UU",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D8E,
+ },
+ [0x11D90]={
+ category="mn",
+ description="GUNJALA GONDI VOWEL SIGN EE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11D90,
+ },
+ [0x11D91]={
+ category="mn",
+ description="GUNJALA GONDI VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11D91,
+ },
+ [0x11D93]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN OO",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D93,
+ },
+ [0x11D94]={
+ category="mc",
+ description="GUNJALA GONDI VOWEL SIGN AU",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D94,
+ },
+ [0x11D95]={
+ category="mn",
+ description="GUNJALA GONDI SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11D95,
+ },
+ [0x11D96]={
+ category="mc",
+ description="GUNJALA GONDI SIGN VISARGA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11D96,
+ },
+ [0x11D97]={
+ category="mn",
+ combining=0x9,
+ description="GUNJALA GONDI VIRAMA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11D97,
+ },
+ [0x11D98]={
+ category="lo",
+ description="GUNJALA GONDI OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11D98,
+ },
+ [0x11DA0]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA0,
+ },
+ [0x11DA1]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA1,
+ },
+ [0x11DA2]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA2,
+ },
+ [0x11DA3]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA3,
+ },
+ [0x11DA4]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA4,
+ },
+ [0x11DA5]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA5,
+ },
+ [0x11DA6]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA6,
+ },
+ [0x11DA7]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA7,
+ },
+ [0x11DA8]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA8,
+ },
+ [0x11DA9]={
+ category="nd",
+ description="GUNJALA GONDI DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11DA9,
+ },
+ [0x11EE0]={
+ category="lo",
+ description="MAKASAR LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE0,
+ },
+ [0x11EE1]={
+ category="lo",
+ description="MAKASAR LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE1,
+ },
+ [0x11EE2]={
+ category="lo",
+ description="MAKASAR LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE2,
+ },
+ [0x11EE3]={
+ category="lo",
+ description="MAKASAR LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE3,
+ },
+ [0x11EE4]={
+ category="lo",
+ description="MAKASAR LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE4,
+ },
+ [0x11EE5]={
+ category="lo",
+ description="MAKASAR LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE5,
+ },
+ [0x11EE6]={
+ category="lo",
+ description="MAKASAR LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE6,
+ },
+ [0x11EE7]={
+ category="lo",
+ description="MAKASAR LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE7,
+ },
+ [0x11EE8]={
+ category="lo",
+ description="MAKASAR LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE8,
+ },
+ [0x11EE9]={
+ category="lo",
+ description="MAKASAR LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EE9,
+ },
+ [0x11EEA]={
+ category="lo",
+ description="MAKASAR LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EEA,
+ },
+ [0x11EEB]={
+ category="lo",
+ description="MAKASAR LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EEB,
+ },
+ [0x11EEC]={
+ category="lo",
+ description="MAKASAR LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EEC,
+ },
+ [0x11EED]={
+ category="lo",
+ description="MAKASAR LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EED,
+ },
+ [0x11EEE]={
+ category="lo",
+ description="MAKASAR LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EEE,
+ },
+ [0x11EEF]={
+ category="lo",
+ description="MAKASAR LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EEF,
+ },
+ [0x11EF0]={
+ category="lo",
+ description="MAKASAR LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EF0,
+ },
+ [0x11EF1]={
+ category="lo",
+ description="MAKASAR LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EF1,
+ },
+ [0x11EF2]={
+ category="lo",
+ description="MAKASAR ANGKA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EF2,
+ },
+ [0x11EF3]={
+ category="mn",
+ description="MAKASAR VOWEL SIGN I",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11EF3,
+ },
+ [0x11EF4]={
+ category="mn",
+ description="MAKASAR VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11EF4,
+ },
+ [0x11EF5]={
+ category="mc",
+ description="MAKASAR VOWEL SIGN E",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11EF5,
+ },
+ [0x11EF6]={
+ category="mc",
+ description="MAKASAR VOWEL SIGN O",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11EF6,
+ },
+ [0x11EF7]={
+ category="po",
+ description="MAKASAR PASSIMBANG",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EF7,
+ },
+ [0x11EF8]={
+ category="po",
+ description="MAKASAR END OF SECTION",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11EF8,
+ },
[0x12000]={
category="lo",
description="CUNEIFORM SIGN A",
@@ -192135,6 +195105,643 @@ characters.data={
linebreak="al",
unicodeslot=0x16B8F,
},
+ [0x16E40]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER M",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E40,
+ },
+ [0x16E41]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER S",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E41,
+ },
+ [0x16E42]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER V",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E42,
+ },
+ [0x16E43]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER W",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E43,
+ },
+ [0x16E44]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER ATIU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E44,
+ },
+ [0x16E45]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER Z",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E45,
+ },
+ [0x16E46]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER KP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E46,
+ },
+ [0x16E47]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER P",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E47,
+ },
+ [0x16E48]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER T",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E48,
+ },
+ [0x16E49]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER G",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E49,
+ },
+ [0x16E4A]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER F",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4A,
+ },
+ [0x16E4B]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4B,
+ },
+ [0x16E4C]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER K",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4C,
+ },
+ [0x16E4D]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4D,
+ },
+ [0x16E4E]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER J",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4E,
+ },
+ [0x16E4F]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E4F,
+ },
+ [0x16E50]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E50,
+ },
+ [0x16E51]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E51,
+ },
+ [0x16E52]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E52,
+ },
+ [0x16E53]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER YU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E53,
+ },
+ [0x16E54]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER L",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E54,
+ },
+ [0x16E55]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER Q",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E55,
+ },
+ [0x16E56]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER HP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E56,
+ },
+ [0x16E57]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER NY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E57,
+ },
+ [0x16E58]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER X",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E58,
+ },
+ [0x16E59]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER D",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E59,
+ },
+ [0x16E5A]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER OE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5A,
+ },
+ [0x16E5B]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER N",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5B,
+ },
+ [0x16E5C]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER R",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5C,
+ },
+ [0x16E5D]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5D,
+ },
+ [0x16E5E]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5E,
+ },
+ [0x16E5F]={
+ category="lu",
+ description="MEDEFAIDRIN CAPITAL LETTER Y",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E5F,
+ },
+ [0x16E60]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER M",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E60,
+ },
+ [0x16E61]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER S",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E61,
+ },
+ [0x16E62]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER V",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E62,
+ },
+ [0x16E63]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER W",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E63,
+ },
+ [0x16E64]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER ATIU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E64,
+ },
+ [0x16E65]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER Z",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E65,
+ },
+ [0x16E66]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER KP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E66,
+ },
+ [0x16E67]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER P",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E67,
+ },
+ [0x16E68]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER T",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E68,
+ },
+ [0x16E69]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER G",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E69,
+ },
+ [0x16E6A]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER F",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6A,
+ },
+ [0x16E6B]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6B,
+ },
+ [0x16E6C]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER K",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6C,
+ },
+ [0x16E6D]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6D,
+ },
+ [0x16E6E]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER J",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6E,
+ },
+ [0x16E6F]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E6F,
+ },
+ [0x16E70]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E70,
+ },
+ [0x16E71]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E71,
+ },
+ [0x16E72]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E72,
+ },
+ [0x16E73]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER YU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E73,
+ },
+ [0x16E74]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER L",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E74,
+ },
+ [0x16E75]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER Q",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E75,
+ },
+ [0x16E76]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER HP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E76,
+ },
+ [0x16E77]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER NY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E77,
+ },
+ [0x16E78]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER X",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E78,
+ },
+ [0x16E79]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER D",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E79,
+ },
+ [0x16E7A]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER OE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7A,
+ },
+ [0x16E7B]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER N",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7B,
+ },
+ [0x16E7C]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER R",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7C,
+ },
+ [0x16E7D]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7D,
+ },
+ [0x16E7E]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7E,
+ },
+ [0x16E7F]={
+ category="ll",
+ description="MEDEFAIDRIN SMALL LETTER Y",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E7F,
+ },
+ [0x16E80]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT ZERO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E80,
+ },
+ [0x16E81]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E81,
+ },
+ [0x16E82]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT TWO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E82,
+ },
+ [0x16E83]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT THREE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E83,
+ },
+ [0x16E84]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT FOUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E84,
+ },
+ [0x16E85]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E85,
+ },
+ [0x16E86]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT SIX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E86,
+ },
+ [0x16E87]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT SEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E87,
+ },
+ [0x16E88]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E88,
+ },
+ [0x16E89]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT NINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E89,
+ },
+ [0x16E8A]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER TEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8A,
+ },
+ [0x16E8B]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER ELEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8B,
+ },
+ [0x16E8C]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER TWELVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8C,
+ },
+ [0x16E8D]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER THIRTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8D,
+ },
+ [0x16E8E]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER FOURTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8E,
+ },
+ [0x16E8F]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER FIFTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E8F,
+ },
+ [0x16E90]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER SIXTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E90,
+ },
+ [0x16E91]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER SEVENTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E91,
+ },
+ [0x16E92]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER EIGHTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E92,
+ },
+ [0x16E93]={
+ category="no",
+ description="MEDEFAIDRIN NUMBER NINETEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E93,
+ },
+ [0x16E94]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT ONE ALTERNATE FORM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E94,
+ },
+ [0x16E95]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT TWO ALTERNATE FORM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E95,
+ },
+ [0x16E96]={
+ category="no",
+ description="MEDEFAIDRIN DIGIT THREE ALTERNATE FORM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E96,
+ },
+ [0x16E97]={
+ category="po",
+ description="MEDEFAIDRIN COMMA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x16E97,
+ },
+ [0x16E98]={
+ category="po",
+ description="MEDEFAIDRIN FULL STOP",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x16E98,
+ },
+ [0x16E99]={
+ category="po",
+ description="MEDEFAIDRIN SYMBOL AIVA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E99,
+ },
+ [0x16E9A]={
+ category="po",
+ description="MEDEFAIDRIN EXCLAMATION OH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16E9A,
+ },
[0x16F00]={
category="lo",
description="MIAO LETTER PA",
@@ -209493,6 +213100,146 @@ characters.data={
linebreak="al",
unicodeslot=0x1D245,
},
+ [0x1D2E0]={
+ category="no",
+ description="MAYAN NUMERAL ZERO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E0,
+ },
+ [0x1D2E1]={
+ category="no",
+ description="MAYAN NUMERAL ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E1,
+ },
+ [0x1D2E2]={
+ category="no",
+ description="MAYAN NUMERAL TWO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E2,
+ },
+ [0x1D2E3]={
+ category="no",
+ description="MAYAN NUMERAL THREE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E3,
+ },
+ [0x1D2E4]={
+ category="no",
+ description="MAYAN NUMERAL FOUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E4,
+ },
+ [0x1D2E5]={
+ category="no",
+ description="MAYAN NUMERAL FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E5,
+ },
+ [0x1D2E6]={
+ category="no",
+ description="MAYAN NUMERAL SIX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E6,
+ },
+ [0x1D2E7]={
+ category="no",
+ description="MAYAN NUMERAL SEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E7,
+ },
+ [0x1D2E8]={
+ category="no",
+ description="MAYAN NUMERAL EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E8,
+ },
+ [0x1D2E9]={
+ category="no",
+ description="MAYAN NUMERAL NINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2E9,
+ },
+ [0x1D2EA]={
+ category="no",
+ description="MAYAN NUMERAL TEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2EA,
+ },
+ [0x1D2EB]={
+ category="no",
+ description="MAYAN NUMERAL ELEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2EB,
+ },
+ [0x1D2EC]={
+ category="no",
+ description="MAYAN NUMERAL TWELVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2EC,
+ },
+ [0x1D2ED]={
+ category="no",
+ description="MAYAN NUMERAL THIRTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2ED,
+ },
+ [0x1D2EE]={
+ category="no",
+ description="MAYAN NUMERAL FOURTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2EE,
+ },
+ [0x1D2EF]={
+ category="no",
+ description="MAYAN NUMERAL FIFTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2EF,
+ },
+ [0x1D2F0]={
+ category="no",
+ description="MAYAN NUMERAL SIXTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2F0,
+ },
+ [0x1D2F1]={
+ category="no",
+ description="MAYAN NUMERAL SEVENTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2F1,
+ },
+ [0x1D2F2]={
+ category="no",
+ description="MAYAN NUMERAL EIGHTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2F2,
+ },
+ [0x1D2F3]={
+ category="no",
+ description="MAYAN NUMERAL NINETEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2F3,
+ },
[0x1D300]={
category="so",
description="MONOGRAM FOR EARTH",
@@ -210228,6 +213975,55 @@ characters.data={
linebreak="al",
unicodeslot=0x1D371,
},
+ [0x1D372]={
+ category="no",
+ description="IDEOGRAPHIC TALLY MARK ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D372,
+ },
+ [0x1D373]={
+ category="no",
+ description="IDEOGRAPHIC TALLY MARK TWO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D373,
+ },
+ [0x1D374]={
+ category="no",
+ description="IDEOGRAPHIC TALLY MARK THREE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D374,
+ },
+ [0x1D375]={
+ category="no",
+ description="IDEOGRAPHIC TALLY MARK FOUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D375,
+ },
+ [0x1D376]={
+ category="no",
+ description="IDEOGRAPHIC TALLY MARK FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D376,
+ },
+ [0x1D377]={
+ category="no",
+ description="TALLY MARK ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D377,
+ },
+ [0x1D378]={
+ category="no",
+ description="TALLY MARK FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D378,
+ },
[0x1D400]={
category="lu",
description="MATHEMATICAL BOLD CAPITAL A",
@@ -226170,6 +229966,482 @@ characters.data={
linebreak="op",
unicodeslot=0x1E95F,
},
+ [0x1EC71]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ONE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC71,
+ },
+ [0x1EC72]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TWO",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC72,
+ },
+ [0x1EC73]={
+ category="no",
+ description="INDIC SIYAQ NUMBER THREE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC73,
+ },
+ [0x1EC74]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FOUR",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC74,
+ },
+ [0x1EC75]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FIVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC75,
+ },
+ [0x1EC76]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SIX",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC76,
+ },
+ [0x1EC77]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SEVEN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC77,
+ },
+ [0x1EC78]={
+ category="no",
+ description="INDIC SIYAQ NUMBER EIGHT",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC78,
+ },
+ [0x1EC79]={
+ category="no",
+ description="INDIC SIYAQ NUMBER NINE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC79,
+ },
+ [0x1EC7A]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TEN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7A,
+ },
+ [0x1EC7B]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TWENTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7B,
+ },
+ [0x1EC7C]={
+ category="no",
+ description="INDIC SIYAQ NUMBER THIRTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7C,
+ },
+ [0x1EC7D]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FORTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7D,
+ },
+ [0x1EC7E]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FIFTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7E,
+ },
+ [0x1EC7F]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SIXTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC7F,
+ },
+ [0x1EC80]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SEVENTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC80,
+ },
+ [0x1EC81]={
+ category="no",
+ description="INDIC SIYAQ NUMBER EIGHTY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC81,
+ },
+ [0x1EC82]={
+ category="no",
+ description="INDIC SIYAQ NUMBER NINETY",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC82,
+ },
+ [0x1EC83]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ONE HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC83,
+ },
+ [0x1EC84]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TWO HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC84,
+ },
+ [0x1EC85]={
+ category="no",
+ description="INDIC SIYAQ NUMBER THREE HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC85,
+ },
+ [0x1EC86]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FOUR HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC86,
+ },
+ [0x1EC87]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FIVE HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC87,
+ },
+ [0x1EC88]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SIX HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC88,
+ },
+ [0x1EC89]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SEVEN HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC89,
+ },
+ [0x1EC8A]={
+ category="no",
+ description="INDIC SIYAQ NUMBER EIGHT HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8A,
+ },
+ [0x1EC8B]={
+ category="no",
+ description="INDIC SIYAQ NUMBER NINE HUNDRED",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8B,
+ },
+ [0x1EC8C]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ONE THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8C,
+ },
+ [0x1EC8D]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TWO THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8D,
+ },
+ [0x1EC8E]={
+ category="no",
+ description="INDIC SIYAQ NUMBER THREE THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8E,
+ },
+ [0x1EC8F]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FOUR THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC8F,
+ },
+ [0x1EC90]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FIVE THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC90,
+ },
+ [0x1EC91]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SIX THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC91,
+ },
+ [0x1EC92]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SEVEN THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC92,
+ },
+ [0x1EC93]={
+ category="no",
+ description="INDIC SIYAQ NUMBER EIGHT THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC93,
+ },
+ [0x1EC94]={
+ category="no",
+ description="INDIC SIYAQ NUMBER NINE THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC94,
+ },
+ [0x1EC95]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TEN THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC95,
+ },
+ [0x1EC96]={
+ category="no",
+ description="INDIC SIYAQ NUMBER TWENTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC96,
+ },
+ [0x1EC97]={
+ category="no",
+ description="INDIC SIYAQ NUMBER THIRTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC97,
+ },
+ [0x1EC98]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FORTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC98,
+ },
+ [0x1EC99]={
+ category="no",
+ description="INDIC SIYAQ NUMBER FIFTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC99,
+ },
+ [0x1EC9A]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SIXTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9A,
+ },
+ [0x1EC9B]={
+ category="no",
+ description="INDIC SIYAQ NUMBER SEVENTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9B,
+ },
+ [0x1EC9C]={
+ category="no",
+ description="INDIC SIYAQ NUMBER EIGHTY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9C,
+ },
+ [0x1EC9D]={
+ category="no",
+ description="INDIC SIYAQ NUMBER NINETY THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9D,
+ },
+ [0x1EC9E]={
+ category="no",
+ description="INDIC SIYAQ NUMBER LAKH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9E,
+ },
+ [0x1EC9F]={
+ category="no",
+ description="INDIC SIYAQ NUMBER LAKHAN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1EC9F,
+ },
+ [0x1ECA0]={
+ category="no",
+ description="INDIC SIYAQ LAKH MARK",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA0,
+ },
+ [0x1ECA1]={
+ category="no",
+ description="INDIC SIYAQ NUMBER KAROR",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA1,
+ },
+ [0x1ECA2]={
+ category="no",
+ description="INDIC SIYAQ NUMBER KARORAN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA2,
+ },
+ [0x1ECA3]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED ONE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA3,
+ },
+ [0x1ECA4]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED TWO",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA4,
+ },
+ [0x1ECA5]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED THREE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA5,
+ },
+ [0x1ECA6]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED FOUR",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA6,
+ },
+ [0x1ECA7]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED FIVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA7,
+ },
+ [0x1ECA8]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED SIX",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA8,
+ },
+ [0x1ECA9]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED SEVEN",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECA9,
+ },
+ [0x1ECAA]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED EIGHT",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECAA,
+ },
+ [0x1ECAB]={
+ category="no",
+ description="INDIC SIYAQ NUMBER PREFIXED NINE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECAB,
+ },
+ [0x1ECAC]={
+ category="so",
+ description="INDIC SIYAQ PLACEHOLDER",
+ direction="al",
+ linebreak="po",
+ unicodeslot=0x1ECAC,
+ },
+ [0x1ECAD]={
+ category="no",
+ description="INDIC SIYAQ FRACTION ONE QUARTER",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECAD,
+ },
+ [0x1ECAE]={
+ category="no",
+ description="INDIC SIYAQ FRACTION ONE HALF",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECAE,
+ },
+ [0x1ECAF]={
+ category="no",
+ description="INDIC SIYAQ FRACTION THREE QUARTERS",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECAF,
+ },
+ [0x1ECB0]={
+ category="sc",
+ description="INDIC SIYAQ RUPEE MARK",
+ direction="al",
+ linebreak="po",
+ unicodeslot=0x1ECB0,
+ },
+ [0x1ECB1]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ALTERNATE ONE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECB1,
+ },
+ [0x1ECB2]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ALTERNATE TWO",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECB2,
+ },
+ [0x1ECB3]={
+ category="no",
+ description="INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECB3,
+ },
+ [0x1ECB4]={
+ category="no",
+ description="INDIC SIYAQ ALTERNATE LAKH MARK",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ECB4,
+ },
[0x1EE00]={
category="lo",
comment="check math properties",
@@ -229431,6 +233703,13 @@ characters.data={
specials={ "circle", 0x57, 0x5A },
unicodeslot=0x1F12E,
},
+ [0x1F12F]={
+ category="so",
+ description="COPYLEFT SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F12F,
+ },
[0x1F130]={
category="so",
cjkwd="a",
@@ -239053,6 +243332,14 @@ characters.data={
linebreak="id",
unicodeslot=0x1F6F8,
},
+ [0x1F6F9]={
+ category="so",
+ cjkwd="w",
+ description="SKATEBOARD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6F9,
+ },
[0x1F700]={
category="so",
description="ALCHEMICAL SYMBOL FOR QUINTESSENCE",
@@ -240461,6 +244748,34 @@ characters.data={
linebreak="al",
unicodeslot=0x1F7D4,
},
+ [0x1F7D5]={
+ category="so",
+ description="CIRCLED TRIANGLE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7D5,
+ },
+ [0x1F7D6]={
+ category="so",
+ description="NEGATIVE CIRCLED TRIANGLE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7D6,
+ },
+ [0x1F7D7]={
+ category="so",
+ description="CIRCLED SQUARE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7D7,
+ },
+ [0x1F7D8]={
+ category="so",
+ description="NEGATIVE CIRCLED SQUARE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7D8,
+ },
[0x1F800]={
category="so",
description="LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD",
@@ -242067,6 +246382,30 @@ characters.data={
linebreak="id",
unicodeslot=0x1F94C,
},
+ [0x1F94D]={
+ category="so",
+ cjkwd="w",
+ description="LACROSSE STICK AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F94D,
+ },
+ [0x1F94E]={
+ category="so",
+ cjkwd="w",
+ description="SOFTBALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F94E,
+ },
+ [0x1F94F]={
+ category="so",
+ cjkwd="w",
+ description="FLYING DISC",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F94F,
+ },
[0x1F950]={
category="so",
cjkwd="w",
@@ -242292,6 +246631,118 @@ characters.data={
linebreak="id",
unicodeslot=0x1F96B,
},
+ [0x1F96C]={
+ category="so",
+ cjkwd="w",
+ description="LEAFY GREEN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F96C,
+ },
+ [0x1F96D]={
+ category="so",
+ cjkwd="w",
+ description="MANGO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F96D,
+ },
+ [0x1F96E]={
+ category="so",
+ cjkwd="w",
+ description="MOON CAKE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F96E,
+ },
+ [0x1F96F]={
+ category="so",
+ cjkwd="w",
+ description="BAGEL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F96F,
+ },
+ [0x1F970]={
+ category="so",
+ cjkwd="w",
+ description="SMILING FACE WITH SMILING EYES AND THREE HEARTS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F970,
+ },
+ [0x1F973]={
+ category="so",
+ cjkwd="w",
+ description="FACE WITH PARTY HORN AND PARTY HAT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F973,
+ },
+ [0x1F974]={
+ category="so",
+ cjkwd="w",
+ description="FACE WITH UNEVEN EYES AND WAVY MOUTH",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F974,
+ },
+ [0x1F975]={
+ category="so",
+ cjkwd="w",
+ description="OVERHEATED FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F975,
+ },
+ [0x1F976]={
+ category="so",
+ cjkwd="w",
+ description="FREEZING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F976,
+ },
+ [0x1F97A]={
+ category="so",
+ cjkwd="w",
+ description="FACE WITH PLEADING EYES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97A,
+ },
+ [0x1F97C]={
+ category="so",
+ cjkwd="w",
+ description="LAB COAT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97C,
+ },
+ [0x1F97D]={
+ category="so",
+ cjkwd="w",
+ description="GOGGLES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97D,
+ },
+ [0x1F97E]={
+ category="so",
+ cjkwd="w",
+ description="HIKING BOOT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97E,
+ },
+ [0x1F97F]={
+ category="so",
+ cjkwd="w",
+ description="FLAT SHOE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97F,
+ },
[0x1F980]={
category="so",
cjkwd="w",
@@ -242485,6 +246936,174 @@ characters.data={
linebreak="id",
unicodeslot=0x1F997,
},
+ [0x1F998]={
+ category="so",
+ cjkwd="w",
+ description="KANGAROO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F998,
+ },
+ [0x1F999]={
+ category="so",
+ cjkwd="w",
+ description="LLAMA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F999,
+ },
+ [0x1F99A]={
+ category="so",
+ cjkwd="w",
+ description="PEACOCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99A,
+ },
+ [0x1F99B]={
+ category="so",
+ cjkwd="w",
+ description="HIPPOPOTAMUS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99B,
+ },
+ [0x1F99C]={
+ category="so",
+ cjkwd="w",
+ description="PARROT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99C,
+ },
+ [0x1F99D]={
+ category="so",
+ cjkwd="w",
+ description="RACCOON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99D,
+ },
+ [0x1F99E]={
+ category="so",
+ cjkwd="w",
+ description="LOBSTER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99E,
+ },
+ [0x1F99F]={
+ category="so",
+ cjkwd="w",
+ description="MOSQUITO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F99F,
+ },
+ [0x1F9A0]={
+ category="so",
+ cjkwd="w",
+ description="MICROBE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A0,
+ },
+ [0x1F9A1]={
+ category="so",
+ cjkwd="w",
+ description="BADGER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A1,
+ },
+ [0x1F9A2]={
+ category="so",
+ cjkwd="w",
+ description="SWAN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A2,
+ },
+ [0x1F9B0]={
+ category="so",
+ cjkwd="w",
+ description="EMOJI COMPONENT RED HAIR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B0,
+ },
+ [0x1F9B1]={
+ category="so",
+ cjkwd="w",
+ description="EMOJI COMPONENT CURLY HAIR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B1,
+ },
+ [0x1F9B2]={
+ category="so",
+ cjkwd="w",
+ description="EMOJI COMPONENT BALD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B2,
+ },
+ [0x1F9B3]={
+ category="so",
+ cjkwd="w",
+ description="EMOJI COMPONENT WHITE HAIR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B3,
+ },
+ [0x1F9B4]={
+ category="so",
+ cjkwd="w",
+ description="BONE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B4,
+ },
+ [0x1F9B5]={
+ category="so",
+ cjkwd="w",
+ description="LEG",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9B5,
+ },
+ [0x1F9B6]={
+ category="so",
+ cjkwd="w",
+ description="FOOT",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9B6,
+ },
+ [0x1F9B7]={
+ category="so",
+ cjkwd="w",
+ description="TOOTH",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9B7,
+ },
+ [0x1F9B8]={
+ category="so",
+ cjkwd="w",
+ description="SUPERHERO",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9B8,
+ },
+ [0x1F9B9]={
+ category="so",
+ cjkwd="w",
+ description="SUPERVILLAIN",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9B9,
+ },
[0x1F9C0]={
category="so",
cjkwd="w",
@@ -242493,6 +247112,22 @@ characters.data={
linebreak="id",
unicodeslot=0x1F9C0,
},
+ [0x1F9C1]={
+ category="so",
+ cjkwd="w",
+ description="CUPCAKE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C1,
+ },
+ [0x1F9C2]={
+ category="so",
+ cjkwd="w",
+ description="SALT SHAKER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C2,
+ },
[0x1F9D0]={
category="so",
cjkwd="w",
@@ -242677,6 +247312,304 @@ characters.data={
linebreak="id",
unicodeslot=0x1F9E6,
},
+ [0x1F9E7]={
+ category="so",
+ cjkwd="w",
+ description="RED GIFT ENVELOPE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9E7,
+ },
+ [0x1F9E8]={
+ category="so",
+ cjkwd="w",
+ description="FIRECRACKER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9E8,
+ },
+ [0x1F9E9]={
+ category="so",
+ cjkwd="w",
+ description="JIGSAW PUZZLE PIECE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9E9,
+ },
+ [0x1F9EA]={
+ category="so",
+ cjkwd="w",
+ description="TEST TUBE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9EA,
+ },
+ [0x1F9EB]={
+ category="so",
+ cjkwd="w",
+ description="PETRI DISH",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9EB,
+ },
+ [0x1F9EC]={
+ category="so",
+ cjkwd="w",
+ description="DNA DOUBLE HELIX",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9EC,
+ },
+ [0x1F9ED]={
+ category="so",
+ cjkwd="w",
+ description="COMPASS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9ED,
+ },
+ [0x1F9EE]={
+ category="so",
+ cjkwd="w",
+ description="ABACUS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9EE,
+ },
+ [0x1F9EF]={
+ category="so",
+ cjkwd="w",
+ description="FIRE EXTINGUISHER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9EF,
+ },
+ [0x1F9F0]={
+ category="so",
+ cjkwd="w",
+ description="TOOLBOX",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F0,
+ },
+ [0x1F9F1]={
+ category="so",
+ cjkwd="w",
+ description="BRICK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F1,
+ },
+ [0x1F9F2]={
+ category="so",
+ cjkwd="w",
+ description="MAGNET",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F2,
+ },
+ [0x1F9F3]={
+ category="so",
+ cjkwd="w",
+ description="LUGGAGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F3,
+ },
+ [0x1F9F4]={
+ category="so",
+ cjkwd="w",
+ description="LOTION BOTTLE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F4,
+ },
+ [0x1F9F5]={
+ category="so",
+ cjkwd="w",
+ description="SPOOL OF THREAD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F5,
+ },
+ [0x1F9F6]={
+ category="so",
+ cjkwd="w",
+ description="BALL OF YARN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F6,
+ },
+ [0x1F9F7]={
+ category="so",
+ cjkwd="w",
+ description="SAFETY PIN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F7,
+ },
+ [0x1F9F8]={
+ category="so",
+ cjkwd="w",
+ description="TEDDY BEAR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F8,
+ },
+ [0x1F9F9]={
+ category="so",
+ cjkwd="w",
+ description="BROOM",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9F9,
+ },
+ [0x1F9FA]={
+ category="so",
+ cjkwd="w",
+ description="BASKET",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FA,
+ },
+ [0x1F9FB]={
+ category="so",
+ cjkwd="w",
+ description="ROLL OF PAPER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FB,
+ },
+ [0x1F9FC]={
+ category="so",
+ cjkwd="w",
+ description="BAR OF SOAP",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FC,
+ },
+ [0x1F9FD]={
+ category="so",
+ cjkwd="w",
+ description="SPONGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FD,
+ },
+ [0x1F9FE]={
+ category="so",
+ cjkwd="w",
+ description="RECEIPT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FE,
+ },
+ [0x1F9FF]={
+ category="so",
+ cjkwd="w",
+ description="NAZAR AMULET",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9FF,
+ },
+ [0x1FA60]={
+ category="so",
+ description="XIANGQI RED GENERAL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA60,
+ },
+ [0x1FA61]={
+ category="so",
+ description="XIANGQI RED MANDARIN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA61,
+ },
+ [0x1FA62]={
+ category="so",
+ description="XIANGQI RED ELEPHANT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA62,
+ },
+ [0x1FA63]={
+ category="so",
+ description="XIANGQI RED HORSE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA63,
+ },
+ [0x1FA64]={
+ category="so",
+ description="XIANGQI RED CHARIOT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA64,
+ },
+ [0x1FA65]={
+ category="so",
+ description="XIANGQI RED CANNON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA65,
+ },
+ [0x1FA66]={
+ category="so",
+ description="XIANGQI RED SOLDIER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA66,
+ },
+ [0x1FA67]={
+ category="so",
+ description="XIANGQI BLACK GENERAL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA67,
+ },
+ [0x1FA68]={
+ category="so",
+ description="XIANGQI BLACK MANDARIN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA68,
+ },
+ [0x1FA69]={
+ category="so",
+ description="XIANGQI BLACK ELEPHANT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA69,
+ },
+ [0x1FA6A]={
+ category="so",
+ description="XIANGQI BLACK HORSE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA6A,
+ },
+ [0x1FA6B]={
+ category="so",
+ description="XIANGQI BLACK CHARIOT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA6B,
+ },
+ [0x1FA6C]={
+ category="so",
+ description="XIANGQI BLACK CANNON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA6C,
+ },
+ [0x1FA6D]={
+ category="so",
+ description="XIANGQI BLACK SOLDIER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA6D,
+ },
[0x2F800]={
category="lo",
cjkwd="w",
@@ -248239,4 +253172,4 @@ characters.data={
synonyms={ "vs17" },
unicodeslot=0xE0100,
},
-}
+} \ No newline at end of file
diff --git a/tex/context/base/mkiv/char-emj.lua b/tex/context/base/mkiv/char-emj.lua
index 718d3bc6e..187bb6712 100644
--- a/tex/context/base/mkiv/char-emj.lua
+++ b/tex/context/base/mkiv/char-emj.lua
@@ -15,6 +15,7 @@ return {
["3rd place medal"]={ 0x1F949 },
["a button (blood type)"]={ 0x1F170 },
["ab button (blood type)"]={ 0x1F18E },
+ ["abacus"]={ 0x1F9EE },
["admission tickets"]={ 0x1F39F },
["adult"]={ 0x1F9D1 },
["adult: dark skin tone"]={ 0x1F9D1, 0x1F3FF },
@@ -48,8 +49,8 @@ return {
["ant"]={ 0x1F41C },
["antarctica"]={ 0x1F1E6, 0x1F1F6 },
["antenna bars"]={ 0x1F4F6 },
- ["anticlockwise arrows button"]={ 0x1F504 },
["antigua & barbuda"]={ 0x1F1E6, 0x1F1EC },
+ ["anxious face with sweat"]={ 0x1F630 },
["aquarius"]={ 0x2652 },
["argentina"]={ 0x1F1E6, 0x1F1F7 },
["aries"]={ 0x2648 },
@@ -108,12 +109,15 @@ return {
["backhand index pointing up: medium-dark skin tone"]={ 0x1F446, 0x1F3FE },
["backhand index pointing up: medium-light skin tone"]={ 0x1F446, 0x1F3FC },
["bacon"]={ 0x1F953 },
+ ["badger"]={ 0x1F9A1 },
["badminton"]={ 0x1F3F8 },
+ ["bagel"]={ 0x1F96F },
["baggage claim"]={ 0x1F6C4 },
["baguette bread"]={ 0x1F956 },
["bahamas"]={ 0x1F1E7, 0x1F1F8 },
["bahrain"]={ 0x1F1E7, 0x1F1ED },
["balance scale"]={ 0x2696 },
+ ["bald"]={ 0x1F9B2 },
["balloon"]={ 0x1F388 },
["ballot box with ballot"]={ 0x1F5F3 },
["ballot box with check"]={ 0x2611 },
@@ -124,11 +128,13 @@ return {
["barbados"]={ 0x1F1E7, 0x1F1E7 },
["barber pole"]={ 0x1F488 },
["baseball"]={ 0x26BE },
+ ["basket"]={ 0x1F9FA },
["basketball"]={ 0x1F3C0 },
["bat"]={ 0x1F987 },
["bathtub"]={ 0x1F6C1 },
["battery"]={ 0x1F50B },
["beach with umbrella"]={ 0x1F3D6 },
+ ["beaming face with smiling eyes"]={ 0x1F601 },
["bear face"]={ 0x1F43B },
["bearded person"]={ 0x1F9D4 },
["bearded person: dark skin tone"]={ 0x1F9D4, 0x1F3FF },
@@ -190,6 +196,7 @@ return {
["boar"]={ 0x1F417 },
["bolivia"]={ 0x1F1E7, 0x1F1F4 },
["bomb"]={ 0x1F4A3 },
+ ["bone"]={ 0x1F9B4 },
["bookmark"]={ 0x1F516 },
["bookmark tabs"]={ 0x1F4D1 },
["books"]={ 0x1F4DA },
@@ -217,6 +224,7 @@ return {
["breast-feeding: medium skin tone"]={ 0x1F931, 0x1F3FD },
["breast-feeding: medium-dark skin tone"]={ 0x1F931, 0x1F3FE },
["breast-feeding: medium-light skin tone"]={ 0x1F931, 0x1F3FC },
+ ["bricks"]={ 0x1F9F1 },
["bride with veil"]={ 0x1F470 },
["bride with veil: dark skin tone"]={ 0x1F470, 0x1F3FF },
["bride with veil: light skin tone"]={ 0x1F470, 0x1F3FB },
@@ -230,10 +238,12 @@ return {
["british virgin islands"]={ 0x1F1FB, 0x1F1EC },
["broccoli"]={ 0x1F966 },
["broken heart"]={ 0x1F494 },
+ ["broom"]={ 0x1F9F9 },
["brunei"]={ 0x1F1E7, 0x1F1F3 },
["bug"]={ 0x1F41B },
["building construction"]={ 0x1F3D7 },
["bulgaria"]={ 0x1F1E7, 0x1F1EC },
+ ["bullet train"]={ 0x1F685 },
["burkina faso"]={ 0x1F1E7, 0x1F1EB },
["burrito"]={ 0x1F32F },
["burundi"]={ 0x1F1E7, 0x1F1EE },
@@ -289,6 +299,7 @@ return {
["chequered flag"]={ 0x1F3C1 },
["cherries"]={ 0x1F352 },
["cherry blossom"]={ 0x1F338 },
+ ["chess pawn"]={ 0x265F },
["chestnut"]={ 0x1F330 },
["chicken"]={ 0x1F414 },
["child"]={ 0x1F9D2 },
@@ -344,10 +355,12 @@ return {
["coconut"]={ 0x1F965 },
["cocos (keeling) islands"]={ 0x1F1E8, 0x1F1E8 },
["coffin"]={ 0x26B0 },
+ ["cold face"]={ 0x1F976 },
["collision"]={ 0x1F4A5 },
["colombia"]={ 0x1F1E8, 0x1F1F4 },
["comet"]={ 0x2604 },
["comoros"]={ 0x1F1F0, 0x1F1F2 },
+ ["compass"]={ 0x1F9ED },
["computer disk"]={ 0x1F4BD },
["computer mouse"]={ 0x1F5B1 },
["confetti ball"]={ 0x1F38A },
@@ -372,6 +385,7 @@ return {
["copyright"]={ 0xA9 },
["costa rica"]={ 0x1F1E8, 0x1F1F7 },
["couch and lamp"]={ 0x1F6CB },
+ ["counterclockwise arrows button"]={ 0x1F504 },
["couple with heart"]={ 0x1F491 },
["couple with heart: man, man"]={ 0x1F468, 0x200D, 0x2764, 0x200D, 0x1F468 },
["couple with heart: woman, man"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F468 },
@@ -381,10 +395,10 @@ return {
["cowboy hat face"]={ 0x1F920 },
["crab"]={ 0x1F980 },
["crayon"]={ 0x1F58D },
- ["crazy face"]={ 0x1F92A },
["credit card"]={ 0x1F4B3 },
["crescent moon"]={ 0x1F319 },
- ["cricket"]={ 0x1F3CF },
+ ["cricket"]={ 0x1F997 },
+ ["cricket game"]={ 0x1F3CF },
["croatia"]={ 0x1F1ED, 0x1F1F7 },
["crocodile"]={ 0x1F40A },
["croissant"]={ 0x1F950 },
@@ -405,9 +419,11 @@ return {
["cuba"]={ 0x1F1E8, 0x1F1FA },
["cucumber"]={ 0x1F952 },
["cup with straw"]={ 0x1F964 },
+ ["cupcake"]={ 0x1F9C1 },
["curaçao"]={ 0x1F1E8, 0x1F1FC },
["curling stone"]={ 0x1F94C },
["curly loop"]={ 0x27B0 },
+ ["curly-haired"]={ 0x1F9B1 },
["currency exchange"]={ 0x1F4B1 },
["curry rice"]={ 0x1F35B },
["custard"]={ 0x1F36E },
@@ -419,6 +435,7 @@ return {
["côte d’ivoire"]={ 0x1F1E8, 0x1F1EE },
["dagger"]={ 0x1F5E1 },
["dango"]={ 0x1F361 },
+ ["dark skin tone"]={ 0x1F3FF },
["dashing away"]={ 0x1F4A8 },
["deciduous tree"]={ 0x1F333 },
["deer"]={ 0x1F98C },
@@ -440,11 +457,11 @@ return {
["diego garcia"]={ 0x1F1E9, 0x1F1EC },
["dim button"]={ 0x1F505 },
["direct hit"]={ 0x1F3AF },
- ["disappointed but relieved face"]={ 0x1F625 },
["disappointed face"]={ 0x1F61E },
["dizzy"]={ 0x1F4AB },
["dizzy face"]={ 0x1F635 },
["djibouti"]={ 0x1F1E9, 0x1F1EF },
+ ["dna"]={ 0x1F9EC },
["dog"]={ 0x1F415 },
["dog face"]={ 0x1F436 },
["dollar banknote"]={ 0x1F4B5 },
@@ -458,9 +475,10 @@ return {
["doughnut"]={ 0x1F369 },
["dove"]={ 0x1F54A },
["down arrow"]={ 0x2B07 },
- ["down button"]={ 0x1F53D },
["down-left arrow"]={ 0x2199 },
["down-right arrow"]={ 0x2198 },
+ ["downcast face with sweat"]={ 0x1F613 },
+ ["downwards button"]={ 0x1F53D },
["dragon"]={ 0x1F409 },
["dragon face"]={ 0x1F432 },
["dress"]={ 0x1F457 },
@@ -519,25 +537,21 @@ return {
["eye in speech bubble"]={ 0x1F441, 0x200D, 0x1F5E8 },
["eyes"]={ 0x1F440 },
["face blowing a kiss"]={ 0x1F618 },
- ["face savouring delicious food"]={ 0x1F60B },
+ ["face savoring food"]={ 0x1F60B },
["face screaming in fear"]={ 0x1F631 },
["face vomiting"]={ 0x1F92E },
- ["face with cold sweat"]={ 0x1F613 },
["face with hand over mouth"]={ 0x1F92D },
["face with head-bandage"]={ 0x1F915 },
["face with medical mask"]={ 0x1F637 },
["face with monocle"]={ 0x1F9D0 },
["face with open mouth"]={ 0x1F62E },
- ["face with open mouth & cold sweat"]={ 0x1F630 },
["face with raised eyebrow"]={ 0x1F928 },
["face with rolling eyes"]={ 0x1F644 },
["face with steam from nose"]={ 0x1F624 },
- ["face with stuck-out tongue"]={ 0x1F61B },
- ["face with stuck-out tongue & closed eyes"]={ 0x1F61D },
- ["face with stuck-out tongue & winking eye"]={ 0x1F61C },
- ["face with symbols over mouth"]={ 0x1F92C },
+ ["face with symbols on mouth"]={ 0x1F92C },
["face with tears of joy"]={ 0x1F602 },
["face with thermometer"]={ 0x1F912 },
+ ["face with tongue"]={ 0x1F61B },
["face without mouth"]={ 0x1F636 },
["factory"]={ 0x1F3ED },
["fairy"]={ 0x1F9DA },
@@ -593,9 +607,11 @@ return {
["finland"]={ 0x1F1EB, 0x1F1EE },
["fire"]={ 0x1F525 },
["fire engine"]={ 0x1F692 },
+ ["fire extinguisher"]={ 0x1F9EF },
+ ["firecracker"]={ 0x1F9E8 },
["fireworks"]={ 0x1F386 },
["first quarter moon"]={ 0x1F313 },
- ["first quarter moon with face"]={ 0x1F31B },
+ ["first quarter moon face"]={ 0x1F31B },
["fish"]={ 0x1F41F },
["fish cake with swirl"]={ 0x1F365 },
["fishing pole"]={ 0x1F3A3 },
@@ -613,6 +629,7 @@ return {
["floppy disk"]={ 0x1F4BE },
["flower playing cards"]={ 0x1F3B4 },
["flushed face"]={ 0x1F633 },
+ ["flying disc"]={ 0x1F94F },
["flying saucer"]={ 0x1F6F8 },
["fog"]={ 0x1F32B },
["foggy"]={ 0x1F301 },
@@ -622,6 +639,12 @@ return {
["folded hands: medium skin tone"]={ 0x1F64F, 0x1F3FD },
["folded hands: medium-dark skin tone"]={ 0x1F64F, 0x1F3FE },
["folded hands: medium-light skin tone"]={ 0x1F64F, 0x1F3FC },
+ ["foot"]={ 0x1F9B6 },
+ ["foot: dark skin tone"]={ 0x1F9B6, 0x1F3FF },
+ ["foot: light skin tone"]={ 0x1F9B6, 0x1F3FB },
+ ["foot: medium skin tone"]={ 0x1F9B6, 0x1F3FD },
+ ["foot: medium-dark skin tone"]={ 0x1F9B6, 0x1F3FE },
+ ["foot: medium-light skin tone"]={ 0x1F9B6, 0x1F3FC },
["footprints"]={ 0x1F463 },
["fork and knife"]={ 0x1F374 },
["fork and knife with plate"]={ 0x1F37D },
@@ -646,7 +669,7 @@ return {
["frowning face with open mouth"]={ 0x1F626 },
["fuel pump"]={ 0x26FD },
["full moon"]={ 0x1F315 },
- ["full moon with face"]={ 0x1F31D },
+ ["full moon face"]={ 0x1F31D },
["funeral urn"]={ 0x26B1 },
["gabon"]={ 0x1F1EC, 0x1F1E6 },
["gambia"]={ 0x1F1EC, 0x1F1F2 },
@@ -678,6 +701,7 @@ return {
["goal net"]={ 0x1F945 },
["goat"]={ 0x1F410 },
["goblin"]={ 0x1F47A },
+ ["goggles"]={ 0x1F97D },
["gorilla"]={ 0x1F98D },
["graduation cap"]={ 0x1F393 },
["grapes"]={ 0x1F347 },
@@ -689,9 +713,13 @@ return {
["greenland"]={ 0x1F1EC, 0x1F1F1 },
["grenada"]={ 0x1F1EC, 0x1F1E9 },
["grimacing face"]={ 0x1F62C },
+ ["grinning cat face"]={ 0x1F63A },
["grinning cat face with smiling eyes"]={ 0x1F638 },
["grinning face"]={ 0x1F600 },
- ["grinning face with smiling eyes"]={ 0x1F601 },
+ ["grinning face with big eyes"]={ 0x1F603 },
+ ["grinning face with smiling eyes"]={ 0x1F604 },
+ ["grinning face with sweat"]={ 0x1F605 },
+ ["grinning squinting face"]={ 0x1F606 },
["growing heart"]={ 0x1F497 },
["guadeloupe"]={ 0x1F1EC, 0x1F1F5 },
["guam"]={ 0x1F1EC, 0x1F1FA },
@@ -713,6 +741,12 @@ return {
["hammer and pick"]={ 0x2692 },
["hammer and wrench"]={ 0x1F6E0 },
["hamster face"]={ 0x1F439 },
+ ["hand with fingers splayed"]={ 0x1F590 },
+ ["hand with fingers splayed: dark skin tone"]={ 0x1F590, 0x1F3FF },
+ ["hand with fingers splayed: light skin tone"]={ 0x1F590, 0x1F3FB },
+ ["hand with fingers splayed: medium skin tone"]={ 0x1F590, 0x1F3FD },
+ ["hand with fingers splayed: medium-dark skin tone"]={ 0x1F590, 0x1F3FE },
+ ["hand with fingers splayed: medium-light skin tone"]={ 0x1F590, 0x1F3FC },
["handbag"]={ 0x1F45C },
["handshake"]={ 0x1F91D },
["hatching chick"]={ 0x1F423 },
@@ -738,7 +772,8 @@ return {
["high voltage"]={ 0x26A1 },
["high-heeled shoe"]={ 0x1F460 },
["high-speed train"]={ 0x1F684 },
- ["high-speed train with bullet nose"]={ 0x1F685 },
+ ["hiking boot"]={ 0x1F97E },
+ ["hippopotamus"]={ 0x1F99B },
["hole"]={ 0x1F573 },
["honduras"]={ 0x1F1ED, 0x1F1F3 },
["honey pot"]={ 0x1F36F },
@@ -756,13 +791,15 @@ return {
["hospital"]={ 0x1F3E5 },
["hot beverage"]={ 0x2615 },
["hot dog"]={ 0x1F32D },
+ ["hot face"]={ 0x1F975 },
["hot pepper"]={ 0x1F336 },
["hot springs"]={ 0x2668 },
["hotel"]={ 0x1F3E8 },
- ["hourglass"]={ 0x231B },
- ["hourglass with flowing sand"]={ 0x23F3 },
+ ["hourglass done"]={ 0x231B },
+ ["hourglass not done"]={ 0x23F3 },
["house"]={ 0x1F3E0 },
["house with garden"]={ 0x1F3E1 },
+ ["houses"]={ 0x1F3D8 },
["hugging face"]={ 0x1F917 },
["hundred points"]={ 0x1F4AF },
["hungary"]={ 0x1F1ED, 0x1F1FA },
@@ -782,6 +819,7 @@ return {
["index pointing up: medium-light skin tone"]={ 0x261D, 0x1F3FC },
["india"]={ 0x1F1EE, 0x1F1F3 },
["indonesia"]={ 0x1F1EE, 0x1F1E9 },
+ ["infinity"]={ 0x267E },
["information"]={ 0x2139 },
["input latin letters"]={ 0x1F524 },
["input latin lowercase"]={ 0x1F521 },
@@ -820,17 +858,19 @@ return {
["japanese “vacancy” button"]={ 0x1F233 },
["jeans"]={ 0x1F456 },
["jersey"]={ 0x1F1EF, 0x1F1EA },
+ ["jigsaw"]={ 0x1F9E9 },
["joker"]={ 0x1F0CF },
["jordan"]={ 0x1F1EF, 0x1F1F4 },
["joystick"]={ 0x1F579 },
["kaaba"]={ 0x1F54B },
+ ["kangaroo"]={ 0x1F998 },
["kazakhstan"]={ 0x1F1F0, 0x1F1FF },
["kenya"]={ 0x1F1F0, 0x1F1EA },
["key"]={ 0x1F511 },
["keyboard"]={ 0x2328 },
- ["keycap 10"]={ 0x1F51F },
["keycap: 0"]={ 0x30, 0x20E3 },
["keycap: 1"]={ 0x31, 0x20E3 },
+ ["keycap: 10"]={ 0x1F51F },
["keycap: 2"]={ 0x32, 0x20E3 },
["keycap: 3"]={ 0x33, 0x20E3 },
["keycap: 4"]={ 0x34, 0x20E3 },
@@ -849,7 +889,7 @@ return {
["kiss: man, man"]={ 0x1F468, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F468 },
["kiss: woman, man"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F468 },
["kiss: woman, woman"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F469 },
- ["kissing cat face with closed eyes"]={ 0x1F63D },
+ ["kissing cat face"]={ 0x1F63D },
["kissing face"]={ 0x1F617 },
["kissing face with closed eyes"]={ 0x1F61A },
["kissing face with smiling eyes"]={ 0x1F619 },
@@ -859,18 +899,21 @@ return {
["kosovo"]={ 0x1F1FD, 0x1F1F0 },
["kuwait"]={ 0x1F1F0, 0x1F1FC },
["kyrgyzstan"]={ 0x1F1F0, 0x1F1EC },
+ ["lab coat"]={ 0x1F97C },
["label"]={ 0x1F3F7 },
+ ["lacrosse"]={ 0x1F94D },
["lady beetle"]={ 0x1F41E },
["laos"]={ 0x1F1F1, 0x1F1E6 },
["laptop computer"]={ 0x1F4BB },
["large blue diamond"]={ 0x1F537 },
["large orange diamond"]={ 0x1F536 },
["last quarter moon"]={ 0x1F317 },
- ["last quarter moon with face"]={ 0x1F31C },
+ ["last quarter moon face"]={ 0x1F31C },
["last track button"]={ 0x23EE },
["latin cross"]={ 0x271D },
["latvia"]={ 0x1F1F1, 0x1F1FB },
["leaf fluttering in wind"]={ 0x1F343 },
+ ["leafy green"]={ 0x1F96C },
["lebanon"]={ 0x1F1F1, 0x1F1E7 },
["ledger"]={ 0x1F4D2 },
["left arrow"]={ 0x2B05 },
@@ -883,8 +926,13 @@ return {
["left-facing fist: medium skin tone"]={ 0x1F91B, 0x1F3FD },
["left-facing fist: medium-dark skin tone"]={ 0x1F91B, 0x1F3FE },
["left-facing fist: medium-light skin tone"]={ 0x1F91B, 0x1F3FC },
- ["left-pointing magnifying glass"]={ 0x1F50D },
["left-right arrow"]={ 0x2194 },
+ ["leg"]={ 0x1F9B5 },
+ ["leg: dark skin tone"]={ 0x1F9B5, 0x1F3FF },
+ ["leg: light skin tone"]={ 0x1F9B5, 0x1F3FB },
+ ["leg: medium skin tone"]={ 0x1F9B5, 0x1F3FD },
+ ["leg: medium-dark skin tone"]={ 0x1F9B5, 0x1F3FE },
+ ["leg: medium-light skin tone"]={ 0x1F9B5, 0x1F3FC },
["lemon"]={ 0x1F34B },
["leo"]={ 0x264C },
["leopard"]={ 0x1F406 },
@@ -896,6 +944,7 @@ return {
["liechtenstein"]={ 0x1F1F1, 0x1F1EE },
["light bulb"]={ 0x1F4A1 },
["light rail"]={ 0x1F688 },
+ ["light skin tone"]={ 0x1F3FB },
["link"]={ 0x1F517 },
["linked paperclips"]={ 0x1F587 },
["lion face"]={ 0x1F981 },
@@ -903,11 +952,14 @@ return {
["lithuania"]={ 0x1F1F1, 0x1F1F9 },
["litter in bin sign"]={ 0x1F6AE },
["lizard"]={ 0x1F98E },
+ ["llama"]={ 0x1F999 },
+ ["lobster"]={ 0x1F99E },
["locked"]={ 0x1F512 },
["locked with key"]={ 0x1F510 },
["locked with pen"]={ 0x1F50F },
["locomotive"]={ 0x1F682 },
["lollipop"]={ 0x1F36D },
+ ["lotion bottle"]={ 0x1F9F4 },
["loudly crying face"]={ 0x1F62D },
["loudspeaker"]={ 0x1F4E2 },
["love hotel"]={ 0x1F3E9 },
@@ -918,6 +970,7 @@ return {
["love-you gesture: medium skin tone"]={ 0x1F91F, 0x1F3FD },
["love-you gesture: medium-dark skin tone"]={ 0x1F91F, 0x1F3FE },
["love-you gesture: medium-light skin tone"]={ 0x1F91F, 0x1F3FC },
+ ["luggage"]={ 0x1F9F3 },
["luxembourg"]={ 0x1F1F1, 0x1F1FA },
["lying face"]={ 0x1F925 },
["macau sar china"]={ 0x1F1F2, 0x1F1F4 },
@@ -929,6 +982,9 @@ return {
["mage: medium skin tone"]={ 0x1F9D9, 0x1F3FD },
["mage: medium-dark skin tone"]={ 0x1F9D9, 0x1F3FE },
["mage: medium-light skin tone"]={ 0x1F9D9, 0x1F3FC },
+ ["magnet"]={ 0x1F9F2 },
+ ["magnifying glass tilted left"]={ 0x1F50D },
+ ["magnifying glass tilted right"]={ 0x1F50E },
["mahjong red dragon"]={ 0x1F004 },
["malawi"]={ 0x1F1F2, 0x1F1FC },
["malaysia"]={ 0x1F1F2, 0x1F1FE },
@@ -1089,12 +1145,6 @@ return {
["man health worker: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x2695 },
["man health worker: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x2695 },
["man health worker: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x2695 },
- ["man in business suit levitating"]={ 0x1F574 },
- ["man in business suit levitating: dark skin tone"]={ 0x1F574, 0x1F3FF },
- ["man in business suit levitating: light skin tone"]={ 0x1F574, 0x1F3FB },
- ["man in business suit levitating: medium skin tone"]={ 0x1F574, 0x1F3FD },
- ["man in business suit levitating: medium-dark skin tone"]={ 0x1F574, 0x1F3FE },
- ["man in business suit levitating: medium-light skin tone"]={ 0x1F574, 0x1F3FC },
["man in lotus position"]={ 0x1F9D8, 0x200D, 0x2642 },
["man in lotus position: dark skin tone"]={ 0x1F9D8, 0x1F3FF, 0x200D, 0x2642 },
["man in lotus position: light skin tone"]={ 0x1F9D8, 0x1F3FB, 0x200D, 0x2642 },
@@ -1107,6 +1157,12 @@ return {
["man in steamy room: medium skin tone"]={ 0x1F9D6, 0x1F3FD, 0x200D, 0x2642 },
["man in steamy room: medium-dark skin tone"]={ 0x1F9D6, 0x1F3FE, 0x200D, 0x2642 },
["man in steamy room: medium-light skin tone"]={ 0x1F9D6, 0x1F3FC, 0x200D, 0x2642 },
+ ["man in suit levitating"]={ 0x1F574 },
+ ["man in suit levitating: dark skin tone"]={ 0x1F574, 0x1F3FF },
+ ["man in suit levitating: light skin tone"]={ 0x1F574, 0x1F3FB },
+ ["man in suit levitating: medium skin tone"]={ 0x1F574, 0x1F3FD },
+ ["man in suit levitating: medium-dark skin tone"]={ 0x1F574, 0x1F3FE },
+ ["man in suit levitating: medium-light skin tone"]={ 0x1F574, 0x1F3FC },
["man in tuxedo"]={ 0x1F935 },
["man in tuxedo: dark skin tone"]={ 0x1F935, 0x1F3FF },
["man in tuxedo: light skin tone"]={ 0x1F935, 0x1F3FB },
@@ -1227,6 +1283,18 @@ return {
["man student: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F393 },
["man student: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F393 },
["man student: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F393 },
+ ["man superhero"]={ 0x1F9B8, 0x200D, 0x2642 },
+ ["man superhero: dark skin tone"]={ 0x1F9B8, 0x1F3FF, 0x200D, 0x2642 },
+ ["man superhero: light skin tone"]={ 0x1F9B8, 0x1F3FB, 0x200D, 0x2642 },
+ ["man superhero: medium skin tone"]={ 0x1F9B8, 0x1F3FD, 0x200D, 0x2642 },
+ ["man superhero: medium-dark skin tone"]={ 0x1F9B8, 0x1F3FE, 0x200D, 0x2642 },
+ ["man superhero: medium-light skin tone"]={ 0x1F9B8, 0x1F3FC, 0x200D, 0x2642 },
+ ["man supervillain"]={ 0x1F9B9, 0x200D, 0x2642 },
+ ["man supervillain: dark skin tone"]={ 0x1F9B9, 0x1F3FF, 0x200D, 0x2642 },
+ ["man supervillain: light skin tone"]={ 0x1F9B9, 0x1F3FB, 0x200D, 0x2642 },
+ ["man supervillain: medium skin tone"]={ 0x1F9B9, 0x1F3FD, 0x200D, 0x2642 },
+ ["man supervillain: medium-dark skin tone"]={ 0x1F9B9, 0x1F3FE, 0x200D, 0x2642 },
+ ["man supervillain: medium-light skin tone"]={ 0x1F9B9, 0x1F3FC, 0x200D, 0x2642 },
["man surfing"]={ 0x1F3C4, 0x200D, 0x2642 },
["man surfing: dark skin tone"]={ 0x1F3C4, 0x1F3FF, 0x200D, 0x2642 },
["man surfing: light skin tone"]={ 0x1F3C4, 0x1F3FB, 0x200D, 0x2642 },
@@ -1282,11 +1350,36 @@ return {
["man with chinese cap: medium-dark skin tone"]={ 0x1F472, 0x1F3FE },
["man with chinese cap: medium-light skin tone"]={ 0x1F472, 0x1F3FC },
["man zombie"]={ 0x1F9DF, 0x200D, 0x2642 },
+ ["man, bald"]={ 0x1F468, 0x200D, 0x1F9B2 },
+ ["man, bald: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F9B2 },
+ ["man, bald: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F9B2 },
+ ["man, bald: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F9B2 },
+ ["man, bald: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F9B2 },
+ ["man, bald: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F9B2 },
+ ["man, curly haired"]={ 0x1F468, 0x200D, 0x1F9B1 },
+ ["man, curly haired: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F9B1 },
+ ["man, curly haired: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F9B1 },
+ ["man, curly haired: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F9B1 },
+ ["man, curly haired: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F9B1 },
+ ["man, curly haired: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F9B1 },
+ ["man, red haired"]={ 0x1F468, 0x200D, 0x1F9B0 },
+ ["man, red haired: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F9B0 },
+ ["man, red haired: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F9B0 },
+ ["man, red haired: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F9B0 },
+ ["man, red haired: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F9B0 },
+ ["man, red haired: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F9B0 },
+ ["man, white haired"]={ 0x1F468, 0x200D, 0x1F9B3 },
+ ["man, white haired: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F9B3 },
+ ["man, white haired: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F9B3 },
+ ["man, white haired: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F9B3 },
+ ["man, white haired: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F9B3 },
+ ["man, white haired: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F9B3 },
["man: dark skin tone"]={ 0x1F468, 0x1F3FF },
["man: light skin tone"]={ 0x1F468, 0x1F3FB },
["man: medium skin tone"]={ 0x1F468, 0x1F3FD },
["man: medium-dark skin tone"]={ 0x1F468, 0x1F3FE },
["man: medium-light skin tone"]={ 0x1F468, 0x1F3FC },
+ ["mango"]={ 0x1F96D },
["mantelpiece clock"]={ 0x1F570 },
["man’s shoe"]={ 0x1F45E },
["map of japan"]={ 0x1F5FE },
@@ -1299,10 +1392,13 @@ return {
["mayotte"]={ 0x1F1FE, 0x1F1F9 },
["meat on bone"]={ 0x1F356 },
["medical symbol"]={ 0x2695 },
+ ["medium skin tone"]={ 0x1F3FD },
+ ["medium-dark skin tone"]={ 0x1F3FE },
+ ["medium-light skin tone"]={ 0x1F3FC },
["megaphone"]={ 0x1F4E3 },
["melon"]={ 0x1F348 },
["memo"]={ 0x1F4DD },
- ["men with bunny ears partying"]={ 0x1F46F, 0x200D, 0x2642 },
+ ["men with bunny ears"]={ 0x1F46F, 0x200D, 0x2642 },
["men wrestling"]={ 0x1F93C, 0x200D, 0x2642 },
["menorah"]={ 0x1F54E },
["men’s room"]={ 0x1F6B9 },
@@ -1326,6 +1422,7 @@ return {
["merperson: medium-light skin tone"]={ 0x1F9DC, 0x1F3FC },
["metro"]={ 0x1F687 },
["mexico"]={ 0x1F1F2, 0x1F1FD },
+ ["microbe"]={ 0x1F9A0 },
["micronesia"]={ 0x1F1EB, 0x1F1F2 },
["microphone"]={ 0x1F3A4 },
["microscope"]={ 0x1F52C },
@@ -1353,9 +1450,11 @@ return {
["monorail"]={ 0x1F69D },
["montenegro"]={ 0x1F1F2, 0x1F1EA },
["montserrat"]={ 0x1F1F2, 0x1F1F8 },
+ ["moon cake"]={ 0x1F96E },
["moon viewing ceremony"]={ 0x1F391 },
["morocco"]={ 0x1F1F2, 0x1F1E6 },
["mosque"]={ 0x1F54C },
+ ["mosquito"]={ 0x1F99F },
["motor boat"]={ 0x1F6E5 },
["motor scooter"]={ 0x1F6F5 },
["motorcycle"]={ 0x1F3CD },
@@ -1393,6 +1492,7 @@ return {
["national park"]={ 0x1F3DE },
["nauru"]={ 0x1F1F3, 0x1F1F7 },
["nauseated face"]={ 0x1F922 },
+ ["nazar amulet"]={ 0x1F9FF },
["necktie"]={ 0x1F454 },
["nepal"]={ 0x1F1F3, 0x1F1F5 },
["nerd face"]={ 0x1F913 },
@@ -1521,21 +1621,24 @@ return {
["paperclip"]={ 0x1F4CE },
["papua new guinea"]={ 0x1F1F5, 0x1F1EC },
["paraguay"]={ 0x1F1F5, 0x1F1FE },
+ ["parrot"]={ 0x1F99C },
["part alternation mark"]={ 0x303D },
["party popper"]={ 0x1F389 },
+ ["partying face"]={ 0x1F973 },
["passenger ship"]={ 0x1F6F3 },
["passport control"]={ 0x1F6C2 },
["pause button"]={ 0x23F8 },
["paw prints"]={ 0x1F43E },
["peace symbol"]={ 0x262E },
["peach"]={ 0x1F351 },
+ ["peacock"]={ 0x1F99A },
["peanuts"]={ 0x1F95C },
["pear"]={ 0x1F350 },
["pen"]={ 0x1F58A },
["pencil"]={ 0x270F },
["penguin"]={ 0x1F427 },
["pensive face"]={ 0x1F614 },
- ["people with bunny ears partying"]={ 0x1F46F },
+ ["people with bunny ears"]={ 0x1F46F },
["people wrestling"]={ 0x1F93C },
["performing arts"]={ 0x1F3AD },
["persevering face"]={ 0x1F623 },
@@ -1727,6 +1830,7 @@ return {
["person wearing turban: medium-dark skin tone"]={ 0x1F473, 0x1F3FE },
["person wearing turban: medium-light skin tone"]={ 0x1F473, 0x1F3FC },
["peru"]={ 0x1F1F5, 0x1F1EA },
+ ["petri dish"]={ 0x1F9EB },
["philippines"]={ 0x1F1F5, 0x1F1ED },
["pick"]={ 0x26CF },
["pie"]={ 0x1F967 },
@@ -1738,6 +1842,7 @@ return {
["pine decoration"]={ 0x1F38D },
["pineapple"]={ 0x1F34D },
["ping pong"]={ 0x1F3D3 },
+ ["pirate flag"]={ 0x1F3F4, 0x200D, 0x2620 },
["pisces"]={ 0x2653 },
["pistol"]={ 0x1F52B },
["pitcairn islands"]={ 0x1F1F5, 0x1F1F3 },
@@ -1745,6 +1850,7 @@ return {
["place of worship"]={ 0x1F6D0 },
["play button"]={ 0x25B6 },
["play or pause button"]={ 0x23EF },
+ ["pleading face"]={ 0x1F97A },
["poland"]={ 0x1F1F5, 0x1F1F1 },
["police car"]={ 0x1F693 },
["police car light"]={ 0x1F6A8 },
@@ -1798,6 +1904,7 @@ return {
["question mark"]={ 0x2753 },
["rabbit"]={ 0x1F407 },
["rabbit face"]={ 0x1F430 },
+ ["raccoon"]={ 0x1F99D },
["racing car"]={ 0x1F3CE },
["radio"]={ 0x1F4FB },
["radio button"]={ 0x1F518 },
@@ -1819,12 +1926,6 @@ return {
["raised fist: medium-dark skin tone"]={ 0x270A, 0x1F3FE },
["raised fist: medium-light skin tone"]={ 0x270A, 0x1F3FC },
["raised hand"]={ 0x270B },
- ["raised hand with fingers splayed"]={ 0x1F590 },
- ["raised hand with fingers splayed: dark skin tone"]={ 0x1F590, 0x1F3FF },
- ["raised hand with fingers splayed: light skin tone"]={ 0x1F590, 0x1F3FB },
- ["raised hand with fingers splayed: medium skin tone"]={ 0x1F590, 0x1F3FD },
- ["raised hand with fingers splayed: medium-dark skin tone"]={ 0x1F590, 0x1F3FE },
- ["raised hand with fingers splayed: medium-light skin tone"]={ 0x1F590, 0x1F3FC },
["raised hand: dark skin tone"]={ 0x270B, 0x1F3FF },
["raised hand: light skin tone"]={ 0x270B, 0x1F3FB },
["raised hand: medium skin tone"]={ 0x270B, 0x1F3FD },
@@ -1838,14 +1939,17 @@ return {
["raising hands: medium-light skin tone"]={ 0x1F64C, 0x1F3FC },
["ram"]={ 0x1F40F },
["rat"]={ 0x1F400 },
+ ["receipt"]={ 0x1F9FE },
["record button"]={ 0x23FA },
["recycling symbol"]={ 0x267B },
["red apple"]={ 0x1F34E },
["red circle"]={ 0x1F534 },
+ ["red envelope"]={ 0x1F9E7 },
["red heart"]={ 0x2764 },
["red paper lantern"]={ 0x1F3EE },
["red triangle pointed down"]={ 0x1F53B },
["red triangle pointed up"]={ 0x1F53A },
+ ["red-haired"]={ 0x1F9B0 },
["registered"]={ 0xAE },
["relieved face"]={ 0x1F60C },
["reminder ribbon"]={ 0x1F397 },
@@ -1870,11 +1974,11 @@ return {
["right-facing fist: medium skin tone"]={ 0x1F91C, 0x1F3FD },
["right-facing fist: medium-dark skin tone"]={ 0x1F91C, 0x1F3FE },
["right-facing fist: medium-light skin tone"]={ 0x1F91C, 0x1F3FC },
- ["right-pointing magnifying glass"]={ 0x1F50E },
["ring"]={ 0x1F48D },
["roasted sweet potato"]={ 0x1F360 },
["robot face"]={ 0x1F916 },
["rocket"]={ 0x1F680 },
+ ["roll of paper"]={ 0x1F9FB },
["rolled-up newspaper"]={ 0x1F5DE },
["roller coaster"]={ 0x1F3A2 },
["rolling on the floor laughing"]={ 0x1F923 },
@@ -1889,9 +1993,12 @@ return {
["russia"]={ 0x1F1F7, 0x1F1FA },
["rwanda"]={ 0x1F1F7, 0x1F1FC },
["réunion"]={ 0x1F1F7, 0x1F1EA },
+ ["sad but relieved face"]={ 0x1F625 },
+ ["safety pin"]={ 0x1F9F7 },
["sagittarius"]={ 0x2650 },
["sailboat"]={ 0x26F5 },
["sake"]={ 0x1F376 },
+ ["salt"]={ 0x1F9C2 },
["samoa"]={ 0x1F1FC, 0x1F1F8 },
["san marino"]={ 0x1F1F8, 0x1F1F2 },
["sandwich"]={ 0x1F96A },
@@ -1910,8 +2017,8 @@ return {
["school"]={ 0x1F3EB },
["school backpack"]={ 0x1F392 },
["scissors"]={ 0x2702 },
+ ["scorpio"]={ 0x264F },
["scorpion"]={ 0x1F982 },
- ["scorpius"]={ 0x264F },
["scotland"]={ 0x1F3F4, 0xE0067, 0xE0062, 0xE0073, 0xE0063, 0xE0074, 0xE007F },
["scroll"]={ 0x1F4DC },
["seat"]={ 0x1F4BA },
@@ -1955,6 +2062,7 @@ return {
["sint maarten"]={ 0x1F1F8, 0x1F1FD },
["six o’clock"]={ 0x1F555 },
["six-thirty"]={ 0x1F561 },
+ ["skateboard"]={ 0x1F6F9 },
["skier"]={ 0x26F7 },
["skis"]={ 0x1F3BF },
["skull"]={ 0x1F480 },
@@ -1971,15 +2079,11 @@ return {
["small blue diamond"]={ 0x1F539 },
["small orange diamond"]={ 0x1F538 },
["smiling cat face with heart-eyes"]={ 0x1F63B },
- ["smiling cat face with open mouth"]={ 0x1F63A },
["smiling face"]={ 0x263A },
+ ["smiling face with 3 hearts"]={ 0x1F970 },
["smiling face with halo"]={ 0x1F607 },
["smiling face with heart-eyes"]={ 0x1F60D },
["smiling face with horns"]={ 0x1F608 },
- ["smiling face with open mouth"]={ 0x1F603 },
- ["smiling face with open mouth & closed eyes"]={ 0x1F606 },
- ["smiling face with open mouth & cold sweat"]={ 0x1F605 },
- ["smiling face with open mouth & smiling eyes"]={ 0x1F604 },
["smiling face with smiling eyes"]={ 0x1F60A },
["smiling face with sunglasses"]={ 0x1F60E },
["smirking face"]={ 0x1F60F },
@@ -1996,9 +2100,11 @@ return {
["snowflake"]={ 0x2744 },
["snowman"]={ 0x2603 },
["snowman without snow"]={ 0x26C4 },
+ ["soap"]={ 0x1F9FC },
["soccer ball"]={ 0x26BD },
["socks"]={ 0x1F9E6 },
["soft ice cream"]={ 0x1F366 },
+ ["softball"]={ 0x1F94E },
["solomon islands"]={ 0x1F1F8, 0x1F1E7 },
["somalia"]={ 0x1F1F8, 0x1F1F4 },
["soon arrow"]={ 0x1F51C },
@@ -2026,11 +2132,13 @@ return {
["spiral calendar"]={ 0x1F5D3 },
["spiral notepad"]={ 0x1F5D2 },
["spiral shell"]={ 0x1F41A },
+ ["sponge"]={ 0x1F9FD },
["spoon"]={ 0x1F944 },
["sport utility vehicle"]={ 0x1F699 },
["sports medal"]={ 0x1F3C5 },
["spouting whale"]={ 0x1F433 },
["squid"]={ 0x1F991 },
+ ["squinting face with tongue"]={ 0x1F61D },
["sri lanka"]={ 0x1F1F1, 0x1F1F0 },
["st. barthélemy"]={ 0x1F1E7, 0x1F1F1 },
["st. helena"]={ 0x1F1F8, 0x1F1ED },
@@ -2040,6 +2148,7 @@ return {
["st. pierre & miquelon"]={ 0x1F1F5, 0x1F1F2 },
["st. vincent & grenadines"]={ 0x1F1FB, 0x1F1E8 },
["stadium"]={ 0x1F3DF },
+ ["star"]={ 0x2B50 },
["star and crescent"]={ 0x262A },
["star of david"]={ 0x2721 },
["star-struck"]={ 0x1F929 },
@@ -2065,10 +2174,23 @@ return {
["sunrise"]={ 0x1F305 },
["sunrise over mountains"]={ 0x1F304 },
["sunset"]={ 0x1F307 },
+ ["superhero"]={ 0x1F9B8 },
+ ["superhero: dark skin tone"]={ 0x1F9B8, 0x1F3FF },
+ ["superhero: light skin tone"]={ 0x1F9B8, 0x1F3FB },
+ ["superhero: medium skin tone"]={ 0x1F9B8, 0x1F3FD },
+ ["superhero: medium-dark skin tone"]={ 0x1F9B8, 0x1F3FE },
+ ["superhero: medium-light skin tone"]={ 0x1F9B8, 0x1F3FC },
+ ["supervillain"]={ 0x1F9B9 },
+ ["supervillain: dark skin tone"]={ 0x1F9B9, 0x1F3FF },
+ ["supervillain: light skin tone"]={ 0x1F9B9, 0x1F3FB },
+ ["supervillain: medium skin tone"]={ 0x1F9B9, 0x1F3FD },
+ ["supervillain: medium-dark skin tone"]={ 0x1F9B9, 0x1F3FE },
+ ["supervillain: medium-light skin tone"]={ 0x1F9B9, 0x1F3FC },
["suriname"]={ 0x1F1F8, 0x1F1F7 },
["sushi"]={ 0x1F363 },
["suspension railway"]={ 0x1F69F },
["svalbard & jan mayen"]={ 0x1F1F8, 0x1F1EF },
+ ["swan"]={ 0x1F9A2 },
["swaziland"]={ 0x1F1F8, 0x1F1FF },
["sweat droplets"]={ 0x1F4A6 },
["sweden"]={ 0x1F1F8, 0x1F1EA },
@@ -2090,6 +2212,7 @@ return {
["taxi"]={ 0x1F695 },
["teacup without handle"]={ 0x1F375 },
["tear-off calendar"]={ 0x1F4C6 },
+ ["teddy bear"]={ 0x1F9F8 },
["telephone"]={ 0x260E },
["telephone receiver"]={ 0x1F4DE },
["telescope"]={ 0x1F52D },
@@ -2098,10 +2221,12 @@ return {
["ten-thirty"]={ 0x1F565 },
["tennis"]={ 0x1F3BE },
["tent"]={ 0x26FA },
+ ["test tube"]={ 0x1F9EA },
["thailand"]={ 0x1F1F9, 0x1F1ED },
["thermometer"]={ 0x1F321 },
["thinking face"]={ 0x1F914 },
["thought balloon"]={ 0x1F4AD },
+ ["thread"]={ 0x1F9F5 },
["three o’clock"]={ 0x1F552 },
["three-thirty"]={ 0x1F55E },
["thumbs down"]={ 0x1F44E },
@@ -2129,6 +2254,8 @@ return {
["tomato"]={ 0x1F345 },
["tonga"]={ 0x1F1F9, 0x1F1F4 },
["tongue"]={ 0x1F445 },
+ ["toolbox"]={ 0x1F9F0 },
+ ["tooth"]={ 0x1F9B7 },
["top arrow"]={ 0x1F51D },
["top hat"]={ 0x1F3A9 },
["tornado"]={ 0x1F32A },
@@ -2179,12 +2306,12 @@ return {
["united states"]={ 0x1F1FA, 0x1F1F8 },
["unlocked"]={ 0x1F513 },
["up arrow"]={ 0x2B06 },
- ["up button"]={ 0x1F53C },
["up! button"]={ 0x1F199 },
["up-down arrow"]={ 0x2195 },
["up-left arrow"]={ 0x2196 },
["up-right arrow"]={ 0x2197 },
["upside-down face"]={ 0x1F643 },
+ ["upwards button"]={ 0x1F53C },
["uruguay"]={ 0x1F1FA, 0x1F1FE },
["uzbekistan"]={ 0x1F1FA, 0x1F1FF },
["vampire"]={ 0x1F9DB },
@@ -2253,16 +2380,17 @@ return {
["white heavy check mark"]={ 0x2705 },
["white large square"]={ 0x2B1C },
["white medium square"]={ 0x25FB },
- ["white medium star"]={ 0x2B50 },
["white medium-small square"]={ 0x25FD },
["white question mark"]={ 0x2754 },
["white small square"]={ 0x25AB },
["white square button"]={ 0x1F533 },
+ ["white-haired"]={ 0x1F9B3 },
["wilted flower"]={ 0x1F940 },
["wind chime"]={ 0x1F390 },
["wind face"]={ 0x1F32C },
["wine glass"]={ 0x1F377 },
["winking face"]={ 0x1F609 },
+ ["winking face with tongue"]={ 0x1F61C },
["wolf face"]={ 0x1F43A },
["woman"]={ 0x1F469 },
["woman artist"]={ 0x1F469, 0x200D, 0x1F3A8 },
@@ -2542,6 +2670,18 @@ return {
["woman student: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F393 },
["woman student: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F393 },
["woman student: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F393 },
+ ["woman superhero"]={ 0x1F9B8, 0x200D, 0x2640 },
+ ["woman superhero: dark skin tone"]={ 0x1F9B8, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman superhero: light skin tone"]={ 0x1F9B8, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman superhero: medium skin tone"]={ 0x1F9B8, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman superhero: medium-dark skin tone"]={ 0x1F9B8, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman superhero: medium-light skin tone"]={ 0x1F9B8, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman supervillain"]={ 0x1F9B9, 0x200D, 0x2640 },
+ ["woman supervillain: dark skin tone"]={ 0x1F9B9, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman supervillain: light skin tone"]={ 0x1F9B9, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman supervillain: medium skin tone"]={ 0x1F9B9, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman supervillain: medium-dark skin tone"]={ 0x1F9B9, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman supervillain: medium-light skin tone"]={ 0x1F9B9, 0x1F3FC, 0x200D, 0x2640 },
["woman surfing"]={ 0x1F3C4, 0x200D, 0x2640 },
["woman surfing: dark skin tone"]={ 0x1F3C4, 0x1F3FF, 0x200D, 0x2640 },
["woman surfing: light skin tone"]={ 0x1F3C4, 0x1F3FB, 0x200D, 0x2640 },
@@ -2597,6 +2737,30 @@ return {
["woman with headscarf: medium-dark skin tone"]={ 0x1F9D5, 0x1F3FE },
["woman with headscarf: medium-light skin tone"]={ 0x1F9D5, 0x1F3FC },
["woman zombie"]={ 0x1F9DF, 0x200D, 0x2640 },
+ ["woman, bald"]={ 0x1F469, 0x200D, 0x1F9B2 },
+ ["woman, bald: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F9B2 },
+ ["woman, bald: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F9B2 },
+ ["woman, bald: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F9B2 },
+ ["woman, bald: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F9B2 },
+ ["woman, bald: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F9B2 },
+ ["woman, curly haired"]={ 0x1F469, 0x200D, 0x1F9B1 },
+ ["woman, curly haired: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F9B1 },
+ ["woman, curly haired: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F9B1 },
+ ["woman, curly haired: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F9B1 },
+ ["woman, curly haired: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F9B1 },
+ ["woman, curly haired: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F9B1 },
+ ["woman, red haired"]={ 0x1F469, 0x200D, 0x1F9B0 },
+ ["woman, red haired: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F9B0 },
+ ["woman, red haired: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F9B0 },
+ ["woman, red haired: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F9B0 },
+ ["woman, red haired: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F9B0 },
+ ["woman, red haired: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F9B0 },
+ ["woman, white haired"]={ 0x1F469, 0x200D, 0x1F9B3 },
+ ["woman, white haired: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F9B3 },
+ ["woman, white haired: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F9B3 },
+ ["woman, white haired: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F9B3 },
+ ["woman, white haired: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F9B3 },
+ ["woman, white haired: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F9B3 },
["woman: dark skin tone"]={ 0x1F469, 0x1F3FF },
["woman: light skin tone"]={ 0x1F469, 0x1F3FB },
["woman: medium skin tone"]={ 0x1F469, 0x1F3FD },
@@ -2604,11 +2768,13 @@ return {
["woman: medium-light skin tone"]={ 0x1F469, 0x1F3FC },
["woman’s boot"]={ 0x1F462 },
["woman’s clothes"]={ 0x1F45A },
+ ["woman’s flat shoe"]={ 0x1F97F },
["woman’s hat"]={ 0x1F452 },
["woman’s sandal"]={ 0x1F461 },
- ["women with bunny ears partying"]={ 0x1F46F, 0x200D, 0x2640 },
+ ["women with bunny ears"]={ 0x1F46F, 0x200D, 0x2640 },
["women wrestling"]={ 0x1F93C, 0x200D, 0x2640 },
["women’s room"]={ 0x1F6BA },
+ ["woozy face"]={ 0x1F974 },
["world map"]={ 0x1F5FA },
["worried face"]={ 0x1F61F },
["wrapped gift"]={ 0x1F381 },
@@ -2619,11 +2785,13 @@ return {
["writing hand: medium skin tone"]={ 0x270D, 0x1F3FD },
["writing hand: medium-dark skin tone"]={ 0x270D, 0x1F3FE },
["writing hand: medium-light skin tone"]={ 0x270D, 0x1F3FC },
+ ["yarn"]={ 0x1F9F6 },
["yellow heart"]={ 0x1F49B },
["yemen"]={ 0x1F1FE, 0x1F1EA },
["yen banknote"]={ 0x1F4B4 },
["yin yang"]={ 0x262F },
["zambia"]={ 0x1F1FF, 0x1F1F2 },
+ ["zany face"]={ 0x1F92A },
["zebra"]={ 0x1F993 },
["zimbabwe"]={ 0x1F1FF, 0x1F1FC },
["zipper-mouth face"]={ 0x1F910 },
diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua
index c308a2c0f..4ee9db8b5 100644
--- a/tex/context/base/mkiv/char-ini.lua
+++ b/tex/context/base/mkiv/char-ini.lua
@@ -234,6 +234,7 @@ local blocks = allocate {
["cham"] = { first = 0x0AA00, last = 0x0AA5F, description = "Cham" },
["cherokee"] = { first = 0x013A0, last = 0x013FF, otf="cher", description = "Cherokee" },
["cherokeesupplement"] = { first = 0x0AB70, last = 0x0ABBF, description = "Cherokee Supplement" },
+ ["chesssymbols"] = { first = 0x1FA00, last = 0x1FA6F, description = "Chess Symbols" },
["cjkcompatibility"] = { first = 0x03300, last = 0x033FF, otf="hang", description = "CJK Compatibility" },
["cjkcompatibilityforms"] = { first = 0x0FE30, last = 0x0FE4F, otf="hang", description = "CJK Compatibility Forms" },
["cjkcompatibilityideographs"] = { first = 0x0F900, last = 0x0FAFF, otf="hang", description = "CJK Compatibility Ideographs" },
@@ -296,6 +297,7 @@ local blocks = allocate {
-- ["digitsthai"] = { first = 0x00E50, last = 0x00E59, math = true },
-- ["digitstibetan"] = { first = 0x00F20, last = 0x00F29, math = true },
["dingbats"] = { first = 0x02700, last = 0x027BF, description = "Dingbats" },
+ ["dogra"] = { first = 0x11800, last = 0x1184F, description = "Dogra" },
["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" },
["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" },
["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" },
@@ -314,6 +316,7 @@ local blocks = allocate {
["geometricshapes"] = { first = 0x025A0, last = 0x025FF, math = true, description = "Geometric Shapes" },
["geometricshapesextended"] = { first = 0x1F780, last = 0x1F7FF, description = "Geometric Shapes Extended" },
["georgian"] = { first = 0x010A0, last = 0x010FF, otf="geor", description = "Georgian" },
+ ["georgianextended"] = { first = 0x01C90, last = 0x01CBF, description = "Georgian Extended" },
["georgiansupplement"] = { first = 0x02D00, last = 0x02D2F, otf="geor", description = "Georgian Supplement" },
["glagolitic"] = { first = 0x02C00, last = 0x02C5F, otf="glag", description = "Glagolitic" },
["glagoliticsupplement"] = { first = 0x1E000, last = 0x1E02F, description = "Glagolitic Supplement" },
@@ -322,6 +325,7 @@ local blocks = allocate {
["greekandcoptic"] = { first = 0x00370, last = 0x003FF, otf="grek", description = "Greek and Coptic" },
["greekextended"] = { first = 0x01F00, last = 0x01FFF, otf="grek", description = "Greek Extended" },
["gujarati"] = { first = 0x00A80, last = 0x00AFF, otf="gujr", description = "Gujarati" },
+ ["gunjalagondi"] = { first = 0x11D60, last = 0x11DAF, description = "Gunjala Gondi" },
["gurmukhi"] = { first = 0x00A00, last = 0x00A7F, otf="guru", description = "Gurmukhi" },
["halfwidthandfullwidthforms"] = { first = 0x0FF00, last = 0x0FFEF, description = "Halfwidth and Fullwidth Forms" },
["hangulcompatibilityjamo"] = { first = 0x03130, last = 0x0318F, otf="jamo", description = "Hangul Compatibility Jamo" },
@@ -329,6 +333,7 @@ local blocks = allocate {
["hanguljamoextendeda"] = { first = 0x0A960, last = 0x0A97F, description = "Hangul Jamo Extended-A" },
["hanguljamoextendedb"] = { first = 0x0D7B0, last = 0x0D7FF, description = "Hangul Jamo Extended-B" },
["hangulsyllables"] = { first = 0x0AC00, last = 0x0D7AF, otf="hang", description = "Hangul Syllables" },
+ ["hanifirohingya"] = { first = 0x10D00, last = 0x10D3F, description = "Hanifi Rohingya" },
["hanunoo"] = { first = 0x01720, last = 0x0173F, otf="hano", description = "Hanunoo" },
["hatran"] = { first = 0x108E0, last = 0x108FF, description = "Hatran" },
["hebrew"] = { first = 0x00590, last = 0x005FF, otf="hebr", description = "Hebrew" },
@@ -338,6 +343,7 @@ local blocks = allocate {
["ideographicdescriptioncharacters"] = { first = 0x02FF0, last = 0x02FFF, description = "Ideographic Description Characters" },
["ideographicsymbolsandpunctuation"] = { first = 0x16FE0, last = 0x16FFF, description = "Ideographic Symbols and Punctuation" },
["imperialaramaic"] = { first = 0x10840, last = 0x1085F, description = "Imperial Aramaic" },
+ ["indicsiyaqnumbers"] = { first = 0x1EC70, last = 0x1ECBF, description = "Indic Siyaq Numbers" },
["inscriptionalpahlavi"] = { first = 0x10B60, last = 0x10B7F, description = "Inscriptional Pahlavi" },
["inscriptionalparthian"] = { first = 0x10B40, last = 0x10B5F, description = "Inscriptional Parthian" },
["ipaextensions"] = { first = 0x00250, last = 0x002AF, description = "IPA Extensions" },
@@ -396,6 +402,7 @@ local blocks = allocate {
["lydian"] = { first = 0x10920, last = 0x1093F, description = "Lydian" },
["mahajani"] = { first = 0x11150, last = 0x1117F, description = "Mahajani" },
["mahjongtiles"] = { first = 0x1F000, last = 0x1F02F, description = "Mahjong Tiles" },
+ ["makasar"] = { first = 0x11EE0, last = 0x11EFF, description = "Makasar" },
["malayalam"] = { first = 0x00D00, last = 0x00D7F, otf="mlym", description = "Malayalam" },
["mandaic"] = { first = 0x00840, last = 0x0085F, otf="mand", description = "Mandaic" },
["manichaean"] = { first = 0x10AC0, last = 0x10AFF, description = "Manichaean" },
@@ -403,6 +410,8 @@ local blocks = allocate {
["masaramgondi"] = { first = 0x11D00, last = 0x11D5F, description = "Masaram Gondi" },
["mathematicalalphanumericsymbols"] = { first = 0x1D400, last = 0x1D7FF, math = true, description = "Mathematical Alphanumeric Symbols" },
["mathematicaloperators"] = { first = 0x02200, last = 0x022FF, math = true, description = "Mathematical Operators" },
+ ["mayannumerals"] = { first = 0x1D2E0, last = 0x1D2FF, description = "Mayan Numerals" },
+ ["medefaidrin"] = { first = 0x16E40, last = 0x16E9F, description = "Medefaidrin" },
["meeteimayek"] = { first = 0x0ABC0, last = 0x0ABFF, description = "Meetei Mayek" },
["meeteimayekextensions"] = { first = 0x0AAE0, last = 0x0AAFF, description = "Meetei Mayek Extensions" },
["mendekikakui"] = { first = 0x1E800, last = 0x1E8DF, description = "Mende Kikakui" },
@@ -438,6 +447,7 @@ local blocks = allocate {
["oldnortharabian"] = { first = 0x10A80, last = 0x10A9F, description = "Old North Arabian" },
["oldpermic"] = { first = 0x10350, last = 0x1037F, description = "Old Permic" },
["oldpersian"] = { first = 0x103A0, last = 0x103DF, otf="xpeo", description = "Old Persian" },
+ ["oldsogdian"] = { first = 0x10F00, last = 0x10F2F, description = "Old Sogdian" },
["oldsoutharabian"] = { first = 0x10A60, last = 0x10A7F, description = "Old South Arabian" },
["oldturkic"] = { first = 0x10C00, last = 0x10C4F, description = "Old Turkic" },
["opticalcharacterrecognition"] = { first = 0x02440, last = 0x0245F, description = "Optical Character Recognition" },
@@ -468,6 +478,7 @@ local blocks = allocate {
["sinhala"] = { first = 0x00D80, last = 0x00DFF, otf="sinh", description = "Sinhala" },
["sinhalaarchaicnumbers"] = { first = 0x111E0, last = 0x111FF, description = "Sinhala Archaic Numbers" },
["smallformvariants"] = { first = 0x0FE50, last = 0x0FE6F, description = "Small Form Variants" },
+ ["sogdian"] = { first = 0x10F30, last = 0x10F6F, description = "Sogdian" },
["sorasompeng"] = { first = 0x110D0, last = 0x110FF, description = "Sora Sompeng" },
["soyombo"] = { first = 0x11A50, last = 0x11AAF, description = "Soyombo" },
["spacingmodifierletters"] = { first = 0x002B0, last = 0x002FF, description = "Spacing Modifier Letters" },
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index a09dbd99c..7d09bd5aa 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.07.18 17:33}
+\newcontextversion{2018.07.20 21:20}
%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 07cda500d..f3b9915ae 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.07.18 17:33}
+\edef\contextversion{2018.07.20 21:20}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/lpdf-epd.lua b/tex/context/base/mkiv/lpdf-epd.lua
index f6e28cdec..5ecb12c47 100644
--- a/tex/context/base/mkiv/lpdf-epd.lua
+++ b/tex/context/base/mkiv/lpdf-epd.lua
@@ -1301,6 +1301,8 @@ if img then do
end
end
+ -- todo: codeinjections
+
lpdf_epdf.image = {
open = openpdf,
close = closepdf,
diff --git a/tex/context/base/mkiv/node-bck.lua b/tex/context/base/mkiv/node-bck.lua
index 8174888ee..3c453bfb3 100644
--- a/tex/context/base/mkiv/node-bck.lua
+++ b/tex/context/base/mkiv/node-bck.lua
@@ -70,7 +70,7 @@ local a_linefiller = privateattributes("linefiller")
local a_ruled = privateattributes("ruled")
local trace_alignment = false
-local report_alignment = logs.reported("backgrounds","alignment")
+local report_alignment = logs.reporter("backgrounds","alignment")
trackers.register("backgrounds.alignments",function(v) trace_alignment = v end)
diff --git a/tex/context/base/mkiv/node-ini.lua b/tex/context/base/mkiv/node-ini.lua
index a9f8850b4..9b35f29f6 100644
--- a/tex/context/base/mkiv/node-ini.lua
+++ b/tex/context/base/mkiv/node-ini.lua
@@ -107,7 +107,6 @@ dircodes = allocate {
[1] = "cancel",
}
-
-- local glyphcodes = allocate {
-- [ 1] = "character",
-- [ 2] = "ligature",
@@ -383,6 +382,9 @@ nodes.dirvalues = dirvalues
nodes.gluevalues = gluevalues
nodes.pdfliteralvalues = pdfliteralvalues
+dirvalues.lefttoright = 0
+dirvalues.righttoleft = 1
+
nodes.subtypes = {
[nodecodes.accent] = accentcodes,
[nodecodes.boundary] = boundarycodes,
diff --git a/tex/context/base/mkiv/node-par.lua b/tex/context/base/mkiv/node-par.lua
index e45e6dc16..4afaef220 100644
--- a/tex/context/base/mkiv/node-par.lua
+++ b/tex/context/base/mkiv/node-par.lua
@@ -11,6 +11,8 @@ local stoptiming = statistics.stoptiming
local actions = nodes.tasks.actions("everypar")
+-- this one is called a lot!
+
local function everypar(head)
starttiming(builders)
head = actions(head)
@@ -18,4 +20,8 @@ local function everypar(head)
return head
end
-callback.register("insert_local_par",everypar,"paragraph start")
+if LUATEXFUNCTIONALITY > 6857 then
+
+ callback.register("insert_local_par",everypar,"paragraph start")
+
+end
diff --git a/tex/context/base/mkiv/node-pro.lua b/tex/context/base/mkiv/node-pro.lua
index ad1035bbc..575ddbb28 100644
--- a/tex/context/base/mkiv/node-pro.lua
+++ b/tex/context/base/mkiv/node-pro.lua
@@ -65,8 +65,6 @@ do
end
-local tracer = processors.tracer
-
processors.enabled = true -- this will become a proper state (like trackers)
do
@@ -74,6 +72,8 @@ do
local has_glyph = nodes.has_glyph
local count_nodes = nodes.countall
+ local tracer = processors.tracer
+
local function pre_linebreak_filter(head,groupcode) -- ,size,packtype,direction
local found = force_processors or has_glyph(head)
if found then
@@ -153,6 +153,8 @@ do
local actions = tasks.actions("finalizers") -- head, where
local count_nodes = nodes.countall
+ local tracer = processors.tracer
+
local function post_linebreak_filter(head,groupcode)
if trace_callbacks then
local before = count_nodes(head,true)
diff --git a/tex/context/base/mkiv/node-ref.lua b/tex/context/base/mkiv/node-ref.lua
index 492c65b0c..27d209701 100644
--- a/tex/context/base/mkiv/node-ref.lua
+++ b/tex/context/base/mkiv/node-ref.lua
@@ -444,6 +444,89 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx
return head, pardir, txtdir
end
+-- -- maybe first check for glyphs and use a goto:
+--
+-- local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,txtdir) -- main
+-- local first, last, firstdir, reference
+-- if not pardir then
+-- pardir = "==="
+-- end
+-- if not texdir then
+-- txtdir = "==="
+-- end
+-- local current = head
+-- while current do
+-- local id = getid(current)
+-- local r -- else scope message due to goto
+-- if id == glyph_code then
+-- goto rest
+-- elseif id == hlist_code or id == vlist_code then
+-- r = getattr(current,attribute)
+-- -- test \goto{test}[page(2)] test \gotobox{test}[page(2)]
+-- -- test \goto{\TeX}[page(2)] test \gotobox{\hbox {x} \hbox {x}}[page(2)]
+-- -- if r and (not skip or r >) skip then -- maybe no > test
+-- -- inject_list(id,current,r,make,stack,pardir,txtdir)
+-- -- end
+-- if r then
+-- if not reference then
+-- reference, first, last, firstdir = r, current, current, txtdir
+-- elseif r == reference then
+-- -- same link
+-- last = current
+-- elseif (done[reference] or 0) == 0 then
+-- if not skip or r > skip then -- maybe no > test
+-- head, current = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir)
+-- reference, first, last, firstdir = nil, nil, nil, nil
+-- end
+-- else
+-- reference, first, last, firstdir = r, current, current, txtdir
+-- end
+-- done[r] = (done[r] or 0) + 1
+-- end
+-- local list = getlist(current)
+-- if list then
+-- local h
+-- h, pardir, txtdir = inject_areas(list,attribute,make,stack,done,r or skip or 0,current,pardir,txtdir)
+-- if h ~= current then
+-- setlist(current,h)
+-- end
+-- end
+-- if r then
+-- done[r] = done[r] - 1
+-- end
+-- elseif id == glue_code and getsubtype(current) == leftskip_code then -- any glue at the left?
+-- --
+-- elseif id == dir_code then
+-- txtdir = getdir(current)
+-- elseif id == localpar_code then -- only test at begin
+-- pardir = getdir(current)
+-- end
+-- goto next
+-- ::rest::
+-- r = getattr(current,attribute)
+-- if not r then
+-- -- just go on, can be kerns
+-- elseif not reference then
+-- reference, first, last, firstdir = r, current, current, txtdir
+-- elseif r == reference then
+-- last = current
+-- elseif (done[reference] or 0) == 0 then -- or id == glue_code and getsubtype(current) == right_skip_code
+-- if not skip or r > skip then -- maybe no > test
+-- head, current = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir)
+-- reference, first, last, firstdir = nil, nil, nil, nil
+-- end
+-- else
+-- reference, first, last, firstdir = r, current, current, txtdir
+-- end
+-- ::next::
+-- current = getnext(current)
+-- end
+-- if reference and (done[reference] or 0) == 0 then
+-- head = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir)
+-- end
+-- return head, pardir, txtdir
+-- end
+
-- tracing: todo: use predefined colors
local register_color = colors.register
diff --git a/tex/context/base/mkiv/node-rul.lua b/tex/context/base/mkiv/node-rul.lua
index 39ad1cf58..e8259df44 100644
--- a/tex/context/base/mkiv/node-rul.lua
+++ b/tex/context/base/mkiv/node-rul.lua
@@ -44,7 +44,6 @@ local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
local setwhd = nuts.setwhd
-local setdir = nuts.setdir
local setattrlist = nuts.setattrlist
local setshift = nuts.setshift
local getwidth = nuts.getwidth
diff --git a/tex/context/base/mkiv/node-tsk.lua b/tex/context/base/mkiv/node-tsk.lua
index aa59d1d5d..f2f78252a 100644
--- a/tex/context/base/mkiv/node-tsk.lua
+++ b/tex/context/base/mkiv/node-tsk.lua
@@ -226,24 +226,25 @@ statistics.register("node list callback tasks", function()
end
end)
-function tasks.actions(name) -- we optimize for the number or arguments (no ...)
+local function create(data,t)
+ created = created + 1
+ local runner = compile(data.list,data.processor,t)
+ if trace_tasks then
+ report_tasks("creating runner %a, %i actions enabled",t.name,data.list.steps or 0)
+ end
+ data.runner = runner
+ return runner
+end
+
+function tasks.actions(name)
local data = tasksdata[name]
if data then
local t = data.templates
if t then
t.name = data.name
return function(...)
- total = total + 1 -- will go away
- local runner = data.runner
- if not runner then
- created = created + 1
- if trace_tasks then
- report_tasks("creating runner %a",name)
- end
- runner = compile(data.list,data.processor,t)
- data.runner = runner
- end
- return runner(...)
+ total = total + 1
+ return (data.runner or create(data,t))(...)
end
end
end
diff --git a/tex/context/base/mkiv/pack-rul.lua b/tex/context/base/mkiv/pack-rul.lua
index a270bffe7..80379b207 100644
--- a/tex/context/base/mkiv/pack-rul.lua
+++ b/tex/context/base/mkiv/pack-rul.lua
@@ -44,6 +44,7 @@ local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
local getdir = nuts.getdir
+local getdirection = nuts.getdirection
local setshift = nuts.setshift
local setwidth = nuts.setwidth
local getwidth = nuts.getwidth
@@ -199,7 +200,8 @@ if LUATEXVERSION >= 1.090 then
if list then
if id == hlist_code then
if subtype == box_code or subtype == line_code then
- lastlinelength = list_dimensions(list,getdir(n))
+ -- lastlinelength = list_dimensions(list,getdir(n))
+ lastlinelength = list_dimensions(list,getdirection(n))
else
lastlinelength = width
end
diff --git a/tex/context/base/mkiv/page-ini.lua b/tex/context/base/mkiv/page-ini.lua
index 5b73c9729..3d5534128 100644
--- a/tex/context/base/mkiv/page-ini.lua
+++ b/tex/context/base/mkiv/page-ini.lua
@@ -41,23 +41,39 @@ function pages.mark(name,list)
local page = list[i]
local sign = false
if type(page) == "string" then
- local s, p = match(page,"([%+%-])(%d+)")
- if s then
- sign, page = s, p
+ local f, t = match(page,"(%d+)[:%-](%d+)")
+ if f and t then
+ f, t = tonumber(f), tonumber(t)
+ if f and t and f <= t then
+ if trace then
+ report("marking page %i upto %i as %a",f,t,name)
+ end
+ for page=f,t do
+ data[page][name] = true
+ end
+ end
+ page = false
+ else
+ local s, p = match(page,"([%+%-])(%d+)")
+ if s then
+ sign, page = s, p
+ end
end
end
- page = tonumber(page)
if page then
- if sign == "+" then
- page = realpage + page
- end
- if sign == "-" then
- report("negative page numbers are not supported")
- else
- if trace then
- report("marking page %i as %a",page,name)
+ page = tonumber(page)
+ if page then
+ if sign == "+" then
+ page = realpage + page
+ end
+ if sign == "-" then
+ report("negative page numbers are not supported")
+ else
+ if trace then
+ report("marking page %i as %a",page,name)
+ end
+ data[page][name] = true
end
- data[page][name] = true
end
end
end
@@ -75,7 +91,6 @@ local function marked(name)
rawset(data,i,nil)
end
local pagedata = rawget(data,realpage)
- print(pagedata and pagedata[name] and true or false)
return pagedata and pagedata[name] and true or false
end
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 3106a2cfb..73d70bb17 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 61d33704a..fd2363cb3 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-blk.lua b/tex/context/base/mkiv/strc-blk.lua
index 4e129a842..89df440c9 100644
--- a/tex/context/base/mkiv/strc-blk.lua
+++ b/tex/context/base/mkiv/strc-blk.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['strc-blk'] = {
-- this one runs on top of buffers and structure
local type, next = type, next
-local find, format, validstring = string.find, string.format, string.valid
+local find, formatters, validstring = string.find, string.formatters, string.valid
local settings_to_set, settings_to_array = utilities.parsers.settings_to_set, utilities.parsers.settings_to_array
local allocate = utilities.storage.allocate
@@ -25,6 +25,7 @@ structures.blocks = structures.blocks or { }
local blocks = structures.blocks
local sections = structures.sections
local lists = structures.lists
+local helpers = structures.helpers
local collected = allocate()
local tobesaved = allocate()
@@ -42,14 +43,28 @@ end
job.register('structures.blocks.collected', tobesaved, initializer)
local listitem = utilities.parsers.listitem
+local f_block = formatters["block.%s"]
+
+function blocks.uservariable(index,key,default)
+ local c = collected[index]
+ if c then
+ local u = c.userdata
+ if u then
+ local v = u[key] or default
+ if v then
+ context(v)
+ end
+ end
+ end
+end
-function blocks.print(name,data,parameters,hide)
+local function printblock(index,name,data,hide)
if hide then
- context.dostarthiddenblock(name, parameters)
+ context.dostarthiddenblock(index,name)
else
- context.dostartnormalblock(name, parameters)
+ context.dostartnormalblock(index,name)
end
- context.viafile(data,format("block.%s",validstring(name,"noname")))
+ context.viafile(data,f_block(validstring(name,"noname")))
if hide then
context.dostophiddenblock()
else
@@ -57,12 +72,14 @@ function blocks.print(name,data,parameters,hide)
end
end
+blocks.print = printblock
+
function blocks.define(name)
states[name] = { all = "hide" }
end
function blocks.setstate(state,name,tag)
- local all = tag == ""
+ local all = tag == ""
local tags = not all and settings_to_array(tag)
for n in listitem(name) do
local sn = states[n]
@@ -98,12 +115,12 @@ function blocks.select(state,name,tag,criterium)
local metadata = ri.metadata
if names[metadata.name] then
if all then
- blocks.print(name,ri.data,ri.parameters,hide)
+ printblock(ri.index,name,ri.data,hide)
else
local mtags = metadata.tags
for tag, sta in next, tags do
if mtags[tag] then
- blocks.print(name,ri.data,ri.parameters,hide)
+ printblock(ri.index,name,ri.data,hide)
break
end
end
@@ -112,42 +129,51 @@ function blocks.select(state,name,tag,criterium)
end
end
-function blocks.save(name,tag,parameters,buffer) -- wrong, not yet adapted
- local data = buffers.getcontent(buffer)
- local tags = settings_to_set(tag)
- local plus, minus = false, false
- if tags['+'] then plus = true tags['+'] = nil end
- if tags['-'] then minus = true tags['-'] = nil end
- tobesaved[#tobesaved+1] = {
- metadata = {
- name = name,
- tags = tags,
- plus = plus,
+function blocks.save(name,tag,userdata,buffer) -- wrong, not yet adapted
+ local data = buffers.getcontent(buffer)
+ local tags = settings_to_set(tag)
+ local plus = false
+ local minus = false
+ local last = #tobesaved + 1
+ local all = states[name].all
+ if tags['+'] then
+ plus = true
+ tags['+'] = nil
+ end
+ if tags['-'] then
+ minus = true
+ tags['-'] = nil
+ end
+ tobesaved[last] = helpers.simplify {
+ metadata = {
+ name = name,
+ tags = tags,
+ plus = plus,
minus = minus,
},
+ index = last,
+ data = data or "error",
+ userdata = userdata and type(userdata) == "string" and helpers.touserdata(userdata),
references = {
- section = sections.currentid(),
+ section = sections.currentid(),
},
- data = data or "error",
- parameters = parameters,
}
- local allstate = states[name].all
if not next(tags) then
- if allstate ~= "hide" then
- blocks.print(name,data,parameters)
+ if all ~= "hide" then
+ printblock(last,name,data)
elseif plus then
- blocks.print(name,data,parameters,true)
+ printblock(last,name,data,true)
end
else
local sn = states[name]
for tag, _ in next, tags do
if sn[tag] == nil then
- if allstate ~= "hide" then
- blocks.print(name,data,parameters)
+ if all ~= "hide" then
+ printblock(last,name,data)
break
end
elseif sn[tag] ~= "hide" then
- blocks.print(name,data,parameters)
+ printblock(last,name,data)
break
end
end
@@ -157,7 +183,8 @@ end
-- interface
-implement { name = "definestructureblock", actions = blocks.define, arguments = "string" }
-implement { name = "savestructureblock", actions = blocks.save, arguments = "4 strings" }
-implement { name = "selectstructureblock", actions = blocks.select, arguments = "4 strings" }
-implement { name = "setstructureblockstate", actions = blocks.setstate, arguments = "3 strings" }
+implement { name = "definestructureblock", actions = blocks.define, arguments = "string" }
+implement { name = "savestructureblock", actions = blocks.save, arguments = "4 strings" }
+implement { name = "selectstructureblock", actions = blocks.select, arguments = "4 strings" }
+implement { name = "setstructureblockstate", actions = blocks.setstate, arguments = "3 strings" }
+implement { name = "structureblockuservariable", actions = blocks.uservariable, arguments = { "integer", "string" } }
diff --git a/tex/context/base/mkiv/strc-blk.mkiv b/tex/context/base/mkiv/strc-blk.mkiv
index 1ff7ec51b..4d7437b37 100644
--- a/tex/context/base/mkiv/strc-blk.mkiv
+++ b/tex/context/base/mkiv/strc-blk.mkiv
@@ -35,14 +35,14 @@
\appendtoks
\clf_definestructureblock{\currentblock}%
\setuevalue{\e!begin\currentblock}{\dotripleempty\strc_blocks_begin[\currentblock]}%
- \setuevalue{\e!end \currentblock}{}%
+ \letvalue {\e!end \currentblock}\donothing
\to \everydefineblock
\unexpanded\def\strc_blocks_begin[#1][#2][#3]%
- {\normalexpanded{\buff_pickup{@block@}{\e!begin#1}{\e!end#1}}
- {}% before
- {\clf_savestructureblock{#1}{#2}{#3}{@block@}}%
- \plusone}% after
+ {\normalexpanded{\buff_pickup{\??block}{\e!begin#1}{\e!end#1}}
+ {}%
+ {\clf_savestructureblock{#1}{#2}{#3}{\??block}}%
+ \plusone}%
\let\strc_blocks_setup\relax
@@ -54,11 +54,13 @@
{\dostopnormalblock
\stopnointerference}
+\newconstant\c_strc_blocks_index
+
\unexpanded\def\dostartnormalblock#1#2% called at lua end
- {\bgroup
+ {\begingroup
\visibletrue % will change
- \edef\currentblock{#1}%
- \setupcurrentblock[#2]%
+ \edef\currentblock{#2}%
+ \c_strc_blocks_index#1\relax
\strc_blocks_setup
\let\strc_blocks_setup\relax
\blockparameter\c!before
@@ -70,13 +72,13 @@
{\removeunwantedspaces
\blockparameter\c!after
\par % todo: alternative = text, paragraph
- \egroup}
+ \endgroup}
\def\strc_blocks_set_state[#1][#2][#3]% state name tag
{\clf_setstructureblockstate{#1}{#2}{#3}}
\def\strc_blocks_select[#1][#2][#3][#4]% state name tag setups
- {\bgroup
+ {\begingroup
\doifelseassignment{#3}
{\getparameters[\??blocktemp][\c!criterium=\v!text,#3]%
\def\strc_blocks_setup{\setupcurrentblock[#3]}%
@@ -84,7 +86,10 @@
{\getparameters[\??blocktemp][\c!criterium=\v!text,#4]%
\def\strc_blocks_setup{\setupcurrentblock[#4]}%
\clf_selectstructureblock{#1}{#2}{#3}{\csname\??blocktemp\c!criterium\endcsname}}%
- \egroup}
+ \endgroup}
+
+\def\blockuservariable#1%
+ {\clf_structureblockuservariable\c_strc_blocks_index{#1}}
% hide : save, if [+] also hidden execute
% keep : save and normal execute
diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua
index dc680cda0..133c93fe4 100644
--- a/tex/context/base/mkiv/supp-box.lua
+++ b/tex/context/base/mkiv/supp-box.lua
@@ -41,7 +41,7 @@ local getid = nuts.getid
local getlist = nuts.getlist
local getattribute = nuts.getattribute
local getbox = nuts.getbox
-local getdir = nuts.getdir
+local getdirection = nuts.getdirection
local getwidth = nuts.getwidth
local takebox = nuts.takebox
@@ -66,6 +66,7 @@ local list_dimensions = nuts.dimensions
local hpack = nuts.hpack
local nextdisc = nuts.traversers.disc
+local nextdir = nuts.traversers.dir
local nexthlist = nuts.traversers.hlist
local listtoutf = nodes.listtoutf
@@ -419,29 +420,41 @@ interfaces.implement {
nodes.setboxtonaturalwd = setboxtonaturalwd
-local function firstdirinbox(n)
- local b = getbox(n)
- if b then
- local l = getlist(b)
- if l then
- for h in nexthlist, l do
- return getdir(h)
+local doifelse = commands.doifelse
+
+do
+
+ local dirvalues = nodes.dirvalues
+ local righttoleft = dirvalues.righttoleft
+ local lefttoright = dirvalues.lefttoright
+
+ local function firstdirinbox(n)
+ local b = getbox(n)
+ if b then
+ local l = getlist(b)
+ if l then
+ for d in nextdir, l do
+ return getdirection(d)
+ end
+ for h in nexthlist, l do
+ return getdirection(h)
+ end
end
end
+ return lefttoright
end
-end
-nodes.firstdirinbox = firstdirinbox
+ nodes.firstdirinbox = firstdirinbox
-local doifelse = commands.doifelse
+ interfaces.implement {
+ name = "doifelserighttoleftinbox",
+ arguments = "integer",
+ actions = function(n)
+ doifelse(firstdirinbox(n) == righttoleft)
+ end
+ }
-interfaces.implement {
- name = "doifelserighttoleftinbox",
- arguments = "integer",
- actions = function(n)
- doifelse(firstdirinbox(n) == "TRT")
- end
-}
+end
-- new (handy for mp) .. might move to its own module
diff --git a/tex/context/base/mkiv/task-ini.lua b/tex/context/base/mkiv/task-ini.lua
index 5695be936..48aa65baa 100644
--- a/tex/context/base/mkiv/task-ini.lua
+++ b/tex/context/base/mkiv/task-ini.lua
@@ -127,7 +127,7 @@ appendaction("contributers", "normalizers", "nodes.handlers.flattenline",
appendaction("contributers", "normalizers", "nodes.handlers.textbackgrounds", nil, "nut", "disabled" )
appendaction("vboxbuilders", "normalizers", "nodes.handlers.backgroundsvbox", nil, "nut", "disabled" )
---------("vboxbuilders", "normalizers", "typesetters.margins.localhandler", nil, "nut", "disabled" )
+------------("vboxbuilders", "normalizers", "typesetters.margins.localhandler", nil, "nut", "disabled" )
appendaction("vboxbuilders", "normalizers", "builders.vspacing.vboxhandler", nil, "nut", "enabled" )
appendaction("vboxbuilders", "normalizers", "builders.profiling.vboxhandler", nil, "nut", "disabled" )
appendaction("vboxbuilders", "normalizers", "typesetters.checkers.handler", nil, "nut", "disabled" )
diff --git a/tex/context/base/mkiv/trac-vis.lua b/tex/context/base/mkiv/trac-vis.lua
index 5c92a80f8..6ae65509b 100644
--- a/tex/context/base/mkiv/trac-vis.lua
+++ b/tex/context/base/mkiv/trac-vis.lua
@@ -63,7 +63,7 @@ local getdisc = nuts.getdisc
local getwhd = nuts.getwhd
local getkern = nuts.getkern
local getpenalty = nuts.getpenalty
-local getdir = nuts.getdir
+----- getdirection = nuts.getdirection
local getwidth = nuts.getwidth
local getdepth = nuts.getdepth
local getshift = nuts.getshift
@@ -118,6 +118,10 @@ local stoptiming = statistics.stoptiming
local a_visual = attributes.private("visual")
local a_layer = attributes.private("viewerlayer")
+----- dirvalues = nodes.dirvalues
+----- LTL = dirvalues.LTL
+----- RTT = dirvalues.RTT
+
local band = bit32.band
local bor = bit32.bor
@@ -705,8 +709,8 @@ local ruledbox do
local wd, ht, dp = getwhd(current)
if wd ~= 0 then
local shift = getshift(current)
- -- local dir = getdir(current)
- -- if dir == "LTL" or dir == "RRT" then
+ -- local dir = getdirection(current)
+ -- if dir == LTL or dir == RRT then
-- wd, ht, dp = ht + dp, wd, 0
-- end
local next = getnext(current)
@@ -854,8 +858,8 @@ local ruledglyph do
-- local wd = chardata[getfont(current)][getchar(current)].width
if wd ~= 0 then
local wd, ht, dp = getwhd(current)
- -- local dir = getdir(current)
- -- if dir == "LTL" or dir = "RTT" then
+ -- local dir = getdirection(current)
+ -- if dir == LTL or dir == RTT then
-- wd, ht, dp = ht + dp, wd, 0
-- end
local next = getnext(current)
diff --git a/tex/context/base/mkiv/typo-bld.lua b/tex/context/base/mkiv/typo-bld.lua
index 54dfacc15..1c96947db 100644
--- a/tex/context/base/mkiv/typo-bld.lua
+++ b/tex/context/base/mkiv/typo-bld.lua
@@ -199,11 +199,7 @@ function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
local before = count_nodes(head)
head, done = vboxactions(head,groupcode,size,packtype,maxdepth,direction)
local after = count_nodes(head)
- if done then
- nodes.processors.tracer("vpack","changed",head,groupcode,before,after,true)
- else
- nodes.processors.tracer("vpack","unchanged",head,groupcode,before,after,true)
- end
+ nodes.processors.tracer("vpack",head,groupcode,before,after,done)
else
head, done = vboxactions(head,groupcode)
end
@@ -256,7 +252,8 @@ function builders.buildpage_filter(groupcode)
if trace_page_builder then
report(groupcode)
end
- return nil, false -- no return value needed
+-- return nil, false -- no return value needed
+ return nil
end
end
diff --git a/tex/context/base/mkiv/typo-wrp.lua b/tex/context/base/mkiv/typo-wrp.lua
index 13bb5a0cc..3be64f53e 100644
--- a/tex/context/base/mkiv/typo-wrp.lua
+++ b/tex/context/base/mkiv/typo-wrp.lua
@@ -8,48 +8,67 @@ if not modules then modules = { } end modules ['typo-wrp'] = {
-- begin/end par wrapping stuff ... more to come
-local nodecodes = nodes.nodecodes
+local nodecodes = nodes.nodecodes
+local gluecodes = nodes.gluecodes
+local penaltycodes = nodes.penaltycodes
+local boundarycodes = nodes.boundarycodes
-local glue_code = nodecodes.glue
-local penalty_code = nodecodes.penalty
-local parfill_skip_code = nodes.gluecodes.parfillskip
-local user_penalty_code = nodes.penaltycodes.userpenalty
+local glue_code = nodecodes.glue
+local penalty_code = nodecodes.penalty
+local boundary_code = nodecodes.boundary
-local nuts = nodes.nuts
+local parfill_skip_code = gluecodes.parfillskip
-local find_node_tail = nuts.tail
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getsubtype = nuts.getsubtype
-local getpenalty = nuts.getpenalty
-local remove = nuts.remove
+local user_penalty_code = penaltycodes.userpenalty
+local line_penalty_code = penaltycodes.linepenalty
+local linebreak_penalty_code = penaltycodes.linebreakpenalty
-local enableaction = nodes.tasks.enableaction
+local word_boundary_code = boundarycodes.word
-local wrappers = { }
-typesetters.wrappers = wrappers
+local nuts = nodes.nuts
-local trace_wrappers = trackers.register("typesetters.wrappers",function(v) trace_wrappers = v end)
+local find_node_tail = nuts.tail
+local getprev = nuts.getprev
+local getid = nuts.getid
+local getsubtype = nuts.getsubtype
+local getpenalty = nuts.getpenalty
+local remove = nuts.remove
-local report = logs.reporter("paragraphs","wrappers")
+local enableaction = nodes.tasks.enableaction
+
+local wrappers = { }
+typesetters.wrappers = wrappers
+
+local trace_wrappers = trackers.register("typesetters.wrappers",function(v) trace_wrappers = v end)
+
+local report = logs.reporter("paragraphs","wrappers")
-- we really need to pass tail too ... but then we need to check all the plugins
-- bah ... slowdown
+-- This check is very tight to the crlf definition. We check for:
+--
+-- [break -10000] [wordboundary] [line(break)penalty] [parfillskip]
+--
+-- If needed we can extend this checker for other cases but then we will also
+-- use attributes.
+
local function remove_dangling_crlf(head,tail)
- if tail and getid(tail) == glue_code and getsubtype(tail) == parfill_skip_code then
+ if head and tail and getid(tail) == glue_code and getsubtype(tail) == parfill_skip_code then
tail = getprev(tail)
- if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getpenalty(tail) == 10000 then
- tail = getprev(tail)
- if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getpenalty(tail) == -10000 then
- if tail == head then
- -- can't happen
- else
- if trace_wrappers then
- report("removing a probably unwanted end-of-par break in line %s (guess)",tex.inputlineno)
+ if tail and getid(tail) == penalty_code then
+ local subtype = getsubtype(tail)
+ if subtype == line_penalty_code or subtype == linebreak_penalty_code then
+ tail = getprev(tail)
+ if tail and getid(tail) == boundary_code and getsubtype(tail) == word_boundary_code then
+ tail = getprev(tail)
+ if tail ~= head and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getpenalty(tail) == -10000 then
+ if trace_wrappers then
+ report("removing a probably unwanted end-of-par break in line %s (guess)",tex.inputlineno)
+ end
+ remove(head,tail,true)
+ return head, tail
end
- remove(head,tail,true)
- return head, tail
end
end
end
diff --git a/tex/context/base/mkiv/typo-wrp.mkiv b/tex/context/base/mkiv/typo-wrp.mkiv
index 0e010515b..4e9ecf2e1 100644
--- a/tex/context/base/mkiv/typo-wrp.mkiv
+++ b/tex/context/base/mkiv/typo-wrp.mkiv
@@ -40,18 +40,21 @@
\unexpanded\def\spac_crlf
{\clf_enablecrlf % once
\unskip
- \prewordbreak % here or in \spac_crlf_placeholder
\spac_crlf_placeholder
\ifcase\raggedstatus\hfil\or\or\or\hfil\fi
+ % in bad usage this can lead to: [break -10000] [wordboundary] [line(break)penalty] [parfillskip]
\break
- \hskip\zeropoint % new so that the next word also hyphenates
+ \wordboundary
+ % which we then remove (maybe we should flag the wordboundary with an attribute but not now
\ignorespaces}
\unexpanded\def\spac_crlf_placeholder
{\strut}
\unexpanded\def\spac_crlf_placeholder_show
- {\hbox to \zeropoint{\strut{\infofont\kern.25\emwidth}\lohi{\infofont CR}{\infofont LF}\hss}}
+ {\wordboundary
+ %\nobreak
+ \hpack to \zeropoint{\strut{\infofont\kern.25\emwidth}\lohi{\infofont CR}{\infofont LF}\hss}}
\unexpanded\def\settestcrlf
{\let\spac_crlf_placeholder\spac_crlf_placeholder_show}
diff --git a/tex/context/base/mkiv/util-seq.lua b/tex/context/base/mkiv/util-seq.lua
index 4f4cd4a4d..e7a503faf 100644
--- a/tex/context/base/mkiv/util-seq.lua
+++ b/tex/context/base/mkiv/util-seq.lua
@@ -17,8 +17,9 @@ use locals to refer to them when compiling the chain.</p>
-- todo: protect groups (as in tasks)
-local gsub, concat, gmatch = string.gsub, table.concat, string.gmatch
-local type, load = type, load
+local gsub, gmatch = string.gsub, string.gmatch
+local concat, sortedkeys = table.concat, table.sortedkeys
+local type, load, next, tostring = type, load, next, tostring
utilities = utilities or { }
local tables = utilities.tables
@@ -75,6 +76,7 @@ function sequencers.new(t) -- was reset
gskip = { },
dirty = true,
runner = nil,
+ steps = 0,
}
if t then
s.arguments = t.arguments
@@ -292,6 +294,7 @@ local function construct(t)
end
end
t.dirty = false
+ t.steps = n
if n == 0 then
t.compiled = ""
else
@@ -399,6 +402,7 @@ function sequencers.nodeprocessor(t,nofarguments)
end
end
end
+ t.steps = steps
local processor
if steps == 0 then
processor = templates.default or construct { }
@@ -412,15 +416,13 @@ function sequencers.nodeprocessor(t,nofarguments)
actions = concat(calls,"\n"),
}
end
-
-- processor = "print('running : " .. (t.name or "?") .. "')\n" .. processor
-- print(processor)
-
return processor
end
statistics.register("used sequences",function()
if next(usednames) then
- return table.concat(table.sortedkeys(usednames)," ")
+ return concat(sortedkeys(usednames)," ")
end
end)
diff --git a/tex/context/base/mkiv/util-sql-logins.lua b/tex/context/base/mkiv/util-sql-logins.lua
index dcb48fb35..6773f91bf 100644
--- a/tex/context/base/mkiv/util-sql-logins.lua
+++ b/tex/context/base/mkiv/util-sql-logins.lua
@@ -244,6 +244,11 @@ function logins.userpermitted(db,name)
}
end
if not data or not data.name then
+ if not data then
+ report_logins("no user data for %a",name)
+ else
+ report_logins("no name entry for %a",name)
+ end
local d = {
name = name,
state = 0,
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index b467a753e..f2279cf49 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index a7b264970..4a0d5e8bb 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 043b461d7..9714f39bb 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 : 07/18/18 17:33:07
+-- merge date : 07/20/18 21:20:26
do -- begin closure to overcome local limits and interference