summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2015-07-01 23:15:05 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2015-07-01 23:15:05 +0200
commit865735f6a380cd9a5b5eb1b64d4c82b78e7c0ed1 (patch)
tree7684538cdd4ba6a2d0ee57005bfdc0d406555bd5
parentce4c6e98782de9bab14ed3963c403edbac974879 (diff)
downloadcontext-865735f6a380cd9a5b5eb1b64d4c82b78e7c0ed1.tar.gz
2015-07-01 21:42:00
-rw-r--r--scripts/context/lua/mtx-fonts.lua2
-rw-r--r--scripts/context/lua/mtxlibs.lua1
-rw-r--r--scripts/context/lua/mtxrun.lua253
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua253
-rw-r--r--scripts/context/stubs/unix/mtxrun253
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua253
-rw-r--r--tex/context/base/anch-bck.mkvi1
-rw-r--r--tex/context/base/attr-ini.mkiv16
-rw-r--r--tex/context/base/back-exp.lua14
-rw-r--r--tex/context/base/back-exp.mkiv1
-rw-r--r--tex/context/base/char-cjk.lua926
-rw-r--r--tex/context/base/char-def.lua13682
-rw-r--r--tex/context/base/char-ini.lua16
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4203 -> 4202 bytes
-rw-r--r--tex/context/base/context.mkiv6
-rw-r--r--tex/context/base/font-agl.lua12
-rw-r--r--tex/context/base/font-cff.lua721
-rw-r--r--tex/context/base/font-inj.lua23
-rw-r--r--tex/context/base/font-lib.mkvi1
-rw-r--r--tex/context/base/font-map.lua473
-rw-r--r--tex/context/base/font-mis.lua2
-rw-r--r--tex/context/base/font-otf.lua165
-rw-r--r--tex/context/base/font-otl.lua25
-rw-r--r--tex/context/base/font-otn.lua28
-rw-r--r--tex/context/base/font-otp.lua5
-rw-r--r--tex/context/base/font-otr.lua655
-rw-r--r--tex/context/base/font-tmp.lua34
-rw-r--r--tex/context/base/font-ttf.lua31
-rw-r--r--tex/context/base/font-vf.lua52
-rw-r--r--tex/context/base/lpdf-tag.lua28
-rw-r--r--tex/context/base/luat-cbk.lua146
-rw-r--r--tex/context/base/luat-fio.lua8
-rw-r--r--tex/context/base/luat-lib.mkiv1
-rw-r--r--tex/context/base/lxml-ini.mkiv20
-rw-r--r--tex/context/base/lxml-tex.lua24
-rw-r--r--tex/context/base/meta-imp-outlines.mkiv28
-rw-r--r--tex/context/base/node-fnt.lua64
-rw-r--r--tex/context/base/s-fonts-shapes.lua5
-rw-r--r--tex/context/base/s-fonts-shapes.mkiv52
-rw-r--r--tex/context/base/status-files.pdfbin24442 -> 24438 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin252050 -> 253676 bytes
-rw-r--r--tex/context/base/strc-num.mkiv16
-rw-r--r--tex/context/base/strc-ref.lua6
-rw-r--r--tex/context/base/strc-tag.mkiv23
-rw-r--r--tex/context/base/type-imp-mscore.mkiv15
-rw-r--r--tex/context/base/util-fil.lua78
-rw-r--r--tex/context/base/util-sac.lua202
-rw-r--r--tex/context/base/x-asciimath.lua14
-rw-r--r--tex/generic/context/luatex/luatex-fonts-cbk.lua33
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua399
51 files changed, 17742 insertions, 1326 deletions
diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua
index 7f2a6a87f..dde145e50 100644
--- a/scripts/context/lua/mtx-fonts.lua
+++ b/scripts/context/lua/mtx-fonts.lua
@@ -10,7 +10,7 @@ local getargument = environment.getargument
local setargument = environment.setargument
local givenfiles = environment.files
-local otfversion = 2.815
+local otfversion = 2.816
local helpinfo = [[
<?xml version="1.0"?>
diff --git a/scripts/context/lua/mtxlibs.lua b/scripts/context/lua/mtxlibs.lua
index 30567d3e0..91eb9f9fa 100644
--- a/scripts/context/lua/mtxlibs.lua
+++ b/scripts/context/lua/mtxlibs.lua
@@ -89,6 +89,7 @@ local ownlibs = {
"util-str.lua",
"util-tab.lua",
"util-fil.lua",
+ "util-sac.lua",
"util-sto.lua",
-- "util-lua.lua", -- no need for compiling
"util-prs.lua",
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 111691f61..19a23ceca 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -6575,7 +6575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 2521, stripped down to: 1962
+-- original size: 3387, stripped down to: 2739
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6589,17 +6589,61 @@ local extract=bit32.extract
utilities=utilities or {}
local files={}
utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ zerobased[f]=zb or false
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
function files.readbyte(f)
return byte(f:read(1))
end
-function files.readchar(f)
- return f:read(1)
-end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
-function files.skipbytes(f,n)
- f:read(n or 1)
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
end
function files.readinteger1(f)
local n=byte(f:read(1))
@@ -6651,9 +6695,6 @@ function files.readfixed4(f)
return n+(0x100*c+d)/0xFFFF
end
end
-function files.readstring(f,n)
- return f:read(n or 1)
-end
function files.read2dot14(f)
local a,b=byte(f:read(2),1,2)
local n=0x100*a+b
@@ -6666,6 +6707,193 @@ function files.read2dot14(f)
return n+m/0x4000
end
end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4062, stripped down to: 3208
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -18106,10 +18334,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 752548
--- stripped bytes : 271649
+-- original bytes : 757476
+-- stripped bytes : 272592
-- end library merge
@@ -18154,6 +18382,7 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 111691f61..19a23ceca 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -6575,7 +6575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 2521, stripped down to: 1962
+-- original size: 3387, stripped down to: 2739
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6589,17 +6589,61 @@ local extract=bit32.extract
utilities=utilities or {}
local files={}
utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ zerobased[f]=zb or false
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
function files.readbyte(f)
return byte(f:read(1))
end
-function files.readchar(f)
- return f:read(1)
-end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
-function files.skipbytes(f,n)
- f:read(n or 1)
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
end
function files.readinteger1(f)
local n=byte(f:read(1))
@@ -6651,9 +6695,6 @@ function files.readfixed4(f)
return n+(0x100*c+d)/0xFFFF
end
end
-function files.readstring(f,n)
- return f:read(n or 1)
-end
function files.read2dot14(f)
local a,b=byte(f:read(2),1,2)
local n=0x100*a+b
@@ -6666,6 +6707,193 @@ function files.read2dot14(f)
return n+m/0x4000
end
end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4062, stripped down to: 3208
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -18106,10 +18334,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 752548
--- stripped bytes : 271649
+-- original bytes : 757476
+-- stripped bytes : 272592
-- end library merge
@@ -18154,6 +18382,7 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 111691f61..19a23ceca 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -6575,7 +6575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 2521, stripped down to: 1962
+-- original size: 3387, stripped down to: 2739
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6589,17 +6589,61 @@ local extract=bit32.extract
utilities=utilities or {}
local files={}
utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ zerobased[f]=zb or false
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
function files.readbyte(f)
return byte(f:read(1))
end
-function files.readchar(f)
- return f:read(1)
-end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
-function files.skipbytes(f,n)
- f:read(n or 1)
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
end
function files.readinteger1(f)
local n=byte(f:read(1))
@@ -6651,9 +6695,6 @@ function files.readfixed4(f)
return n+(0x100*c+d)/0xFFFF
end
end
-function files.readstring(f,n)
- return f:read(n or 1)
-end
function files.read2dot14(f)
local a,b=byte(f:read(2),1,2)
local n=0x100*a+b
@@ -6666,6 +6707,193 @@ function files.read2dot14(f)
return n+m/0x4000
end
end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4062, stripped down to: 3208
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -18106,10 +18334,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 752548
--- stripped bytes : 271649
+-- original bytes : 757476
+-- stripped bytes : 272592
-- end library merge
@@ -18154,6 +18382,7 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 111691f61..19a23ceca 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -6575,7 +6575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fil"] = package.loaded["util-fil"] or true
--- original size: 2521, stripped down to: 1962
+-- original size: 3387, stripped down to: 2739
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6589,17 +6589,61 @@ local extract=bit32.extract
utilities=utilities or {}
local files={}
utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ zerobased[f]=zb or false
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
function files.readbyte(f)
return byte(f:read(1))
end
-function files.readchar(f)
- return f:read(1)
-end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
-function files.skipbytes(f,n)
- f:read(n or 1)
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
end
function files.readinteger1(f)
local n=byte(f:read(1))
@@ -6651,9 +6695,6 @@ function files.readfixed4(f)
return n+(0x100*c+d)/0xFFFF
end
end
-function files.readstring(f,n)
- return f:read(n or 1)
-end
function files.read2dot14(f)
local a,b=byte(f:read(2),1,2)
local n=0x100*a+b
@@ -6666,6 +6707,193 @@ function files.read2dot14(f)
return n+m/0x4000
end
end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4062, stripped down to: 3208
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -18106,10 +18334,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 752548
--- stripped bytes : 271649
+-- original bytes : 757476
+-- stripped bytes : 272592
-- end library merge
@@ -18154,6 +18382,7 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
diff --git a/tex/context/base/anch-bck.mkvi b/tex/context/base/anch-bck.mkvi
index 273cf0159..ee392f114 100644
--- a/tex/context/base/anch-bck.mkvi
+++ b/tex/context/base/anch-bck.mkvi
@@ -256,7 +256,6 @@
%
\usetextbackgroundstyleandcolor\c!style\c!color
\nowhitespace
- \nobreak % new per 23/04/2006 (else potential break when whitespace)
\seteffectivehsize
\doinhibitblank % \blank[\v!disable]% new
\par}
diff --git a/tex/context/base/attr-ini.mkiv b/tex/context/base/attr-ini.mkiv
index c6b798d18..614c30da0 100644
--- a/tex/context/base/attr-ini.mkiv
+++ b/tex/context/base/attr-ini.mkiv
@@ -108,3 +108,19 @@
\unexpanded\def\showattributes{\clf_showattributes}
\protect \endinput
+
+% for the luatex list:
+%
+% \attributedef\zeroattribute=0
+% \attributedef\someatriubute=999
+%
+% \directlua {
+% local createtoken = newtoken.create
+% function attributenumber(name)
+% local n = createtoken(name).mode - createtoken("zeroattribute").mode
+% return n >= 0 and n or false
+% end
+% }
+%
+% \directlua{print(attributenumber("noneattribute"))}
+% \directlua{print(attributenumber("someattribute"))}
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 33b6aa1e8..27b4db8ef 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -139,6 +139,9 @@ local specifications = structurestags.specifications
local properties = structurestags.properties
local locatedtag = structurestags.locatedtag
+local usewithcare = { }
+structurestags.usewithcare = usewithcare
+
local starttiming = statistics.starttiming
local stoptiming = statistics.stoptiming
@@ -771,12 +774,13 @@ end
do
- local image = { }
- usedimages.image = image
+ local image = { }
+ usedimages.image = image
+ usewithcare.images = image
local f_id = formatters["%s-%s"]
- function structurestags.setfigure(name,used,page,width,height)
+ function structurestags.setfigure(name,used,page,width,height,label)
local fulltag = locatedtag("image")
local spec = specifications[fulltag]
local page = tonumber(page)
@@ -787,6 +791,7 @@ do
page = page and page > 1 and page or nil,
width = todimen(width, "cm","%0.3F%s"),
height = todimen(height,"cm","%0.3F%s"),
+ label = label,
}
end
@@ -798,6 +803,7 @@ do
setattribute(di,"id",data.id)
setattribute(di,"width",data.width)
setattribute(di,"height",data.height)
+ setattribute(di,"label",data.height)
end
end
@@ -3622,7 +3628,7 @@ implement {
implement {
name = "settagfigure",
actions = structurestags.setfigure,
- arguments = { "string", "string", "string", "dimen", "dimen" }
+ arguments = { "string", "string", "string", "dimen", "dimen", "string" }
}
implement {
diff --git a/tex/context/base/back-exp.mkiv b/tex/context/base/back-exp.mkiv
index a4ebe38aa..ed521e652 100644
--- a/tex/context/base/back-exp.mkiv
+++ b/tex/context/base/back-exp.mkiv
@@ -125,6 +125,7 @@
{\figurefilepage}%
\dimexpr\figurewidth\relax
\dimexpr\figureheight\relax
+ {\figurelabel}%
\fi}%
\to \everyenableelements
diff --git a/tex/context/base/char-cjk.lua b/tex/context/base/char-cjk.lua
index 30f618896..42fb49555 100644
--- a/tex/context/base/char-cjk.lua
+++ b/tex/context/base/char-cjk.lua
@@ -6,12 +6,15 @@ if not modules then modules = { } end modules ['char-cjk'] = {
license = "see context related readme files"
}
-local setmetatable = setmetatable
+local setmetatable, next = setmetatable, next
local insert = table.insert
local floor = math.floor
local formatters = string.formatters
local utfchar = utf.char
+local setmetatableindex = table.setmetatableindex
+
+characters = characters or { }
local ranges = characters.ranges
local allocate = utilities.storage.allocate
@@ -276,6 +279,911 @@ setmetatable(hangul_syllable_range, hangul_syllable_metatable)
-- CJK Ideograph
+local knownvariants = {
+ [0x0349E] = { [0x0FE00] = 0x2F80C },
+ [0x034B9] = { [0x0FE00] = 0x2F813 },
+ [0x034BB] = { [0x0FE00] = 0x2F9CA },
+ [0x034DF] = { [0x0FE00] = 0x2F81F },
+ [0x03515] = { [0x0FE00] = 0x2F824 },
+ [0x036EE] = { [0x0FE00] = 0x2F867 },
+ [0x036FC] = { [0x0FE00] = 0x2F868 },
+ [0x03781] = { [0x0FE00] = 0x2F876 },
+ [0x0382F] = { [0x0FE00] = 0x2F883 },
+ [0x03862] = { [0x0FE00] = 0x2F888 },
+ [0x0387C] = { [0x0FE00] = 0x2F88A },
+ [0x038C7] = { [0x0FE00] = 0x2F896 },
+ [0x038E3] = { [0x0FE00] = 0x2F89B },
+ [0x0391C] = { [0x0FE00] = 0x2F8A2 },
+ [0x0393A] = { [0x0FE00] = 0x2F8A1 },
+ [0x03A2E] = { [0x0FE00] = 0x2F8C2 },
+ [0x03A6C] = { [0x0FE00] = 0x2F8C7 },
+ [0x03AE4] = { [0x0FE00] = 0x2F8D1 },
+ [0x03B08] = { [0x0FE00] = 0x2F8D0 },
+ [0x03B19] = { [0x0FE00] = 0x2F8CE },
+ [0x03B49] = { [0x0FE00] = 0x2F8DE },
+ [0x03B9D] = { [0x0FE00] = 0x0FAD2, [0x0FE01] = 0x2F8E7 },
+ [0x03C18] = { [0x0FE00] = 0x2F8EE },
+ [0x03C4E] = { [0x0FE00] = 0x2F8F2 },
+ [0x03D33] = { [0x0FE00] = 0x2F90A },
+ [0x03D96] = { [0x0FE00] = 0x2F916 },
+ [0x03EAC] = { [0x0FE00] = 0x2F92A },
+ [0x03EB8] = { [0x0FE00] = 0x2F92C, [0x0FE01] = 0x2F92D },
+ [0x03F1B] = { [0x0FE00] = 0x2F933 },
+ [0x03FFC] = { [0x0FE00] = 0x2F93E },
+ [0x04008] = { [0x0FE00] = 0x2F93F },
+ [0x04018] = { [0x0FE00] = 0x0FAD3 },
+ [0x04039] = { [0x0FE00] = 0x0FAD4, [0x0FE01] = 0x2F949 },
+ [0x04046] = { [0x0FE00] = 0x2F94B },
+ [0x04096] = { [0x0FE00] = 0x2F94C },
+ [0x040E3] = { [0x0FE00] = 0x2F951 },
+ [0x0412F] = { [0x0FE00] = 0x2F958 },
+ [0x04202] = { [0x0FE00] = 0x2F960 },
+ [0x04227] = { [0x0FE00] = 0x2F964 },
+ [0x042A0] = { [0x0FE00] = 0x2F967 },
+ [0x04301] = { [0x0FE00] = 0x2F96D },
+ [0x04334] = { [0x0FE00] = 0x2F971 },
+ [0x04359] = { [0x0FE00] = 0x2F974 },
+ [0x043D5] = { [0x0FE00] = 0x2F981 },
+ [0x043D9] = { [0x0FE00] = 0x2F8D7 },
+ [0x0440B] = { [0x0FE00] = 0x2F984 },
+ [0x0446B] = { [0x0FE00] = 0x2F98E },
+ [0x0452B] = { [0x0FE00] = 0x2F9A7 },
+ [0x0455D] = { [0x0FE00] = 0x2F9AE },
+ [0x04561] = { [0x0FE00] = 0x2F9AF },
+ [0x0456B] = { [0x0FE00] = 0x2F9B2 },
+ [0x045D7] = { [0x0FE00] = 0x2F9BF },
+ [0x045F9] = { [0x0FE00] = 0x2F9C2 },
+ [0x04635] = { [0x0FE00] = 0x2F9C8 },
+ [0x046BE] = { [0x0FE00] = 0x2F9CD },
+ [0x046C7] = { [0x0FE00] = 0x2F9CE },
+ [0x04995] = { [0x0FE00] = 0x2F9EF },
+ [0x049E6] = { [0x0FE00] = 0x2F9F2 },
+ [0x04A6E] = { [0x0FE00] = 0x2F9F8 },
+ [0x04A76] = { [0x0FE00] = 0x2F9F9 },
+ [0x04AB2] = { [0x0FE00] = 0x2F9FC },
+ [0x04B33] = { [0x0FE00] = 0x2FA03 },
+ [0x04BCE] = { [0x0FE00] = 0x2FA08 },
+ [0x04CCE] = { [0x0FE00] = 0x2FA0D },
+ [0x04CED] = { [0x0FE00] = 0x2FA0E },
+ [0x04CF8] = { [0x0FE00] = 0x2FA11 },
+ [0x04D56] = { [0x0FE00] = 0x2FA16 },
+ [0x04E0D] = { [0x0FE00] = 0x0F967 },
+ [0x04E26] = { [0x0FE00] = 0x0FA70 },
+ [0x04E32] = { [0x0FE00] = 0x0F905 },
+ [0x04E38] = { [0x0FE00] = 0x2F801 },
+ [0x04E39] = { [0x0FE00] = 0x0F95E },
+ [0x04E3D] = { [0x0FE00] = 0x2F800 },
+ [0x04E41] = { [0x0FE00] = 0x2F802 },
+ [0x04E82] = { [0x0FE00] = 0x0F91B },
+ [0x04E86] = { [0x0FE00] = 0x0F9BA },
+ [0x04EAE] = { [0x0FE00] = 0x0F977 },
+ [0x04EC0] = { [0x0FE00] = 0x0F9FD },
+ [0x04ECC] = { [0x0FE00] = 0x2F819 },
+ [0x04EE4] = { [0x0FE00] = 0x0F9A8 },
+ [0x04F60] = { [0x0FE00] = 0x2F804 },
+ [0x04F80] = { [0x0FE00] = 0x0FA73 },
+ [0x04F86] = { [0x0FE00] = 0x0F92D },
+ [0x04F8B] = { [0x0FE00] = 0x0F9B5 },
+ [0x04FAE] = { [0x0FE00] = 0x0FA30, [0x0FE01] = 0x2F805 },
+ [0x04FBB] = { [0x0FE00] = 0x2F806 },
+ [0x04FBF] = { [0x0FE00] = 0x0F965 },
+ [0x05002] = { [0x0FE00] = 0x2F807 },
+ [0x0502B] = { [0x0FE00] = 0x0F9D4 },
+ [0x0507A] = { [0x0FE00] = 0x2F808 },
+ [0x05099] = { [0x0FE00] = 0x2F809 },
+ [0x050CF] = { [0x0FE00] = 0x2F80B },
+ [0x050DA] = { [0x0FE00] = 0x0F9BB },
+ [0x050E7] = { [0x0FE00] = 0x0FA31, [0x0FE01] = 0x2F80A },
+ [0x05140] = { [0x0FE00] = 0x0FA0C },
+ [0x05145] = { [0x0FE00] = 0x0FA74 },
+ [0x0514D] = { [0x0FE00] = 0x0FA32, [0x0FE01] = 0x2F80E },
+ [0x05154] = { [0x0FE00] = 0x2F80F },
+ [0x05164] = { [0x0FE00] = 0x2F810 },
+ [0x05167] = { [0x0FE00] = 0x2F814 },
+ [0x05168] = { [0x0FE00] = 0x0FA72 },
+ [0x05169] = { [0x0FE00] = 0x0F978 },
+ [0x0516D] = { [0x0FE00] = 0x0F9D1 },
+ [0x05177] = { [0x0FE00] = 0x2F811 },
+ [0x05180] = { [0x0FE00] = 0x0FA75 },
+ [0x0518D] = { [0x0FE00] = 0x2F815 },
+ [0x05192] = { [0x0FE00] = 0x2F8D2 },
+ [0x05195] = { [0x0FE00] = 0x2F8D3 },
+ [0x05197] = { [0x0FE00] = 0x2F817 },
+ [0x051A4] = { [0x0FE00] = 0x2F818 },
+ [0x051AC] = { [0x0FE00] = 0x2F81A },
+ [0x051B5] = { [0x0FE00] = 0x0FA71, [0x0FE01] = 0x2F81B },
+ [0x051B7] = { [0x0FE00] = 0x0F92E },
+ [0x051C9] = { [0x0FE00] = 0x0F979 },
+ [0x051CC] = { [0x0FE00] = 0x0F955 },
+ [0x051DC] = { [0x0FE00] = 0x0F954 },
+ [0x051DE] = { [0x0FE00] = 0x0FA15 },
+ [0x051F5] = { [0x0FE00] = 0x2F81D },
+ [0x05203] = { [0x0FE00] = 0x2F81E },
+ [0x05207] = { [0x0FE00] = 0x0FA00, [0x0FE01] = 0x2F850 },
+ [0x05217] = { [0x0FE00] = 0x0F99C },
+ [0x05229] = { [0x0FE00] = 0x0F9DD },
+ [0x0523A] = { [0x0FE00] = 0x0F9FF },
+ [0x0523B] = { [0x0FE00] = 0x2F820 },
+ [0x05246] = { [0x0FE00] = 0x2F821 },
+ [0x05272] = { [0x0FE00] = 0x2F822 },
+ [0x05277] = { [0x0FE00] = 0x2F823 },
+ [0x05289] = { [0x0FE00] = 0x0F9C7 },
+ [0x0529B] = { [0x0FE00] = 0x0F98A },
+ [0x052A3] = { [0x0FE00] = 0x0F99D },
+ [0x052B3] = { [0x0FE00] = 0x2F992 },
+ [0x052C7] = { [0x0FE00] = 0x0FA76, [0x0FE01] = 0x2F825 },
+ [0x052C9] = { [0x0FE00] = 0x0FA33, [0x0FE01] = 0x2F826 },
+ [0x052D2] = { [0x0FE00] = 0x0F952 },
+ [0x052DE] = { [0x0FE00] = 0x0F92F },
+ [0x052E4] = { [0x0FE00] = 0x0FA34, [0x0FE01] = 0x2F827 },
+ [0x052F5] = { [0x0FE00] = 0x0F97F },
+ [0x052FA] = { [0x0FE00] = 0x0FA77, [0x0FE01] = 0x2F828 },
+ [0x05305] = { [0x0FE00] = 0x2F829 },
+ [0x05306] = { [0x0FE00] = 0x2F82A },
+ [0x05317] = { [0x0FE00] = 0x0F963, [0x0FE01] = 0x2F82B },
+ [0x0533F] = { [0x0FE00] = 0x0F9EB },
+ [0x05349] = { [0x0FE00] = 0x2F82C },
+ [0x05351] = { [0x0FE00] = 0x0FA35, [0x0FE01] = 0x2F82D },
+ [0x0535A] = { [0x0FE00] = 0x2F82E },
+ [0x05373] = { [0x0FE00] = 0x2F82F },
+ [0x05375] = { [0x0FE00] = 0x0F91C },
+ [0x0537D] = { [0x0FE00] = 0x2F830 },
+ [0x0537F] = { [0x0FE00] = 0x2F831, [0x0FE01] = 0x2F832, [0x0FE02] = 0x2F833 },
+ [0x053C3] = { [0x0FE00] = 0x0F96B },
+ [0x053CA] = { [0x0FE00] = 0x2F836 },
+ [0x053DF] = { [0x0FE00] = 0x2F837 },
+ [0x053E5] = { [0x0FE00] = 0x0F906 },
+ [0x053EB] = { [0x0FE00] = 0x2F839 },
+ [0x053F1] = { [0x0FE00] = 0x2F83A },
+ [0x05406] = { [0x0FE00] = 0x2F83B },
+ [0x0540F] = { [0x0FE00] = 0x0F9DE },
+ [0x0541D] = { [0x0FE00] = 0x0F9ED },
+ [0x05438] = { [0x0FE00] = 0x2F83D },
+ [0x05442] = { [0x0FE00] = 0x0F980 },
+ [0x05448] = { [0x0FE00] = 0x2F83E },
+ [0x05468] = { [0x0FE00] = 0x2F83F },
+ [0x0549E] = { [0x0FE00] = 0x2F83C },
+ [0x054A2] = { [0x0FE00] = 0x2F840 },
+ [0x054BD] = { [0x0FE00] = 0x0F99E },
+ [0x054F6] = { [0x0FE00] = 0x2F841 },
+ [0x05510] = { [0x0FE00] = 0x2F842 },
+ [0x05553] = { [0x0FE00] = 0x2F843 },
+ [0x05555] = { [0x0FE00] = 0x0FA79 },
+ [0x05563] = { [0x0FE00] = 0x2F844 },
+ [0x05584] = { [0x0FE00] = 0x2F845, [0x0FE01] = 0x2F846 },
+ [0x05587] = { [0x0FE00] = 0x0F90B },
+ [0x05599] = { [0x0FE00] = 0x0FA7A, [0x0FE01] = 0x2F847 },
+ [0x0559D] = { [0x0FE00] = 0x0FA36, [0x0FE01] = 0x0FA78 },
+ [0x055AB] = { [0x0FE00] = 0x2F848 },
+ [0x055B3] = { [0x0FE00] = 0x2F849 },
+ [0x055C0] = { [0x0FE00] = 0x0FA0D },
+ [0x055C2] = { [0x0FE00] = 0x2F84A },
+ [0x055E2] = { [0x0FE00] = 0x0FA7B },
+ [0x05606] = { [0x0FE00] = 0x0FA37, [0x0FE01] = 0x2F84C },
+ [0x05651] = { [0x0FE00] = 0x2F84E },
+ [0x05668] = { [0x0FE00] = 0x0FA38 },
+ [0x05674] = { [0x0FE00] = 0x2F84F },
+ [0x056F9] = { [0x0FE00] = 0x0F9A9 },
+ [0x05716] = { [0x0FE00] = 0x2F84B },
+ [0x05717] = { [0x0FE00] = 0x2F84D },
+ [0x0578B] = { [0x0FE00] = 0x2F855 },
+ [0x057CE] = { [0x0FE00] = 0x2F852 },
+ [0x057F4] = { [0x0FE00] = 0x2F853 },
+ [0x0580D] = { [0x0FE00] = 0x2F854 },
+ [0x05831] = { [0x0FE00] = 0x2F857 },
+ [0x05832] = { [0x0FE00] = 0x2F856 },
+ [0x05840] = { [0x0FE00] = 0x0FA39 },
+ [0x0585A] = { [0x0FE00] = 0x0FA10, [0x0FE01] = 0x0FA7C },
+ [0x0585E] = { [0x0FE00] = 0x0F96C },
+ [0x058A8] = { [0x0FE00] = 0x0FA3A },
+ [0x058AC] = { [0x0FE00] = 0x2F858 },
+ [0x058B3] = { [0x0FE00] = 0x0FA7D },
+ [0x058D8] = { [0x0FE00] = 0x0F94A },
+ [0x058DF] = { [0x0FE00] = 0x0F942 },
+ [0x058EE] = { [0x0FE00] = 0x2F851 },
+ [0x058F2] = { [0x0FE00] = 0x2F85A },
+ [0x058F7] = { [0x0FE00] = 0x2F85B },
+ [0x05906] = { [0x0FE00] = 0x2F85C },
+ [0x0591A] = { [0x0FE00] = 0x2F85D },
+ [0x05922] = { [0x0FE00] = 0x2F85E },
+ [0x05944] = { [0x0FE00] = 0x0FA7E },
+ [0x05948] = { [0x0FE00] = 0x0F90C },
+ [0x05951] = { [0x0FE00] = 0x0F909 },
+ [0x05954] = { [0x0FE00] = 0x0FA7F },
+ [0x05962] = { [0x0FE00] = 0x2F85F },
+ [0x05973] = { [0x0FE00] = 0x0F981 },
+ [0x059D8] = { [0x0FE00] = 0x2F865 },
+ [0x059EC] = { [0x0FE00] = 0x2F862 },
+ [0x05A1B] = { [0x0FE00] = 0x2F863 },
+ [0x05A27] = { [0x0FE00] = 0x2F864 },
+ [0x05A62] = { [0x0FE00] = 0x0FA80 },
+ [0x05A66] = { [0x0FE00] = 0x2F866 },
+ [0x05AB5] = { [0x0FE00] = 0x2F986 },
+ [0x05B08] = { [0x0FE00] = 0x2F869 },
+ [0x05B28] = { [0x0FE00] = 0x0FA81 },
+ [0x05B3E] = { [0x0FE00] = 0x2F86A, [0x0FE01] = 0x2F86B },
+ [0x05B85] = { [0x0FE00] = 0x0FA04 },
+ [0x05BC3] = { [0x0FE00] = 0x2F86D },
+ [0x05BD8] = { [0x0FE00] = 0x2F86E },
+ [0x05BE7] = { [0x0FE00] = 0x0F95F, [0x0FE01] = 0x0F9AA, [0x0FE02] = 0x2F86F },
+ [0x05BEE] = { [0x0FE00] = 0x0F9BC },
+ [0x05BF3] = { [0x0FE00] = 0x2F870 },
+ [0x05BFF] = { [0x0FE00] = 0x2F872 },
+ [0x05C06] = { [0x0FE00] = 0x2F873 },
+ [0x05C22] = { [0x0FE00] = 0x2F875 },
+ [0x05C3F] = { [0x0FE00] = 0x0F9BD },
+ [0x05C60] = { [0x0FE00] = 0x2F877 },
+ [0x05C62] = { [0x0FE00] = 0x0F94B },
+ [0x05C64] = { [0x0FE00] = 0x0FA3B },
+ [0x05C65] = { [0x0FE00] = 0x0F9DF },
+ [0x05C6E] = { [0x0FE00] = 0x0FA3C, [0x0FE01] = 0x2F878 },
+ [0x05C8D] = { [0x0FE00] = 0x2F87A },
+ [0x05CC0] = { [0x0FE00] = 0x2F879 },
+ [0x05D19] = { [0x0FE00] = 0x0F9D5 },
+ [0x05D43] = { [0x0FE00] = 0x2F87C },
+ [0x05D50] = { [0x0FE00] = 0x0F921 },
+ [0x05D6B] = { [0x0FE00] = 0x2F87F },
+ [0x05D6E] = { [0x0FE00] = 0x2F87E },
+ [0x05D7C] = { [0x0FE00] = 0x2F880 },
+ [0x05DB2] = { [0x0FE00] = 0x2F9F4 },
+ [0x05DBA] = { [0x0FE00] = 0x0F9AB },
+ [0x05DE1] = { [0x0FE00] = 0x2F881 },
+ [0x05DE2] = { [0x0FE00] = 0x2F882 },
+ [0x05DFD] = { [0x0FE00] = 0x2F884 },
+ [0x05E28] = { [0x0FE00] = 0x2F885 },
+ [0x05E3D] = { [0x0FE00] = 0x2F886 },
+ [0x05E69] = { [0x0FE00] = 0x2F887 },
+ [0x05E74] = { [0x0FE00] = 0x0F98E },
+ [0x05EA6] = { [0x0FE00] = 0x0FA01 },
+ [0x05EB0] = { [0x0FE00] = 0x2F88B },
+ [0x05EB3] = { [0x0FE00] = 0x2F88C },
+ [0x05EB6] = { [0x0FE00] = 0x2F88D },
+ [0x05EC9] = { [0x0FE00] = 0x0F9A2 },
+ [0x05ECA] = { [0x0FE00] = 0x0F928, [0x0FE01] = 0x2F88E },
+ [0x05ED2] = { [0x0FE00] = 0x0FA82 },
+ [0x05ED3] = { [0x0FE00] = 0x0FA0B },
+ [0x05ED9] = { [0x0FE00] = 0x0FA83 },
+ [0x05EEC] = { [0x0FE00] = 0x0F982 },
+ [0x05EFE] = { [0x0FE00] = 0x2F890 },
+ [0x05F04] = { [0x0FE00] = 0x0F943 },
+ [0x05F22] = { [0x0FE00] = 0x2F894, [0x0FE01] = 0x2F895 },
+ [0x05F53] = { [0x0FE00] = 0x2F874 },
+ [0x05F62] = { [0x0FE00] = 0x2F899 },
+ [0x05F69] = { [0x0FE00] = 0x0FA84 },
+ [0x05F6B] = { [0x0FE00] = 0x2F89A },
+ [0x05F8B] = { [0x0FE00] = 0x0F9D8 },
+ [0x05F9A] = { [0x0FE00] = 0x2F89C },
+ [0x05FA9] = { [0x0FE00] = 0x0F966 },
+ [0x05FAD] = { [0x0FE00] = 0x0FA85 },
+ [0x05FCD] = { [0x0FE00] = 0x2F89D },
+ [0x05FD7] = { [0x0FE00] = 0x2F89E },
+ [0x05FF5] = { [0x0FE00] = 0x0F9A3 },
+ [0x05FF9] = { [0x0FE00] = 0x2F89F },
+ [0x06012] = { [0x0FE00] = 0x0F960 },
+ [0x0601C] = { [0x0FE00] = 0x0F9AC },
+ [0x06075] = { [0x0FE00] = 0x0FA6B },
+ [0x06081] = { [0x0FE00] = 0x2F8A0 },
+ [0x06094] = { [0x0FE00] = 0x0FA3D, [0x0FE01] = 0x2F8A3 },
+ [0x060C7] = { [0x0FE00] = 0x2F8A5 },
+ [0x060D8] = { [0x0FE00] = 0x0FA86 },
+ [0x060E1] = { [0x0FE00] = 0x0F9B9 },
+ [0x06108] = { [0x0FE00] = 0x0FA88 },
+ [0x06144] = { [0x0FE00] = 0x0F9D9 },
+ [0x06148] = { [0x0FE00] = 0x2F8A6 },
+ [0x0614C] = { [0x0FE00] = 0x2F8A7, [0x0FE01] = 0x2F8A9 },
+ [0x0614E] = { [0x0FE00] = 0x0FA87, [0x0FE01] = 0x2F8A8 },
+ [0x06160] = { [0x0FE00] = 0x0FA8A },
+ [0x06168] = { [0x0FE00] = 0x0FA3E },
+ [0x0617A] = { [0x0FE00] = 0x2F8AA },
+ [0x0618E] = { [0x0FE00] = 0x0FA3F, [0x0FE01] = 0x0FA89, [0x0FE02] = 0x2F8AB },
+ [0x06190] = { [0x0FE00] = 0x0F98F },
+ [0x061A4] = { [0x0FE00] = 0x2F8AD },
+ [0x061AF] = { [0x0FE00] = 0x2F8AE },
+ [0x061B2] = { [0x0FE00] = 0x2F8AC },
+ [0x061DE] = { [0x0FE00] = 0x2F8AF },
+ [0x061F2] = { [0x0FE00] = 0x0FA40, [0x0FE01] = 0x0FA8B, [0x0FE02] = 0x2F8B0 },
+ [0x061F6] = { [0x0FE00] = 0x0F90D, [0x0FE01] = 0x2F8B1 },
+ [0x06200] = { [0x0FE00] = 0x0F990 },
+ [0x06210] = { [0x0FE00] = 0x2F8B2 },
+ [0x0621B] = { [0x0FE00] = 0x2F8B3 },
+ [0x0622E] = { [0x0FE00] = 0x0F9D2 },
+ [0x06234] = { [0x0FE00] = 0x0FA8C },
+ [0x0625D] = { [0x0FE00] = 0x2F8B4 },
+ [0x062B1] = { [0x0FE00] = 0x2F8B5 },
+ [0x062C9] = { [0x0FE00] = 0x0F925 },
+ [0x062CF] = { [0x0FE00] = 0x0F95B },
+ [0x062D3] = { [0x0FE00] = 0x0FA02 },
+ [0x062D4] = { [0x0FE00] = 0x2F8B6 },
+ [0x062FC] = { [0x0FE00] = 0x2F8BA },
+ [0x062FE] = { [0x0FE00] = 0x0F973 },
+ [0x0633D] = { [0x0FE00] = 0x2F8B9 },
+ [0x06350] = { [0x0FE00] = 0x2F8B7 },
+ [0x06368] = { [0x0FE00] = 0x2F8BB },
+ [0x0637B] = { [0x0FE00] = 0x0F9A4 },
+ [0x06383] = { [0x0FE00] = 0x2F8BC },
+ [0x063A0] = { [0x0FE00] = 0x0F975 },
+ [0x063A9] = { [0x0FE00] = 0x2F8C1 },
+ [0x063C4] = { [0x0FE00] = 0x0FA8D },
+ [0x063C5] = { [0x0FE00] = 0x2F8C0 },
+ [0x063E4] = { [0x0FE00] = 0x2F8BD },
+ [0x0641C] = { [0x0FE00] = 0x0FA8E },
+ [0x06422] = { [0x0FE00] = 0x2F8BF },
+ [0x06452] = { [0x0FE00] = 0x0FA8F },
+ [0x06469] = { [0x0FE00] = 0x2F8C3 },
+ [0x06477] = { [0x0FE00] = 0x2F8C6 },
+ [0x0647E] = { [0x0FE00] = 0x2F8C4 },
+ [0x0649A] = { [0x0FE00] = 0x0F991 },
+ [0x0649D] = { [0x0FE00] = 0x2F8C5 },
+ [0x064C4] = { [0x0FE00] = 0x0F930 },
+ [0x0654F] = { [0x0FE00] = 0x0FA41, [0x0FE01] = 0x2F8C8 },
+ [0x06556] = { [0x0FE00] = 0x0FA90 },
+ [0x0656C] = { [0x0FE00] = 0x2F8C9 },
+ [0x06578] = { [0x0FE00] = 0x0F969 },
+ [0x06599] = { [0x0FE00] = 0x0F9BE },
+ [0x065C5] = { [0x0FE00] = 0x0F983 },
+ [0x065E2] = { [0x0FE00] = 0x0FA42 },
+ [0x065E3] = { [0x0FE00] = 0x2F8CB },
+ [0x06613] = { [0x0FE00] = 0x0F9E0 },
+ [0x06649] = { [0x0FE00] = 0x2F8CD },
+ [0x06674] = { [0x0FE00] = 0x0FA12, [0x0FE01] = 0x0FA91 },
+ [0x06688] = { [0x0FE00] = 0x0F9C5 },
+ [0x06691] = { [0x0FE00] = 0x0FA43, [0x0FE01] = 0x2F8CF },
+ [0x0669C] = { [0x0FE00] = 0x2F8D5 },
+ [0x066B4] = { [0x0FE00] = 0x0FA06 },
+ [0x066C6] = { [0x0FE00] = 0x0F98B },
+ [0x066F4] = { [0x0FE00] = 0x0F901 },
+ [0x066F8] = { [0x0FE00] = 0x2F8CC },
+ [0x06700] = { [0x0FE00] = 0x2F8D4 },
+ [0x06717] = { [0x0FE00] = 0x0F929, [0x0FE01] = 0x0FA92, [0x0FE02] = 0x2F8D8 },
+ [0x0671B] = { [0x0FE00] = 0x0FA93, [0x0FE01] = 0x2F8D9 },
+ [0x06721] = { [0x0FE00] = 0x2F8DA },
+ [0x0674E] = { [0x0FE00] = 0x0F9E1 },
+ [0x06753] = { [0x0FE00] = 0x2F8DC },
+ [0x06756] = { [0x0FE00] = 0x0FA94 },
+ [0x0675E] = { [0x0FE00] = 0x2F8DB },
+ [0x0677B] = { [0x0FE00] = 0x0F9C8 },
+ [0x06785] = { [0x0FE00] = 0x2F8E0 },
+ [0x06797] = { [0x0FE00] = 0x0F9F4 },
+ [0x067F3] = { [0x0FE00] = 0x0F9C9 },
+ [0x067FA] = { [0x0FE00] = 0x2F8DF },
+ [0x06817] = { [0x0FE00] = 0x0F9DA },
+ [0x0681F] = { [0x0FE00] = 0x2F8E5 },
+ [0x06852] = { [0x0FE00] = 0x2F8E1 },
+ [0x06881] = { [0x0FE00] = 0x0F97A },
+ [0x06885] = { [0x0FE00] = 0x0FA44, [0x0FE01] = 0x2F8E2 },
+ [0x0688E] = { [0x0FE00] = 0x2F8E4 },
+ [0x068A8] = { [0x0FE00] = 0x0F9E2 },
+ [0x06914] = { [0x0FE00] = 0x2F8E6 },
+ [0x06942] = { [0x0FE00] = 0x2F8E8 },
+ [0x069A3] = { [0x0FE00] = 0x2F8E9 },
+ [0x069EA] = { [0x0FE00] = 0x2F8EA },
+ [0x06A02] = { [0x0FE00] = 0x0F914, [0x0FE01] = 0x0F95C, [0x0FE02] = 0x0F9BF },
+ [0x06A13] = { [0x0FE00] = 0x0F94C },
+ [0x06AA8] = { [0x0FE00] = 0x2F8EB },
+ [0x06AD3] = { [0x0FE00] = 0x0F931 },
+ [0x06ADB] = { [0x0FE00] = 0x2F8ED },
+ [0x06B04] = { [0x0FE00] = 0x0F91D },
+ [0x06B21] = { [0x0FE00] = 0x2F8EF },
+ [0x06B54] = { [0x0FE00] = 0x2F8F1 },
+ [0x06B72] = { [0x0FE00] = 0x2F8F3 },
+ [0x06B77] = { [0x0FE00] = 0x0F98C },
+ [0x06B79] = { [0x0FE00] = 0x0FA95 },
+ [0x06B9F] = { [0x0FE00] = 0x2F8F4 },
+ [0x06BAE] = { [0x0FE00] = 0x0F9A5 },
+ [0x06BBA] = { [0x0FE00] = 0x0F970, [0x0FE01] = 0x0FA96, [0x0FE02] = 0x2F8F5 },
+ [0x06BBB] = { [0x0FE00] = 0x2F8F6 },
+ [0x06C4E] = { [0x0FE00] = 0x2F8FA },
+ [0x06C67] = { [0x0FE00] = 0x2F8FE },
+ [0x06C88] = { [0x0FE00] = 0x0F972 },
+ [0x06CBF] = { [0x0FE00] = 0x2F8FC },
+ [0x06CCC] = { [0x0FE00] = 0x0F968 },
+ [0x06CCD] = { [0x0FE00] = 0x2F8FD },
+ [0x06CE5] = { [0x0FE00] = 0x0F9E3 },
+ [0x06D16] = { [0x0FE00] = 0x2F8FF },
+ [0x06D1B] = { [0x0FE00] = 0x0F915 },
+ [0x06D1E] = { [0x0FE00] = 0x0FA05 },
+ [0x06D34] = { [0x0FE00] = 0x2F907 },
+ [0x06D3E] = { [0x0FE00] = 0x2F900 },
+ [0x06D41] = { [0x0FE00] = 0x0F9CA, [0x0FE01] = 0x0FA97, [0x0FE02] = 0x2F902 },
+ [0x06D69] = { [0x0FE00] = 0x2F903 },
+ [0x06D6A] = { [0x0FE00] = 0x0F92A },
+ [0x06D77] = { [0x0FE00] = 0x0FA45, [0x0FE01] = 0x2F901 },
+ [0x06D78] = { [0x0FE00] = 0x2F904 },
+ [0x06D85] = { [0x0FE00] = 0x2F905 },
+ [0x06DCB] = { [0x0FE00] = 0x0F9F5 },
+ [0x06DDA] = { [0x0FE00] = 0x0F94D },
+ [0x06DEA] = { [0x0FE00] = 0x0F9D6 },
+ [0x06DF9] = { [0x0FE00] = 0x2F90E },
+ [0x06E1A] = { [0x0FE00] = 0x0FA46 },
+ [0x06E2F] = { [0x0FE00] = 0x2F908 },
+ [0x06E6E] = { [0x0FE00] = 0x2F909 },
+ [0x06E9C] = { [0x0FE00] = 0x0F9CB },
+ [0x06EBA] = { [0x0FE00] = 0x0F9EC },
+ [0x06EC7] = { [0x0FE00] = 0x2F90C },
+ [0x06ECB] = { [0x0FE00] = 0x0FA99, [0x0FE01] = 0x2F90B },
+ [0x06ED1] = { [0x0FE00] = 0x0F904 },
+ [0x06EDB] = { [0x0FE00] = 0x0FA98 },
+ [0x06F0F] = { [0x0FE00] = 0x0F94E },
+ [0x06F22] = { [0x0FE00] = 0x0FA47, [0x0FE01] = 0x0FA9A },
+ [0x06F23] = { [0x0FE00] = 0x0F992 },
+ [0x06F6E] = { [0x0FE00] = 0x2F90F },
+ [0x06FC6] = { [0x0FE00] = 0x2F912 },
+ [0x06FEB] = { [0x0FE00] = 0x0F922 },
+ [0x06FFE] = { [0x0FE00] = 0x0F984 },
+ [0x0701B] = { [0x0FE00] = 0x2F915 },
+ [0x0701E] = { [0x0FE00] = 0x0FA9B, [0x0FE01] = 0x2F914 },
+ [0x07039] = { [0x0FE00] = 0x2F913 },
+ [0x0704A] = { [0x0FE00] = 0x2F917 },
+ [0x07070] = { [0x0FE00] = 0x2F835 },
+ [0x07077] = { [0x0FE00] = 0x2F919 },
+ [0x0707D] = { [0x0FE00] = 0x2F918 },
+ [0x07099] = { [0x0FE00] = 0x0F9FB },
+ [0x070AD] = { [0x0FE00] = 0x2F91A },
+ [0x070C8] = { [0x0FE00] = 0x0F99F },
+ [0x070D9] = { [0x0FE00] = 0x0F916 },
+ [0x07145] = { [0x0FE00] = 0x2F91C },
+ [0x07149] = { [0x0FE00] = 0x0F993 },
+ [0x0716E] = { [0x0FE00] = 0x0FA48, [0x0FE01] = 0x0FA9C },
+ [0x0719C] = { [0x0FE00] = 0x2F91E },
+ [0x071CE] = { [0x0FE00] = 0x0F9C0 },
+ [0x071D0] = { [0x0FE00] = 0x0F9EE },
+ [0x07210] = { [0x0FE00] = 0x0F932 },
+ [0x0721B] = { [0x0FE00] = 0x0F91E },
+ [0x07228] = { [0x0FE00] = 0x2F920 },
+ [0x0722B] = { [0x0FE00] = 0x0FA49 },
+ [0x07235] = { [0x0FE00] = 0x0FA9E, [0x0FE01] = 0x2F921 },
+ [0x07250] = { [0x0FE00] = 0x2F922 },
+ [0x07262] = { [0x0FE00] = 0x0F946 },
+ [0x07280] = { [0x0FE00] = 0x2F924 },
+ [0x07295] = { [0x0FE00] = 0x2F925 },
+ [0x072AF] = { [0x0FE00] = 0x0FA9F },
+ [0x072C0] = { [0x0FE00] = 0x0F9FA },
+ [0x072FC] = { [0x0FE00] = 0x0F92B },
+ [0x0732A] = { [0x0FE00] = 0x0FA16, [0x0FE01] = 0x0FAA0 },
+ [0x07375] = { [0x0FE00] = 0x0F9A7 },
+ [0x0737A] = { [0x0FE00] = 0x2F928 },
+ [0x07387] = { [0x0FE00] = 0x0F961, [0x0FE01] = 0x0F9DB },
+ [0x0738B] = { [0x0FE00] = 0x2F929 },
+ [0x073A5] = { [0x0FE00] = 0x2F92B },
+ [0x073B2] = { [0x0FE00] = 0x0F9AD },
+ [0x073DE] = { [0x0FE00] = 0x0F917 },
+ [0x07406] = { [0x0FE00] = 0x0F9E4 },
+ [0x07409] = { [0x0FE00] = 0x0F9CC },
+ [0x07422] = { [0x0FE00] = 0x0FA4A },
+ [0x07447] = { [0x0FE00] = 0x2F92E },
+ [0x0745C] = { [0x0FE00] = 0x2F92F },
+ [0x07469] = { [0x0FE00] = 0x0F9AE },
+ [0x07471] = { [0x0FE00] = 0x0FAA1, [0x0FE01] = 0x2F930 },
+ [0x07485] = { [0x0FE00] = 0x2F931 },
+ [0x07489] = { [0x0FE00] = 0x0F994 },
+ [0x07498] = { [0x0FE00] = 0x0F9EF },
+ [0x074CA] = { [0x0FE00] = 0x2F932 },
+ [0x07506] = { [0x0FE00] = 0x0FAA2 },
+ [0x07524] = { [0x0FE00] = 0x2F934 },
+ [0x0753B] = { [0x0FE00] = 0x0FAA3 },
+ [0x0753E] = { [0x0FE00] = 0x2F936 },
+ [0x07559] = { [0x0FE00] = 0x0F9CD },
+ [0x07565] = { [0x0FE00] = 0x0F976 },
+ [0x07570] = { [0x0FE00] = 0x0F962, [0x0FE01] = 0x2F938 },
+ [0x075E2] = { [0x0FE00] = 0x0F9E5 },
+ [0x07610] = { [0x0FE00] = 0x2F93A },
+ [0x0761D] = { [0x0FE00] = 0x0FAA4 },
+ [0x0761F] = { [0x0FE00] = 0x0FAA5 },
+ [0x07642] = { [0x0FE00] = 0x0F9C1 },
+ [0x07669] = { [0x0FE00] = 0x0F90E },
+ [0x076CA] = { [0x0FE00] = 0x0FA17, [0x0FE01] = 0x0FAA6 },
+ [0x076DB] = { [0x0FE00] = 0x0FAA7 },
+ [0x076E7] = { [0x0FE00] = 0x0F933 },
+ [0x076F4] = { [0x0FE00] = 0x0FAA8, [0x0FE01] = 0x2F940 },
+ [0x07701] = { [0x0FE00] = 0x0F96D },
+ [0x0771E] = { [0x0FE00] = 0x2F945 },
+ [0x0771F] = { [0x0FE00] = 0x2F946, [0x0FE01] = 0x2F947 },
+ [0x07740] = { [0x0FE00] = 0x0FAAA },
+ [0x0774A] = { [0x0FE00] = 0x0FAA9, [0x0FE01] = 0x2F948 },
+ [0x0778B] = { [0x0FE00] = 0x2F94A },
+ [0x077A7] = { [0x0FE00] = 0x0FA9D },
+ [0x0784E] = { [0x0FE00] = 0x2F94E },
+ [0x0786B] = { [0x0FE00] = 0x0F9CE },
+ [0x0788C] = { [0x0FE00] = 0x0F93B, [0x0FE01] = 0x2F94F },
+ [0x07891] = { [0x0FE00] = 0x0FA4B },
+ [0x078CA] = { [0x0FE00] = 0x0F947 },
+ [0x078CC] = { [0x0FE00] = 0x0FAAB, [0x0FE01] = 0x2F950 },
+ [0x078FB] = { [0x0FE00] = 0x0F964 },
+ [0x0792A] = { [0x0FE00] = 0x0F985 },
+ [0x0793C] = { [0x0FE00] = 0x0FA18 },
+ [0x0793E] = { [0x0FE00] = 0x0FA4C },
+ [0x07948] = { [0x0FE00] = 0x0FA4E },
+ [0x07949] = { [0x0FE00] = 0x0FA4D },
+ [0x07950] = { [0x0FE00] = 0x0FA4F },
+ [0x07956] = { [0x0FE00] = 0x0FA50, [0x0FE01] = 0x2F953 },
+ [0x0795D] = { [0x0FE00] = 0x0FA51 },
+ [0x0795E] = { [0x0FE00] = 0x0FA19 },
+ [0x07965] = { [0x0FE00] = 0x0FA1A },
+ [0x0797F] = { [0x0FE00] = 0x0F93C },
+ [0x0798D] = { [0x0FE00] = 0x0FA52 },
+ [0x0798E] = { [0x0FE00] = 0x0FA53 },
+ [0x0798F] = { [0x0FE00] = 0x0FA1B, [0x0FE01] = 0x2F956 },
+ [0x079AE] = { [0x0FE00] = 0x0F9B6 },
+ [0x079CA] = { [0x0FE00] = 0x0F995 },
+ [0x079EB] = { [0x0FE00] = 0x2F957 },
+ [0x07A1C] = { [0x0FE00] = 0x0F956 },
+ [0x07A40] = { [0x0FE00] = 0x0FA54, [0x0FE01] = 0x2F959 },
+ [0x07A4A] = { [0x0FE00] = 0x2F95A },
+ [0x07A4F] = { [0x0FE00] = 0x2F95B },
+ [0x07A81] = { [0x0FE00] = 0x0FA55 },
+ [0x07AB1] = { [0x0FE00] = 0x0FAAC },
+ [0x07ACB] = { [0x0FE00] = 0x0F9F7 },
+ [0x07AEE] = { [0x0FE00] = 0x2F95F },
+ [0x07B20] = { [0x0FE00] = 0x0F9F8 },
+ [0x07BC0] = { [0x0FE00] = 0x0FA56, [0x0FE01] = 0x0FAAD },
+ [0x07BC6] = { [0x0FE00] = 0x2F962 },
+ [0x07BC9] = { [0x0FE00] = 0x2F963 },
+ [0x07C3E] = { [0x0FE00] = 0x0F9A6 },
+ [0x07C60] = { [0x0FE00] = 0x0F944 },
+ [0x07C7B] = { [0x0FE00] = 0x0FAAE },
+ [0x07C92] = { [0x0FE00] = 0x0F9F9 },
+ [0x07CBE] = { [0x0FE00] = 0x0FA1D },
+ [0x07CD2] = { [0x0FE00] = 0x2F966 },
+ [0x07CD6] = { [0x0FE00] = 0x0FA03 },
+ [0x07CE3] = { [0x0FE00] = 0x2F969 },
+ [0x07CE7] = { [0x0FE00] = 0x0F97B },
+ [0x07CE8] = { [0x0FE00] = 0x2F968 },
+ [0x07D00] = { [0x0FE00] = 0x2F96A },
+ [0x07D10] = { [0x0FE00] = 0x0F9CF },
+ [0x07D22] = { [0x0FE00] = 0x0F96A },
+ [0x07D2F] = { [0x0FE00] = 0x0F94F },
+ [0x07D5B] = { [0x0FE00] = 0x0FAAF },
+ [0x07D63] = { [0x0FE00] = 0x2F96C },
+ [0x07DA0] = { [0x0FE00] = 0x0F93D },
+ [0x07DBE] = { [0x0FE00] = 0x0F957 },
+ [0x07DC7] = { [0x0FE00] = 0x2F96E },
+ [0x07DF4] = { [0x0FE00] = 0x0F996, [0x0FE01] = 0x0FA57, [0x0FE02] = 0x0FAB0 },
+ [0x07E02] = { [0x0FE00] = 0x2F96F },
+ [0x07E09] = { [0x0FE00] = 0x0FA58 },
+ [0x07E37] = { [0x0FE00] = 0x0F950 },
+ [0x07E41] = { [0x0FE00] = 0x0FA59 },
+ [0x07E45] = { [0x0FE00] = 0x2F970 },
+ [0x07F3E] = { [0x0FE00] = 0x0FAB1 },
+ [0x07F72] = { [0x0FE00] = 0x0FA5A },
+ [0x07F79] = { [0x0FE00] = 0x0F9E6 },
+ [0x07F7A] = { [0x0FE00] = 0x2F976 },
+ [0x07F85] = { [0x0FE00] = 0x0F90F },
+ [0x07F95] = { [0x0FE00] = 0x2F978 },
+ [0x07F9A] = { [0x0FE00] = 0x0F9AF },
+ [0x07FBD] = { [0x0FE00] = 0x0FA1E },
+ [0x07FFA] = { [0x0FE00] = 0x2F979 },
+ [0x08001] = { [0x0FE00] = 0x0F934 },
+ [0x08005] = { [0x0FE00] = 0x0FA5B, [0x0FE01] = 0x0FAB2, [0x0FE02] = 0x2F97A },
+ [0x08046] = { [0x0FE00] = 0x0F9B0 },
+ [0x08060] = { [0x0FE00] = 0x2F97D },
+ [0x0806F] = { [0x0FE00] = 0x0F997 },
+ [0x08070] = { [0x0FE00] = 0x2F97F },
+ [0x0807E] = { [0x0FE00] = 0x0F945 },
+ [0x0808B] = { [0x0FE00] = 0x0F953 },
+ [0x080AD] = { [0x0FE00] = 0x2F8D6 },
+ [0x080B2] = { [0x0FE00] = 0x2F982 },
+ [0x08103] = { [0x0FE00] = 0x2F983 },
+ [0x0813E] = { [0x0FE00] = 0x2F985 },
+ [0x081D8] = { [0x0FE00] = 0x0F926 },
+ [0x081E8] = { [0x0FE00] = 0x0F9F6 },
+ [0x081ED] = { [0x0FE00] = 0x0FA5C },
+ [0x08201] = { [0x0FE00] = 0x2F893, [0x0FE01] = 0x2F98B },
+ [0x08204] = { [0x0FE00] = 0x2F98C },
+ [0x08218] = { [0x0FE00] = 0x0FA6D },
+ [0x0826F] = { [0x0FE00] = 0x0F97C },
+ [0x08279] = { [0x0FE00] = 0x0FA5D, [0x0FE01] = 0x0FA5E },
+ [0x0828B] = { [0x0FE00] = 0x2F990 },
+ [0x08291] = { [0x0FE00] = 0x2F98F },
+ [0x0829D] = { [0x0FE00] = 0x2F991 },
+ [0x082B1] = { [0x0FE00] = 0x2F993 },
+ [0x082B3] = { [0x0FE00] = 0x2F994 },
+ [0x082BD] = { [0x0FE00] = 0x2F995 },
+ [0x082E5] = { [0x0FE00] = 0x0F974, [0x0FE01] = 0x2F998 },
+ [0x082E6] = { [0x0FE00] = 0x2F996 },
+ [0x0831D] = { [0x0FE00] = 0x2F999 },
+ [0x08323] = { [0x0FE00] = 0x2F99C },
+ [0x08336] = { [0x0FE00] = 0x0F9FE },
+ [0x08352] = { [0x0FE00] = 0x0FAB3 },
+ [0x08353] = { [0x0FE00] = 0x2F9A0 },
+ [0x08363] = { [0x0FE00] = 0x2F99A },
+ [0x083AD] = { [0x0FE00] = 0x2F99B },
+ [0x083BD] = { [0x0FE00] = 0x2F99D },
+ [0x083C9] = { [0x0FE00] = 0x0F93E },
+ [0x083CA] = { [0x0FE00] = 0x2F9A1 },
+ [0x083CC] = { [0x0FE00] = 0x2F9A2 },
+ [0x083DC] = { [0x0FE00] = 0x2F9A3 },
+ [0x083E7] = { [0x0FE00] = 0x2F99E },
+ [0x083EF] = { [0x0FE00] = 0x0FAB4 },
+ [0x083F1] = { [0x0FE00] = 0x0F958 },
+ [0x0843D] = { [0x0FE00] = 0x0F918 },
+ [0x08449] = { [0x0FE00] = 0x0F96E },
+ [0x08457] = { [0x0FE00] = 0x0FA5F, [0x0FE01] = 0x2F99F },
+ [0x084EE] = { [0x0FE00] = 0x0F999 },
+ [0x084F1] = { [0x0FE00] = 0x2F9A8 },
+ [0x084F3] = { [0x0FE00] = 0x2F9A9 },
+ [0x084FC] = { [0x0FE00] = 0x0F9C2 },
+ [0x08516] = { [0x0FE00] = 0x2F9AA },
+ [0x08564] = { [0x0FE00] = 0x2F9AC },
+ [0x085CD] = { [0x0FE00] = 0x0F923 },
+ [0x085FA] = { [0x0FE00] = 0x0F9F0 },
+ [0x08606] = { [0x0FE00] = 0x0F935 },
+ [0x08612] = { [0x0FE00] = 0x0FA20 },
+ [0x0862D] = { [0x0FE00] = 0x0F91F },
+ [0x0863F] = { [0x0FE00] = 0x0F910 },
+ [0x08650] = { [0x0FE00] = 0x2F9B3 },
+ [0x0865C] = { [0x0FE00] = 0x0F936, [0x0FE01] = 0x2F9B4 },
+ [0x08667] = { [0x0FE00] = 0x2F9B5 },
+ [0x08669] = { [0x0FE00] = 0x2F9B6 },
+ [0x08688] = { [0x0FE00] = 0x2F9B8 },
+ [0x086A9] = { [0x0FE00] = 0x2F9B7 },
+ [0x086E2] = { [0x0FE00] = 0x2F9BA },
+ [0x0870E] = { [0x0FE00] = 0x2F9B9 },
+ [0x08728] = { [0x0FE00] = 0x2F9BC },
+ [0x0876B] = { [0x0FE00] = 0x2F9BD },
+ [0x08779] = { [0x0FE00] = 0x0FAB5, [0x0FE01] = 0x2F9BB },
+ [0x08786] = { [0x0FE00] = 0x2F9BE },
+ [0x087BA] = { [0x0FE00] = 0x0F911 },
+ [0x087E1] = { [0x0FE00] = 0x2F9C0 },
+ [0x08801] = { [0x0FE00] = 0x2F9C1 },
+ [0x0881F] = { [0x0FE00] = 0x0F927 },
+ [0x0884C] = { [0x0FE00] = 0x0FA08 },
+ [0x08860] = { [0x0FE00] = 0x2F9C3 },
+ [0x08863] = { [0x0FE00] = 0x2F9C4 },
+ [0x088C2] = { [0x0FE00] = 0x0F9A0 },
+ [0x088CF] = { [0x0FE00] = 0x0F9E7 },
+ [0x088D7] = { [0x0FE00] = 0x2F9C6 },
+ [0x088DE] = { [0x0FE00] = 0x2F9C7 },
+ [0x088E1] = { [0x0FE00] = 0x0F9E8 },
+ [0x088F8] = { [0x0FE00] = 0x0F912 },
+ [0x088FA] = { [0x0FE00] = 0x2F9C9 },
+ [0x08910] = { [0x0FE00] = 0x0FA60 },
+ [0x08941] = { [0x0FE00] = 0x0FAB6 },
+ [0x08964] = { [0x0FE00] = 0x0F924 },
+ [0x08986] = { [0x0FE00] = 0x0FAB7 },
+ [0x0898B] = { [0x0FE00] = 0x0FA0A },
+ [0x08996] = { [0x0FE00] = 0x0FA61, [0x0FE01] = 0x0FAB8 },
+ [0x08AA0] = { [0x0FE00] = 0x2F9CF },
+ [0x08AAA] = { [0x0FE00] = 0x0F96F, [0x0FE01] = 0x0F9A1 },
+ [0x08ABF] = { [0x0FE00] = 0x0FAB9 },
+ [0x08ACB] = { [0x0FE00] = 0x0FABB },
+ [0x08AD2] = { [0x0FE00] = 0x0F97D },
+ [0x08AD6] = { [0x0FE00] = 0x0F941 },
+ [0x08AED] = { [0x0FE00] = 0x0FABE, [0x0FE01] = 0x2F9D0 },
+ [0x08AF8] = { [0x0FE00] = 0x0FA22, [0x0FE01] = 0x0FABA },
+ [0x08AFE] = { [0x0FE00] = 0x0F95D, [0x0FE01] = 0x0FABD },
+ [0x08B01] = { [0x0FE00] = 0x0FA62, [0x0FE01] = 0x0FABC },
+ [0x08B39] = { [0x0FE00] = 0x0FA63, [0x0FE01] = 0x0FABF },
+ [0x08B58] = { [0x0FE00] = 0x0F9FC },
+ [0x08B80] = { [0x0FE00] = 0x0F95A },
+ [0x08B8A] = { [0x0FE00] = 0x0FAC0, [0x0FE01] = 0x2F9D1 },
+ [0x08C48] = { [0x0FE00] = 0x0F900 },
+ [0x08C55] = { [0x0FE00] = 0x2F9D2 },
+ [0x08CAB] = { [0x0FE00] = 0x2F9D4 },
+ [0x08CC1] = { [0x0FE00] = 0x2F9D5 },
+ [0x08CC2] = { [0x0FE00] = 0x0F948 },
+ [0x08CC8] = { [0x0FE00] = 0x0F903 },
+ [0x08CD3] = { [0x0FE00] = 0x0FA64 },
+ [0x08D08] = { [0x0FE00] = 0x0FA65, [0x0FE01] = 0x0FAC1 },
+ [0x08D1B] = { [0x0FE00] = 0x2F9D6 },
+ [0x08D77] = { [0x0FE00] = 0x2F9D7 },
+ [0x08DBC] = { [0x0FE00] = 0x2F9DB },
+ [0x08DCB] = { [0x0FE00] = 0x2F9DA },
+ [0x08DEF] = { [0x0FE00] = 0x0F937 },
+ [0x08DF0] = { [0x0FE00] = 0x2F9DC },
+ [0x08ECA] = { [0x0FE00] = 0x0F902 },
+ [0x08ED4] = { [0x0FE00] = 0x2F9DE },
+ [0x08F26] = { [0x0FE00] = 0x0F998 },
+ [0x08F2A] = { [0x0FE00] = 0x0F9D7 },
+ [0x08F38] = { [0x0FE00] = 0x0FAC2, [0x0FE01] = 0x2F9DF },
+ [0x08F3B] = { [0x0FE00] = 0x0FA07 },
+ [0x08F62] = { [0x0FE00] = 0x0F98D },
+ [0x08F9E] = { [0x0FE00] = 0x2F98D },
+ [0x08FB0] = { [0x0FE00] = 0x0F971 },
+ [0x08FB6] = { [0x0FE00] = 0x0FA66 },
+ [0x09023] = { [0x0FE00] = 0x0F99A },
+ [0x09038] = { [0x0FE00] = 0x0FA25, [0x0FE01] = 0x0FA67 },
+ [0x09072] = { [0x0FE00] = 0x0FAC3 },
+ [0x0907C] = { [0x0FE00] = 0x0F9C3 },
+ [0x0908F] = { [0x0FE00] = 0x0F913 },
+ [0x09094] = { [0x0FE00] = 0x2F9E2 },
+ [0x090CE] = { [0x0FE00] = 0x0F92C },
+ [0x090DE] = { [0x0FE00] = 0x0FA2E },
+ [0x090F1] = { [0x0FE00] = 0x2F9E3 },
+ [0x090FD] = { [0x0FE00] = 0x0FA26 },
+ [0x09111] = { [0x0FE00] = 0x2F9E4 },
+ [0x0911B] = { [0x0FE00] = 0x2F9E6 },
+ [0x0916A] = { [0x0FE00] = 0x0F919 },
+ [0x09199] = { [0x0FE00] = 0x0FAC4 },
+ [0x091B4] = { [0x0FE00] = 0x0F9B7 },
+ [0x091CC] = { [0x0FE00] = 0x0F9E9 },
+ [0x091CF] = { [0x0FE00] = 0x0F97E },
+ [0x091D1] = { [0x0FE00] = 0x0F90A },
+ [0x09234] = { [0x0FE00] = 0x0F9B1 },
+ [0x09238] = { [0x0FE00] = 0x2F9E7 },
+ [0x09276] = { [0x0FE00] = 0x0FAC5 },
+ [0x0927C] = { [0x0FE00] = 0x2F9EA },
+ [0x092D7] = { [0x0FE00] = 0x2F9E8 },
+ [0x092D8] = { [0x0FE00] = 0x2F9E9 },
+ [0x09304] = { [0x0FE00] = 0x0F93F },
+ [0x0934A] = { [0x0FE00] = 0x0F99B },
+ [0x093F9] = { [0x0FE00] = 0x2F9EB },
+ [0x09415] = { [0x0FE00] = 0x2F9EC },
+ [0x0958B] = { [0x0FE00] = 0x2F9EE },
+ [0x095AD] = { [0x0FE00] = 0x0F986 },
+ [0x095B7] = { [0x0FE00] = 0x2F9F0 },
+ [0x0962E] = { [0x0FE00] = 0x0F9C6 },
+ [0x0964B] = { [0x0FE00] = 0x0F951 },
+ [0x0964D] = { [0x0FE00] = 0x0FA09 },
+ [0x09675] = { [0x0FE00] = 0x0F959 },
+ [0x09678] = { [0x0FE00] = 0x0F9D3 },
+ [0x0967C] = { [0x0FE00] = 0x0FAC6 },
+ [0x09686] = { [0x0FE00] = 0x0F9DC },
+ [0x096A3] = { [0x0FE00] = 0x0F9F1 },
+ [0x096B7] = { [0x0FE00] = 0x0FA2F },
+ [0x096B8] = { [0x0FE00] = 0x0F9B8 },
+ [0x096C3] = { [0x0FE00] = 0x2F9F3 },
+ [0x096E2] = { [0x0FE00] = 0x0F9EA },
+ [0x096E3] = { [0x0FE00] = 0x0FA68, [0x0FE01] = 0x0FAC7 },
+ [0x096F6] = { [0x0FE00] = 0x0F9B2 },
+ [0x096F7] = { [0x0FE00] = 0x0F949 },
+ [0x09723] = { [0x0FE00] = 0x2F9F5 },
+ [0x09732] = { [0x0FE00] = 0x0F938 },
+ [0x09748] = { [0x0FE00] = 0x0F9B3 },
+ [0x09756] = { [0x0FE00] = 0x0FA1C, [0x0FE01] = 0x0FAC8 },
+ [0x097DB] = { [0x0FE00] = 0x0FAC9 },
+ [0x097E0] = { [0x0FE00] = 0x2F9FA },
+ [0x097FF] = { [0x0FE00] = 0x0FA69, [0x0FE01] = 0x0FACA },
+ [0x0980B] = { [0x0FE00] = 0x0FACB, [0x0FE01] = 0x2F9FE, [0x0FE02] = 0x2F9FF },
+ [0x09818] = { [0x0FE00] = 0x0F9B4 },
+ [0x09829] = { [0x0FE00] = 0x2FA00 },
+ [0x0983B] = { [0x0FE00] = 0x0FA6A, [0x0FE01] = 0x0FACC },
+ [0x0985E] = { [0x0FE00] = 0x0F9D0 },
+ [0x098E2] = { [0x0FE00] = 0x2FA02 },
+ [0x098EF] = { [0x0FE00] = 0x0FA2A },
+ [0x098FC] = { [0x0FE00] = 0x0FA2B },
+ [0x09928] = { [0x0FE00] = 0x0FA2C },
+ [0x09929] = { [0x0FE00] = 0x2FA04 },
+ [0x099A7] = { [0x0FE00] = 0x2FA05 },
+ [0x099C2] = { [0x0FE00] = 0x2FA06 },
+ [0x099F1] = { [0x0FE00] = 0x0F91A },
+ [0x099FE] = { [0x0FE00] = 0x2FA07 },
+ [0x09A6A] = { [0x0FE00] = 0x0F987 },
+ [0x09B12] = { [0x0FE00] = 0x0FACD, [0x0FE01] = 0x2FA0A },
+ [0x09B6F] = { [0x0FE00] = 0x0F939 },
+ [0x09C40] = { [0x0FE00] = 0x2FA0B },
+ [0x09C57] = { [0x0FE00] = 0x0F9F2 },
+ [0x09CFD] = { [0x0FE00] = 0x2FA0C },
+ [0x09D67] = { [0x0FE00] = 0x2FA0F },
+ [0x09DB4] = { [0x0FE00] = 0x0FA2D },
+ [0x09DFA] = { [0x0FE00] = 0x0F93A },
+ [0x09E1E] = { [0x0FE00] = 0x0F920 },
+ [0x09E7F] = { [0x0FE00] = 0x0F940 },
+ [0x09E97] = { [0x0FE00] = 0x0F988 },
+ [0x09E9F] = { [0x0FE00] = 0x0F9F3 },
+ [0x09EBB] = { [0x0FE00] = 0x2FA15 },
+ [0x09ECE] = { [0x0FE00] = 0x0F989 },
+ [0x09EF9] = { [0x0FE00] = 0x2FA17 },
+ [0x09EFE] = { [0x0FE00] = 0x2FA18 },
+ [0x09F05] = { [0x0FE00] = 0x2FA19 },
+ [0x09F0F] = { [0x0FE00] = 0x2FA1A },
+ [0x09F16] = { [0x0FE00] = 0x2FA1B },
+ [0x09F3B] = { [0x0FE00] = 0x2FA1C },
+ [0x09F43] = { [0x0FE00] = 0x0FAD8 },
+ [0x09F8D] = { [0x0FE00] = 0x0F9C4 },
+ [0x09F8E] = { [0x0FE00] = 0x0FAD9 },
+ [0x09F9C] = { [0x0FE00] = 0x0F907, [0x0FE01] = 0x0F908, [0x0FE02] = 0x0FACE },
+ [0x20122] = { [0x0FE00] = 0x2F803 },
+ [0x2051C] = { [0x0FE00] = 0x2F812 },
+ [0x20525] = { [0x0FE00] = 0x2F91B },
+ [0x2054B] = { [0x0FE00] = 0x2F816 },
+ [0x2063A] = { [0x0FE00] = 0x2F80D },
+ [0x20804] = { [0x0FE00] = 0x2F9D9 },
+ [0x208DE] = { [0x0FE00] = 0x2F9DD },
+ [0x20A2C] = { [0x0FE00] = 0x2F834 },
+ [0x20B63] = { [0x0FE00] = 0x2F838 },
+ [0x214E4] = { [0x0FE00] = 0x2F859 },
+ [0x216A8] = { [0x0FE00] = 0x2F860 },
+ [0x216EA] = { [0x0FE00] = 0x2F861 },
+ [0x219C8] = { [0x0FE00] = 0x2F86C },
+ [0x21B18] = { [0x0FE00] = 0x2F871 },
+ [0x21D0B] = { [0x0FE00] = 0x2F8F8 },
+ [0x21DE4] = { [0x0FE00] = 0x2F87B },
+ [0x21DE6] = { [0x0FE00] = 0x2F87D },
+ [0x22183] = { [0x0FE00] = 0x2F889 },
+ [0x2219F] = { [0x0FE00] = 0x2F939 },
+ [0x22331] = { [0x0FE00] = 0x2F891, [0x0FE01] = 0x2F892 },
+ [0x226D4] = { [0x0FE00] = 0x2F8A4 },
+ [0x22844] = { [0x0FE00] = 0x0FAD0 },
+ [0x2284A] = { [0x0FE00] = 0x0FACF },
+ [0x22B0C] = { [0x0FE00] = 0x2F8B8 },
+ [0x22BF1] = { [0x0FE00] = 0x2F8BE },
+ [0x2300A] = { [0x0FE00] = 0x2F8CA },
+ [0x232B8] = { [0x0FE00] = 0x2F897 },
+ [0x2335F] = { [0x0FE00] = 0x2F980 },
+ [0x23393] = { [0x0FE00] = 0x2F989 },
+ [0x2339C] = { [0x0FE00] = 0x2F98A },
+ [0x233C3] = { [0x0FE00] = 0x2F8DD },
+ [0x233D5] = { [0x0FE00] = 0x0FAD1 },
+ [0x2346D] = { [0x0FE00] = 0x2F8E3 },
+ [0x236A3] = { [0x0FE00] = 0x2F8EC },
+ [0x238A7] = { [0x0FE00] = 0x2F8F0 },
+ [0x23A8D] = { [0x0FE00] = 0x2F8F7 },
+ [0x23AFA] = { [0x0FE00] = 0x2F8F9 },
+ [0x23CBC] = { [0x0FE00] = 0x2F8FB },
+ [0x23D1E] = { [0x0FE00] = 0x2F906 },
+ [0x23ED1] = { [0x0FE00] = 0x2F90D },
+ [0x23F5E] = { [0x0FE00] = 0x2F910 },
+ [0x23F8E] = { [0x0FE00] = 0x2F911 },
+ [0x24263] = { [0x0FE00] = 0x2F91D },
+ [0x242EE] = { [0x0FE00] = 0x0FA6C },
+ [0x243AB] = { [0x0FE00] = 0x2F91F },
+ [0x24608] = { [0x0FE00] = 0x2F923 },
+ [0x24735] = { [0x0FE00] = 0x2F926 },
+ [0x24814] = { [0x0FE00] = 0x2F927 },
+ [0x24C36] = { [0x0FE00] = 0x2F935 },
+ [0x24C92] = { [0x0FE00] = 0x2F937 },
+ [0x24FA1] = { [0x0FE00] = 0x2F93B },
+ [0x24FB8] = { [0x0FE00] = 0x2F93C },
+ [0x25044] = { [0x0FE00] = 0x2F93D },
+ [0x250F2] = { [0x0FE00] = 0x2F942 },
+ [0x250F3] = { [0x0FE00] = 0x2F941 },
+ [0x25119] = { [0x0FE00] = 0x2F943 },
+ [0x25133] = { [0x0FE00] = 0x2F944 },
+ [0x25249] = { [0x0FE00] = 0x0FAD5 },
+ [0x2541D] = { [0x0FE00] = 0x2F94D },
+ [0x25626] = { [0x0FE00] = 0x2F952 },
+ [0x2569A] = { [0x0FE00] = 0x2F954 },
+ [0x256C5] = { [0x0FE00] = 0x2F955 },
+ [0x2597C] = { [0x0FE00] = 0x2F95C },
+ [0x25AA7] = { [0x0FE00] = 0x2F95D, [0x0FE01] = 0x2F95E },
+ [0x25BAB] = { [0x0FE00] = 0x2F961 },
+ [0x25C80] = { [0x0FE00] = 0x2F965 },
+ [0x25CD0] = { [0x0FE00] = 0x0FAD6 },
+ [0x25F86] = { [0x0FE00] = 0x2F96B },
+ [0x261DA] = { [0x0FE00] = 0x2F898 },
+ [0x26228] = { [0x0FE00] = 0x2F972 },
+ [0x26247] = { [0x0FE00] = 0x2F973 },
+ [0x262D9] = { [0x0FE00] = 0x2F975 },
+ [0x2633E] = { [0x0FE00] = 0x2F977 },
+ [0x264DA] = { [0x0FE00] = 0x2F97B },
+ [0x26523] = { [0x0FE00] = 0x2F97C },
+ [0x265A8] = { [0x0FE00] = 0x2F97E },
+ [0x267A7] = { [0x0FE00] = 0x2F987 },
+ [0x267B5] = { [0x0FE00] = 0x2F988 },
+ [0x26B3C] = { [0x0FE00] = 0x2F997 },
+ [0x26C36] = { [0x0FE00] = 0x2F9A4 },
+ [0x26CD5] = { [0x0FE00] = 0x2F9A6 },
+ [0x26D6B] = { [0x0FE00] = 0x2F9A5 },
+ [0x26F2C] = { [0x0FE00] = 0x2F9AD },
+ [0x26FB1] = { [0x0FE00] = 0x2F9B0 },
+ [0x270D2] = { [0x0FE00] = 0x2F9B1 },
+ [0x273CA] = { [0x0FE00] = 0x2F9AB },
+ [0x27667] = { [0x0FE00] = 0x2F9C5 },
+ [0x278AE] = { [0x0FE00] = 0x2F9CB },
+ [0x27966] = { [0x0FE00] = 0x2F9CC },
+ [0x27CA8] = { [0x0FE00] = 0x2F9D3 },
+ [0x27ED3] = { [0x0FE00] = 0x0FAD7 },
+ [0x27F2F] = { [0x0FE00] = 0x2F9D8 },
+ [0x285D2] = { [0x0FE00] = 0x2F9E0 },
+ [0x285ED] = { [0x0FE00] = 0x2F9E1 },
+ [0x2872E] = { [0x0FE00] = 0x2F9E5 },
+ [0x28BFA] = { [0x0FE00] = 0x2F9ED },
+ [0x28D77] = { [0x0FE00] = 0x2F9F1 },
+ [0x29145] = { [0x0FE00] = 0x2F9F6 },
+ [0x291DF] = { [0x0FE00] = 0x2F81C },
+ [0x2921A] = { [0x0FE00] = 0x2F9F7 },
+ [0x2940A] = { [0x0FE00] = 0x2F9FB },
+ [0x29496] = { [0x0FE00] = 0x2F9FD },
+ [0x295B6] = { [0x0FE00] = 0x2FA01 },
+ [0x29B30] = { [0x0FE00] = 0x2FA09 },
+ [0x2A0CE] = { [0x0FE00] = 0x2FA10 },
+ [0x2A105] = { [0x0FE00] = 0x2FA12 },
+ [0x2A20E] = { [0x0FE00] = 0x2FA13 },
+ [0x2A291] = { [0x0FE00] = 0x2FA14 },
+ [0x2A392] = { [0x0FE00] = 0x2F88F },
+ [0x2A600] = { [0x0FE00] = 0x2FA1D },
+}
+
local cjk_ideograph_metatable = {
__index = {
category = "lo",
@@ -286,10 +1194,24 @@ local cjk_ideograph_metatable = {
}
}
+local f_variant_name = formatters["CJK COMPATIBILITY IDEOGRAPH-%X"]
+
+local variants = setmetatableindex(function(t,k)
+ local kv = knownvariants[k]
+ if kv then
+ for k, v in next, kv do
+ kv[k] = f_variant_name(v)
+ end
+ end
+ knownvariants[k] = nil
+ return kv
+end)
+
local cjk_ideograph_extender = function(k,v)
local t = {
-- shcode = shcode,
unicodeslot = k,
+ variants = variants[k],
}
setmetatable(t,cjk_ideograph_metatable)
return t
@@ -317,6 +1239,7 @@ local cjk_ideograph_extension_a_extender = function(k,v)
local t = {
-- shcode = shcode,
unicodeslot = k,
+ variants = variants[k],
}
setmetatable(t,cjk_ideograph_extension_a_metatable)
return t
@@ -344,6 +1267,7 @@ local cjk_ideograph_extension_b_extender = function(k,v)
local t = {
-- shcode = shcode,
unicodeslot = k,
+ variants = variants[k],
}
setmetatable(t,cjk_ideograph_extension_b_metatable)
return t
diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua
index 90ac4609d..29b225446 100644
--- a/tex/context/base/char-def.lua
+++ b/tex/context/base/char-def.lua
@@ -1764,6 +1764,10 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0xA9,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
{
adobename="ordfeminine",
@@ -1826,6 +1830,10 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0xAE,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
{
adobename="macron",
@@ -19709,7 +19717,7 @@ characters.data={
unicodeslot=0x846,
},
[0x847]={
- arabic="d",
+ arabic="r",
category="lo",
description="MANDAIC LETTER IT",
direction="r",
@@ -19773,7 +19781,7 @@ characters.data={
unicodeslot=0x84E,
},
[0x84F]={
- arabic="r",
+ arabic="d",
category="lo",
description="MANDAIC LETTER IN",
direction="r",
@@ -20035,6 +20043,30 @@ characters.data={
linebreak="al",
unicodeslot=0x8B2,
},
+ [0x8B3]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER AIN WITH THREE DOTS BELOW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B3,
+ },
+ [0x8B4]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER KAF WITH DOT BELOW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B4,
+ },
+ [0x8E3]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC TURNED DAMMA BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8E3,
+ },
[0x8E4]={
category="mn",
combining=0xE6,
@@ -23327,6 +23359,13 @@ characters.data={
linebreak="pr",
unicodeslot=0xAF1,
},
+ [0xAF9]={
+ category="lo",
+ description="GUJARATI LETTER ZHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAF9,
+ },
[0xB01]={
category="mn",
description="ORIYA SIGN CANDRABINDU",
@@ -24988,6 +25027,13 @@ characters.data={
linebreak="al",
unicodeslot=0xC59,
},
+ [0xC5A]={
+ category="lo",
+ description="TELUGU LETTER RRRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xC5A,
+ },
[0xC60]={
category="lo",
description="TELUGU LETTER VOCALIC RR",
@@ -26266,6 +26312,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xD57,
},
+ [0xD5F]={
+ category="lo",
+ description="MALAYALAM LETTER ARCHAIC II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5F,
+ },
[0xD60]={
category="lo",
description="MALAYALAM LETTER VOCALIC RR",
@@ -36746,6 +36799,55 @@ characters.data={
linebreak="al",
unicodeslot=0x13F4,
},
+ [0x13F5]={
+ category="lu",
+ description="CHEROKEE LETTER MV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F5,
+ },
+ [0x13F8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F8,
+ },
+ [0x13F9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F9,
+ },
+ [0x13FA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FA,
+ },
+ [0x13FB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FB,
+ },
+ [0x13FC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FC,
+ },
+ [0x13FD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FD,
+ },
[0x1400]={
category="pd",
description="CANADIAN SYLLABICS HYPHEN",
@@ -59905,6 +60007,13 @@ characters.data={
linebreak="pr",
unicodeslot=0x20BD,
},
+ [0x20BE]={
+ category="sc",
+ description="LARI SIGN",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x20BE,
+ },
[0x20D0]={
category="mn",
combining=0xE6,
@@ -60509,6 +60618,10 @@ characters.data={
linebreak="ai",
specials={ "super", 0x54, 0x4D },
unicodeslot=0x2122,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x2123]={
category="so",
@@ -61507,6 +61620,20 @@ characters.data={
specials={ "fraction", 0x30, 0x2044, 0x33 },
unicodeslot=0x2189,
},
+ [0x218A]={
+ category="so",
+ description="TURNED DIGIT TWO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x218A,
+ },
+ [0x218B]={
+ category="so",
+ description="TURNED DIGIT THREE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x218B,
+ },
[0x2190]={
adobename="arrowleft",
category="sm",
@@ -65406,7 +65533,7 @@ characters.data={
category="sm",
description="MIDLINE HORIZONTAL ELLIPSIS",
direction="on",
- linebreak="al",
+ linebreak="in",
mathclass="inner",
mathname="cdots",
unicodeslot=0x22EF,
@@ -82744,6 +82871,34 @@ characters.data={
linebreak="al",
unicodeslot=0x2BD1,
},
+ [0x2BEC]={
+ category="so",
+ description="LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEC,
+ },
+ [0x2BED]={
+ category="so",
+ description="UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BED,
+ },
+ [0x2BEE]={
+ category="so",
+ description="RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEE,
+ },
+ [0x2BEF]={
+ category="so",
+ description="DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEF,
+ },
[0x2C00]={
category="lu",
description="GLAGOLITIC CAPITAL LETTER AZU",
@@ -90146,6 +90301,10 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x3030,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x3031]={
category="lm",
@@ -112827,6 +112986,14 @@ characters.data={
specials={ "super", 0x44C },
unicodeslot=0xA69D,
},
+ [0xA69E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC LETTER EF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xA69E,
+ },
[0xA69F]={
category="mn",
combining=0xE6,
@@ -114455,6 +114622,13 @@ characters.data={
linebreak="al",
unicodeslot=0xA78E,
},
+ [0xA78F]={
+ category="lo",
+ description="LATIN LETTER SINOLOGICAL DOT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA78F,
+ },
[0xA790]={
category="lu",
description="LATIN CAPITAL LETTER N WITH DESCENDER",
@@ -114679,6 +114853,48 @@ characters.data={
linebreak="al",
unicodeslot=0xA7B1,
},
+ [0xA7B2]={
+ category="lu",
+ description="LATIN CAPITAL LETTER J WITH CROSSED-TAIL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B2,
+ },
+ [0xA7B3]={
+ category="lu",
+ description="LATIN CAPITAL LETTER CHI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B3,
+ },
+ [0xA7B4]={
+ category="lu",
+ description="LATIN CAPITAL LETTER BETA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B4,
+ },
+ [0xA7B5]={
+ category="ll",
+ description="LATIN SMALL LETTER BETA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B5,
+ },
+ [0xA7B6]={
+ category="lu",
+ description="LATIN CAPITAL LETTER OMEGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B6,
+ },
+ [0xA7B7]={
+ category="ll",
+ description="LATIN SMALL LETTER OMEGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B7,
+ },
[0xA7F7]={
category="lo",
description="LATIN EPIGRAPHIC LETTER SIDEWAYS I",
@@ -116367,6 +116583,20 @@ characters.data={
linebreak="al",
unicodeslot=0xA8FB,
},
+ [0xA8FC]={
+ category="po",
+ description="DEVANAGARI SIGN SIDDHAM",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0xA8FC,
+ },
+ [0xA8FD]={
+ category="lo",
+ description="DEVANAGARI JAIN OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA8FD,
+ },
[0xA900]={
category="nd",
description="KAYAH LI DIGIT ZERO",
@@ -120098,6 +120328,34 @@ characters.data={
specials={ "super", 0xAB52 },
unicodeslot=0xAB5F,
},
+ [0xAB60]={
+ category="ll",
+ description="LATIN SMALL LETTER SAKHA YAT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB60,
+ },
+ [0xAB61]={
+ category="ll",
+ description="LATIN SMALL LETTER IOTIFIED E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB61,
+ },
+ [0xAB62]={
+ category="ll",
+ description="LATIN SMALL LETTER OPEN OE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB62,
+ },
+ [0xAB63]={
+ category="ll",
+ description="LATIN SMALL LETTER UO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB63,
+ },
[0xAB64]={
category="ll",
description="LATIN SMALL LETTER INVERTED ALPHA",
@@ -120112,6 +120370,566 @@ characters.data={
linebreak="al",
unicodeslot=0xAB65,
},
+ [0xAB70]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB70,
+ },
+ [0xAB71]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB71,
+ },
+ [0xAB72]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB72,
+ },
+ [0xAB73]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB73,
+ },
+ [0xAB74]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB74,
+ },
+ [0xAB75]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER V",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB75,
+ },
+ [0xAB76]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB76,
+ },
+ [0xAB77]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB77,
+ },
+ [0xAB78]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB78,
+ },
+ [0xAB79]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB79,
+ },
+ [0xAB7A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7A,
+ },
+ [0xAB7B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7B,
+ },
+ [0xAB7C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7C,
+ },
+ [0xAB7D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7D,
+ },
+ [0xAB7E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7E,
+ },
+ [0xAB7F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7F,
+ },
+ [0xAB80]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB80,
+ },
+ [0xAB81]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB81,
+ },
+ [0xAB82]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB82,
+ },
+ [0xAB83]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB83,
+ },
+ [0xAB84]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB84,
+ },
+ [0xAB85]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB85,
+ },
+ [0xAB86]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB86,
+ },
+ [0xAB87]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB87,
+ },
+ [0xAB88]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB88,
+ },
+ [0xAB89]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB89,
+ },
+ [0xAB8A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER ME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8A,
+ },
+ [0xAB8B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8B,
+ },
+ [0xAB8C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8C,
+ },
+ [0xAB8D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8D,
+ },
+ [0xAB8E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8E,
+ },
+ [0xAB8F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8F,
+ },
+ [0xAB90]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NAH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB90,
+ },
+ [0xAB91]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB91,
+ },
+ [0xAB92]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB92,
+ },
+ [0xAB93]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB93,
+ },
+ [0xAB94]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB94,
+ },
+ [0xAB95]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB95,
+ },
+ [0xAB96]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB96,
+ },
+ [0xAB97]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB97,
+ },
+ [0xAB98]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB98,
+ },
+ [0xAB99]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB99,
+ },
+ [0xAB9A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9A,
+ },
+ [0xAB9B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9B,
+ },
+ [0xAB9C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9C,
+ },
+ [0xAB9D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER S",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9D,
+ },
+ [0xAB9E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9E,
+ },
+ [0xAB9F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9F,
+ },
+ [0xABA0]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA0,
+ },
+ [0xABA1]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA1,
+ },
+ [0xABA2]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA2,
+ },
+ [0xABA3]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA3,
+ },
+ [0xABA4]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA4,
+ },
+ [0xABA5]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA5,
+ },
+ [0xABA6]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA6,
+ },
+ [0xABA7]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA7,
+ },
+ [0xABA8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA8,
+ },
+ [0xABA9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA9,
+ },
+ [0xABAA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAA,
+ },
+ [0xABAB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAB,
+ },
+ [0xABAC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DLA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAC,
+ },
+ [0xABAD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAD,
+ },
+ [0xABAE]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAE,
+ },
+ [0xABAF]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAF,
+ },
+ [0xABB0]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB0,
+ },
+ [0xABB1]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB1,
+ },
+ [0xABB2]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB2,
+ },
+ [0xABB3]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB3,
+ },
+ [0xABB4]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB4,
+ },
+ [0xABB5]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB5,
+ },
+ [0xABB6]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB6,
+ },
+ [0xABB7]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB7,
+ },
+ [0xABB8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB8,
+ },
+ [0xABB9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB9,
+ },
+ [0xABBA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBA,
+ },
+ [0xABBB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBB,
+ },
+ [0xABBC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBC,
+ },
+ [0xABBD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBD,
+ },
+ [0xABBE]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBE,
+ },
+ [0xABBF]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBF,
+ },
[0xABC0]={
category="lo",
description="MEETEI MAYEK LETTER KOK",
@@ -131110,6 +131928,22 @@ characters.data={
linebreak="cm",
unicodeslot=0xFE2D,
},
+ [0xFE2E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC TITLO LEFT HALF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xFE2E,
+ },
+ [0xFE2F]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC TITLO RIGHT HALF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xFE2F,
+ },
[0xFE30]={
adobename="twodotleadervertical",
category="po",
@@ -145565,6 +146399,188 @@ characters.data={
linebreak="al",
unicodeslot=0x108AF,
},
+ [0x108E0]={
+ category="lo",
+ description="HATRAN LETTER ALEPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E0,
+ },
+ [0x108E1]={
+ category="lo",
+ description="HATRAN LETTER BETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E1,
+ },
+ [0x108E2]={
+ category="lo",
+ description="HATRAN LETTER GIMEL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E2,
+ },
+ [0x108E3]={
+ category="lo",
+ description="HATRAN LETTER DALETH-RESH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E3,
+ },
+ [0x108E4]={
+ category="lo",
+ description="HATRAN LETTER HE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E4,
+ },
+ [0x108E5]={
+ category="lo",
+ description="HATRAN LETTER WAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E5,
+ },
+ [0x108E6]={
+ category="lo",
+ description="HATRAN LETTER ZAYN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E6,
+ },
+ [0x108E7]={
+ category="lo",
+ description="HATRAN LETTER HETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E7,
+ },
+ [0x108E8]={
+ category="lo",
+ description="HATRAN LETTER TETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E8,
+ },
+ [0x108E9]={
+ category="lo",
+ description="HATRAN LETTER YODH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E9,
+ },
+ [0x108EA]={
+ category="lo",
+ description="HATRAN LETTER KAPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EA,
+ },
+ [0x108EB]={
+ category="lo",
+ description="HATRAN LETTER LAMEDH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EB,
+ },
+ [0x108EC]={
+ category="lo",
+ description="HATRAN LETTER MEM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EC,
+ },
+ [0x108ED]={
+ category="lo",
+ description="HATRAN LETTER NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108ED,
+ },
+ [0x108EE]={
+ category="lo",
+ description="HATRAN LETTER SAMEKH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EE,
+ },
+ [0x108EF]={
+ category="lo",
+ description="HATRAN LETTER AYN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EF,
+ },
+ [0x108F0]={
+ category="lo",
+ description="HATRAN LETTER PE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F0,
+ },
+ [0x108F1]={
+ category="lo",
+ description="HATRAN LETTER SADHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F1,
+ },
+ [0x108F2]={
+ category="lo",
+ description="HATRAN LETTER QOPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F2,
+ },
+ [0x108F4]={
+ category="lo",
+ description="HATRAN LETTER SHIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F4,
+ },
+ [0x108F5]={
+ category="lo",
+ description="HATRAN LETTER TAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F5,
+ },
+ [0x108FB]={
+ category="no",
+ description="HATRAN NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FB,
+ },
+ [0x108FC]={
+ category="no",
+ description="HATRAN NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FC,
+ },
+ [0x108FD]={
+ category="no",
+ description="HATRAN NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FD,
+ },
+ [0x108FE]={
+ category="no",
+ description="HATRAN NUMBER TWENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FE,
+ },
+ [0x108FF]={
+ category="no",
+ description="HATRAN NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FF,
+ },
[0x10900]={
category="lo",
description="PHOENICIAN LETTER ALF",
@@ -146349,6 +147365,20 @@ characters.data={
linebreak="al",
unicodeslot=0x109B7,
},
+ [0x109BC]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109BC,
+ },
+ [0x109BD]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ONE HALF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109BD,
+ },
[0x109BE]={
category="lo",
description="MEROITIC CURSIVE LOGOGRAM RMT",
@@ -146363,6 +147393,440 @@ characters.data={
linebreak="al",
unicodeslot=0x109BF,
},
+ [0x109C0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C0,
+ },
+ [0x109C1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C1,
+ },
+ [0x109C2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C2,
+ },
+ [0x109C3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C3,
+ },
+ [0x109C4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C4,
+ },
+ [0x109C5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C5,
+ },
+ [0x109C6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C6,
+ },
+ [0x109C7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C7,
+ },
+ [0x109C8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C8,
+ },
+ [0x109C9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C9,
+ },
+ [0x109CA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CA,
+ },
+ [0x109CB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THIRTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CB,
+ },
+ [0x109CC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FORTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CC,
+ },
+ [0x109CD]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIFTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CD,
+ },
+ [0x109CE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIXTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CE,
+ },
+ [0x109CF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CF,
+ },
+ [0x109D2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D2,
+ },
+ [0x109D3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D3,
+ },
+ [0x109D4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D4,
+ },
+ [0x109D5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D5,
+ },
+ [0x109D6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D6,
+ },
+ [0x109D7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D7,
+ },
+ [0x109D8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D8,
+ },
+ [0x109D9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D9,
+ },
+ [0x109DA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DA,
+ },
+ [0x109DB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DB,
+ },
+ [0x109DC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DC,
+ },
+ [0x109DD]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DD,
+ },
+ [0x109DE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DE,
+ },
+ [0x109DF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DF,
+ },
+ [0x109E0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E0,
+ },
+ [0x109E1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E1,
+ },
+ [0x109E2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E2,
+ },
+ [0x109E3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E3,
+ },
+ [0x109E4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TEN THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E4,
+ },
+ [0x109E5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWENTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E5,
+ },
+ [0x109E6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THIRTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E6,
+ },
+ [0x109E7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FORTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E7,
+ },
+ [0x109E8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIFTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E8,
+ },
+ [0x109E9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIXTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E9,
+ },
+ [0x109EA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVENTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EA,
+ },
+ [0x109EB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EB,
+ },
+ [0x109EC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINETY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EC,
+ },
+ [0x109ED]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109ED,
+ },
+ [0x109EE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EE,
+ },
+ [0x109EF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EF,
+ },
+ [0x109F0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F0,
+ },
+ [0x109F1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F1,
+ },
+ [0x109F2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F2,
+ },
+ [0x109F3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F3,
+ },
+ [0x109F4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F4,
+ },
+ [0x109F5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F5,
+ },
+ [0x109F6]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ONE TWELFTH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F6,
+ },
+ [0x109F7]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION TWO TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F7,
+ },
+ [0x109F8]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION THREE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F8,
+ },
+ [0x109F9]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION FOUR TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F9,
+ },
+ [0x109FA]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION FIVE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FA,
+ },
+ [0x109FB]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION SIX TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FB,
+ },
+ [0x109FC]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION SEVEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FC,
+ },
+ [0x109FD]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION EIGHT TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FD,
+ },
+ [0x109FE]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION NINE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FE,
+ },
+ [0x109FF]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION TEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FF,
+ },
[0x10A00]={
category="lo",
description="KHAROSHTHI LETTER A",
@@ -147319,6 +148783,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AC5,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AC6]={
arabic="u",
@@ -147327,6 +148794,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AC6,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AC7]={
arabic="r",
@@ -147455,6 +148925,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AD6,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AD7]={
arabic="l",
@@ -147463,6 +148936,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AD7,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AD8]={
arabic="d",
@@ -147543,6 +149019,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AE1,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AE2]={
arabic="u",
@@ -149238,6 +150717,762 @@ characters.data={
linebreak="al",
unicodeslot=0x10C48,
},
+ [0x10C80]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER A",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C80,
+ },
+ [0x10C81]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C81,
+ },
+ [0x10C82]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C82,
+ },
+ [0x10C83]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AMB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C83,
+ },
+ [0x10C84]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C84,
+ },
+ [0x10C85]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C85,
+ },
+ [0x10C86]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ECS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C86,
+ },
+ [0x10C87]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C87,
+ },
+ [0x10C88]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C88,
+ },
+ [0x10C89]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C89,
+ },
+ [0x10C8A]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER CLOSE E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8A,
+ },
+ [0x10C8B]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8B,
+ },
+ [0x10C8C]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8C,
+ },
+ [0x10C8D]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EG",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8D,
+ },
+ [0x10C8E]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EGY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8E,
+ },
+ [0x10C8F]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8F,
+ },
+ [0x10C90]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C90,
+ },
+ [0x10C91]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER II",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C91,
+ },
+ [0x10C92]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EJ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C92,
+ },
+ [0x10C93]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C93,
+ },
+ [0x10C94]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C94,
+ },
+ [0x10C95]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER UNK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C95,
+ },
+ [0x10C96]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C96,
+ },
+ [0x10C97]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ELY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C97,
+ },
+ [0x10C98]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C98,
+ },
+ [0x10C99]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C99,
+ },
+ [0x10C9A]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9A,
+ },
+ [0x10C9B]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9B,
+ },
+ [0x10C9C]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER OO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9C,
+ },
+ [0x10C9D]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9D,
+ },
+ [0x10C9E]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9E,
+ },
+ [0x10C9F]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER OEE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9F,
+ },
+ [0x10CA0]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA0,
+ },
+ [0x10CA1]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EMP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA1,
+ },
+ [0x10CA2]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA2,
+ },
+ [0x10CA3]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER SHORT ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA3,
+ },
+ [0x10CA4]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ES",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA4,
+ },
+ [0x10CA5]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ESZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA5,
+ },
+ [0x10CA6]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ET",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA6,
+ },
+ [0x10CA7]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA7,
+ },
+ [0x10CA8]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ETY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA8,
+ },
+ [0x10CA9]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ECH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA9,
+ },
+ [0x10CAA]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAA,
+ },
+ [0x10CAB]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER UU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAB,
+ },
+ [0x10CAC]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAC,
+ },
+ [0x10CAD]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAD,
+ },
+ [0x10CAE]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EV",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAE,
+ },
+ [0x10CAF]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAF,
+ },
+ [0x10CB0]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EZS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB0,
+ },
+ [0x10CB1]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB1,
+ },
+ [0x10CB2]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER US",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB2,
+ },
+ [0x10CC0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER A",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC0,
+ },
+ [0x10CC1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC1,
+ },
+ [0x10CC2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC2,
+ },
+ [0x10CC3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AMB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC3,
+ },
+ [0x10CC4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC4,
+ },
+ [0x10CC5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC5,
+ },
+ [0x10CC6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ECS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC6,
+ },
+ [0x10CC7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC7,
+ },
+ [0x10CC8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC8,
+ },
+ [0x10CC9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC9,
+ },
+ [0x10CCA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER CLOSE E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCA,
+ },
+ [0x10CCB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCB,
+ },
+ [0x10CCC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCC,
+ },
+ [0x10CCD]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EG",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCD,
+ },
+ [0x10CCE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EGY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCE,
+ },
+ [0x10CCF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCF,
+ },
+ [0x10CD0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD0,
+ },
+ [0x10CD1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER II",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD1,
+ },
+ [0x10CD2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EJ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD2,
+ },
+ [0x10CD3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD3,
+ },
+ [0x10CD4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD4,
+ },
+ [0x10CD5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER UNK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD5,
+ },
+ [0x10CD6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD6,
+ },
+ [0x10CD7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ELY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD7,
+ },
+ [0x10CD8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD8,
+ },
+ [0x10CD9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD9,
+ },
+ [0x10CDA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDA,
+ },
+ [0x10CDB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDB,
+ },
+ [0x10CDC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER OO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDC,
+ },
+ [0x10CDD]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDD,
+ },
+ [0x10CDE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER RUDIMENTA OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDE,
+ },
+ [0x10CDF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER OEE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDF,
+ },
+ [0x10CE0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE0,
+ },
+ [0x10CE1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EMP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE1,
+ },
+ [0x10CE2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE2,
+ },
+ [0x10CE3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER SHORT ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE3,
+ },
+ [0x10CE4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ES",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE4,
+ },
+ [0x10CE5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ESZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE5,
+ },
+ [0x10CE6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ET",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE6,
+ },
+ [0x10CE7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE7,
+ },
+ [0x10CE8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ETY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE8,
+ },
+ [0x10CE9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ECH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE9,
+ },
+ [0x10CEA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEA,
+ },
+ [0x10CEB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER UU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEB,
+ },
+ [0x10CEC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEC,
+ },
+ [0x10CED]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER RUDIMENTA UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CED,
+ },
+ [0x10CEE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EV",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEE,
+ },
+ [0x10CEF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEF,
+ },
+ [0x10CF0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EZS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF0,
+ },
+ [0x10CF1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF1,
+ },
+ [0x10CF2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER US",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF2,
+ },
+ [0x10CFA]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFA,
+ },
+ [0x10CFB]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFB,
+ },
+ [0x10CFC]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFC,
+ },
+ [0x10CFD]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER FIFTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFD,
+ },
+ [0x10CFE]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFE,
+ },
+ [0x10CFF]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFF,
+ },
[0x10E60]={
category="no",
description="RUMI DIGIT ONE",
@@ -152194,6 +154429,35 @@ characters.data={
linebreak="ba",
unicodeslot=0x111C8,
},
+ [0x111C9]={
+ category="po",
+ description="SHARADA SANDHI MARK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x111C9,
+ },
+ [0x111CA]={
+ category="mn",
+ combining=0x7,
+ description="SHARADA SIGN NUKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CA,
+ },
+ [0x111CB]={
+ category="mn",
+ description="SHARADA VOWEL MODIFIER MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CB,
+ },
+ [0x111CC]={
+ category="mn",
+ description="SHARADA EXTRA SHORT VOWEL MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CC,
+ },
[0x111CD]={
category="po",
description="SHARADA SUTRA MARK",
@@ -152278,6 +154542,41 @@ characters.data={
linebreak="al",
unicodeslot=0x111DA,
},
+ [0x111DB]={
+ category="po",
+ description="SHARADA SIGN SIDDHAM",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x111DB,
+ },
+ [0x111DC]={
+ category="lo",
+ description="SHARADA HEADSTROKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x111DC,
+ },
+ [0x111DD]={
+ category="po",
+ description="SHARADA CONTINUATION SIGN",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DD,
+ },
+ [0x111DE]={
+ category="po",
+ description="SHARADA SECTION MARK-1",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DE,
+ },
+ [0x111DF]={
+ category="po",
+ description="SHARADA SECTION MARK-2",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DF,
+ },
[0x111E1]={
category="no",
description="SINHALA ARCHAIC DIGIT ONE",
@@ -152847,6 +155146,272 @@ characters.data={
linebreak="al",
unicodeslot=0x1123D,
},
+ [0x11280]={
+ category="lo",
+ description="MULTANI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11280,
+ },
+ [0x11281]={
+ category="lo",
+ description="MULTANI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11281,
+ },
+ [0x11282]={
+ category="lo",
+ description="MULTANI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11282,
+ },
+ [0x11283]={
+ category="lo",
+ description="MULTANI LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11283,
+ },
+ [0x11284]={
+ category="lo",
+ description="MULTANI LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11284,
+ },
+ [0x11285]={
+ category="lo",
+ description="MULTANI LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11285,
+ },
+ [0x11286]={
+ category="lo",
+ description="MULTANI LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11286,
+ },
+ [0x11288]={
+ category="lo",
+ description="MULTANI LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11288,
+ },
+ [0x1128A]={
+ category="lo",
+ description="MULTANI LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128A,
+ },
+ [0x1128B]={
+ category="lo",
+ description="MULTANI LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128B,
+ },
+ [0x1128C]={
+ category="lo",
+ description="MULTANI LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128C,
+ },
+ [0x1128D]={
+ category="lo",
+ description="MULTANI LETTER JJA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128D,
+ },
+ [0x1128F]={
+ category="lo",
+ description="MULTANI LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128F,
+ },
+ [0x11290]={
+ category="lo",
+ description="MULTANI LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11290,
+ },
+ [0x11291]={
+ category="lo",
+ description="MULTANI LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11291,
+ },
+ [0x11292]={
+ category="lo",
+ description="MULTANI LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11292,
+ },
+ [0x11293]={
+ category="lo",
+ description="MULTANI LETTER DDDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11293,
+ },
+ [0x11294]={
+ category="lo",
+ description="MULTANI LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11294,
+ },
+ [0x11295]={
+ category="lo",
+ description="MULTANI LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11295,
+ },
+ [0x11296]={
+ category="lo",
+ description="MULTANI LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11296,
+ },
+ [0x11297]={
+ category="lo",
+ description="MULTANI LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11297,
+ },
+ [0x11298]={
+ category="lo",
+ description="MULTANI LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11298,
+ },
+ [0x11299]={
+ category="lo",
+ description="MULTANI LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11299,
+ },
+ [0x1129A]={
+ category="lo",
+ description="MULTANI LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129A,
+ },
+ [0x1129B]={
+ category="lo",
+ description="MULTANI LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129B,
+ },
+ [0x1129C]={
+ category="lo",
+ description="MULTANI LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129C,
+ },
+ [0x1129D]={
+ category="lo",
+ description="MULTANI LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129D,
+ },
+ [0x1129F]={
+ category="lo",
+ description="MULTANI LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129F,
+ },
+ [0x112A0]={
+ category="lo",
+ description="MULTANI LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A0,
+ },
+ [0x112A1]={
+ category="lo",
+ description="MULTANI LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A1,
+ },
+ [0x112A2]={
+ category="lo",
+ description="MULTANI LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A2,
+ },
+ [0x112A3]={
+ category="lo",
+ description="MULTANI LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A3,
+ },
+ [0x112A4]={
+ category="lo",
+ description="MULTANI LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A4,
+ },
+ [0x112A5]={
+ category="lo",
+ description="MULTANI LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A5,
+ },
+ [0x112A6]={
+ category="lo",
+ description="MULTANI LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A6,
+ },
+ [0x112A7]={
+ category="lo",
+ description="MULTANI LETTER RRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A7,
+ },
+ [0x112A8]={
+ category="lo",
+ description="MULTANI LETTER RHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A8,
+ },
+ [0x112A9]={
+ category="po",
+ description="MULTANI SECTION MARK",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x112A9,
+ },
[0x112B0]={
category="lo",
description="KHUDAWADI LETTER A",
@@ -153332,6 +155897,13 @@ characters.data={
linebreak="nu",
unicodeslot=0x112F9,
},
+ [0x11300]={
+ category="mn",
+ description="GRANTHA SIGN COMBINING ANUSVARA ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11300,
+ },
[0x11301]={
category="mn",
description="GRANTHA SIGN CANDRABINDU",
@@ -153777,6 +156349,13 @@ characters.data={
linebreak="cm",
unicodeslot=0x1134D,
},
+ [0x11350]={
+ category="lo",
+ description="GRANTHA OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11350,
+ },
[0x11357]={
category="mc",
description="GRANTHA AU LENGTH MARK",
@@ -155016,6 +157595,146 @@ characters.data={
linebreak="ba",
unicodeslot=0x115C9,
},
+ [0x115CA]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CA,
+ },
+ [0x115CB]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CB,
+ },
+ [0x115CC]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CC,
+ },
+ [0x115CD]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CD,
+ },
+ [0x115CE]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CE,
+ },
+ [0x115CF]={
+ category="po",
+ description="SIDDHAM SECTION MARK DOUBLE RING",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CF,
+ },
+ [0x115D0]={
+ category="po",
+ description="SIDDHAM SECTION MARK DOUBLE RING WITH RAYS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D0,
+ },
+ [0x115D1]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D1,
+ },
+ [0x115D2]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D2,
+ },
+ [0x115D3]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D3,
+ },
+ [0x115D4]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D4,
+ },
+ [0x115D5]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND RAYS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D5,
+ },
+ [0x115D6]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D6,
+ },
+ [0x115D7]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D7,
+ },
+ [0x115D8]={
+ category="lo",
+ description="SIDDHAM LETTER THREE-CIRCLE ALTERNATE I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115D8,
+ },
+ [0x115D9]={
+ category="lo",
+ description="SIDDHAM LETTER TWO-CIRCLE ALTERNATE I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115D9,
+ },
+ [0x115DA]={
+ category="lo",
+ description="SIDDHAM LETTER TWO-CIRCLE ALTERNATE II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115DA,
+ },
+ [0x115DB]={
+ category="lo",
+ description="SIDDHAM LETTER ALTERNATE U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115DB,
+ },
+ [0x115DC]={
+ category="mn",
+ description="SIDDHAM VOWEL SIGN ALTERNATE U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x115DC,
+ },
+ [0x115DD]={
+ category="mn",
+ description="SIDDHAM VOWEL SIGN ALTERNATE UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x115DD,
+ },
[0x11600]={
category="lo",
description="MODI LETTER A",
@@ -156034,6 +158753,406 @@ characters.data={
linebreak="nu",
unicodeslot=0x116C9,
},
+ [0x11700]={
+ category="lo",
+ description="AHOM LETTER KA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11700,
+ },
+ [0x11701]={
+ category="lo",
+ description="AHOM LETTER KHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11701,
+ },
+ [0x11702]={
+ category="lo",
+ description="AHOM LETTER NGA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11702,
+ },
+ [0x11703]={
+ category="lo",
+ description="AHOM LETTER NA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11703,
+ },
+ [0x11704]={
+ category="lo",
+ description="AHOM LETTER TA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11704,
+ },
+ [0x11705]={
+ category="lo",
+ description="AHOM LETTER ALTERNATE TA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11705,
+ },
+ [0x11706]={
+ category="lo",
+ description="AHOM LETTER PA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11706,
+ },
+ [0x11707]={
+ category="lo",
+ description="AHOM LETTER PHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11707,
+ },
+ [0x11708]={
+ category="lo",
+ description="AHOM LETTER BA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11708,
+ },
+ [0x11709]={
+ category="lo",
+ description="AHOM LETTER MA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11709,
+ },
+ [0x1170A]={
+ category="lo",
+ description="AHOM LETTER JA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170A,
+ },
+ [0x1170B]={
+ category="lo",
+ description="AHOM LETTER CHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170B,
+ },
+ [0x1170C]={
+ category="lo",
+ description="AHOM LETTER THA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170C,
+ },
+ [0x1170D]={
+ category="lo",
+ description="AHOM LETTER RA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170D,
+ },
+ [0x1170E]={
+ category="lo",
+ description="AHOM LETTER LA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170E,
+ },
+ [0x1170F]={
+ category="lo",
+ description="AHOM LETTER SA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170F,
+ },
+ [0x11710]={
+ category="lo",
+ description="AHOM LETTER NYA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11710,
+ },
+ [0x11711]={
+ category="lo",
+ description="AHOM LETTER HA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11711,
+ },
+ [0x11712]={
+ category="lo",
+ description="AHOM LETTER A",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11712,
+ },
+ [0x11713]={
+ category="lo",
+ description="AHOM LETTER DA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11713,
+ },
+ [0x11714]={
+ category="lo",
+ description="AHOM LETTER DHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11714,
+ },
+ [0x11715]={
+ category="lo",
+ description="AHOM LETTER GA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11715,
+ },
+ [0x11716]={
+ category="lo",
+ description="AHOM LETTER ALTERNATE GA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11716,
+ },
+ [0x11717]={
+ category="lo",
+ description="AHOM LETTER GHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11717,
+ },
+ [0x11718]={
+ category="lo",
+ description="AHOM LETTER BHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11718,
+ },
+ [0x11719]={
+ category="lo",
+ description="AHOM LETTER JHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11719,
+ },
+ [0x1171D]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL LA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171D,
+ },
+ [0x1171E]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL RA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171E,
+ },
+ [0x1171F]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL LIGATING RA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171F,
+ },
+ [0x11720]={
+ category="mc",
+ description="AHOM VOWEL SIGN A",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11720,
+ },
+ [0x11721]={
+ category="mc",
+ description="AHOM VOWEL SIGN AA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11721,
+ },
+ [0x11722]={
+ category="mn",
+ description="AHOM VOWEL SIGN I",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11722,
+ },
+ [0x11723]={
+ category="mn",
+ description="AHOM VOWEL SIGN II",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11723,
+ },
+ [0x11724]={
+ category="mn",
+ description="AHOM VOWEL SIGN U",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11724,
+ },
+ [0x11725]={
+ category="mn",
+ description="AHOM VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11725,
+ },
+ [0x11726]={
+ category="mc",
+ description="AHOM VOWEL SIGN E",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11726,
+ },
+ [0x11727]={
+ category="mn",
+ description="AHOM VOWEL SIGN AW",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11727,
+ },
+ [0x11728]={
+ category="mn",
+ description="AHOM VOWEL SIGN O",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11728,
+ },
+ [0x11729]={
+ category="mn",
+ description="AHOM VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11729,
+ },
+ [0x1172A]={
+ category="mn",
+ description="AHOM VOWEL SIGN AM",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1172A,
+ },
+ [0x1172B]={
+ category="mn",
+ combining=0x9,
+ description="AHOM SIGN KILLER",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1172B,
+ },
+ [0x11730]={
+ category="nd",
+ description="AHOM DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11730,
+ },
+ [0x11731]={
+ category="nd",
+ description="AHOM DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11731,
+ },
+ [0x11732]={
+ category="nd",
+ description="AHOM DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11732,
+ },
+ [0x11733]={
+ category="nd",
+ description="AHOM DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11733,
+ },
+ [0x11734]={
+ category="nd",
+ description="AHOM DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11734,
+ },
+ [0x11735]={
+ category="nd",
+ description="AHOM DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11735,
+ },
+ [0x11736]={
+ category="nd",
+ description="AHOM DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11736,
+ },
+ [0x11737]={
+ category="nd",
+ description="AHOM DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11737,
+ },
+ [0x11738]={
+ category="nd",
+ description="AHOM DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11738,
+ },
+ [0x11739]={
+ category="nd",
+ description="AHOM DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11739,
+ },
+ [0x1173A]={
+ category="no",
+ description="AHOM NUMBER TEN",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173A,
+ },
+ [0x1173B]={
+ category="no",
+ description="AHOM NUMBER TWENTY",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173B,
+ },
+ [0x1173C]={
+ category="po",
+ description="AHOM SIGN SMALL SECTION",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173C,
+ },
+ [0x1173D]={
+ category="po",
+ description="AHOM SIGN SECTION",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173D,
+ },
+ [0x1173E]={
+ category="po",
+ description="AHOM SIGN RULAI",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173E,
+ },
+ [0x1173F]={
+ category="so",
+ description="AHOM SYMBOL VI",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173F,
+ },
[0x118A0]={
category="lu",
description="WARANG CITI CAPITAL LETTER NGAA",
@@ -163470,6 +166589,13 @@ characters.data={
linebreak="al",
unicodeslot=0x12398,
},
+ [0x12399]={
+ category="lo",
+ description="CUNEIFORM SIGN U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12399,
+ },
[0x12400]={
category="nl",
description="CUNEIFORM NUMERIC SIGN TWO ASH",
@@ -164282,6 +167408,1378 @@ characters.data={
linebreak="ba",
unicodeslot=0x12474,
},
+ [0x12480]={
+ category="lo",
+ description="CUNEIFORM SIGN AB TIMES NUN TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12480,
+ },
+ [0x12481]={
+ category="lo",
+ description="CUNEIFORM SIGN AB TIMES SHU2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12481,
+ },
+ [0x12482]={
+ category="lo",
+ description="CUNEIFORM SIGN AD TIMES ESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12482,
+ },
+ [0x12483]={
+ category="lo",
+ description="CUNEIFORM SIGN BAD TIMES DISH TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12483,
+ },
+ [0x12484]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES AB2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12484,
+ },
+ [0x12485]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12485,
+ },
+ [0x12486]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES ZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12486,
+ },
+ [0x12487]={
+ category="lo",
+ description="CUNEIFORM SIGN BU OVER BU TIMES NA2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12487,
+ },
+ [0x12488]={
+ category="lo",
+ description="CUNEIFORM SIGN DA TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12488,
+ },
+ [0x12489]={
+ category="lo",
+ description="CUNEIFORM SIGN DAG TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12489,
+ },
+ [0x1248A]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248A,
+ },
+ [0x1248B]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM TIMES U U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248B,
+ },
+ [0x1248C]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM2 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248C,
+ },
+ [0x1248D]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ANSHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248D,
+ },
+ [0x1248E]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248E,
+ },
+ [0x1248F]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ASH AT LEFT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248F,
+ },
+ [0x12490]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES DIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12490,
+ },
+ [0x12491]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES DUN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12491,
+ },
+ [0x12492]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ERIN2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12492,
+ },
+ [0x12493]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12493,
+ },
+ [0x12494]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12494,
+ },
+ [0x12495]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GIR2 GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12495,
+ },
+ [0x12496]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12496,
+ },
+ [0x12497]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12497,
+ },
+ [0x12498]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12498,
+ },
+ [0x12499]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12499,
+ },
+ [0x1249A]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249A,
+ },
+ [0x1249B]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249B,
+ },
+ [0x1249C]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUSHU2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249C,
+ },
+ [0x1249D]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249D,
+ },
+ [0x1249E]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAK-020",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249E,
+ },
+ [0x1249F]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249F,
+ },
+ [0x124A0]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAM TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A0,
+ },
+ [0x124A1]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LUH PLUS GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A1,
+ },
+ [0x124A2]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A2,
+ },
+ [0x124A3]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A3,
+ },
+ [0x124A4]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A4,
+ },
+ [0x124A5]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A5,
+ },
+ [0x124A6]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES PI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A6,
+ },
+ [0x124A7]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES SHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A7,
+ },
+ [0x124A8]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES SI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A8,
+ },
+ [0x124A9]={
+ category="lo",
+ description="CUNEIFORM SIGN E2 TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A9,
+ },
+ [0x124AA]={
+ category="lo",
+ description="CUNEIFORM SIGN E2 TIMES PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AA,
+ },
+ [0x124AB]={
+ category="lo",
+ description="CUNEIFORM SIGN ERIN2 X",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AB,
+ },
+ [0x124AC]={
+ category="lo",
+ description="CUNEIFORM SIGN ESH2 CROSSING ESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AC,
+ },
+ [0x124AD]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AD,
+ },
+ [0x124AE]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AE,
+ },
+ [0x124AF]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AF,
+ },
+ [0x124B0]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B0,
+ },
+ [0x124B1]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES LAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B1,
+ },
+ [0x124B2]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES ME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B2,
+ },
+ [0x124B3]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES MES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B3,
+ },
+ [0x124B4]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B4,
+ },
+ [0x124B5]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN TIMES SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B5,
+ },
+ [0x124B6]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES BAHAR2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B6,
+ },
+ [0x124B7]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DIM GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B7,
+ },
+ [0x124B8]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B8,
+ },
+ [0x124B9]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B9,
+ },
+ [0x124BA]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES EREN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BA,
+ },
+ [0x124BB]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BB,
+ },
+ [0x124BC]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GAR PLUS DI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BC,
+ },
+ [0x124BD]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GAR PLUS NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BD,
+ },
+ [0x124BE]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES HA PLUS A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BE,
+ },
+ [0x124BF]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BF,
+ },
+ [0x124C0]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LAM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C0,
+ },
+ [0x124C1]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C1,
+ },
+ [0x124C2]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LUH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C2,
+ },
+ [0x124C3]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES MUSH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C3,
+ },
+ [0x124C4]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C4,
+ },
+ [0x124C5]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE PLUS E2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C5,
+ },
+ [0x124C6]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE PLUS GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C6,
+ },
+ [0x124C7]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES SHIM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C7,
+ },
+ [0x124C8]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES ZIZ2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C8,
+ },
+ [0x124C9]={
+ category="lo",
+ description="CUNEIFORM SIGN GABA ROTATED NINETY DEGREES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C9,
+ },
+ [0x124CA]={
+ category="lo",
+ description="CUNEIFORM SIGN GESHTIN TIMES U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CA,
+ },
+ [0x124CB]={
+ category="lo",
+ description="CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CB,
+ },
+ [0x124CC]={
+ category="lo",
+ description="CUNEIFORM SIGN GU2 TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CC,
+ },
+ [0x124CD]={
+ category="lo",
+ description="CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CD,
+ },
+ [0x124CE]={
+ category="lo",
+ description="CUNEIFORM SIGN HA TENU GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CE,
+ },
+ [0x124CF]={
+ category="lo",
+ description="CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CF,
+ },
+ [0x124D0]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES BU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D0,
+ },
+ [0x124D1]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D1,
+ },
+ [0x124D2]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES U U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D2,
+ },
+ [0x124D3]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES UR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D3,
+ },
+ [0x124D4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D4,
+ },
+ [0x124D5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-003",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D5,
+ },
+ [0x124D6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-021",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D6,
+ },
+ [0x124D7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-025",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D7,
+ },
+ [0x124D8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-030",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D8,
+ },
+ [0x124D9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D9,
+ },
+ [0x124DA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-051",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DA,
+ },
+ [0x124DB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-062",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DB,
+ },
+ [0x124DC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DC,
+ },
+ [0x124DD]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-080",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DD,
+ },
+ [0x124DE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-081 OVER LAK-081",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DE,
+ },
+ [0x124DF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-092",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DF,
+ },
+ [0x124E0]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-130",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E0,
+ },
+ [0x124E1]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-142",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E1,
+ },
+ [0x124E2]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-210",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E2,
+ },
+ [0x124E3]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-219",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E3,
+ },
+ [0x124E4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-220",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E4,
+ },
+ [0x124E5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-225",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E5,
+ },
+ [0x124E6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-228",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E6,
+ },
+ [0x124E7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-238",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E7,
+ },
+ [0x124E8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-265",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E8,
+ },
+ [0x124E9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-266",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E9,
+ },
+ [0x124EA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-343",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EA,
+ },
+ [0x124EB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-347",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EB,
+ },
+ [0x124EC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-348",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EC,
+ },
+ [0x124ED]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-383",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124ED,
+ },
+ [0x124EE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-384",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EE,
+ },
+ [0x124EF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-390",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EF,
+ },
+ [0x124F0]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-441",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F0,
+ },
+ [0x124F1]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F1,
+ },
+ [0x124F2]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES GU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F2,
+ },
+ [0x124F3]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F3,
+ },
+ [0x124F4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F4,
+ },
+ [0x124F5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F5,
+ },
+ [0x124F6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F6,
+ },
+ [0x124F7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-450",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F7,
+ },
+ [0x124F8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-457",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F8,
+ },
+ [0x124F9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-470",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F9,
+ },
+ [0x124FA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-483",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FA,
+ },
+ [0x124FB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-490",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FB,
+ },
+ [0x124FC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-492",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FC,
+ },
+ [0x124FD]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-493",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FD,
+ },
+ [0x124FE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-495",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FE,
+ },
+ [0x124FF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-550",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FF,
+ },
+ [0x12500]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-608",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12500,
+ },
+ [0x12501]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12501,
+ },
+ [0x12502]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12502,
+ },
+ [0x12503]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES BAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12503,
+ },
+ [0x12504]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12504,
+ },
+ [0x12505]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES KU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12505,
+ },
+ [0x12506]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12506,
+ },
+ [0x12507]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES TAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12507,
+ },
+ [0x12508]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12508,
+ },
+ [0x12509]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES U2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12509,
+ },
+ [0x1250A]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250A,
+ },
+ [0x1250B]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250B,
+ },
+ [0x1250C]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-636",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250C,
+ },
+ [0x1250D]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250D,
+ },
+ [0x1250E]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES DUB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250E,
+ },
+ [0x1250F]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250F,
+ },
+ [0x12510]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12510,
+ },
+ [0x12511]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12511,
+ },
+ [0x12512]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12512,
+ },
+ [0x12513]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12513,
+ },
+ [0x12514]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12514,
+ },
+ [0x12515]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12515,
+ },
+ [0x12516]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12516,
+ },
+ [0x12517]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-724",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12517,
+ },
+ [0x12518]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-749",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12518,
+ },
+ [0x12519]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 GUNU TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12519,
+ },
+ [0x1251A]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES DISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251A,
+ },
+ [0x1251B]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES HAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251B,
+ },
+ [0x1251C]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251C,
+ },
+ [0x1251D]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251D,
+ },
+ [0x1251E]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251E,
+ },
+ [0x1251F]={
+ category="lo",
+ description="CUNEIFORM SIGN MI PLUS ZA7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251F,
+ },
+ [0x12520]={
+ category="lo",
+ description="CUNEIFORM SIGN MUSH OVER MUSH TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12520,
+ },
+ [0x12521]={
+ category="lo",
+ description="CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12521,
+ },
+ [0x12522]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES DIM GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12522,
+ },
+ [0x12523]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12523,
+ },
+ [0x12524]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES GUL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12524,
+ },
+ [0x12525]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12525,
+ },
+ [0x12526]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES KESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12526,
+ },
+ [0x12527]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES LAK-050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12527,
+ },
+ [0x12528]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES MASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12528,
+ },
+ [0x12529]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12529,
+ },
+ [0x1252A]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252A,
+ },
+ [0x1252B]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES U PLUS U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252B,
+ },
+ [0x1252C]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252C,
+ },
+ [0x1252D]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG GUNU TIMES HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252D,
+ },
+ [0x1252E]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES EN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252E,
+ },
+ [0x1252F]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES SHE AT LEFT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252F,
+ },
+ [0x12530]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12530,
+ },
+ [0x12531]={
+ category="lo",
+ description="CUNEIFORM SIGN SHA6 TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12531,
+ },
+ [0x12532]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE OVER SHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12532,
+ },
+ [0x12533]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS HUB2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12533,
+ },
+ [0x12534]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS NAM2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12534,
+ },
+ [0x12535]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS SAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12535,
+ },
+ [0x12536]={
+ category="lo",
+ description="CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12536,
+ },
+ [0x12537]={
+ category="lo",
+ description="CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12537,
+ },
+ [0x12538]={
+ category="lo",
+ description="CUNEIFORM SIGN SI TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12538,
+ },
+ [0x12539]={
+ category="lo",
+ description="CUNEIFORM SIGN TAK4 PLUS SAG",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12539,
+ },
+ [0x1253A]={
+ category="lo",
+ description="CUNEIFORM SIGN TUM TIMES GAN2 TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253A,
+ },
+ [0x1253B]={
+ category="lo",
+ description="CUNEIFORM SIGN TUM TIMES THREE DISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253B,
+ },
+ [0x1253C]={
+ category="lo",
+ description="CUNEIFORM SIGN UR2 INVERTED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253C,
+ },
+ [0x1253D]={
+ category="lo",
+ description="CUNEIFORM SIGN UR2 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253D,
+ },
+ [0x1253E]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES DARA3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253E,
+ },
+ [0x1253F]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES LAK-668",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253F,
+ },
+ [0x12540]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12540,
+ },
+ [0x12541]={
+ category="lo",
+ description="CUNEIFORM SIGN ZA7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12541,
+ },
+ [0x12542]={
+ category="lo",
+ description="CUNEIFORM SIGN ZU OVER ZU PLUS SAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12542,
+ },
+ [0x12543]={
+ category="lo",
+ description="CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12543,
+ },
[0x13000]={
category="lo",
description="EGYPTIAN HIEROGLYPH A001",
@@ -171779,6 +176277,4087 @@ characters.data={
linebreak="al",
unicodeslot=0x1342E,
},
+ [0x14400]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A001",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14400,
+ },
+ [0x14401]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A002",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14401,
+ },
+ [0x14402]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A003",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14402,
+ },
+ [0x14403]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A004",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14403,
+ },
+ [0x14404]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A005",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14404,
+ },
+ [0x14405]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A006",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14405,
+ },
+ [0x14406]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A007",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14406,
+ },
+ [0x14407]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A008",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14407,
+ },
+ [0x14408]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A009",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14408,
+ },
+ [0x14409]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A010",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14409,
+ },
+ [0x1440A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A010A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440A,
+ },
+ [0x1440B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A011",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440B,
+ },
+ [0x1440C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A012",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440C,
+ },
+ [0x1440D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A013",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440D,
+ },
+ [0x1440E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A014",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440E,
+ },
+ [0x1440F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A015",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440F,
+ },
+ [0x14410]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A016",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14410,
+ },
+ [0x14411]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A017",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14411,
+ },
+ [0x14412]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A018",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14412,
+ },
+ [0x14413]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A019",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14413,
+ },
+ [0x14414]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A020",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14414,
+ },
+ [0x14415]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A021",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14415,
+ },
+ [0x14416]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A022",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14416,
+ },
+ [0x14417]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A023",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14417,
+ },
+ [0x14418]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A024",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14418,
+ },
+ [0x14419]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A025",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14419,
+ },
+ [0x1441A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A026",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441A,
+ },
+ [0x1441B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A026A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441B,
+ },
+ [0x1441C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A027",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441C,
+ },
+ [0x1441D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A028",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441D,
+ },
+ [0x1441E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A029",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441E,
+ },
+ [0x1441F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A030",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441F,
+ },
+ [0x14420]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A031",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14420,
+ },
+ [0x14421]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A032",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14421,
+ },
+ [0x14422]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A033",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14422,
+ },
+ [0x14423]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A034",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14423,
+ },
+ [0x14424]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A035",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14424,
+ },
+ [0x14425]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A036",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14425,
+ },
+ [0x14426]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A037",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14426,
+ },
+ [0x14427]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A038",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14427,
+ },
+ [0x14428]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A039",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14428,
+ },
+ [0x14429]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A039A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14429,
+ },
+ [0x1442A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A040",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442A,
+ },
+ [0x1442B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A041",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442B,
+ },
+ [0x1442C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A041A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442C,
+ },
+ [0x1442D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A042",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442D,
+ },
+ [0x1442E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A043",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442E,
+ },
+ [0x1442F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A044",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442F,
+ },
+ [0x14430]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A045",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14430,
+ },
+ [0x14431]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A045A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14431,
+ },
+ [0x14432]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14432,
+ },
+ [0x14433]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14433,
+ },
+ [0x14434]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14434,
+ },
+ [0x14435]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A047",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14435,
+ },
+ [0x14436]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A048",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14436,
+ },
+ [0x14437]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A049",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14437,
+ },
+ [0x14438]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14438,
+ },
+ [0x14439]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A051",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14439,
+ },
+ [0x1443A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A052",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443A,
+ },
+ [0x1443B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A053",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443B,
+ },
+ [0x1443C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A054",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443C,
+ },
+ [0x1443D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A055",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443D,
+ },
+ [0x1443E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A056",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443E,
+ },
+ [0x1443F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A057",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443F,
+ },
+ [0x14440]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A058",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14440,
+ },
+ [0x14441]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A059",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14441,
+ },
+ [0x14442]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A060",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14442,
+ },
+ [0x14443]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A061",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14443,
+ },
+ [0x14444]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A062",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14444,
+ },
+ [0x14445]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A063",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14445,
+ },
+ [0x14446]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A064",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14446,
+ },
+ [0x14447]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A065",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14447,
+ },
+ [0x14448]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14448,
+ },
+ [0x14449]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14449,
+ },
+ [0x1444A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444A,
+ },
+ [0x1444B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444B,
+ },
+ [0x1444C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A067",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444C,
+ },
+ [0x1444D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A068",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444D,
+ },
+ [0x1444E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A069",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444E,
+ },
+ [0x1444F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A070",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444F,
+ },
+ [0x14450]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A071",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14450,
+ },
+ [0x14451]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A072",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14451,
+ },
+ [0x14452]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A073",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14452,
+ },
+ [0x14453]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A074",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14453,
+ },
+ [0x14454]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A075",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14454,
+ },
+ [0x14455]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A076",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14455,
+ },
+ [0x14456]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A077",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14456,
+ },
+ [0x14457]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A078",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14457,
+ },
+ [0x14458]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A079",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14458,
+ },
+ [0x14459]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A080",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14459,
+ },
+ [0x1445A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A081",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445A,
+ },
+ [0x1445B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A082",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445B,
+ },
+ [0x1445C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A083",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445C,
+ },
+ [0x1445D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A084",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445D,
+ },
+ [0x1445E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A085",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445E,
+ },
+ [0x1445F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A086",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445F,
+ },
+ [0x14460]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A087",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14460,
+ },
+ [0x14461]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A088",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14461,
+ },
+ [0x14462]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A089",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14462,
+ },
+ [0x14463]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A090",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14463,
+ },
+ [0x14464]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A091",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14464,
+ },
+ [0x14465]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A092",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14465,
+ },
+ [0x14466]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A093",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14466,
+ },
+ [0x14467]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A094",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14467,
+ },
+ [0x14468]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A095",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14468,
+ },
+ [0x14469]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A096",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14469,
+ },
+ [0x1446A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A097",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446A,
+ },
+ [0x1446B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A097A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446B,
+ },
+ [0x1446C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A098",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446C,
+ },
+ [0x1446D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A098A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446D,
+ },
+ [0x1446E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A099",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446E,
+ },
+ [0x1446F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A100",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446F,
+ },
+ [0x14470]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A100A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14470,
+ },
+ [0x14471]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A101",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14471,
+ },
+ [0x14472]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A101A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14472,
+ },
+ [0x14473]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A102",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14473,
+ },
+ [0x14474]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A102A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14474,
+ },
+ [0x14475]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A103",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14475,
+ },
+ [0x14476]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14476,
+ },
+ [0x14477]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14477,
+ },
+ [0x14478]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14478,
+ },
+ [0x14479]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14479,
+ },
+ [0x1447A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447A,
+ },
+ [0x1447B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447B,
+ },
+ [0x1447C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447C,
+ },
+ [0x1447D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A106",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447D,
+ },
+ [0x1447E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447E,
+ },
+ [0x1447F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447F,
+ },
+ [0x14480]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14480,
+ },
+ [0x14481]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14481,
+ },
+ [0x14482]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A108",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14482,
+ },
+ [0x14483]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A109",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14483,
+ },
+ [0x14484]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14484,
+ },
+ [0x14485]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14485,
+ },
+ [0x14486]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14486,
+ },
+ [0x14487]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A111",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14487,
+ },
+ [0x14488]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A112",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14488,
+ },
+ [0x14489]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A113",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14489,
+ },
+ [0x1448A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A114",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448A,
+ },
+ [0x1448B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A115",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448B,
+ },
+ [0x1448C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A115A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448C,
+ },
+ [0x1448D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A116",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448D,
+ },
+ [0x1448E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A117",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448E,
+ },
+ [0x1448F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A118",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448F,
+ },
+ [0x14490]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A119",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14490,
+ },
+ [0x14491]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A120",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14491,
+ },
+ [0x14492]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A121",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14492,
+ },
+ [0x14493]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A122",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14493,
+ },
+ [0x14494]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A123",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14494,
+ },
+ [0x14495]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A124",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14495,
+ },
+ [0x14496]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A125",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14496,
+ },
+ [0x14497]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A125A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14497,
+ },
+ [0x14498]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A126",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14498,
+ },
+ [0x14499]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A127",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14499,
+ },
+ [0x1449A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A128",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449A,
+ },
+ [0x1449B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A129",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449B,
+ },
+ [0x1449C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A130",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449C,
+ },
+ [0x1449D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A131",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449D,
+ },
+ [0x1449E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A132",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449E,
+ },
+ [0x1449F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A133",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449F,
+ },
+ [0x144A0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A134",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A0,
+ },
+ [0x144A1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A135",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A1,
+ },
+ [0x144A2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A135A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A2,
+ },
+ [0x144A3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A136",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A3,
+ },
+ [0x144A4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A137",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A4,
+ },
+ [0x144A5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A138",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A5,
+ },
+ [0x144A6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A139",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A6,
+ },
+ [0x144A7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A140",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A7,
+ },
+ [0x144A8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A141",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A8,
+ },
+ [0x144A9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A142",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A9,
+ },
+ [0x144AA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A143",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AA,
+ },
+ [0x144AB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A144",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AB,
+ },
+ [0x144AC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A145",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AC,
+ },
+ [0x144AD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A146",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AD,
+ },
+ [0x144AE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A147",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AE,
+ },
+ [0x144AF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A148",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AF,
+ },
+ [0x144B0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A149",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B0,
+ },
+ [0x144B1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A150",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B1,
+ },
+ [0x144B2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A151",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B2,
+ },
+ [0x144B3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A152",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B3,
+ },
+ [0x144B4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A153",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B4,
+ },
+ [0x144B5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A154",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B5,
+ },
+ [0x144B6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A155",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B6,
+ },
+ [0x144B7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A156",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B7,
+ },
+ [0x144B8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A157",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B8,
+ },
+ [0x144B9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A158",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B9,
+ },
+ [0x144BA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A159",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BA,
+ },
+ [0x144BB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A160",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BB,
+ },
+ [0x144BC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A161",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BC,
+ },
+ [0x144BD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A162",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BD,
+ },
+ [0x144BE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A163",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BE,
+ },
+ [0x144BF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A164",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BF,
+ },
+ [0x144C0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A165",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C0,
+ },
+ [0x144C1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A166",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C1,
+ },
+ [0x144C2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A167",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C2,
+ },
+ [0x144C3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A168",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C3,
+ },
+ [0x144C4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A169",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C4,
+ },
+ [0x144C5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A170",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C5,
+ },
+ [0x144C6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A171",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C6,
+ },
+ [0x144C7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A172",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C7,
+ },
+ [0x144C8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A173",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C8,
+ },
+ [0x144C9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A174",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C9,
+ },
+ [0x144CA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A175",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CA,
+ },
+ [0x144CB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A176",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CB,
+ },
+ [0x144CC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A177",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CC,
+ },
+ [0x144CD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A178",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CD,
+ },
+ [0x144CE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A179",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CE,
+ },
+ [0x144CF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A180",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CF,
+ },
+ [0x144D0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A181",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D0,
+ },
+ [0x144D1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A182",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D1,
+ },
+ [0x144D2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A183",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D2,
+ },
+ [0x144D3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A184",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D3,
+ },
+ [0x144D4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A185",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D4,
+ },
+ [0x144D5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A186",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D5,
+ },
+ [0x144D6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A187",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D6,
+ },
+ [0x144D7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A188",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D7,
+ },
+ [0x144D8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A189",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D8,
+ },
+ [0x144D9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A190",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D9,
+ },
+ [0x144DA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A191",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DA,
+ },
+ [0x144DB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A192",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DB,
+ },
+ [0x144DC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A193",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DC,
+ },
+ [0x144DD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A194",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DD,
+ },
+ [0x144DE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A195",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DE,
+ },
+ [0x144DF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A196",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DF,
+ },
+ [0x144E0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A197",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E0,
+ },
+ [0x144E1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A198",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E1,
+ },
+ [0x144E2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A199",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E2,
+ },
+ [0x144E3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A200",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E3,
+ },
+ [0x144E4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A201",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E4,
+ },
+ [0x144E5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E5,
+ },
+ [0x144E6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E6,
+ },
+ [0x144E7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E7,
+ },
+ [0x144E8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A203",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E8,
+ },
+ [0x144E9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A204",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E9,
+ },
+ [0x144EA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A205",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EA,
+ },
+ [0x144EB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A206",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EB,
+ },
+ [0x144EC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A207",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EC,
+ },
+ [0x144ED]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A207A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144ED,
+ },
+ [0x144EE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A208",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EE,
+ },
+ [0x144EF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A209",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EF,
+ },
+ [0x144F0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A209A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F0,
+ },
+ [0x144F1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A210",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F1,
+ },
+ [0x144F2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A211",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F2,
+ },
+ [0x144F3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A212",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F3,
+ },
+ [0x144F4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A213",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F4,
+ },
+ [0x144F5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A214",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F5,
+ },
+ [0x144F6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A215",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F6,
+ },
+ [0x144F7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A215A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F7,
+ },
+ [0x144F8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A216",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F8,
+ },
+ [0x144F9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A216A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F9,
+ },
+ [0x144FA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A217",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FA,
+ },
+ [0x144FB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A218",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FB,
+ },
+ [0x144FC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A219",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FC,
+ },
+ [0x144FD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A220",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FD,
+ },
+ [0x144FE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A221",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FE,
+ },
+ [0x144FF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A222",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FF,
+ },
+ [0x14500]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A223",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14500,
+ },
+ [0x14501]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A224",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14501,
+ },
+ [0x14502]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A225",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14502,
+ },
+ [0x14503]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A226",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14503,
+ },
+ [0x14504]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A227",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14504,
+ },
+ [0x14505]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A227A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14505,
+ },
+ [0x14506]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A228",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14506,
+ },
+ [0x14507]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A229",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14507,
+ },
+ [0x14508]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A230",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14508,
+ },
+ [0x14509]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A231",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14509,
+ },
+ [0x1450A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A232",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450A,
+ },
+ [0x1450B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A233",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450B,
+ },
+ [0x1450C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A234",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450C,
+ },
+ [0x1450D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A235",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450D,
+ },
+ [0x1450E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A236",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450E,
+ },
+ [0x1450F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A237",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450F,
+ },
+ [0x14510]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A238",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14510,
+ },
+ [0x14511]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A239",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14511,
+ },
+ [0x14512]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A240",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14512,
+ },
+ [0x14513]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A241",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14513,
+ },
+ [0x14514]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A242",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14514,
+ },
+ [0x14515]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A243",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14515,
+ },
+ [0x14516]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A244",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14516,
+ },
+ [0x14517]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A245",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14517,
+ },
+ [0x14518]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A246",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14518,
+ },
+ [0x14519]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A247",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14519,
+ },
+ [0x1451A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A248",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451A,
+ },
+ [0x1451B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A249",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451B,
+ },
+ [0x1451C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A250",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451C,
+ },
+ [0x1451D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A251",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451D,
+ },
+ [0x1451E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A252",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451E,
+ },
+ [0x1451F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A253",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451F,
+ },
+ [0x14520]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A254",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14520,
+ },
+ [0x14521]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A255",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14521,
+ },
+ [0x14522]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A256",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14522,
+ },
+ [0x14523]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A257",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14523,
+ },
+ [0x14524]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A258",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14524,
+ },
+ [0x14525]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A259",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14525,
+ },
+ [0x14526]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A260",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14526,
+ },
+ [0x14527]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A261",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14527,
+ },
+ [0x14528]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A262",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14528,
+ },
+ [0x14529]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A263",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14529,
+ },
+ [0x1452A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A264",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452A,
+ },
+ [0x1452B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A265",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452B,
+ },
+ [0x1452C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A266",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452C,
+ },
+ [0x1452D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A267",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452D,
+ },
+ [0x1452E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A267A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452E,
+ },
+ [0x1452F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A268",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452F,
+ },
+ [0x14530]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A269",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14530,
+ },
+ [0x14531]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A270",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14531,
+ },
+ [0x14532]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A271",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14532,
+ },
+ [0x14533]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A272",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14533,
+ },
+ [0x14534]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A273",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14534,
+ },
+ [0x14535]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A274",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14535,
+ },
+ [0x14536]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A275",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14536,
+ },
+ [0x14537]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A276",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14537,
+ },
+ [0x14538]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A277",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14538,
+ },
+ [0x14539]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A278",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14539,
+ },
+ [0x1453A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A279",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453A,
+ },
+ [0x1453B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A280",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453B,
+ },
+ [0x1453C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A281",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453C,
+ },
+ [0x1453D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A282",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453D,
+ },
+ [0x1453E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A283",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453E,
+ },
+ [0x1453F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A284",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453F,
+ },
+ [0x14540]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A285",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14540,
+ },
+ [0x14541]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A286",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14541,
+ },
+ [0x14542]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A287",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14542,
+ },
+ [0x14543]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A288",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14543,
+ },
+ [0x14544]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A289",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14544,
+ },
+ [0x14545]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A289A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14545,
+ },
+ [0x14546]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A290",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14546,
+ },
+ [0x14547]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A291",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14547,
+ },
+ [0x14548]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A292",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14548,
+ },
+ [0x14549]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A293",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14549,
+ },
+ [0x1454A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A294",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454A,
+ },
+ [0x1454B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A294A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454B,
+ },
+ [0x1454C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A295",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454C,
+ },
+ [0x1454D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A296",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454D,
+ },
+ [0x1454E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A297",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454E,
+ },
+ [0x1454F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A298",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454F,
+ },
+ [0x14550]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A299",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14550,
+ },
+ [0x14551]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A299A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14551,
+ },
+ [0x14552]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A300",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14552,
+ },
+ [0x14553]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A301",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14553,
+ },
+ [0x14554]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A302",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14554,
+ },
+ [0x14555]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A303",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14555,
+ },
+ [0x14556]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A304",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14556,
+ },
+ [0x14557]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A305",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14557,
+ },
+ [0x14558]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A306",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14558,
+ },
+ [0x14559]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A307",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14559,
+ },
+ [0x1455A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A308",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455A,
+ },
+ [0x1455B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A309",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455B,
+ },
+ [0x1455C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A309A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455C,
+ },
+ [0x1455D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A310",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455D,
+ },
+ [0x1455E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A311",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455E,
+ },
+ [0x1455F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A312",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455F,
+ },
+ [0x14560]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A313",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14560,
+ },
+ [0x14561]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A314",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14561,
+ },
+ [0x14562]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A315",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14562,
+ },
+ [0x14563]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A316",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14563,
+ },
+ [0x14564]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A317",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14564,
+ },
+ [0x14565]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A318",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14565,
+ },
+ [0x14566]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A319",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14566,
+ },
+ [0x14567]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A320",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14567,
+ },
+ [0x14568]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A321",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14568,
+ },
+ [0x14569]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A322",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14569,
+ },
+ [0x1456A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A323",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456A,
+ },
+ [0x1456B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A324",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456B,
+ },
+ [0x1456C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A325",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456C,
+ },
+ [0x1456D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A326",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456D,
+ },
+ [0x1456E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A327",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456E,
+ },
+ [0x1456F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A328",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456F,
+ },
+ [0x14570]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A329",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14570,
+ },
+ [0x14571]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A329A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14571,
+ },
+ [0x14572]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A330",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14572,
+ },
+ [0x14573]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A331",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14573,
+ },
+ [0x14574]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14574,
+ },
+ [0x14575]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14575,
+ },
+ [0x14576]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14576,
+ },
+ [0x14577]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A333",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14577,
+ },
+ [0x14578]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A334",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14578,
+ },
+ [0x14579]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A335",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14579,
+ },
+ [0x1457A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457A,
+ },
+ [0x1457B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457B,
+ },
+ [0x1457C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457C,
+ },
+ [0x1457D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457D,
+ },
+ [0x1457E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A337",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457E,
+ },
+ [0x1457F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A338",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457F,
+ },
+ [0x14580]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A339",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14580,
+ },
+ [0x14581]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A340",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14581,
+ },
+ [0x14582]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A341",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14582,
+ },
+ [0x14583]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A342",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14583,
+ },
+ [0x14584]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A343",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14584,
+ },
+ [0x14585]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A344",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14585,
+ },
+ [0x14586]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A345",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14586,
+ },
+ [0x14587]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A346",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14587,
+ },
+ [0x14588]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A347",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14588,
+ },
+ [0x14589]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A348",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14589,
+ },
+ [0x1458A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A349",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458A,
+ },
+ [0x1458B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A350",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458B,
+ },
+ [0x1458C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A351",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458C,
+ },
+ [0x1458D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A352",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458D,
+ },
+ [0x1458E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A353",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458E,
+ },
+ [0x1458F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A354",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458F,
+ },
+ [0x14590]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A355",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14590,
+ },
+ [0x14591]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A356",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14591,
+ },
+ [0x14592]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A357",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14592,
+ },
+ [0x14593]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A358",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14593,
+ },
+ [0x14594]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A359",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14594,
+ },
+ [0x14595]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A359A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14595,
+ },
+ [0x14596]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A360",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14596,
+ },
+ [0x14597]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A361",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14597,
+ },
+ [0x14598]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A362",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14598,
+ },
+ [0x14599]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A363",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14599,
+ },
+ [0x1459A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A364",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459A,
+ },
+ [0x1459B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A364A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459B,
+ },
+ [0x1459C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A365",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459C,
+ },
+ [0x1459D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A366",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459D,
+ },
+ [0x1459E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A367",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459E,
+ },
+ [0x1459F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A368",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459F,
+ },
+ [0x145A0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A368A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A0,
+ },
+ [0x145A1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A369",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A1,
+ },
+ [0x145A2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A370",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A2,
+ },
+ [0x145A3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A371",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A3,
+ },
+ [0x145A4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A371A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A4,
+ },
+ [0x145A5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A372",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A5,
+ },
+ [0x145A6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A373",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A6,
+ },
+ [0x145A7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A374",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A7,
+ },
+ [0x145A8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A375",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A8,
+ },
+ [0x145A9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A376",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A9,
+ },
+ [0x145AA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A377",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AA,
+ },
+ [0x145AB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A378",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AB,
+ },
+ [0x145AC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A379",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AC,
+ },
+ [0x145AD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A380",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AD,
+ },
+ [0x145AE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A381",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AE,
+ },
+ [0x145AF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A381A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AF,
+ },
+ [0x145B0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A382",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B0,
+ },
+ [0x145B1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A383 RA OR RI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B1,
+ },
+ [0x145B2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A383A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B2,
+ },
+ [0x145B3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A384",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B3,
+ },
+ [0x145B4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A385",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B4,
+ },
+ [0x145B5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A386",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B5,
+ },
+ [0x145B6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A386A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B6,
+ },
+ [0x145B7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A387",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B7,
+ },
+ [0x145B8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A388",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B8,
+ },
+ [0x145B9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A389",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B9,
+ },
+ [0x145BA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A390",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BA,
+ },
+ [0x145BB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A391",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BB,
+ },
+ [0x145BC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A392",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BC,
+ },
+ [0x145BD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A393 EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BD,
+ },
+ [0x145BE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A394",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BE,
+ },
+ [0x145BF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A395",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BF,
+ },
+ [0x145C0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A396",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C0,
+ },
+ [0x145C1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A397",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C1,
+ },
+ [0x145C2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A398",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C2,
+ },
+ [0x145C3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A399",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C3,
+ },
+ [0x145C4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A400",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C4,
+ },
+ [0x145C5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A401",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C5,
+ },
+ [0x145C6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A402",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C6,
+ },
+ [0x145C7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A403",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C7,
+ },
+ [0x145C8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A404",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C8,
+ },
+ [0x145C9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A405",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C9,
+ },
+ [0x145CA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A406",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CA,
+ },
+ [0x145CB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A407",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CB,
+ },
+ [0x145CC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A408",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CC,
+ },
+ [0x145CD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A409",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CD,
+ },
+ [0x145CE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK",
+ direction="l",
+ linebreak="op",
+ unicodeslot=0x145CE,
+ },
+ [0x145CF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK",
+ direction="l",
+ linebreak="cl",
+ unicodeslot=0x145CF,
+ },
+ [0x145D0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A411",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D0,
+ },
+ [0x145D1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A412",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D1,
+ },
+ [0x145D2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A413",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D2,
+ },
+ [0x145D3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A414",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D3,
+ },
+ [0x145D4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A415",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D4,
+ },
+ [0x145D5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A416",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D5,
+ },
+ [0x145D6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A417",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D6,
+ },
+ [0x145D7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A418",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D7,
+ },
+ [0x145D8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A419",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D8,
+ },
+ [0x145D9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A420",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D9,
+ },
+ [0x145DA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A421",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DA,
+ },
+ [0x145DB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A422",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DB,
+ },
+ [0x145DC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A423",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DC,
+ },
+ [0x145DD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A424",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DD,
+ },
+ [0x145DE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A425",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DE,
+ },
+ [0x145DF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A426",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DF,
+ },
+ [0x145E0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A427",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E0,
+ },
+ [0x145E1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A428",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E1,
+ },
+ [0x145E2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A429",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E2,
+ },
+ [0x145E3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A430",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E3,
+ },
+ [0x145E4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A431",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E4,
+ },
+ [0x145E5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A432",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E5,
+ },
+ [0x145E6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A433",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E6,
+ },
+ [0x145E7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A434",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E7,
+ },
+ [0x145E8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A435",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E8,
+ },
+ [0x145E9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A436",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E9,
+ },
+ [0x145EA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A437",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EA,
+ },
+ [0x145EB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A438",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EB,
+ },
+ [0x145EC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A439",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EC,
+ },
+ [0x145ED]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A440",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145ED,
+ },
+ [0x145EE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A441",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EE,
+ },
+ [0x145EF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A442",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EF,
+ },
+ [0x145F0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A443",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F0,
+ },
+ [0x145F1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A444",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F1,
+ },
+ [0x145F2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A445",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F2,
+ },
+ [0x145F3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A446",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F3,
+ },
+ [0x145F4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A447",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F4,
+ },
+ [0x145F5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A448",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F5,
+ },
+ [0x145F6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A449",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F6,
+ },
+ [0x145F7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A450",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F7,
+ },
+ [0x145F8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A450A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F8,
+ },
+ [0x145F9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A451",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F9,
+ },
+ [0x145FA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A452",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FA,
+ },
+ [0x145FB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A453",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FB,
+ },
+ [0x145FC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A454",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FC,
+ },
+ [0x145FD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A455",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FD,
+ },
+ [0x145FE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A456",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FE,
+ },
+ [0x145FF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A457",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FF,
+ },
+ [0x14600]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A457A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14600,
+ },
+ [0x14601]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A458",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14601,
+ },
+ [0x14602]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A459",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14602,
+ },
+ [0x14603]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A460",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14603,
+ },
+ [0x14604]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A461",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14604,
+ },
+ [0x14605]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A462",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14605,
+ },
+ [0x14606]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A463",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14606,
+ },
+ [0x14607]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A464",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14607,
+ },
+ [0x14608]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A465",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14608,
+ },
+ [0x14609]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A466",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14609,
+ },
+ [0x1460A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A467",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460A,
+ },
+ [0x1460B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A468",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460B,
+ },
+ [0x1460C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A469",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460C,
+ },
+ [0x1460D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A470",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460D,
+ },
+ [0x1460E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A471",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460E,
+ },
+ [0x1460F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A472",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460F,
+ },
+ [0x14610]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A473",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14610,
+ },
+ [0x14611]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A474",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14611,
+ },
+ [0x14612]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A475",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14612,
+ },
+ [0x14613]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A476",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14613,
+ },
+ [0x14614]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A477",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14614,
+ },
+ [0x14615]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A478",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14615,
+ },
+ [0x14616]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A479",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14616,
+ },
+ [0x14617]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A480",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14617,
+ },
+ [0x14618]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A481",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14618,
+ },
+ [0x14619]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A482",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14619,
+ },
+ [0x1461A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A483",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461A,
+ },
+ [0x1461B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A484",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461B,
+ },
+ [0x1461C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A485",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461C,
+ },
+ [0x1461D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A486",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461D,
+ },
+ [0x1461E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A487",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461E,
+ },
+ [0x1461F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A488",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461F,
+ },
+ [0x14620]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A489",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14620,
+ },
+ [0x14621]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A490",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14621,
+ },
+ [0x14622]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A491",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14622,
+ },
+ [0x14623]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A492",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14623,
+ },
+ [0x14624]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A493",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14624,
+ },
+ [0x14625]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A494",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14625,
+ },
+ [0x14626]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A495",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14626,
+ },
+ [0x14627]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A496",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14627,
+ },
+ [0x14628]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A497",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14628,
+ },
+ [0x14629]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A501",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14629,
+ },
+ [0x1462A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A502",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462A,
+ },
+ [0x1462B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A503",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462B,
+ },
+ [0x1462C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A504",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462C,
+ },
+ [0x1462D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A505",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462D,
+ },
+ [0x1462E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A506",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462E,
+ },
+ [0x1462F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A507",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462F,
+ },
+ [0x14630]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A508",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14630,
+ },
+ [0x14631]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A509",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14631,
+ },
+ [0x14632]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A510",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14632,
+ },
+ [0x14633]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A511",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14633,
+ },
+ [0x14634]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A512",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14634,
+ },
+ [0x14635]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A513",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14635,
+ },
+ [0x14636]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A514",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14636,
+ },
+ [0x14637]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A515",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14637,
+ },
+ [0x14638]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A516",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14638,
+ },
+ [0x14639]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A517",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14639,
+ },
+ [0x1463A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A518",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463A,
+ },
+ [0x1463B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A519",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463B,
+ },
+ [0x1463C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A520",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463C,
+ },
+ [0x1463D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A521",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463D,
+ },
+ [0x1463E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A522",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463E,
+ },
+ [0x1463F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A523",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463F,
+ },
+ [0x14640]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A524",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14640,
+ },
+ [0x14641]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A525",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14641,
+ },
+ [0x14642]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A526",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14642,
+ },
+ [0x14643]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A527",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14643,
+ },
+ [0x14644]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A528",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14644,
+ },
+ [0x14645]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A529",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14645,
+ },
+ [0x14646]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A530",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14646,
+ },
[0x16800]={
category="lo",
description="BAMUM LETTER PHASE-A NGKUE MFON",
@@ -182498,6 +191077,83 @@ characters.data={
linebreak="al",
unicodeslot=0x1D1DD,
},
+ [0x1D1DE]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN C CLEF",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1DE,
+ },
+ [0x1D1DF]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN END OF PIECE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1DF,
+ },
+ [0x1D1E0]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN FINAL NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E0,
+ },
+ [0x1D1E1]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN RECITATIVE MARK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E1,
+ },
+ [0x1D1E2]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN WHOLE NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E2,
+ },
+ [0x1D1E3]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN HALF NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E3,
+ },
+ [0x1D1E4]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E4,
+ },
+ [0x1D1E5]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E5,
+ },
+ [0x1D1E6]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E6,
+ },
+ [0x1D1E7]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E7,
+ },
+ [0x1D1E8]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN FLAT SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E8,
+ },
[0x1D200]={
category="so",
description="GREEK VOCAL NOTATION SYMBOL-0x0001",
@@ -192434,6 +201090,4710 @@ characters.data={
specials={ "font", 0x39 },
unicodeslot=0x1D7FF,
},
+ [0x1D800]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D800,
+ },
+ [0x1D801]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D801,
+ },
+ [0x1D802]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D802,
+ },
+ [0x1D803]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D803,
+ },
+ [0x1D804]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D804,
+ },
+ [0x1D805]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D805,
+ },
+ [0x1D806]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D806,
+ },
+ [0x1D807]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D807,
+ },
+ [0x1D808]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D808,
+ },
+ [0x1D809]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D809,
+ },
+ [0x1D80A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80A,
+ },
+ [0x1D80B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80B,
+ },
+ [0x1D80C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED LOW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80C,
+ },
+ [0x1D80D]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80D,
+ },
+ [0x1D80E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80E,
+ },
+ [0x1D80F]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80F,
+ },
+ [0x1D810]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D810,
+ },
+ [0x1D811]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D811,
+ },
+ [0x1D812]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D812,
+ },
+ [0x1D813]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D813,
+ },
+ [0x1D814]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D814,
+ },
+ [0x1D815]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D815,
+ },
+ [0x1D816]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D816,
+ },
+ [0x1D817]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D817,
+ },
+ [0x1D818]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D818,
+ },
+ [0x1D819]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D819,
+ },
+ [0x1D81A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81A,
+ },
+ [0x1D81B]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81B,
+ },
+ [0x1D81C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81C,
+ },
+ [0x1D81D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81D,
+ },
+ [0x1D81E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81E,
+ },
+ [0x1D81F]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81F,
+ },
+ [0x1D820]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D820,
+ },
+ [0x1D821]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D821,
+ },
+ [0x1D822]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D822,
+ },
+ [0x1D823]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D823,
+ },
+ [0x1D824]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D824,
+ },
+ [0x1D825]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D825,
+ },
+ [0x1D826]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D826,
+ },
+ [0x1D827]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D827,
+ },
+ [0x1D828]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D828,
+ },
+ [0x1D829]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D829,
+ },
+ [0x1D82A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82A,
+ },
+ [0x1D82B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82B,
+ },
+ [0x1D82C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82C,
+ },
+ [0x1D82D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82D,
+ },
+ [0x1D82E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82E,
+ },
+ [0x1D82F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82F,
+ },
+ [0x1D830]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D830,
+ },
+ [0x1D831]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D831,
+ },
+ [0x1D832]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D832,
+ },
+ [0x1D833]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D833,
+ },
+ [0x1D834]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D834,
+ },
+ [0x1D835]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D835,
+ },
+ [0x1D836]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D836,
+ },
+ [0x1D837]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D837,
+ },
+ [0x1D838]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D838,
+ },
+ [0x1D839]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D839,
+ },
+ [0x1D83A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83A,
+ },
+ [0x1D83B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83B,
+ },
+ [0x1D83C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83C,
+ },
+ [0x1D83D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83D,
+ },
+ [0x1D83E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83E,
+ },
+ [0x1D83F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83F,
+ },
+ [0x1D840]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D840,
+ },
+ [0x1D841]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D841,
+ },
+ [0x1D842]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D842,
+ },
+ [0x1D843]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D843,
+ },
+ [0x1D844]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D844,
+ },
+ [0x1D845]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D845,
+ },
+ [0x1D846]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D846,
+ },
+ [0x1D847]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D847,
+ },
+ [0x1D848]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D848,
+ },
+ [0x1D849]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D849,
+ },
+ [0x1D84A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84A,
+ },
+ [0x1D84B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84B,
+ },
+ [0x1D84C]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84C,
+ },
+ [0x1D84D]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84D,
+ },
+ [0x1D84E]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84E,
+ },
+ [0x1D84F]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84F,
+ },
+ [0x1D850]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D850,
+ },
+ [0x1D851]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D851,
+ },
+ [0x1D852]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D852,
+ },
+ [0x1D853]={
+ category="so",
+ description="SIGNWRITING HAND-CUP FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D853,
+ },
+ [0x1D854]={
+ category="so",
+ description="SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D854,
+ },
+ [0x1D855]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D855,
+ },
+ [0x1D856]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D856,
+ },
+ [0x1D857]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D857,
+ },
+ [0x1D858]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D858,
+ },
+ [0x1D859]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D859,
+ },
+ [0x1D85A]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85A,
+ },
+ [0x1D85B]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85B,
+ },
+ [0x1D85C]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85C,
+ },
+ [0x1D85D]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85D,
+ },
+ [0x1D85E]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85E,
+ },
+ [0x1D85F]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85F,
+ },
+ [0x1D860]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D860,
+ },
+ [0x1D861]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D861,
+ },
+ [0x1D862]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D862,
+ },
+ [0x1D863]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D863,
+ },
+ [0x1D864]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D864,
+ },
+ [0x1D865]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D865,
+ },
+ [0x1D866]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D866,
+ },
+ [0x1D867]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D867,
+ },
+ [0x1D868]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D868,
+ },
+ [0x1D869]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D869,
+ },
+ [0x1D86A]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86A,
+ },
+ [0x1D86B]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86B,
+ },
+ [0x1D86C]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86C,
+ },
+ [0x1D86D]={
+ category="so",
+ description="SIGNWRITING HAND-CUP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86D,
+ },
+ [0x1D86E]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86E,
+ },
+ [0x1D86F]={
+ category="so",
+ description="SIGNWRITING HAND-CUP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86F,
+ },
+ [0x1D870]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D870,
+ },
+ [0x1D871]={
+ category="so",
+ description="SIGNWRITING HAND-CUP NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D871,
+ },
+ [0x1D872]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D872,
+ },
+ [0x1D873]={
+ category="so",
+ description="SIGNWRITING HAND-CUP THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D873,
+ },
+ [0x1D874]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D874,
+ },
+ [0x1D875]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D875,
+ },
+ [0x1D876]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D876,
+ },
+ [0x1D877]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D877,
+ },
+ [0x1D878]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D878,
+ },
+ [0x1D879]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D879,
+ },
+ [0x1D87A]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87A,
+ },
+ [0x1D87B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87B,
+ },
+ [0x1D87C]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87C,
+ },
+ [0x1D87D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87D,
+ },
+ [0x1D87E]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87E,
+ },
+ [0x1D87F]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87F,
+ },
+ [0x1D880]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D880,
+ },
+ [0x1D881]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D881,
+ },
+ [0x1D882]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D882,
+ },
+ [0x1D883]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D883,
+ },
+ [0x1D884]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D884,
+ },
+ [0x1D885]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D885,
+ },
+ [0x1D886]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D886,
+ },
+ [0x1D887]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D887,
+ },
+ [0x1D888]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D888,
+ },
+ [0x1D889]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D889,
+ },
+ [0x1D88A]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88A,
+ },
+ [0x1D88B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88B,
+ },
+ [0x1D88C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88C,
+ },
+ [0x1D88D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88D,
+ },
+ [0x1D88E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88E,
+ },
+ [0x1D88F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88F,
+ },
+ [0x1D890]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D890,
+ },
+ [0x1D891]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D891,
+ },
+ [0x1D892]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D892,
+ },
+ [0x1D893]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D893,
+ },
+ [0x1D894]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D894,
+ },
+ [0x1D895]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D895,
+ },
+ [0x1D896]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D896,
+ },
+ [0x1D897]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D897,
+ },
+ [0x1D898]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D898,
+ },
+ [0x1D899]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D899,
+ },
+ [0x1D89A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89A,
+ },
+ [0x1D89B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89B,
+ },
+ [0x1D89C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89C,
+ },
+ [0x1D89D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89D,
+ },
+ [0x1D89E]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89E,
+ },
+ [0x1D89F]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89F,
+ },
+ [0x1D8A0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A0,
+ },
+ [0x1D8A1]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A1,
+ },
+ [0x1D8A2]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A2,
+ },
+ [0x1D8A3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A3,
+ },
+ [0x1D8A4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A4,
+ },
+ [0x1D8A5]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A5,
+ },
+ [0x1D8A6]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A6,
+ },
+ [0x1D8A7]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A7,
+ },
+ [0x1D8A8]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A8,
+ },
+ [0x1D8A9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A9,
+ },
+ [0x1D8AA]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AA,
+ },
+ [0x1D8AB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AB,
+ },
+ [0x1D8AC]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AC,
+ },
+ [0x1D8AD]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AD,
+ },
+ [0x1D8AE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AE,
+ },
+ [0x1D8AF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AF,
+ },
+ [0x1D8B0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B0,
+ },
+ [0x1D8B1]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B1,
+ },
+ [0x1D8B2]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B2,
+ },
+ [0x1D8B3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B3,
+ },
+ [0x1D8B4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B4,
+ },
+ [0x1D8B5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B5,
+ },
+ [0x1D8B6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B6,
+ },
+ [0x1D8B7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B7,
+ },
+ [0x1D8B8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B8,
+ },
+ [0x1D8B9]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK RING THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B9,
+ },
+ [0x1D8BA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BA,
+ },
+ [0x1D8BB]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BB,
+ },
+ [0x1D8BC]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BC,
+ },
+ [0x1D8BD]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BD,
+ },
+ [0x1D8BE]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BE,
+ },
+ [0x1D8BF]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BF,
+ },
+ [0x1D8C0]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C0,
+ },
+ [0x1D8C1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C1,
+ },
+ [0x1D8C2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C2,
+ },
+ [0x1D8C3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C3,
+ },
+ [0x1D8C4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C4,
+ },
+ [0x1D8C5]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C5,
+ },
+ [0x1D8C6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C6,
+ },
+ [0x1D8C7]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C7,
+ },
+ [0x1D8C8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C8,
+ },
+ [0x1D8C9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C9,
+ },
+ [0x1D8CA]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CA,
+ },
+ [0x1D8CB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CB,
+ },
+ [0x1D8CC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CC,
+ },
+ [0x1D8CD]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CD,
+ },
+ [0x1D8CE]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CE,
+ },
+ [0x1D8CF]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CF,
+ },
+ [0x1D8D0]={
+ category="so",
+ description="SIGNWRITING HAND-CUP MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D0,
+ },
+ [0x1D8D1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D1,
+ },
+ [0x1D8D2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D2,
+ },
+ [0x1D8D3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D3,
+ },
+ [0x1D8D4]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D4,
+ },
+ [0x1D8D5]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D5,
+ },
+ [0x1D8D6]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D6,
+ },
+ [0x1D8D7]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D7,
+ },
+ [0x1D8D8]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D8,
+ },
+ [0x1D8D9]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D9,
+ },
+ [0x1D8DA]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DA,
+ },
+ [0x1D8DB]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DB,
+ },
+ [0x1D8DC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DC,
+ },
+ [0x1D8DD]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DD,
+ },
+ [0x1D8DE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DE,
+ },
+ [0x1D8DF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DF,
+ },
+ [0x1D8E0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E0,
+ },
+ [0x1D8E1]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E1,
+ },
+ [0x1D8E2]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E2,
+ },
+ [0x1D8E3]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E3,
+ },
+ [0x1D8E4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E4,
+ },
+ [0x1D8E5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E5,
+ },
+ [0x1D8E6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E6,
+ },
+ [0x1D8E7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E7,
+ },
+ [0x1D8E8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E8,
+ },
+ [0x1D8E9]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E9,
+ },
+ [0x1D8EA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EA,
+ },
+ [0x1D8EB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CIRCLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EB,
+ },
+ [0x1D8EC]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EC,
+ },
+ [0x1D8ED]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX THUMB OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8ED,
+ },
+ [0x1D8EE]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EE,
+ },
+ [0x1D8EF]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EF,
+ },
+ [0x1D8F0]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F0,
+ },
+ [0x1D8F1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F1,
+ },
+ [0x1D8F2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F2,
+ },
+ [0x1D8F3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F3,
+ },
+ [0x1D8F4]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F4,
+ },
+ [0x1D8F5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F5,
+ },
+ [0x1D8F6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F6,
+ },
+ [0x1D8F7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F7,
+ },
+ [0x1D8F8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F8,
+ },
+ [0x1D8F9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F9,
+ },
+ [0x1D8FA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FA,
+ },
+ [0x1D8FB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FB,
+ },
+ [0x1D8FC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FC,
+ },
+ [0x1D8FD]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FD,
+ },
+ [0x1D8FE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FE,
+ },
+ [0x1D8FF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FF,
+ },
+ [0x1D900]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D900,
+ },
+ [0x1D901]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D901,
+ },
+ [0x1D902]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D902,
+ },
+ [0x1D903]={
+ category="so",
+ description="SIGNWRITING HAND-FIST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D903,
+ },
+ [0x1D904]={
+ category="so",
+ description="SIGNWRITING HAND-FIST HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D904,
+ },
+ [0x1D905]={
+ category="so",
+ description="SIGNWRITING TOUCH SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D905,
+ },
+ [0x1D906]={
+ category="so",
+ description="SIGNWRITING TOUCH MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D906,
+ },
+ [0x1D907]={
+ category="so",
+ description="SIGNWRITING TOUCH BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D907,
+ },
+ [0x1D908]={
+ category="so",
+ description="SIGNWRITING GRASP SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D908,
+ },
+ [0x1D909]={
+ category="so",
+ description="SIGNWRITING GRASP MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D909,
+ },
+ [0x1D90A]={
+ category="so",
+ description="SIGNWRITING GRASP BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90A,
+ },
+ [0x1D90B]={
+ category="so",
+ description="SIGNWRITING STRIKE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90B,
+ },
+ [0x1D90C]={
+ category="so",
+ description="SIGNWRITING STRIKE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90C,
+ },
+ [0x1D90D]={
+ category="so",
+ description="SIGNWRITING STRIKE BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90D,
+ },
+ [0x1D90E]={
+ category="so",
+ description="SIGNWRITING BRUSH SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90E,
+ },
+ [0x1D90F]={
+ category="so",
+ description="SIGNWRITING BRUSH MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90F,
+ },
+ [0x1D910]={
+ category="so",
+ description="SIGNWRITING BRUSH BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D910,
+ },
+ [0x1D911]={
+ category="so",
+ description="SIGNWRITING RUB SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D911,
+ },
+ [0x1D912]={
+ category="so",
+ description="SIGNWRITING RUB MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D912,
+ },
+ [0x1D913]={
+ category="so",
+ description="SIGNWRITING RUB BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D913,
+ },
+ [0x1D914]={
+ category="so",
+ description="SIGNWRITING SURFACE SYMBOLS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D914,
+ },
+ [0x1D915]={
+ category="so",
+ description="SIGNWRITING SURFACE BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D915,
+ },
+ [0x1D916]={
+ category="so",
+ description="SIGNWRITING SQUEEZE LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D916,
+ },
+ [0x1D917]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D917,
+ },
+ [0x1D918]={
+ category="so",
+ description="SIGNWRITING SQUEEZE LARGE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D918,
+ },
+ [0x1D919]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SMALL MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D919,
+ },
+ [0x1D91A]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91A,
+ },
+ [0x1D91B]={
+ category="so",
+ description="SIGNWRITING FLICK LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91B,
+ },
+ [0x1D91C]={
+ category="so",
+ description="SIGNWRITING FLICK SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91C,
+ },
+ [0x1D91D]={
+ category="so",
+ description="SIGNWRITING FLICK LARGE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91D,
+ },
+ [0x1D91E]={
+ category="so",
+ description="SIGNWRITING FLICK SMALL MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91E,
+ },
+ [0x1D91F]={
+ category="so",
+ description="SIGNWRITING FLICK SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91F,
+ },
+ [0x1D920]={
+ category="so",
+ description="SIGNWRITING SQUEEZE FLICK ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D920,
+ },
+ [0x1D921]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D921,
+ },
+ [0x1D922]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D922,
+ },
+ [0x1D923]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D923,
+ },
+ [0x1D924]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D924,
+ },
+ [0x1D925]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D925,
+ },
+ [0x1D926]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D926,
+ },
+ [0x1D927]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D927,
+ },
+ [0x1D928]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D928,
+ },
+ [0x1D929]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D929,
+ },
+ [0x1D92A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92A,
+ },
+ [0x1D92B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92B,
+ },
+ [0x1D92C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92C,
+ },
+ [0x1D92D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92D,
+ },
+ [0x1D92E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92E,
+ },
+ [0x1D92F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92F,
+ },
+ [0x1D930]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D930,
+ },
+ [0x1D931]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D931,
+ },
+ [0x1D932]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D932,
+ },
+ [0x1D933]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D933,
+ },
+ [0x1D934]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D934,
+ },
+ [0x1D935]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D935,
+ },
+ [0x1D936]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D936,
+ },
+ [0x1D937]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D937,
+ },
+ [0x1D938]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D938,
+ },
+ [0x1D939]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D939,
+ },
+ [0x1D93A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93A,
+ },
+ [0x1D93B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93B,
+ },
+ [0x1D93C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93C,
+ },
+ [0x1D93D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93D,
+ },
+ [0x1D93E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93E,
+ },
+ [0x1D93F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93F,
+ },
+ [0x1D940]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D940,
+ },
+ [0x1D941]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D941,
+ },
+ [0x1D942]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D942,
+ },
+ [0x1D943]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D943,
+ },
+ [0x1D944]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D944,
+ },
+ [0x1D945]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D945,
+ },
+ [0x1D946]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D946,
+ },
+ [0x1D947]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D947,
+ },
+ [0x1D948]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D948,
+ },
+ [0x1D949]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D949,
+ },
+ [0x1D94A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94A,
+ },
+ [0x1D94B]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94B,
+ },
+ [0x1D94C]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94C,
+ },
+ [0x1D94D]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94D,
+ },
+ [0x1D94E]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94E,
+ },
+ [0x1D94F]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94F,
+ },
+ [0x1D950]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D950,
+ },
+ [0x1D951]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D951,
+ },
+ [0x1D952]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D952,
+ },
+ [0x1D953]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D953,
+ },
+ [0x1D954]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D954,
+ },
+ [0x1D955]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D955,
+ },
+ [0x1D956]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D956,
+ },
+ [0x1D957]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D957,
+ },
+ [0x1D958]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D958,
+ },
+ [0x1D959]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D959,
+ },
+ [0x1D95A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95A,
+ },
+ [0x1D95B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95B,
+ },
+ [0x1D95C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95C,
+ },
+ [0x1D95D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95D,
+ },
+ [0x1D95E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95E,
+ },
+ [0x1D95F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95F,
+ },
+ [0x1D960]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D960,
+ },
+ [0x1D961]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D961,
+ },
+ [0x1D962]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D962,
+ },
+ [0x1D963]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D963,
+ },
+ [0x1D964]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D964,
+ },
+ [0x1D965]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D965,
+ },
+ [0x1D966]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D966,
+ },
+ [0x1D967]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D967,
+ },
+ [0x1D968]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D968,
+ },
+ [0x1D969]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D969,
+ },
+ [0x1D96A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96A,
+ },
+ [0x1D96B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96B,
+ },
+ [0x1D96C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96C,
+ },
+ [0x1D96D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96D,
+ },
+ [0x1D96E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96E,
+ },
+ [0x1D96F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96F,
+ },
+ [0x1D970]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D970,
+ },
+ [0x1D971]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D971,
+ },
+ [0x1D972]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D972,
+ },
+ [0x1D973]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BEND",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D973,
+ },
+ [0x1D974]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D974,
+ },
+ [0x1D975]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D975,
+ },
+ [0x1D976]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D976,
+ },
+ [0x1D977]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CHECK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D977,
+ },
+ [0x1D978]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D978,
+ },
+ [0x1D979]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D979,
+ },
+ [0x1D97A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97A,
+ },
+ [0x1D97B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97B,
+ },
+ [0x1D97C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97C,
+ },
+ [0x1D97D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97D,
+ },
+ [0x1D97E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97E,
+ },
+ [0x1D97F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97F,
+ },
+ [0x1D980]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D980,
+ },
+ [0x1D981]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D981,
+ },
+ [0x1D982]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D982,
+ },
+ [0x1D983]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D983,
+ },
+ [0x1D984]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D984,
+ },
+ [0x1D985]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D985,
+ },
+ [0x1D986]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D986,
+ },
+ [0x1D987]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D987,
+ },
+ [0x1D988]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D988,
+ },
+ [0x1D989]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D989,
+ },
+ [0x1D98A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98A,
+ },
+ [0x1D98B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98B,
+ },
+ [0x1D98C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98C,
+ },
+ [0x1D98D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98D,
+ },
+ [0x1D98E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98E,
+ },
+ [0x1D98F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98F,
+ },
+ [0x1D990]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D990,
+ },
+ [0x1D991]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D991,
+ },
+ [0x1D992]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D992,
+ },
+ [0x1D993]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D993,
+ },
+ [0x1D994]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D994,
+ },
+ [0x1D995]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D995,
+ },
+ [0x1D996]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D996,
+ },
+ [0x1D997]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D997,
+ },
+ [0x1D998]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D998,
+ },
+ [0x1D999]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D999,
+ },
+ [0x1D99A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99A,
+ },
+ [0x1D99B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99B,
+ },
+ [0x1D99C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99C,
+ },
+ [0x1D99D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99D,
+ },
+ [0x1D99E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99E,
+ },
+ [0x1D99F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99F,
+ },
+ [0x1D9A0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A0,
+ },
+ [0x1D9A1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A1,
+ },
+ [0x1D9A2]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A2,
+ },
+ [0x1D9A3]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A3,
+ },
+ [0x1D9A4]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A4,
+ },
+ [0x1D9A5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A5,
+ },
+ [0x1D9A6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A6,
+ },
+ [0x1D9A7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A7,
+ },
+ [0x1D9A8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A8,
+ },
+ [0x1D9A9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A9,
+ },
+ [0x1D9AA]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AA,
+ },
+ [0x1D9AB]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AB,
+ },
+ [0x1D9AC]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AC,
+ },
+ [0x1D9AD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AD,
+ },
+ [0x1D9AE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AE,
+ },
+ [0x1D9AF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AF,
+ },
+ [0x1D9B0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B0,
+ },
+ [0x1D9B1]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B1,
+ },
+ [0x1D9B2]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B2,
+ },
+ [0x1D9B3]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B3,
+ },
+ [0x1D9B4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B4,
+ },
+ [0x1D9B5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B5,
+ },
+ [0x1D9B6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B6,
+ },
+ [0x1D9B7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B7,
+ },
+ [0x1D9B8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B8,
+ },
+ [0x1D9B9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B9,
+ },
+ [0x1D9BA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BA,
+ },
+ [0x1D9BB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BB,
+ },
+ [0x1D9BC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BC,
+ },
+ [0x1D9BD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BD,
+ },
+ [0x1D9BE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BE,
+ },
+ [0x1D9BF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BF,
+ },
+ [0x1D9C0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C0,
+ },
+ [0x1D9C1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C1,
+ },
+ [0x1D9C2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C2,
+ },
+ [0x1D9C3]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C3,
+ },
+ [0x1D9C4]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C4,
+ },
+ [0x1D9C5]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C5,
+ },
+ [0x1D9C6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C6,
+ },
+ [0x1D9C7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C7,
+ },
+ [0x1D9C8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C8,
+ },
+ [0x1D9C9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C9,
+ },
+ [0x1D9CA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CA,
+ },
+ [0x1D9CB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CB,
+ },
+ [0x1D9CC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CC,
+ },
+ [0x1D9CD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CD,
+ },
+ [0x1D9CE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CE,
+ },
+ [0x1D9CF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CF,
+ },
+ [0x1D9D0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D0,
+ },
+ [0x1D9D1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D1,
+ },
+ [0x1D9D2]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D2,
+ },
+ [0x1D9D3]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D3,
+ },
+ [0x1D9D4]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D4,
+ },
+ [0x1D9D5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D5,
+ },
+ [0x1D9D6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D6,
+ },
+ [0x1D9D7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D7,
+ },
+ [0x1D9D8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D8,
+ },
+ [0x1D9D9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D9,
+ },
+ [0x1D9DA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DA,
+ },
+ [0x1D9DB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DB,
+ },
+ [0x1D9DC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DC,
+ },
+ [0x1D9DD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DD,
+ },
+ [0x1D9DE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DE,
+ },
+ [0x1D9DF]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DF,
+ },
+ [0x1D9E0]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E0,
+ },
+ [0x1D9E1]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E1,
+ },
+ [0x1D9E2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E2,
+ },
+ [0x1D9E3]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E3,
+ },
+ [0x1D9E4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E4,
+ },
+ [0x1D9E5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E5,
+ },
+ [0x1D9E6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E6,
+ },
+ [0x1D9E7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E7,
+ },
+ [0x1D9E8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E8,
+ },
+ [0x1D9E9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E9,
+ },
+ [0x1D9EA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EA,
+ },
+ [0x1D9EB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EB,
+ },
+ [0x1D9EC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EC,
+ },
+ [0x1D9ED]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9ED,
+ },
+ [0x1D9EE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EE,
+ },
+ [0x1D9EF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EF,
+ },
+ [0x1D9F0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F0,
+ },
+ [0x1D9F1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F1,
+ },
+ [0x1D9F2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F2,
+ },
+ [0x1D9F3]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F3,
+ },
+ [0x1D9F4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F4,
+ },
+ [0x1D9F5]={
+ category="so",
+ description="SIGNWRITING DYNAMIC ARROWHEAD SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F5,
+ },
+ [0x1D9F6]={
+ category="so",
+ description="SIGNWRITING DYNAMIC ARROWHEAD LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F6,
+ },
+ [0x1D9F7]={
+ category="so",
+ description="SIGNWRITING DYNAMIC FAST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F7,
+ },
+ [0x1D9F8]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SLOW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F8,
+ },
+ [0x1D9F9]={
+ category="so",
+ description="SIGNWRITING DYNAMIC TENSE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F9,
+ },
+ [0x1D9FA]={
+ category="so",
+ description="SIGNWRITING DYNAMIC RELAXED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FA,
+ },
+ [0x1D9FB]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SIMULTANEOUS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FB,
+ },
+ [0x1D9FC]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FC,
+ },
+ [0x1D9FD]={
+ category="so",
+ description="SIGNWRITING DYNAMIC EVERY OTHER TIME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FD,
+ },
+ [0x1D9FE]={
+ category="so",
+ description="SIGNWRITING DYNAMIC GRADUAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FE,
+ },
+ [0x1D9FF]={
+ category="so",
+ description="SIGNWRITING HEAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FF,
+ },
+ [0x1DA00]={
+ category="mn",
+ description="SIGNWRITING HEAD RIM",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA00,
+ },
+ [0x1DA01]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA01,
+ },
+ [0x1DA02]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA02,
+ },
+ [0x1DA03]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA03,
+ },
+ [0x1DA04]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA04,
+ },
+ [0x1DA05]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA05,
+ },
+ [0x1DA06]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT CIRCLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA06,
+ },
+ [0x1DA07]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA07,
+ },
+ [0x1DA08]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA08,
+ },
+ [0x1DA09]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA09,
+ },
+ [0x1DA0A]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0A,
+ },
+ [0x1DA0B]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0B,
+ },
+ [0x1DA0C]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0C,
+ },
+ [0x1DA0D]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0D,
+ },
+ [0x1DA0E]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0E,
+ },
+ [0x1DA0F]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS UP NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0F,
+ },
+ [0x1DA10]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS NEUTRAL UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA10,
+ },
+ [0x1DA11]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA11,
+ },
+ [0x1DA12]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA12,
+ },
+ [0x1DA13]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA13,
+ },
+ [0x1DA14]={
+ category="mn",
+ description="SIGNWRITING EYES OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA14,
+ },
+ [0x1DA15]={
+ category="mn",
+ description="SIGNWRITING EYES SQUEEZED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA15,
+ },
+ [0x1DA16]={
+ category="mn",
+ description="SIGNWRITING EYES CLOSED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA16,
+ },
+ [0x1DA17]={
+ category="mn",
+ description="SIGNWRITING EYE BLINK SINGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA17,
+ },
+ [0x1DA18]={
+ category="mn",
+ description="SIGNWRITING EYE BLINK MULTIPLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA18,
+ },
+ [0x1DA19]={
+ category="mn",
+ description="SIGNWRITING EYES HALF OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA19,
+ },
+ [0x1DA1A]={
+ category="mn",
+ description="SIGNWRITING EYES WIDE OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1A,
+ },
+ [0x1DA1B]={
+ category="mn",
+ description="SIGNWRITING EYES HALF CLOSED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1B,
+ },
+ [0x1DA1C]={
+ category="mn",
+ description="SIGNWRITING EYES WIDENING MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1C,
+ },
+ [0x1DA1D]={
+ category="mn",
+ description="SIGNWRITING EYE WINK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1D,
+ },
+ [0x1DA1E]={
+ category="mn",
+ description="SIGNWRITING EYELASHES UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1E,
+ },
+ [0x1DA1F]={
+ category="mn",
+ description="SIGNWRITING EYELASHES DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1F,
+ },
+ [0x1DA20]={
+ category="mn",
+ description="SIGNWRITING EYELASHES FLUTTERING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA20,
+ },
+ [0x1DA21]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA21,
+ },
+ [0x1DA22]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA22,
+ },
+ [0x1DA23]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA23,
+ },
+ [0x1DA24]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA24,
+ },
+ [0x1DA25]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA25,
+ },
+ [0x1DA26]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA26,
+ },
+ [0x1DA27]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE CURVED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA27,
+ },
+ [0x1DA28]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE CURVED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA28,
+ },
+ [0x1DA29]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE CIRCLING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA29,
+ },
+ [0x1DA2A]={
+ category="mn",
+ description="SIGNWRITING CHEEKS PUFFED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2A,
+ },
+ [0x1DA2B]={
+ category="mn",
+ description="SIGNWRITING CHEEKS NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2B,
+ },
+ [0x1DA2C]={
+ category="mn",
+ description="SIGNWRITING CHEEKS SUCKED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2C,
+ },
+ [0x1DA2D]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS HIGH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2D,
+ },
+ [0x1DA2E]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS MIDDLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2E,
+ },
+ [0x1DA2F]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS LOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2F,
+ },
+ [0x1DA30]={
+ category="mn",
+ description="SIGNWRITING EARS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA30,
+ },
+ [0x1DA31]={
+ category="mn",
+ description="SIGNWRITING NOSE NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA31,
+ },
+ [0x1DA32]={
+ category="mn",
+ description="SIGNWRITING NOSE CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA32,
+ },
+ [0x1DA33]={
+ category="mn",
+ description="SIGNWRITING NOSE WRINKLES",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA33,
+ },
+ [0x1DA34]={
+ category="mn",
+ description="SIGNWRITING NOSE WIGGLES",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA34,
+ },
+ [0x1DA35]={
+ category="mn",
+ description="SIGNWRITING AIR BLOWING OUT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA35,
+ },
+ [0x1DA36]={
+ category="mn",
+ description="SIGNWRITING AIR SUCKING IN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA36,
+ },
+ [0x1DA37]={
+ category="so",
+ description="SIGNWRITING AIR BLOW SMALL ROTATIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA37,
+ },
+ [0x1DA38]={
+ category="so",
+ description="SIGNWRITING AIR SUCK SMALL ROTATIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA38,
+ },
+ [0x1DA39]={
+ category="so",
+ description="SIGNWRITING BREATH INHALE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA39,
+ },
+ [0x1DA3A]={
+ category="so",
+ description="SIGNWRITING BREATH EXHALE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA3A,
+ },
+ [0x1DA3B]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3B,
+ },
+ [0x1DA3C]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3C,
+ },
+ [0x1DA3D]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3D,
+ },
+ [0x1DA3E]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3E,
+ },
+ [0x1DA3F]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3F,
+ },
+ [0x1DA40]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA40,
+ },
+ [0x1DA41]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA41,
+ },
+ [0x1DA42]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA42,
+ },
+ [0x1DA43]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA43,
+ },
+ [0x1DA44]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN CIRCLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA44,
+ },
+ [0x1DA45]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA45,
+ },
+ [0x1DA46]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA46,
+ },
+ [0x1DA47]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA47,
+ },
+ [0x1DA48]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA48,
+ },
+ [0x1DA49]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL YAWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA49,
+ },
+ [0x1DA4A]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4A,
+ },
+ [0x1DA4B]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4B,
+ },
+ [0x1DA4C]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE YAWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4C,
+ },
+ [0x1DA4D]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4D,
+ },
+ [0x1DA4E]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4E,
+ },
+ [0x1DA4F]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4F,
+ },
+ [0x1DA50]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA50,
+ },
+ [0x1DA51]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA51,
+ },
+ [0x1DA52]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE SUCKED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA52,
+ },
+ [0x1DA53]={
+ category="mn",
+ description="SIGNWRITING LIPS PRESSED TOGETHER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA53,
+ },
+ [0x1DA54]={
+ category="mn",
+ description="SIGNWRITING LIP LOWER OVER UPPER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA54,
+ },
+ [0x1DA55]={
+ category="mn",
+ description="SIGNWRITING LIP UPPER OVER LOWER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA55,
+ },
+ [0x1DA56]={
+ category="mn",
+ description="SIGNWRITING MOUTH CORNERS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA56,
+ },
+ [0x1DA57]={
+ category="mn",
+ description="SIGNWRITING MOUTH WRINKLES SINGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA57,
+ },
+ [0x1DA58]={
+ category="mn",
+ description="SIGNWRITING MOUTH WRINKLES DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA58,
+ },
+ [0x1DA59]={
+ category="mn",
+ description="SIGNWRITING TONGUE STICKING OUT FAR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA59,
+ },
+ [0x1DA5A]={
+ category="mn",
+ description="SIGNWRITING TONGUE LICKING LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5A,
+ },
+ [0x1DA5B]={
+ category="mn",
+ description="SIGNWRITING TONGUE TIP BETWEEN LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5B,
+ },
+ [0x1DA5C]={
+ category="mn",
+ description="SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5C,
+ },
+ [0x1DA5D]={
+ category="mn",
+ description="SIGNWRITING TONGUE INSIDE MOUTH RELAXED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5D,
+ },
+ [0x1DA5E]={
+ category="mn",
+ description="SIGNWRITING TONGUE MOVES AGAINST CHEEK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5E,
+ },
+ [0x1DA5F]={
+ category="mn",
+ description="SIGNWRITING TONGUE CENTRE STICKING OUT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5F,
+ },
+ [0x1DA60]={
+ category="mn",
+ description="SIGNWRITING TONGUE CENTRE INSIDE MOUTH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA60,
+ },
+ [0x1DA61]={
+ category="mn",
+ description="SIGNWRITING TEETH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA61,
+ },
+ [0x1DA62]={
+ category="mn",
+ description="SIGNWRITING TEETH MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA62,
+ },
+ [0x1DA63]={
+ category="mn",
+ description="SIGNWRITING TEETH ON TONGUE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA63,
+ },
+ [0x1DA64]={
+ category="mn",
+ description="SIGNWRITING TEETH ON TONGUE MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA64,
+ },
+ [0x1DA65]={
+ category="mn",
+ description="SIGNWRITING TEETH ON LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA65,
+ },
+ [0x1DA66]={
+ category="mn",
+ description="SIGNWRITING TEETH ON LIPS MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA66,
+ },
+ [0x1DA67]={
+ category="mn",
+ description="SIGNWRITING TEETH BITE LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA67,
+ },
+ [0x1DA68]={
+ category="mn",
+ description="SIGNWRITING MOVEMENT-WALLPLANE JAW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA68,
+ },
+ [0x1DA69]={
+ category="mn",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE JAW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA69,
+ },
+ [0x1DA6A]={
+ category="mn",
+ description="SIGNWRITING NECK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6A,
+ },
+ [0x1DA6B]={
+ category="mn",
+ description="SIGNWRITING HAIR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6B,
+ },
+ [0x1DA6C]={
+ category="mn",
+ description="SIGNWRITING EXCITEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6C,
+ },
+ [0x1DA6D]={
+ category="so",
+ description="SIGNWRITING SHOULDER HIP SPINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6D,
+ },
+ [0x1DA6E]={
+ category="so",
+ description="SIGNWRITING SHOULDER HIP POSITIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6E,
+ },
+ [0x1DA6F]={
+ category="so",
+ description="SIGNWRITING WALLPLANE SHOULDER HIP MOVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6F,
+ },
+ [0x1DA70]={
+ category="so",
+ description="SIGNWRITING FLOORPLANE SHOULDER HIP MOVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA70,
+ },
+ [0x1DA71]={
+ category="so",
+ description="SIGNWRITING SHOULDER TILTING FROM WAIST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA71,
+ },
+ [0x1DA72]={
+ category="so",
+ description="SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA72,
+ },
+ [0x1DA73]={
+ category="so",
+ description="SIGNWRITING TORSO-WALLPLANE CURVED BEND",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA73,
+ },
+ [0x1DA74]={
+ category="so",
+ description="SIGNWRITING TORSO-FLOORPLANE TWISTING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA74,
+ },
+ [0x1DA75]={
+ category="mn",
+ description="SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA75,
+ },
+ [0x1DA76]={
+ category="so",
+ description="SIGNWRITING LIMB COMBINATION",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA76,
+ },
+ [0x1DA77]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-1",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA77,
+ },
+ [0x1DA78]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA78,
+ },
+ [0x1DA79]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA79,
+ },
+ [0x1DA7A]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7A,
+ },
+ [0x1DA7B]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-5",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7B,
+ },
+ [0x1DA7C]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-6",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7C,
+ },
+ [0x1DA7D]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7D,
+ },
+ [0x1DA7E]={
+ category="so",
+ description="SIGNWRITING FINGER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7E,
+ },
+ [0x1DA7F]={
+ category="so",
+ description="SIGNWRITING LOCATION-WALLPLANE SPACE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7F,
+ },
+ [0x1DA80]={
+ category="so",
+ description="SIGNWRITING LOCATION-FLOORPLANE SPACE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA80,
+ },
+ [0x1DA81]={
+ category="so",
+ description="SIGNWRITING LOCATION HEIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA81,
+ },
+ [0x1DA82]={
+ category="so",
+ description="SIGNWRITING LOCATION WIDTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA82,
+ },
+ [0x1DA83]={
+ category="so",
+ description="SIGNWRITING LOCATION DEPTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA83,
+ },
+ [0x1DA84]={
+ category="mn",
+ description="SIGNWRITING LOCATION HEAD NECK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA84,
+ },
+ [0x1DA85]={
+ category="so",
+ description="SIGNWRITING LOCATION TORSO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA85,
+ },
+ [0x1DA86]={
+ category="so",
+ description="SIGNWRITING LOCATION LIMBS DIGITS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA86,
+ },
+ [0x1DA87]={
+ category="po",
+ description="SIGNWRITING COMMA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA87,
+ },
+ [0x1DA88]={
+ category="po",
+ description="SIGNWRITING FULL STOP",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA88,
+ },
+ [0x1DA89]={
+ category="po",
+ description="SIGNWRITING SEMICOLON",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA89,
+ },
+ [0x1DA8A]={
+ category="po",
+ description="SIGNWRITING COLON",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA8A,
+ },
+ [0x1DA8B]={
+ category="po",
+ description="SIGNWRITING PARENTHESIS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA8B,
+ },
+ [0x1DA9B]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-2",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9B,
+ },
+ [0x1DA9C]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-3",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9C,
+ },
+ [0x1DA9D]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-4",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9D,
+ },
+ [0x1DA9E]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-5",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9E,
+ },
+ [0x1DA9F]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-6",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9F,
+ },
+ [0x1DAA1]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-2",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA1,
+ },
+ [0x1DAA2]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-3",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA2,
+ },
+ [0x1DAA3]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-4",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA3,
+ },
+ [0x1DAA4]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-5",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA4,
+ },
+ [0x1DAA5]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-6",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA5,
+ },
+ [0x1DAA6]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-7",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA6,
+ },
+ [0x1DAA7]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-8",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA7,
+ },
+ [0x1DAA8]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-9",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA8,
+ },
+ [0x1DAA9]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-10",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA9,
+ },
+ [0x1DAAA]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-11",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAA,
+ },
+ [0x1DAAB]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-12",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAB,
+ },
+ [0x1DAAC]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-13",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAC,
+ },
+ [0x1DAAD]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-14",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAD,
+ },
+ [0x1DAAE]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-15",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAE,
+ },
+ [0x1DAAF]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-16",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAF,
+ },
[0x1E800]={
category="lo",
description="MENDE KIKAKUI SYLLABLE M001 KI",
@@ -197713,6 +211073,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F170,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F171]={
category="so",
@@ -197721,6 +211085,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F171,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F172]={
category="so",
@@ -197825,6 +211193,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F17E,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F17F]={
category="so",
@@ -198263,6 +211635,10 @@ characters.data={
linebreak="id",
specials={ "square", 0x30B5 },
unicodeslot=0x1F202,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F210]={
category="so",
@@ -198631,6 +212007,10 @@ characters.data={
linebreak="id",
specials={ "square", 0x6708 },
unicodeslot=0x1F237,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F238]={
category="so",
@@ -199073,6 +212453,27 @@ characters.data={
linebreak="id",
unicodeslot=0x1F32C,
},
+ [0x1F32D]={
+ category="so",
+ description="HOT DOG",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32D,
+ },
+ [0x1F32E]={
+ category="so",
+ description="TACO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32E,
+ },
+ [0x1F32F]={
+ category="so",
+ description="BURRITO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32F,
+ },
[0x1F330]={
category="so",
description="CHESTNUT",
@@ -199619,6 +213020,20 @@ characters.data={
linebreak="id",
unicodeslot=0x1F37D,
},
+ [0x1F37E]={
+ category="so",
+ description="BOTTLE WITH POPPING CORK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F37E,
+ },
+ [0x1F37F]={
+ category="so",
+ description="POPCORN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F37F,
+ },
[0x1F380]={
category="so",
description="RIBBON",
@@ -200172,6 +213587,41 @@ characters.data={
linebreak="id",
unicodeslot=0x1F3CE,
},
+ [0x1F3CF]={
+ category="so",
+ description="CRICKET BAT AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3CF,
+ },
+ [0x1F3D0]={
+ category="so",
+ description="VOLLEYBALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D0,
+ },
+ [0x1F3D1]={
+ category="so",
+ description="FIELD HOCKEY STICK AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D1,
+ },
+ [0x1F3D2]={
+ category="so",
+ description="ICE HOCKEY STICK AND PUCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D2,
+ },
+ [0x1F3D3]={
+ category="so",
+ description="TABLE TENNIS PADDLE AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D3,
+ },
[0x1F3D4]={
category="so",
description="SNOW CAPPED MOUNTAIN",
@@ -200424,6 +213874,62 @@ characters.data={
linebreak="id",
unicodeslot=0x1F3F7,
},
+ [0x1F3F8]={
+ category="so",
+ description="BADMINTON RACQUET AND SHUTTLECOCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3F8,
+ },
+ [0x1F3F9]={
+ category="so",
+ description="BOW AND ARROW",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3F9,
+ },
+ [0x1F3FA]={
+ category="so",
+ description="AMPHORA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3FA,
+ },
+ [0x1F3FB]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-1-2",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FB,
+ },
+ [0x1F3FC]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-3",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FC,
+ },
+ [0x1F3FD]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-4",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FD,
+ },
+ [0x1F3FE]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-5",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FE,
+ },
+ [0x1F3FF]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-6",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FF,
+ },
[0x1F400]={
category="so",
description="RAT",
@@ -202209,6 +215715,13 @@ characters.data={
linebreak="id",
unicodeslot=0x1F4FE,
},
+ [0x1F4FF]={
+ category="so",
+ description="PRAYER BEADS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F4FF,
+ },
[0x1F500]={
category="so",
description="TWISTED RIGHTWARDS ARROWS",
@@ -202734,6 +216247,41 @@ characters.data={
linebreak="id",
unicodeslot=0x1F54A,
},
+ [0x1F54B]={
+ category="so",
+ description="KAABA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54B,
+ },
+ [0x1F54C]={
+ category="so",
+ description="MOSQUE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54C,
+ },
+ [0x1F54D]={
+ category="so",
+ description="SYNAGOGUE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54D,
+ },
+ [0x1F54E]={
+ category="so",
+ description="MENORAH WITH NINE BRANCHES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54E,
+ },
+ [0x1F54F]={
+ category="so",
+ description="BOWL OF HYGIEIA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54F,
+ },
[0x1F550]={
category="so",
description="CLOCK FACE ONE OCLOCK",
@@ -204421,6 +217969,20 @@ characters.data={
linebreak="id",
unicodeslot=0x1F642,
},
+ [0x1F643]={
+ category="so",
+ description="UPSIDE-DOWN FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F643,
+ },
+ [0x1F644]={
+ category="so",
+ description="FACE WITH ROLLING EYES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F644,
+ },
[0x1F645]={
category="so",
description="FACE WITH NO GOOD GESTURE",
@@ -205394,6 +218956,13 @@ characters.data={
linebreak="id",
unicodeslot=0x1F6CF,
},
+ [0x1F6D0]={
+ category="so",
+ description="PLACE OF WORSHIP",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6D0,
+ },
[0x1F6E0]={
category="so",
description="HAMMER AND WRENCH",
@@ -207956,6 +221525,111 @@ characters.data={
linebreak="al",
unicodeslot=0x1F8AD,
},
+ [0x1F910]={
+ category="so",
+ description="ZIPPER-MOUTH FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F910,
+ },
+ [0x1F911]={
+ category="so",
+ description="MONEY-MOUTH FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F911,
+ },
+ [0x1F912]={
+ category="so",
+ description="FACE WITH THERMOMETER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F912,
+ },
+ [0x1F913]={
+ category="so",
+ description="NERD FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F913,
+ },
+ [0x1F914]={
+ category="so",
+ description="THINKING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F914,
+ },
+ [0x1F915]={
+ category="so",
+ description="FACE WITH HEAD-BANDAGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F915,
+ },
+ [0x1F916]={
+ category="so",
+ description="ROBOT FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F916,
+ },
+ [0x1F917]={
+ category="so",
+ description="HUGGING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F917,
+ },
+ [0x1F918]={
+ category="so",
+ description="SIGN OF THE HORNS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F918,
+ },
+ [0x1F980]={
+ category="so",
+ description="CRAB",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F980,
+ },
+ [0x1F981]={
+ category="so",
+ description="LION FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F981,
+ },
+ [0x1F982]={
+ category="so",
+ description="SCORPION",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F982,
+ },
+ [0x1F983]={
+ category="so",
+ description="TURKEY",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F983,
+ },
+ [0x1F984]={
+ category="so",
+ description="UNICORN FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F984,
+ },
+ [0x1F9C0]={
+ category="so",
+ description="CHEESE WEDGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C0,
+ },
[0x2F800]={
category="lo",
cjkwd="w",
@@ -215433,4 +229107,4 @@ characters.data={
linebreak="cm",
unicodeslot=0xE01EF,
},
-}
+} \ No newline at end of file
diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua
index 136cbf705..095133b55 100644
--- a/tex/context/base/char-ini.lua
+++ b/tex/context/base/char-ini.lua
@@ -140,8 +140,10 @@ end)
local blocks = allocate {
["aegeannumbers"] = { first = 0x10100, last = 0x1013F, description = "Aegean Numbers" },
+ ["ahom"] = { first = 0x11700, last = 0x1173F, description = "Ahom" },
["alchemicalsymbols"] = { first = 0x1F700, last = 0x1F77F, description = "Alchemical Symbols" },
["alphabeticpresentationforms"] = { first = 0x0FB00, last = 0x0FB4F, otf="latn", description = "Alphabetic Presentation Forms" },
+ ["anatolianhieroglyphs"] = { first = 0x14400, last = 0x1467F, description = "Anatolian Hieroglyphs" },
["ancientgreekmusicalnotation"] = { first = 0x1D200, last = 0x1D24F, otf="grek", description = "Ancient Greek Musical Notation" },
["ancientgreeknumbers"] = { first = 0x10140, last = 0x1018F, otf="grek", description = "Ancient Greek Numbers" },
["ancientsymbols"] = { first = 0x10190, last = 0x101CF, otf="grek", description = "Ancient Symbols" },
@@ -175,6 +177,7 @@ local blocks = allocate {
["chakma"] = { first = 0x11100, last = 0x1114F, description = "Chakma" },
["cham"] = { first = 0x0AA00, last = 0x0AA5F, description = "Cham" },
["cherokee"] = { first = 0x013A0, last = 0x013FF, otf="cher", description = "Cherokee" },
+ ["cherokeesupplement"] = { first = 0x0AB70, last = 0x0ABBF, description = "Cherokee Supplement" },
["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" },
@@ -187,6 +190,7 @@ local blocks = allocate {
["cjkunifiedideographsextensionb"] = { first = 0x20000, last = 0x2A6DF, otf="hang", description = "CJK Unified Ideographs Extension B" },
["cjkunifiedideographsextensionc"] = { first = 0x2A700, last = 0x2B73F, description = "CJK Unified Ideographs Extension C" },
["cjkunifiedideographsextensiond"] = { first = 0x2B740, last = 0x2B81F, description = "CJK Unified Ideographs Extension D" },
+ ["cjkunifiedideographsextensione"] = { first = 0x2B820, last = 0x2CEAF, description = "CJK Unified Ideographs Extension E" },
["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" },
["combiningdiacriticalmarksextended"] = { first = 0x01AB0, last = 0x01AFF, description = "Combining Diacritical Marks Extended" },
["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" },
@@ -236,6 +240,7 @@ local blocks = allocate {
["dingbats"] = { first = 0x02700, last = 0x027BF, description = "Dingbats" },
["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" },
["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" },
+ ["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" },
["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" },
["elbasan"] = { first = 0x10500, last = 0x1052F, description = "Elbasan" },
["emoticons"] = { first = 0x1F600, last = 0x1F64F, description = "Emoticons" },
@@ -248,8 +253,7 @@ local blocks = allocate {
["ethiopicextendeda"] = { first = 0x0AB00, last = 0x0AB2F, description = "Ethiopic Extended-A" },
["ethiopicsupplement"] = { first = 0x01380, last = 0x0139F, otf="ethi", description = "Ethiopic Supplement" },
["generalpunctuation"] = { first = 0x02000, last = 0x0206F, description = "General Punctuation" },
- ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, description = "Geometric Shapes" },
- ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, math = true },
+ ["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" },
["georgiansupplement"] = { first = 0x02D00, last = 0x02D2F, otf="geor", description = "Georgian Supplement" },
@@ -267,6 +271,7 @@ local blocks = allocate {
["hanguljamoextendedb"] = { first = 0x0D7B0, last = 0x0D7FF, description = "Hangul Jamo Extended-B" },
["hangulsyllables"] = { first = 0x0AC00, last = 0x0D7AF, otf="hang", description = "Hangul Syllables" },
["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" },
["highprivateusesurrogates"] = { first = 0x0DB80, last = 0x0DBFF, description = "High Private Use Surrogates" },
["highsurrogates"] = { first = 0x0D800, last = 0x0DB7F, description = "High Surrogates" },
@@ -299,8 +304,7 @@ local blocks = allocate {
["latinextendede"] = { first = 0x0AB30, last = 0x0AB6F, description = "Latin Extended-E" },
["latinsupplement"] = { first = 0x00080, last = 0x000FF, otf="latn", description = "Latin-1 Supplement" },
["lepcha"] = { first = 0x01C00, last = 0x01C4F, description = "Lepcha" },
- ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, description = "Letterlike Symbols" },
- ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, math = true },
+ ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, math = true, description = "Letterlike Symbols" },
["limbu"] = { first = 0x01900, last = 0x0194F, otf="limb", description = "Limbu" },
["lineara"] = { first = 0x10600, last = 0x1077F, description = "Linear A" },
["linearbideograms"] = { first = 0x10080, last = 0x100FF, otf="linb", description = "Linear B Ideograms" },
@@ -352,6 +356,7 @@ local blocks = allocate {
["modifiertoneletters"] = { first = 0x0A700, last = 0x0A71F, description = "Modifier Tone Letters" },
["mongolian"] = { first = 0x01800, last = 0x018AF, otf="mong", description = "Mongolian" },
["mro"] = { first = 0x16A40, last = 0x16A6F, description = "Mro" },
+ ["multani"] = { first = 0x11280, last = 0x112AF, description = "Multani" },
["musicalsymbols"] = { first = 0x1D100, last = 0x1D1FF, otf="musc", description = "Musical Symbols" },
["myanmar"] = { first = 0x01000, last = 0x0109F, otf="mymr", description = "Myanmar" },
["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" },
@@ -362,6 +367,7 @@ local blocks = allocate {
["numberforms"] = { first = 0x02150, last = 0x0218F, description = "Number Forms" },
["ogham"] = { first = 0x01680, last = 0x0169F, otf="ogam", description = "Ogham" },
["olchiki"] = { first = 0x01C50, last = 0x01C7F, description = "Ol Chiki" },
+ ["oldhungarian"] = { first = 0x10C80, last = 0x10CFF, description = "Old Hungarian" },
["olditalic"] = { first = 0x10300, last = 0x1032F, otf="ital", description = "Old Italic" },
["oldnortharabian"] = { first = 0x10A80, last = 0x10A9F, description = "Old North Arabian" },
["oldpermic"] = { first = 0x10350, last = 0x1037F, description = "Old Permic" },
@@ -406,8 +412,10 @@ local blocks = allocate {
["supplementalarrowsc"] = { first = 0x1F800, last = 0x1F8FF, math = true, description = "Supplemental Arrows-C" },
["supplementalmathematicaloperators"] = { first = 0x02A00, last = 0x02AFF, math = true, description = "Supplemental Mathematical Operators" },
["supplementalpunctuation"] = { first = 0x02E00, last = 0x02E7F, description = "Supplemental Punctuation" },
+ ["supplementalsymbolsandpictographs"] = { first = 0x1F900, last = 0x1F9FF, description = "Supplemental Symbols and Pictographs" },
["supplementaryprivateuseareaa"] = { first = 0xF0000, last = 0xFFFFF, description = "Supplementary Private Use Area-A" },
["supplementaryprivateuseareab"] = { first = 0x100000,last = 0x10FFFF, description = "Supplementary Private Use Area-B" },
+ ["suttonsignwriting"] = { first = 0x1D800, last = 0x1DAAF, description = "Sutton SignWriting" },
["sylotinagri"] = { first = 0x0A800, last = 0x0A82F, otf="sylo", description = "Syloti Nagri" },
["syriac"] = { first = 0x00700, last = 0x0074F, otf="syrc", description = "Syriac" },
["tagalog"] = { first = 0x01700, last = 0x0171F, otf="tglg", description = "Tagalog" },
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 7e18ea207..8cd739503 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2015.06.15 13:42}
+\newcontextversion{2015.07.01 21:40}
%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/context-version.pdf b/tex/context/base/context-version.pdf
index 153a6475b..9a613cc88 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 6c8fc4559..2c3cc0eb0 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -39,7 +39,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2015.06.15 13:42}
+\edef\contextversion{2015.07.01 21:40}
\edef\contextkind {beta}
%D For those who want to use this:
@@ -547,14 +547,14 @@
% now we hook in backend code (needs checking)
+\loadmarkfile{back-exp}
+
\loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend
\loadmarkfile{mlib-pdf}
\loadmarkfile{mlib-pps}
\loadmarkfile{meta-pdf}
\loadmarkfile{grph-epd}
-\loadmarkfile{back-exp}
-
\loadmarkfile{cont-run} % the main runner (used in cont-yes.mkiv)
\setupcurrentlanguage[\defaultlanguagetag]
diff --git a/tex/context/base/font-agl.lua b/tex/context/base/font-agl.lua
index 122d1adc2..e60a2be0c 100644
--- a/tex/context/base/font-agl.lua
+++ b/tex/context/base/font-agl.lua
@@ -15,6 +15,10 @@ local unicodes = allocate {
-- filled from char-def.lua
}
+local ctxcodes = allocate {
+ -- filled from char-def.lua
+}
+
local synonyms = {
Acyrillic = 0x0410,
Becyrillic = 0x0411,
@@ -638,6 +642,11 @@ for u, c in next, characters.data do
unicodes[a] = u
names [u] = a
end
+ local n = c.contextname
+ if n then
+ ctxcodes[n] = u
+ -- names [u] = a
+ end
end
for a, u in next, extras do
@@ -657,11 +666,12 @@ end
-- We load this table only when needed. We could use a loading mechanism
-- return the table but there are no more vectors like this so why bother.
--
--- Well, we currently hav ethis table preloaded anyway.
+-- Well, we currently have this table preloaded anyway.
local agl = {
names = names, -- unicode -> name
unicodes = unicodes, -- name -> unicode
+ ctxcodes = ctxcodes, -- name -> unicode
synonyms = synonyms, -- merged into the other two
extras = extras, -- merged into the other two
}
diff --git a/tex/context/base/font-cff.lua b/tex/context/base/font-cff.lua
index 1de2b1117..c6707ff35 100644
--- a/tex/context/base/font-cff.lua
+++ b/tex/context/base/font-cff.lua
@@ -20,29 +20,34 @@ if not modules then modules = { } end modules ['font-cff'] = {
-- per segment. For pdf a simple concat works ok, but for other purposes a operator first
-- flush is nicer.
-local next, type = next, type
+local next, type, tonumber = next, type, tonumber
local byte = string.byte
local concat, remove = table.concat, table.remove
local floor, abs, round, ceil = math.floor, math.abs, math.round, math.ceil
local P, C, R, S, C, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct
local lpegmatch = lpeg.match
-local files = utilities.files
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
-local readbytes = files.readbytes
-local readstring = files.readstring
-local readbyte = files.readcardinal1 -- 8-bit unsigned integer
-local readushort = files.readcardinal2 -- 16-bit unsigned integer
-local readuint = files.readcardinal3 -- 24-bit unsigned integer
-local readulong = files.readcardinal4 -- 24-bit unsigned integer
+local readbytes = streamreader.readbytes
+local readstring = streamreader.readstring
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readuint = streamreader.readcardinal3 -- 24-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local setposition = streamreader.setposition
+local getposition = streamreader.getposition
local setmetatableindex = table.setmetatableindex
local trace_charstrings = false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings = v end)
local report = logs.reporter("otf reader","cff")
-local parsetopdictionary
+local parsedictionaries
+local parsecharstring
local parsecharstrings
+local resetcharstrings
local parseprivates
local defaultstrings = { [0] = -- hijacked from ff
@@ -123,14 +128,15 @@ local cffreaders = {
-- The header contains information about its own size.
local function readheader(f)
+ local offset = getposition(f)
local header = {
- offset = f:seek("cur"),
+ offset = offset,
major = readbyte(f),
minor = readbyte(f),
size = readbyte(f), -- headersize
osize = readbyte(f), -- for offsets to start
}
- f:seek("set",header.offset+header.size)
+ setposition(f,offset+header.size)
return header
end
@@ -495,8 +501,7 @@ do
+ p_unsupported
)^1
- parsetopdictionary = function(data)
- local dictionaries = data.dictionaries
+ parsedictionaries = function(data,dictionaries)
stack = { }
strings = data.strings
for i=1,#dictionaries do
@@ -523,18 +528,18 @@ do
lpegmatch(p_dictionary,dictionaries[i])
dictionaries[i] = result
end
+ --
result = { }
top = 0
stack = { }
end
- parseprivates = function(data)
- local dictionaries = data.dictionaries
+ parseprivates = function(data,dictionaries)
stack = { }
strings = data.strings
for i=1,#dictionaries do
local private = dictionaries[i].private
- if private.data then
+ if private and private.data then
top = 0
result = {
forcebold = false,
@@ -580,6 +585,12 @@ do
local globals = false
local locals = false
local depth = 1
+ local xmin = 0
+ local xmax = 0
+ local ymin = 0
+ local ymax = 0
+ local checked = false
+ local keepcurve = false
local function showstate(where)
report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
@@ -593,6 +604,65 @@ do
end
end
+ -- All these indirect calls makt this run slower but it's cleaner this way
+ -- and we cache the result. As we moved the boundingbox code inline we gain
+ -- some back.
+
+ local function moveto(x,y)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "m" }
+ end
+ if checked then
+ if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ else
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ end
+ end
+
+ local function lineto(x,y)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "l" }
+ end
+ if checked then
+ if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ else
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ end
+ end
+
+ local function curveto(x1,y1,x2,y2,x3,y3)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x1, y1, x2, y2, x3, y3, "c" }
+ end
+ if checked then
+ if x1 < xmin then xmin = x1 elseif x1 > xmax then xmax = x1 end
+ if y1 < ymin then ymin = y1 elseif y1 > ymax then ymax = y1 end
+ else
+ xmin = x1
+ ymin = y1
+ xmax = x1
+ ymax = y1
+ checked = true
+ end
+ if x2 < xmin then xmin = x2 elseif x2 > xmax then xmax = x2 end
+ if y2 < ymin then ymin = y2 elseif y2 > ymax then ymax = y2 end
+ if x3 < xmin then xmin = x3 elseif x3 > xmax then xmax = x3 end
+ if y3 < ymin then ymin = y3 elseif y3 > ymax then ymax = y3 end
+ end
+
local function rmoveto()
if top > 2 then
if not width then
@@ -611,8 +681,7 @@ do
x = x + stack[top-1] -- dx1
y = y + stack[top] -- dy1
top = 0
- r = r + 1
- result[r] = { x, y, "m" } -- "moveto"
+ moveto(x,y)
end
local function hmoveto()
@@ -632,8 +701,7 @@ do
end
x = x + stack[top] -- dx1
top = 0
- r = r + 1
- result[r] = { x, y, "m" } -- "moveto"
+ moveto(x,y)
end
local function vmoveto()
@@ -653,8 +721,7 @@ do
end
y = y + stack[top] -- dy1
top = 0
- r = r + 1
- result[r] = { x, y, "m" } -- "moveto"
+ moveto(x,y)
end
local function rlineto()
@@ -664,8 +731,7 @@ do
for i=1,top,2 do
x = x + stack[i] -- dxa
y = y + stack[i+1] -- dya
- r = r + 1
- result[r] = { x, y, "l" } -- "lineto"
+ lineto(x,y)
end
top = 0
end
@@ -679,8 +745,7 @@ do
y = y + stack[i]
swap = true
end
- r = r + 1
- result[r] = { x, y, "l" } -- "lineto"
+ lineto(x,y)
end
top = 0
end
@@ -710,8 +775,7 @@ do
local by = ay + stack[i+3] -- dyb
x = bx + stack[i+4] -- dxc
y = by + stack[i+5] -- dyc
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ curveto(ax,ay,bx,by,x,y)
end
top = 0
end
@@ -732,8 +796,7 @@ do
local by = ay + stack[i+2] -- dyb
x = bx + stack[i+3] -- dxc
y = by
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ curveto(ax,ay,bx,by,x,y)
end
top = 0
end
@@ -755,8 +818,7 @@ do
local by = ay + stack[i+2] -- dyb
x = bx
y = by + stack[i+3] -- dyc
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ curveto(ax,ay,bx,by,x,y)
d = 0
end
top = 0
@@ -795,8 +857,7 @@ do
end
swap = true
end
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ curveto(ax,ay,bx,by,x,y)
end
top = 0
end
@@ -826,13 +887,11 @@ do
local by = ay + stack[i+3] -- dyb
x = bx + stack[i+4] -- dxc
y = by + stack[i+5] -- dyc
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ curveto(ax,ay,bx,by,x,y)
end
x = x + stack[top-1] -- dxc
y = y + stack[top] -- dyc
- r = r + 1
- result[r] = { x, y, "l" } -- "lineto"
+ lineto(x,y)
top = 0
end
@@ -844,41 +903,39 @@ do
for i=1,top-6,2 do
x = x + stack[i]
y = y + stack[i+1]
- r = r + 1
- result[r] = { x, y, "l" } -- "lineto"
+ lineto(x,y)
end
end
local ax = x + stack[top-5]
local ay = y + stack[top-4]
local bx = ax + stack[top-3]
local by = ay + stack[top-2]
- x = bx + stack[top-1]
- y = by + stack[top]
- r = r + 1
- result[r] = { ax, ay, bx, by, x, y, "c" } -- "curveto"
+ x = bx + stack[top-1]
+ y = by + stack[top]
+ curveto(ax,ay,bx,by,x,y)
top = 0
end
+ -- flex is not yet tested! no loop
+
local function flex() -- fd not used
if trace_charstrings then
showstate("flex")
end
- local ax = x + stack[i] -- dx1
- local ay = y + stack[i+1] -- dy1
- local bx = ax + stack[i+2] -- dx2
- local by = ay + stack[i+3] -- dy2
- local cx = bx + stack[i+4] -- dx3
- local cy = by + stack[i+5] -- dy3
- r = r + 1
- result[r] = { ax, ay, bx, by, cx, cy, "c" } -- "curveto"
- local dx = cx + stack[i+6] -- dx4
- local dy = cy + stack[i+7] -- dy4
- local ex = dx + stack[i+8] -- dx5
- local ey = dy + stack[i+9] -- dy5
- x = ex + stack[i+10] -- dx6
- y = ey + stack[i+11] -- dy6
- r = r + 1
- result[r] = { dx, dy, ex, ey, x, y, "c" } -- "curveto"
+ local ax = x + stack[1] -- dx1
+ local ay = y + stack[2] -- dy1
+ local bx = ax + stack[3] -- dx2
+ local by = ay + stack[4] -- dy2
+ local cx = bx + stack[5] -- dx3
+ local cy = by + stack[6] -- dy3
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[7] -- dx4
+ local dy = cy + stack[8] -- dy4
+ local ex = dx + stack[9] -- dx5
+ local ey = dy + stack[10] -- dy5
+ x = ex + stack[11] -- dx6
+ y = ey + stack[12] -- dy6
+ curveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -886,21 +943,19 @@ do
if trace_charstrings then
showstate("hflex")
end
- local ax = x + stack[i ] -- dx1
+ local ax = x + stack[1] -- dx1
local ay = y
- local bx = ax + stack[i+1] -- dx2
- local by = ay + stack[i+2] -- dy2
- local cx = bx + stack[i+3] -- dx3
+ local bx = ax + stack[2] -- dx2
+ local by = ay + stack[3] -- dy2
+ local cx = bx + stack[4] -- dx3
local cy = by
- r = r + 1
- result[r] = { ax, ay, bx, by, cx, cy, "c" } -- "curveto"
- local dx = cx + stack[i+4] -- dx4
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[5] -- dx4
local dy = by
- local ex = dx + stack[i+5] -- dx5
+ local ex = dx + stack[6] -- dx5
local ey = y
- x = ex + stack[i+6] -- dx6
- r = r + 1
- result[r] = { dx, dy, ex, ey, x, y, "c" } -- "curveto"
+ x = ex + stack[7] -- dx6
+ curveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -908,21 +963,19 @@ do
if trace_charstrings then
showstate("hflex1")
end
- local ax = x + stack[i ] -- dx1
- local ay = y + stack[i+1] -- dy1
- local bx = ax + stack[i+2] -- dx2
- local by = ay + stack[i+3] -- dy2
- local cx = bx + stack[i+4] -- dx3
+ local ax = x + stack[1] -- dx1
+ local ay = y + stack[2] -- dy1
+ local bx = ax + stack[3] -- dx2
+ local by = ay + stack[4] -- dy2
+ local cx = bx + stack[5] -- dx3
local cy = by
- r = r + 1
- result[r] = { ax, ay, bx, by, cx, cy, "c" } -- "curveto"
- local dx = cx + stack[i+5] -- dx4
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[6] -- dx4
local dy = by
- local ex = dx + stack[i+7] -- dx5
- local ey = dy + stack[i+8] -- dy5
- x = ex + stack[i+9] -- dx6
- r = r + 1
- result[r] = { dx, dy, dx, dy, x, y, "c" } -- "curveto"
+ local ex = dx + stack[7] -- dx5
+ local ey = dy + stack[8] -- dy5
+ x = ex + stack[9] -- dx6
+ curveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -930,39 +983,39 @@ do
if trace_charstrings then
showstate("flex1")
end
- local ax = x + stack[i ] --dx1
- local ay = y + stack[i+1] --dy1
- local bx = ax + stack[i+2] --dx2
- local by = ay + stack[i+3] --dy2
- local cx = bx + stack[i+4] --dx3
- local cy = by + stack[i+5] --dy3
- r = r + 1
- result[r] = { ax, ay, bx, by, cx, cy, "c" } -- "curveto"
- local dx = cx + stack[i+6] --dx4
- local dy = cy + stack[i+7] --dy4
- local ex = dx + stack[i+8] --dx5
- local ey = dy + stack[i+9] --dy5
+ local ax = x + stack[1] --dx1
+ local ay = y + stack[2] --dy1
+ local bx = ax + stack[3] --dx2
+ local by = ay + stack[4] --dy2
+ local cx = bx + stack[5] --dx3
+ local cy = by + stack[6] --dy3
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[7] --dx4
+ local dy = cy + stack[8] --dy4
+ local ex = dx + stack[9] --dx5
+ local ey = dy + stack[10] --dy5
if abs(ex - x) > abs(ey - y) then -- spec: abs(dx) > abs(dy)
- x = ex + stack[i+10]
+ x = ex + stack[11]
else
- y = ey + stack[i+10]
+ y = ey + stack[11]
end
- r = r + 1
- result[r] = { dx, dy, dx, dy, x, y, "c" } -- "curveto"
+ curveto(dx,dy,ex,ey,x,y)
top = 0
end
local function getstem()
- if top % 2 ~= 0 then
+ if top == 0 then
+ -- bad
+ elseif top % 2 ~= 0 then
if width then
remove(stack,1)
else
width = remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
end
top = top - 1
- if trace_charstrings then
- showvalue("width",width)
- end
end
if trace_charstrings then
showstate("stem")
@@ -972,23 +1025,27 @@ do
end
local function getmask()
- if top % 2 ~= 0 then
+ if top == 0 then
+ -- bad
+ elseif top % 2 ~= 0 then
if width then
remove(stack,1)
else
width = remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
end
top = top - 1
- if trace_charstrings then
- showvalue("width",width)
- end
end
if trace_charstrings then
showstate(operator == 19 and "hintmark" or "cntrmask")
end
stems = stems + top/2
top = 0
- if stems <= 8 then
+ if stems == 0 then
+ -- forget about it
+ elseif stems <= 8 then
return 1
else
return floor((stems+7)/8)
@@ -1069,8 +1126,8 @@ do
end
end
- local function process(tab) -- I should profile this and optimize the order
- local i = 1 -- which is something for a cold dark evening.
+ local function process(tab)
+ local i = 1
local n = #tab
while i <= n do
local t = tab[i]
@@ -1108,20 +1165,15 @@ do
stack[top] = n + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
end
i = i + 5
- elseif t == 12 then
- i = i + 1
- local t = tab[i]
- local a = subactions[t]
- if a then
- a()
- else
- if trace_charstrings then
- showvalue("<subaction>",t)
- end
- top = 0
+ elseif t == 11 then
+ if trace_charstrings then
+ showstate("return")
end
+ return
+ elseif t == 10 then
+ call("local",locals,localbias,process)
i = i + 1
- elseif t == 14 then -- endchar
+ elseif t == 14 then -- endchar
if width then
-- okay
elseif top > 0 then
@@ -1136,17 +1188,22 @@ do
showstate("endchar")
end
return
- elseif t == 11 then
- if trace_charstrings then
- showstate("return")
- end
- return
- elseif t == 10 then
- call("local",locals,localbias,process)
- i = i + 1
elseif t == 29 then
call("global",globals,globalbias,process)
i = i + 1
+ elseif t == 12 then
+ i = i + 1
+ local t = tab[i]
+ local a = subactions[t]
+ if a then
+ a()
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top = 0
+ end
+ i = i + 1
else
local a = actions[t]
if a then
@@ -1165,49 +1222,50 @@ do
end
end
- local function calculatebounds(segments,x,y)
- local nofsegments = #segments
- if nofsegments == 0 then
- return { x, y, x, y }
- else
- local xmin = 10000
- local xmax = -10000
- local ymin = 10000
- local ymax = -10000
- if x < xmin then xmin = x end
- if x > xmax then xmax = x end
- if y < ymin then ymin = y end
- if y > ymax then ymax = y end
- -- we now have a reasonable start so we could
- -- simplyfy the next checks
- for i=1,nofsegments do
- local s = segments[i]
- local x = s[1]
- local y = s[2]
- if x < xmin then xmin = x end
- if x > xmax then xmax = x end
- if y < ymin then ymin = y end
- if y > ymax then ymax = y end
- if s[#s] == "c" then -- "curveto"
- local x = s[3]
- local y = s[4]
- if x < xmin then xmin = x elseif x > xmax then xmax = x end
- if y < ymin then ymin = y elseif y > ymax then ymax = y end
- local x = s[5]
- local y = s[6]
- if x < xmin then xmin = x elseif x > xmax then xmax = x end
- if y < ymin then ymin = y elseif y > ymax then ymax = y end
- end
- end
- return { round(xmin), round(ymin), round(xmax), round(ymax) } -- doesn't make ceil more sense
- end
- end
+ -- local function calculatebounds(segments,x,y)
+ -- local nofsegments = #segments
+ -- if nofsegments == 0 then
+ -- return { x, y, x, y }
+ -- else
+ -- local xmin = 10000
+ -- local xmax = -10000
+ -- local ymin = 10000
+ -- local ymax = -10000
+ -- if x < xmin then xmin = x end
+ -- if x > xmax then xmax = x end
+ -- if y < ymin then ymin = y end
+ -- if y > ymax then ymax = y end
+ -- -- we now have a reasonable start so we could
+ -- -- simplyfy the next checks
+ -- for i=1,nofsegments do
+ -- local s = segments[i]
+ -- local x = s[1]
+ -- local y = s[2]
+ -- if x < xmin then xmin = x end
+ -- if x > xmax then xmax = x end
+ -- if y < ymin then ymin = y end
+ -- if y > ymax then ymax = y end
+ -- if s[#s] == "c" then -- "curveto"
+ -- local x = s[3]
+ -- local y = s[4]
+ -- if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ -- if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ -- local x = s[5]
+ -- local y = s[6]
+ -- if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ -- if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ -- end
+ -- end
+ -- return { round(xmin), round(ymin), round(xmax), round(ymax) } -- doesn't make ceil more sense
+ -- end
+ -- end
parsecharstrings = function(data,glyphs,doshapes)
-- for all charstrings
local dictionary = data.dictionaries[1]
- local charstrings = data.charstrings
- local charset = data.charset
+ local charstrings = dictionary.charstrings
+ local charset = dictionary.charset
+ keepcurve = doshapes
stack = { }
glyphs = glyphs or { }
strings = data.strings
@@ -1224,13 +1282,20 @@ do
local str = charstrings[i]
local tab = lpegmatch(p_bytes,str)
local index = i - 1
- x = 0
- y = 0
- width = false
- r = 0
- top = 0
- stems = 0
- result = { }
+ x = 0
+ y = 0
+ width = false
+ r = 0
+ top = 0
+ stems = 0
+ result = { }
+ --
+ xmin = 0
+ xmax = 0
+ ymin = 0
+ ymax = 0
+ checked = false
+ --
if trace_charstrings then
report("glyph: %i",index)
report("data: % t",tab)
@@ -1238,7 +1303,7 @@ do
--
process(tab)
--
- local boundingbox = calculatebounds(result,x,y)
+ local boundingbox = { xmin, ymin, xmax, ymax }
--
if width == true or width == false then
width = defaultwidth
@@ -1272,10 +1337,85 @@ do
end
charstrings[i] = nil -- free memory
end
+ return glyphs
+ end
+
+ parsecharstring = function(data,dictionary,charstring,glyphs,index,doshapes)
+ local private = dictionary.private
+ keepcurve = doshapes
+ strings = data.strings -- or in dict?
+ locals = dictionary.subroutines or { }
+ globals = data.routines or { }
+ globalbias = #globals
+ localbias = #locals
+ globalbias = ((globalbias < 1240 and 107) or (globalbias < 33900 and 1131) or 32768) + 1
+ localbias = ((localbias < 1240 and 107) or (localbias < 33900 and 1131) or 32768) + 1
+ local nominalwidth = private and private.data.nominalwidthx or 0
+ local defaultwidth = private and private.data.defaultwidthx or 0
+ --
+ local tab = lpegmatch(p_bytes,charstring)
+ x = 0
+ y = 0
+ width = false
+ r = 0
+ top = 0
+ stems = 0
+ result = { }
+ --
+ xmin = 0
+ xmax = 0
+ ymin = 0
+ ymax = 0
+ checked = false
+ --
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ --
+ process(tab)
+ --
+ local boundingbox = { xmin, ymin, xmax, ymax }
+ --
+ if width == true or width == false then
+ width = defaultwidth
+ else
+ width = nominalwidth + width
+ end
+ --
+ local glyph = glyphs[index] -- can be autodefined in otr
+ if not glyph then
+ glyphs[index] = {
+ segments = doshapes ~= false and result or nil, -- optional
+ boundingbox = boundingbox,
+ width = width,
+ name = charset[index],
+ -- sidebearing = 0,
+ }
+ else
+ glyph.segments = doshapes ~= false and result or nil
+ glyph.boundingbox = boundingbox
+ if not glyph.width then
+ glyph.width = width
+ end
+ if charset and not glyph.name then
+ glyph.name = charset[index]
+ end
+ -- glyph.sidebearing = 0 -- todo
+ end
+ --
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ --
+ return charstring
+ end
+
+ resetcharstrings = function()
result = { }
top = 0
stack = { }
- return glyphs
end
end
@@ -1292,54 +1432,69 @@ local function readencodings(f,data)
data.encodings = { }
end
-local function readcharsets(f,data)
- local header = data.header
- local dictionaries = data.dictionaries
- local strings = data.strings
- f:seek("set",header.offset+dictionaries[1].charset)
- local format = readbyte(f)
- if format == 0 then
- local charset = { [0] = ".notdef" }
- for i=1,data.nofglyphs do
- charset[i] = strings[readushort(f)]
- end
- data.charset = charset
- elseif format == 1 then
- report("cff parser: todo charset format %a",format)
- elseif format == 2 then
- report("cff parser: todo charset format %a",format)
- else
- report("cff parser: unsupported charset format %a",format)
+local function readcharsets(f,data,dictionary)
+ local header = data.header
+ local strings = data.strings
+ local nofglyphs = data.nofglyphs
+ local charsetoffset = dictionary.charset
+
+ if charsetoffset ~= 0 then
+ setposition(f,header.offset+charsetoffset)
+ local format = readbyte(f)
+ local charset = { [0] = ".notdef" }
+ dictionary.charset = charset
+ if format == 0 then
+ for i=1,nofglyphs do
+ charset[i] = strings[readushort(f)]
+ end
+ elseif format == 1 or format == 2 then
+ local readcount = format == 1 and readbyte or readushort
+ local i = 0
+ while i<= nofglyphs do
+ local sid = readushort(f)
+ local n = readcount(f)
+ for s=sid,sid+n do
+ charset[i] = strings[s]
+ i = i + 1
+ if i > nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
+ end
end
end
-local function readfdselect(f,data)
-end
-
local function readprivates(f,data)
local header = data.header
local dictionaries = data.dictionaries
local private = dictionaries[1].private
if private then
- f:seek("set",header.offset+private.offset)
+ setposition(f,header.offset+private.offset)
private.data = readstring(f,private.size)
end
end
-local function readlocals(f,data)
- -- todo: make them local indeed
- local header = data.header
- local dictionaries = data.dictionaries
- local dictionary = dictionaries[1]
- local private = dictionary.private
+local function readlocals(f,data,dictionary)
+ local header = data.header
+ local private = dictionary.private
if private then
- f:seek("set",header.offset+private.offset+private.data.subroutines)
- local subroutines = readlengths(f)
- for i=1,#subroutines do
- subroutines[i] = readstring(f,subroutines[i])
+ local subroutineoffset = private.data.subroutines
+ if subroutineoffset ~= 0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines = readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i] = readstring(f,subroutines[i])
+ end
+ dictionary.subroutines = subroutines
+ private.data.subroutines = nil
+ else
+ dictionary.subroutines = { }
end
- dictionary.subroutines = subroutines
- private.data.subroutines = nil
+ else
+ dictionary.subroutines = { }
end
end
@@ -1351,24 +1506,120 @@ local function readcharstrings(f,data)
local dictionaries = data.dictionaries
local dictionary = dictionaries[1]
local type = dictionary.charstringtype
+ local offset = dictionary.charstrings
if type == 2 then
- f:seek("set",header.offset+dictionary.charstrings)
+ setposition(f,header.offset+offset)
-- could be a metatable .. delayed loading
local charstrings = readlengths(f)
local nofglyphs = #charstrings
for i=1,nofglyphs do
charstrings[i] = readstring(f,charstrings[i])
end
- data.nofglyphs = nofglyphs
- data.charstrings = charstrings
+ data.nofglyphs = nofglyphs
+ dictionary.charstrings = charstrings
else
report("unsupported charstr type %i",type)
- data.nofglyphs = 0
- data.charstrings = { }
+ data.nofglyphs = 0
+ dictionary.charstrings = { }
+ end
+end
+
+-- cid (maybe do this stepwise so less mem) -- share with above
+
+local function readcidprivates(f,data)
+ local header = data.header
+ local dictionaries = data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary = dictionaries[i]
+ local private = dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data = readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+
+local function readnoselect(f,data,glyphs,doshapes)
+ local dictionaries = data.dictionaries
+ local dictionary = dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ parsecharstrings(data,glyphs,doshapes)
+ resetcharstrings()
+end
+
+local function readfdselect(f,data,glyphs,doshapes)
+ local header = data.header
+ local dictionaries = data.dictionaries
+ local dictionary = dictionaries[1]
+ local cid = dictionary.cid
+ local cidselect = cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ local charstrings = dictionary.charstrings
+ local fdindex = { }
+ local nofglyphs = data.nofglyphs
+ local maxindex = -1
+ setposition(f,header.offset+cidselect)
+ local format = readbyte(f)
+ if format == 1 then
+ for i=0,nofglyphs do -- notdef included (needs checking)
+ local index = readbyte(i)
+ fdindex[i] = index
+ if index > maxindex then
+ maxindex = index
+ end
+ end
+ elseif format == 3 then
+ local nofranges = readushort(f)
+ local first = readushort(f)
+ local index = readbyte(f)
+ while true do
+ local last = readushort(f)
+ if index > maxindex then
+ maxindex = index
+ end
+ for i=first,last do
+ fdindex[i] = index
+ end
+ if last >= nofglyphs then
+ break
+ else
+ first = last + 1
+ index = readbyte(f)
+ end
+ end
+ else
+ -- unsupported format
+ end
+ if maxindex >= 0 then
+ local cidarray = cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries = readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i] = readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries = dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ for i=1,#charstrings do
+ parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes)
+ end
+ resetcharstrings()
end
end
-function fonts.handlers.otf.readers.cff(f,fontdata,specification)
+function readers.cff(f,fontdata,specification)
-- if specification.glyphs then
if specification.details then
local datatable = fontdata.tables.cff
@@ -1380,7 +1631,7 @@ function fonts.handlers.otf.readers.cff(f,fontdata,specification)
return
end
if offset then
- f:seek("set",offset)
+ setposition(f,offset)
end
local header = readheader(f)
if header.major > 1 then
@@ -1395,11 +1646,13 @@ function fonts.handlers.otf.readers.cff(f,fontdata,specification)
names = names,
dictionaries = dictionaries,
strings = strings,
+ nofglyphs = fontdata.nofglyphs,
}
--
- parsetopdictionary(data)
+ parsedictionaries(data,data.dictionaries)
--
local d = dictionaries[1]
+ local c = d.cid
fontdata.cffinfo = {
familynamename = d.familyname,
fullname = d.fullname,
@@ -1410,19 +1663,21 @@ function fonts.handlers.otf.readers.cff(f,fontdata,specification)
underlinethickness = d.underlinethickness,
monospaced = d.monospaced,
}
+ fontdata.cidinfo = c and {
+ registry = c.registry,
+ ordering = c.ordering,
+ supplement = c.supplement,
+ }
--
- if specification.glyphs then
- readglobals(f,data)
- readcharstrings(f,data)
- readencodings(f,data)
- readcharsets(f,data)
- readfdselect(f,data)
- --
- readprivates(f,data)
- parseprivates(data)
- readlocals(f,data)
- --
- parsecharstrings(data,glyphs,specification.shapes or false)
+ if not specification.glyphs then
+ -- we only want some metadata
+ else
+ local cid = d.cid
+ if cid and cid.fdselect then
+ readfdselect(f,data,glyphs,specification.shapes or false)
+ else
+ readnoselect(f,data,glyphs,specification.shapes or false)
+ end
end
--
-- cleanup (probably more can go)
diff --git a/tex/context/base/font-inj.lua b/tex/context/base/font-inj.lua
index 332e92033..783d67425 100644
--- a/tex/context/base/font-inj.lua
+++ b/tex/context/base/font-inj.lua
@@ -285,7 +285,7 @@ function injections.setkern(current,factor,rlmode,x,injection)
end
end
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=baseanchor, ma=markanchor
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=baseanchor, ma=markanchor
local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
nofregisteredmarks = nofregisteredmarks + 1
-- markanchors[nofregisteredmarks] = base
@@ -293,14 +293,20 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
dx = tfmbase.width - dx -- see later commented ox
end
local p = rawget(properties,start)
+ -- hm, dejavu serif does a sloppy mark2mark before mark2base
if p then
local i = rawget(p,"injections")
if i then
+if i.markmark then
+ -- out of order mkmk: yes or no or option
+else
i.markx = dx
i.marky = dy
i.markdir = rlmode or 0
i.markbase = nofregisteredmarks
i.markbasenode = base
+ i.markmark = mkmk
+end
else
p.injections = {
markx = dx,
@@ -308,6 +314,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
markdir = rlmode or 0,
markbase = nofregisteredmarks,
markbasenode = base,
+ markmark = mkmk,
}
end
else
@@ -318,6 +325,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
markdir = rlmode or 0,
markbase = nofregisteredmarks,
markbasenode = base,
+ markmark = mkmk,
},
}
end
@@ -548,12 +556,13 @@ local function inject_marks(marks,nofmarks)
setfield(n,"xoffset",ox)
--
local py = getfield(p,"yoffset")
- local oy = 0
- if marks[p] then
- oy = py + pn.marky
- else
- oy = getfield(n,"yoffset") + py + pn.marky
- end
+-- local oy = 0
+-- if marks[p] then
+-- oy = py + pn.marky
+-- else
+-- oy = getfield(n,"yoffset") + py + pn.marky
+-- end
+ local oy = getfield(n,"yoffset") + py + pn.marky
setfield(n,"yoffset",oy)
else
-- normally this can't happen (only when in trace mode which is a special case anyway)
diff --git a/tex/context/base/font-lib.mkvi b/tex/context/base/font-lib.mkvi
index b1050f7f5..9478db71b 100644
--- a/tex/context/base/font-lib.mkvi
+++ b/tex/context/base/font-lib.mkvi
@@ -61,6 +61,7 @@
\registerctxluafile{font-otp}{1.001} % otf pack
\registerctxluafile{font-otc}{1.001} % otf context
\registerctxluafile{font-oth}{1.001} % otf helpers
+\registerctxluafile{font-otl}{1.001} % otf new node mode
\registerctxluafile{font-odv}{1.001} % otf devanagari (experimental)
diff --git a/tex/context/base/font-map.lua b/tex/context/base/font-map.lua
index 69474baf2..b645d9aef 100644
--- a/tex/context/base/font-map.lua
+++ b/tex/context/base/font-map.lua
@@ -31,25 +31,27 @@ of obsolete. Some code may move to runtime or auxiliary modules.</p>
<p>The name to unciode related code will stay of course.</p>
--ldx]]--
-local function loadlumtable(filename) -- will move to font goodies
- local lumname = file.replacesuffix(file.basename(filename),"lum")
- local lumfile = resolvers.findfile(lumname,"map") or ""
- if lumfile ~= "" and lfs.isfile(lumfile) then
- if trace_loading or trace_mapping then
- report_fonts("loading map table %a",lumfile)
- end
- lumunic = dofile(lumfile)
- return lumunic, lumfile
- end
-end
+-- local function loadlumtable(filename) -- will move to font goodies
+-- local lumname = file.replacesuffix(file.basename(filename),"lum")
+-- local lumfile = resolvers.findfile(lumname,"map") or ""
+-- if lumfile ~= "" and lfs.isfile(lumfile) then
+-- if trace_loading or trace_mapping then
+-- report_fonts("loading map table %a",lumfile)
+-- end
+-- lumunic = dofile(lumfile)
+-- return lumunic, lumfile
+-- end
+-- end
local hex = R("AF","09")
-local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local hexsix = (hex*hex*hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+----- hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+----- hexsix = (hex*hex*hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+local hexfour = (hex*hex*hex^-2) / function(s) return tonumber(s,16) end
+local hexsix = (hex*hex*hex^-4) / function(s) return tonumber(s,16) end
local dec = (R("09")^1) / tonumber
local period = P(".")
-local unicode = P("uni") * (hexfour * (period + P(-1)) * Cc(false) + Ct(hexfour^1) * Cc(true))
-local ucode = P("u") * (hexsix * (period + P(-1)) * Cc(false) + Ct(hexsix ^1) * Cc(true))
+local unicode = (P("uni") + P("UNI")) * (hexfour * (period + P(-1)) * Cc(false) + Ct(hexfour^1) * Cc(true)) -- base planes
+local ucode = (P("u") + P("U") ) * (hexsix * (period + P(-1)) * Cc(false) + Ct(hexsix ^1) * Cc(true)) -- extended
local index = P("index") * dec * Cc(false)
local parser = unicode + ucode + index
@@ -168,7 +170,6 @@ end
-- return s
-- end
-mappings.loadlumtable = loadlumtable
mappings.makenameparser = makenameparser
mappings.tounicode = tounicode
mappings.tounicode16 = tounicode16
@@ -179,13 +180,13 @@ local ligseparator = P("_")
local varseparator = P(".")
local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator * C((1 - ligseparator - varseparator)^1))^0)
+-- maybe: ff fi fl ffi ffl => f_f f_i f_l f_f_i f_f_l
+
-- local function test(name)
-- local split = lpegmatch(namesplitter,name)
-- print(string.formatters["%s: [% t]"](name,split))
-- end
--- maybe: ff fi fl ffi ffl => f_f f_i f_l f_f_i f_f_l
-
-- test("i.f_")
-- test("this")
-- test("this.that")
@@ -221,332 +222,184 @@ end
mappings.overloads = overloads
-function mappings.addtounicode(data,filename)
- local resources = data.resources
- local properties = data.properties
- local descriptions = data.descriptions
- local unicodes = resources.unicodes
- local lookuptypes = resources.lookuptypes
+function mappings.addtounicode(data,filename,checklookups)
+ local resources = data.resources
+ local unicodes = resources.unicodes
if not unicodes then
return
end
+ local properties = data.properties
+ local descriptions = data.descriptions
-- we need to move this code
unicodes['space'] = unicodes['space'] or 32
unicodes['hyphen'] = unicodes['hyphen'] or 45
unicodes['zwj'] = unicodes['zwj'] or 0x200D
unicodes['zwnj'] = unicodes['zwnj'] or 0x200C
- local private = fonts.constructors.privateoffset
- local unicodevector = fonts.encodings.agl.unicodes -- loaded runtime in context
- ----- namevector = fonts.encodings.agl.names -- loaded runtime in context
- local missing = { }
- local lumunic, uparser, oparser
- local cidinfo, cidnames, cidcodes, usedmap
- --
- cidinfo = properties.cidinfo
- usedmap = cidinfo and fonts.cid.getmap(cidinfo)
--
+ local private = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+ local unicodevector = fonts.encodings.agl.unicodes or { } -- loaded runtime in context
+ local contextvector = fonts.encodings.agl.ctxcodes or { } -- loaded runtime in context
+ local missing = { }
+ local nofmissing = 0
+ local oparser = nil
+ local cidnames = nil
+ local cidcodes = nil
+ local cidinfo = properties.cidinfo
+ local usedmap = cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser = makenameparser() -- hm, every time?
if usedmap then
- oparser = usedmap and makenameparser(cidinfo.ordering)
- cidnames = usedmap.names
- cidcodes = usedmap.unicodes
+ oparser = usedmap and makenameparser(cidinfo.ordering)
+ cidnames = usedmap.names
+ cidcodes = usedmap.unicodes
end
- uparser = makenameparser()
- local ns, nl = 0, 0
+ local ns = 0
+ local nl = 0
+ --
for unic, glyph in next, descriptions do
- local index = glyph.index
- local name = glyph.name
- local r = overloads[name]
- if r then
- -- get rid of weird ligatures
- -- glyph.name = r.name
- glyph.unicode = r.unicode
- elseif unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- local unicode = lumunic and lumunic[name] or unicodevector[name]
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
- end
- -- cidmap heuristics, beware, there is no guarantee for a match unless
- -- the chain resolves
- if (not unicode) and usedmap then
- local foundindex = lpegmatch(oparser,name)
- if foundindex then
- unicode = cidcodes[foundindex] -- name to number
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
- else
- local reference = cidnames[foundindex] -- number to name
- if reference then
- local foundindex = lpegmatch(oparser,reference)
- if foundindex then
- unicode = cidcodes[foundindex]
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
+ local name = glyph.name
+ if name then
+ local index = glyph.index
+ local r = overloads[name]
+ if r then
+ -- get rid of weird ligatures
+ -- glyph.name = r.name
+ glyph.unicode = r.unicode
+ elseif not unic or unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+ local unicode = unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ end
+ -- cidmap heuristics, beware, there is no guarantee for a match unless
+ -- the chain resolves
+ if (not unicode) and usedmap then
+ local foundindex = lpegmatch(oparser,name)
+ if foundindex then
+ unicode = cidcodes[foundindex] -- name to number
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ else
+ local reference = cidnames[foundindex] -- number to name
+ if reference then
+ local foundindex = lpegmatch(oparser,reference)
+ if foundindex then
+ unicode = cidcodes[foundindex]
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ end
end
- end
- if not unicode or unicode == "" then
- local foundcodes, multiple = lpegmatch(uparser,reference)
- if foundcodes then
- glyph.unicode = foundcodes
- if multiple then
- nl = nl + 1
- unicode = true
- else
- ns = ns + 1
- unicode = foundcodes
+ if not unicode or unicode == "" then
+ local foundcodes, multiple = lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode = foundcodes
+ if multiple then
+ nl = nl + 1
+ unicode = true
+ else
+ ns = ns + 1
+ unicode = foundcodes
+ end
end
end
end
end
end
end
- end
- -- a.whatever or a_b_c.whatever or a_b_c (no numbers) a.b_
- --
- -- It is not trivial to find a solution that suits all fonts. We tried several alternatives
- -- and this one seems to work reasonable also with fonts that use less standardized naming
- -- schemes. The extra private test is tested by KE and seems to work okay with non-typical
- -- fonts as well.
- --
- -- The next time I look into this, I'll add an extra analysis step to the otf loader (we can
- -- resolve some tounicodes by looking into the gsub data tables that are bound to glyphs.
- --
--- a real tricky last resort:
---
--- local lookups = glyph.lookups
--- if lookups then
--- for _, lookup in next, lookups do -- assume consistency else we need to sort
--- for i=1,#lookup do
--- local l = lookup[i]
--- if l.type == "ligature" then
--- local s = l.specification
--- if s.char == glyph.name then
--- local components = s.components
--- if components then
--- local t, n = { }, 0
--- unicode = true
--- for l=1,#components do
--- local base = components[l]
--- local u = unicodes[base] or unicodevector[base]
--- if not u then
--- break
--- elseif type(u) == "table" then
--- if u[1] >= private then
--- unicode = false
--- break
--- end
--- n = n + 1
--- t[n] = u[1]
--- else
--- if u >= private then
--- unicode = false
--- break
--- end
--- n = n + 1
--- t[n] = u
--- end
--- end
--- if n == 0 then -- done then
--- -- nothing
--- elseif n == 1 then
--- glyph.unicode = t[1]
--- else
--- glyph.unicode = t
--- end
--- nl = nl + 1
--- break
--- end
--- end
--- end
--- end
--- if unicode then
--- break
--- end
--- end
--- end
- if not unicode or unicode == "" then
- local split = lpegmatch(namesplitter,name)
- local nsplit = split and #split or 0
- local t, n = { }, 0
- unicode = true
- for l=1,nsplit do
- local base = split[l]
- local u = unicodes[base] or unicodevector[base]
- if not u then
- break
- elseif type(u) == "table" then
- if u[1] >= private then
- unicode = false
- break
+ -- a.whatever or a_b_c.whatever or a_b_c (no numbers) a.b_
+ --
+ -- It is not trivial to find a solution that suits all fonts. We tried several alternatives
+ -- and this one seems to work reasonable also with fonts that use less standardized naming
+ -- schemes. The extra private test is tested by KE and seems to work okay with non-typical
+ -- fonts as well.
+ --
+ if not unicode or unicode == "" then
+ local split = lpegmatch(namesplitter,name)
+ local nsplit = split and #split or 0 -- add if
+ if nsplit == 0 then
+ -- skip
+ elseif nsplit == 1 then
+ local base = split[1]
+ local u = unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ -- skip
+ elseif type(u) == "table" then
+ -- unlikely
+ if u[1] < private then
+ unicode = u
+ glyph.unicode = unicode
+ end
+ elseif u < private then
+ unicode = u
+ glyph.unicode = unicode
end
- n = n + 1
- t[n] = u[1]
else
- if u >= private then
- unicode = false
- break
- end
- n = n + 1
- t[n] = u
- end
- end
- if n == 0 then -- done then
- -- nothing
- elseif n == 1 then
- glyph.unicode = t[1]
- else
- glyph.unicode = t
- end
- nl = nl + 1
- end
- -- last resort (we might need to catch private here as well)
- if not unicode or unicode == "" then
- local foundcodes, multiple = lpegmatch(uparser,name)
- if foundcodes then
- glyph.unicode = foundcodes
- if multiple then
- nl = nl + 1
- unicode = true
- else
- ns = ns + 1
- unicode = foundcodes
- end
- end
- end
- -- check using substitutes and alternates
- local r = overloads[unicode]
- if r then
- unicode = r.unicode
- glyph.unicode = unicode
- end
- --
- if not unicode then
- missing[name] = true
- end
- end
- end
- if next(missing) then
- local guess = { }
- -- helper
- local function check(gname,code,unicode)
- local description = descriptions[code]
- -- no need to add a self reference
- local variant = description.name
- if variant == gname then
- return
- end
- -- the variant already has a unicode (normally that resultrs in a default tounicode to self)
- local unic = unicodes[variant]
- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- -- no default mapping and therefore maybe no tounicode yet
- else
- return
- end
- -- the variant already has a tounicode
- if descriptions[code].unicode then
- return
- end
- -- add to the list
- local g = guess[variant]
- -- local r = overloads[unicode]
- -- if r then
- -- unicode = r.unicode
- -- end
- if g then
- g[gname] = unicode
- else
- guess[variant] = { [gname] = unicode }
- end
- end
- --
- for unicode, description in next, descriptions do
- local slookups = description.slookups
- if slookups then
- local gname = description.name
- for tag, data in next, slookups do
- local lookuptype = lookuptypes[tag]
- if lookuptype == "alternate" then
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- elseif lookuptype == "substitution" then
- check(gname,data,unicode)
- end
- end
- end
- local mlookups = description.mlookups
- if mlookups then
- local gname = description.name
- for tag, list in next, mlookups do
- local lookuptype = lookuptypes[tag]
- if lookuptype == "alternate" then
- for i=1,#list do
- local data = list[i]
- for i=1,#data do
- check(gname,data[i],unicode)
+ local t, n = { }, 0
+ for l=1,nsplit do
+ local base = split[l]
+ local u = unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u) == "table" then
+ if u[1] >= private then
+ break
+ end
+ n = n + 1
+ t[n] = u[1]
+ else
+ if u >= private then
+ break
+ end
+ n = n + 1
+ t[n] = u
end
end
- elseif lookuptype == "substitution" then
- for i=1,#list do
- check(gname,list[i],unicode)
+ if n > 0 then
+ if n == 1 then
+ unicode = t[1]
+ else
+ unicode = t
+ end
+ glyph.unicode = unicode
end
end
+ nl = nl + 1
end
- end
- end
- -- resolve references
- local done = true
- while done do
- done = false
- for k, v in next, guess do
- if type(v) ~= "number" then
- for kk, vv in next, v do
- if vv == -1 or vv >= private or (vv >= 0xE000 and vv <= 0xF8FF) or vv == 0xFFFE or vv == 0xFFFF then
- local uu = guess[kk]
- if type(uu) == "number" then
- guess[k] = uu
- done = true
- end
+ -- last resort (we might need to catch private here as well)
+ if not unicode or unicode == "" then
+ local foundcodes, multiple = lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode = foundcodes
+ if multiple then
+ nl = nl + 1
+ unicode = true
else
- guess[k] = vv
- done = true
+ ns = ns + 1
+ unicode = foundcodes
end
end
end
- end
- end
- -- wrap up
- local orphans = 0
- local guessed = 0
- for k, v in next, guess do
- if type(v) == "number" then
- descriptions[unicodes[k]].unicode = descriptions[v].unicode or v -- can also be a table
- guessed = guessed + 1
- else
- local t = nil
- local l = lower(k)
- local u = unicodes[l]
- if not u then
- orphans = orphans + 1
- elseif u == -1 or u >= private or (u >= 0xE000 and u <= 0xF8FF) or u == 0xFFFE or u == 0xFFFF then
- local unicode = descriptions[u].unicode
- if unicode then
- descriptions[unicodes[k]].unicode = unicode
- guessed = guessed + 1
- else
- orphans = orphans + 1
- end
- else
- orphans = orphans + 1
+ -- check using substitutes and alternates
+ local r = overloads[unicode]
+ if r then
+ unicode = r.unicode
+ glyph.unicode = unicode
+ end
+ --
+ if not unicode then
+ missing[unic] = true
+ nofmissing = nofmissing + 1
end
end
+ else
+ -- no name
end
- if trace_loading and orphans > 0 or guessed > 0 then
- report_fonts("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
- end
end
+ if type(checklookups) == "function" then
+ checklookups(data,missing,nofmissing)
+ end
+ -- todo: go lowercase
if trace_mapping then
for unic, glyph in table.sortedhash(descriptions) do
local name = glyph.name
diff --git a/tex/context/base/font-mis.lua b/tex/context/base/font-mis.lua
index 9fe6e224f..d573750a4 100644
--- a/tex/context/base/font-mis.lua
+++ b/tex/context/base/font-mis.lua
@@ -22,7 +22,7 @@ local handlers = fonts.handlers
handlers.otf = handlers.otf or { }
local otf = handlers.otf
-otf.version = otf.version or 2.815
+otf.version = otf.version or 2.816
otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true)
local fontloader = fontloader
diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua
index bc401e490..28a129cc1 100644
--- a/tex/context/base/font-otf.lua
+++ b/tex/context/base/font-otf.lua
@@ -24,9 +24,7 @@ local utfbyte = utf.byte
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
local abs = math.abs
-local insert = table.insert
-local lpegmatch = lpeg.match
-local reversed, concat, remove, sortedkeys = table.reversed, table.concat, table.remove, table.sortedkeys
+local reversed, concat, insert, remove, sortedkeys = table.reversed, table.concat, table.insert, table.remove, table.sortedkeys
local ioflush = io.flush
local fastcopy, tohash, derivetable = table.fastcopy, table.tohash, table.derive
local formatters = string.formatters
@@ -60,7 +58,7 @@ local otf = fonts.handlers.otf
otf.glists = { "gsub", "gpos" }
-otf.version = 2.815 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.version = 2.816 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otf", otf.version, true)
local hashes = fonts.hashes
@@ -709,7 +707,7 @@ local function somecopy(old) -- fast one
end
end
--- not setting hasitalics and class (when nil) during table cronstruction can save some mem
+-- not setting hasitalics and class (when nil) during table construction can save some mem
actions["prepare glyphs"] = function(data,filename,raw)
local tableversion = tonumber(raw.table_version) or 0
@@ -1128,7 +1126,7 @@ actions["analyze glyphs"] = function(data,filename,raw) -- maybe integrate this
local marks = { } -- always present (saves checking)
for unicode, description in next, descriptions do
local glyph = description.glyph
- local italic = glyph.italic_correction
+ local italic = glyph.italic_correction -- only in a math font
if not italic then
-- skip
elseif italic == 0 then
@@ -1197,7 +1195,8 @@ end
actions["reorganize features"] = function(data,filename,raw) -- combine with other
local features = { }
data.resources.features = features
- for k, what in next, otf.glists do
+ for k=1,#otf.glists do
+ local what = otf.glists[k]
local dw = raw[what]
if dw then
local f = { }
@@ -1266,6 +1265,140 @@ actions["reorganize anchor classes"] = function(data,filename,raw)
end
end
+-- local function checklookups(data,missing,nofmissing)
+-- local resources = data.resources
+-- local unicodes = resources.unicodes
+-- local lookuptypes = resources.lookuptypes
+-- if not unicodes or not lookuptypes then
+-- return
+-- elseif nofmissing <= 0 then
+-- return
+-- end
+-- local descriptions = data.descriptions
+-- local private = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+-- --
+-- local ns, nl = 0, 0
+
+-- local guess = { }
+-- -- helper
+-- local function check(gname,code,unicode)
+-- local description = descriptions[code]
+-- -- no need to add a self reference
+-- local variant = description.name
+-- if variant == gname then
+-- return
+-- end
+-- -- the variant already has a unicode (normally that results in a default tounicode to self)
+-- local unic = unicodes[variant]
+-- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+-- -- no default mapping and therefore maybe no tounicode yet
+-- else
+-- return
+-- end
+-- -- the variant already has a tounicode
+-- if descriptions[code].unicode then
+-- return
+-- end
+-- -- add to the list
+-- local g = guess[variant]
+-- -- local r = overloads[unicode]
+-- -- if r then
+-- -- unicode = r.unicode
+-- -- end
+-- if g then
+-- g[gname] = unicode
+-- else
+-- guess[variant] = { [gname] = unicode }
+-- end
+-- end
+-- --
+-- for unicode, description in next, descriptions do
+-- local slookups = description.slookups
+-- if slookups then
+-- local gname = description.name
+-- for tag, data in next, slookups do
+-- local lookuptype = lookuptypes[tag]
+-- if lookuptype == "alternate" then
+-- for i=1,#data do
+-- check(gname,data[i],unicode)
+-- end
+-- elseif lookuptype == "substitution" then
+-- check(gname,data,unicode)
+-- end
+-- end
+-- end
+-- local mlookups = description.mlookups
+-- if mlookups then
+-- local gname = description.name
+-- for tag, list in next, mlookups do
+-- local lookuptype = lookuptypes[tag]
+-- if lookuptype == "alternate" then
+-- for i=1,#list do
+-- local data = list[i]
+-- for i=1,#data do
+-- check(gname,data[i],unicode)
+-- end
+-- end
+-- elseif lookuptype == "substitution" then
+-- for i=1,#list do
+-- check(gname,list[i],unicode)
+-- end
+-- end
+-- end
+-- end
+-- end
+-- -- resolve references
+-- local done = true
+-- while done do
+-- done = false
+-- for k, v in next, guess do
+-- if type(v) ~= "number" then
+-- for kk, vv in next, v do
+-- if vv == -1 or vv >= private or (vv >= 0xE000 and vv <= 0xF8FF) or vv == 0xFFFE or vv == 0xFFFF then
+-- local uu = guess[kk]
+-- if type(uu) == "number" then
+-- guess[k] = uu
+-- done = true
+-- end
+-- else
+-- guess[k] = vv
+-- done = true
+-- end
+-- end
+-- end
+-- end
+-- end
+-- -- wrap up
+-- local orphans = 0
+-- local guessed = 0
+-- for k, v in next, guess do
+-- if type(v) == "number" then
+-- descriptions[unicodes[k]].unicode = descriptions[v].unicode or v -- can also be a table
+-- guessed = guessed + 1
+-- else
+-- local t = nil
+-- local l = lower(k)
+-- local u = unicodes[l]
+-- if not u then
+-- orphans = orphans + 1
+-- elseif u == -1 or u >= private or (u >= 0xE000 and u <= 0xF8FF) or u == 0xFFFE or u == 0xFFFF then
+-- local unicode = descriptions[u].unicode
+-- if unicode then
+-- descriptions[unicodes[k]].unicode = unicode
+-- guessed = guessed + 1
+-- else
+-- orphans = orphans + 1
+-- end
+-- else
+-- orphans = orphans + 1
+-- end
+-- end
+-- end
+-- if trace_loading and orphans > 0 or guessed > 0 then
+-- report_otf("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
+-- end
+-- end
+
actions["prepare tounicode"] = function(data,filename,raw)
fonts.mappings.addtounicode(data,filename)
end
@@ -1300,8 +1433,9 @@ actions["reorganize subtables"] = function(data,filename,raw)
local lookups = { }
local chainedfeatures = { }
resources.sequences = sequences
- resources.lookups = lookups
- for _, what in next, otf.glists do
+ resources.lookups = lookups -- we also have lookups in data itself
+ for k=1,#otf.glists do
+ local what = otf.glists[k]
local dw = raw[what]
if dw then
for k=1,#dw do
@@ -1387,12 +1521,6 @@ actions["reorganize subtables"] = function(data,filename,raw)
end
end
--- test this:
---
--- for _, what in next, otf.glists do
--- raw[what] = nil
--- end
-
actions["prepare lookups"] = function(data,filename,raw)
local lookups = raw.lookups
if lookups then
@@ -1963,7 +2091,7 @@ actions["merge kern classes"] = function(data,filename,raw)
report_otf("%s kern overloads ignored",ignored)
end
if blocked > 0 then
- report_otf("%s succesive kerns blocked",blocked)
+ report_otf("%s successive kerns blocked",blocked)
end
end
end
@@ -2062,7 +2190,7 @@ end
-- ligatures have an extra specification.char entry that we don't use
--- mlookups probably only with pairs
+-- mlookups only with pairs and ligatures
actions["reorganize glyph lookups"] = function(data,filename,raw)
local resources = data.resources
@@ -2146,12 +2274,11 @@ actions["reorganize glyph lookups"] = function(data,filename,raw)
-- description.lookups = nil
end
end
-
end
local zero = { 0, 0 }
-actions["reorganize glyph anchors"] = function(data,filename,raw) -- when we replace inplace we safe entries
+actions["reorganize glyph anchors"] = function(data,filename,raw)
local descriptions = data.descriptions
for unicode, description in next, descriptions do
local anchors = description.glyph.anchors
diff --git a/tex/context/base/font-otl.lua b/tex/context/base/font-otl.lua
new file mode 100644
index 000000000..58cce837c
--- /dev/null
+++ b/tex/context/base/font-otl.lua
@@ -0,0 +1,25 @@
+if not modules then modules = { } end modules ['font-otl'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- After some experimenting with an alternative loader (one that is needed for
+-- getting outlines in mp) I decided not to be compatible with the old (built-in)
+-- one. The approach used in font-otn is as follows: we load the font in a compact
+-- format but still very compatible with the ff data structures. From there we
+-- create hashes to access the data efficiently. The implementation of feature
+-- processing is mostly based on looking at the data as organized in the glyphs and
+-- lookups as well as the specification. Keeping the lookup data in the glyphs is
+-- very instructive and handy for tracing. On the other hand hashing is what brings
+-- speed. So, the in the new approach (the old one will stay around too) we no
+-- longer keep data in the glyphs which saves us (what in retrospect looks a bit
+-- like) a reconstruction step. It also means that the data format of the cached
+-- files changes. What method is used depends on that format. There is no fundamental
+-- change in processing, and not even in data organation. Most has to do with
+-- loading and storage.
+
+-- This file is mostly used for experiments (on my machine) before they make it into
+-- the core.
diff --git a/tex/context/base/font-otn.lua b/tex/context/base/font-otn.lua
index 7736994de..73ee8ecef 100644
--- a/tex/context/base/font-otn.lua
+++ b/tex/context/base/font-otn.lua
@@ -1085,7 +1085,7 @@ function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence
if al[anchor] then
local ma = markanchors[anchor]
if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
+ local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar],true)
if trace_marks then
logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
@@ -1198,7 +1198,7 @@ function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence,lookuphash
-- skip
elseif type(krn) == "table" then
if lookuptype == "pair" then -- probably not needed
- local a, b = krn[2], krn[3]
+ local a, b = krn[2], krn[3]
if a and #a > 0 then
local startchar = getchar(start)
local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,injection) -- characters[startchar])
@@ -1811,7 +1811,7 @@ function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext
if al[anchor] then
local ma = markanchors[anchor]
if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
+ local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar],true)
if trace_marks then
logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
@@ -1965,16 +1965,16 @@ function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,look
end
else
report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname))
- local a, b = krn[2], krn[6]
- if a and a ~= 0 then
- local k = setkern(snext,factor,rlmode,a)
- if trace_kerns then
- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- end
- if b and b ~= 0 then
- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
- end
+ -- local a, b = krn[2], krn[6]
+ -- if a and a ~= 0 then
+ -- local k = setkern(snext,factor,rlmode,a)
+ -- if trace_kerns then
+ -- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
+ -- end
+ -- end
+ -- if b and b ~= 0 then
+ -- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
+ -- end
end
done = true
elseif krn ~= 0 then
@@ -3492,7 +3492,7 @@ local function prepare_lookups(tfmdata)
for name, anchor in next, anchors do
local lookups = anchor_to_lookup[name]
if lookups then
- for lookup, _ in next, lookups do
+ for lookup in next, lookups do
local target = lookuphash[lookup]
if target then
target[unicode] = anchors
diff --git a/tex/context/base/font-otp.lua b/tex/context/base/font-otp.lua
index ebf36ed45..91bd05b32 100644
--- a/tex/context/base/font-otp.lua
+++ b/tex/context/base/font-otp.lua
@@ -12,9 +12,8 @@ if not modules then modules = { } end modules ['font-otp'] = {
--
-- unless we sort all hashes we can get a different pack order (no big deal but size can differ)
-local next, type = next, type
+local next, type, tostring = next, type, tostring
local sort, concat = table.sort, table.concat
-local sortedhash = table.sortedhash
local trace_packing = false trackers.register("otf.packing", function(v) trace_packing = v end)
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -148,6 +147,7 @@ end
-- we then need to sort more thanks to random hashing
local function packdata(data)
+
if data then
-- stripdata(data)
local h, t, c = { }, { }, { }
@@ -537,6 +537,7 @@ local unpacked_mt = {
}
local function unpackdata(data)
+
if data then
local tables = data.tables
if tables then
diff --git a/tex/context/base/font-otr.lua b/tex/context/base/font-otr.lua
index 3ff260d44..1b53601a9 100644
--- a/tex/context/base/font-otr.lua
+++ b/tex/context/base/font-otr.lua
@@ -6,35 +6,59 @@ if not modules then modules = { } end modules ['font-otr'] = {
license = "see context related readme files"
}
--- this code is not yet ready for generic i.e. i want to be free to change the
--- keys and values
-
--- we can optimize kern pairs (i.e. simple h only positioning) later if we want
--- which is easier as then we know if we have clashes between features
---
-- When looking into a cid font relates issue in the ff library I wondered if
-- it made sense to use Lua to filter the information from the otf and ttf
-- files. Quite some ff code relates to special fonts and in practice we only
-- use rather normal opentype fonts.
--
-- The code here is based on the documentation (and examples) at the microsoft
--- website. The code will be extended and improved stepwise. We generate a table
--- that is comparabel with the one luatex creates but also can create one for
--- context directly.
+-- website. The code will be extended and improved stepwise. After some experiments
+-- I decided to convert to a format more suitable for the context font handler
+-- because it makes no sense to rehash all those lookups again.
+--
+-- Currently we can use this code for getting basic info about the font, loading
+-- shapes and loading the extensive table. I'm not sure if I will provide a ff
+-- compatible output as well (We're not that far from it as currently I can load
+-- all data reasonable fast.)
+
+-- This code is not yet ready for generic i.e. I want to be free to change the
+-- keys and values. Especially the gpos/gsub/gdef/math needs checking (this
+-- is implemented in font-dsp.lua).
+
+-- We can omit redundant glyphs names i.e. ones that match the agl or
+-- are just a unicode string but it doesn't save that much. It will be an option
+-- some day.
+
+-- Optimizing the widths wil be done anyway as it save quite some on a cjk font
+-- and the existing (old) code if okay.
+
+-- todo: duplicates
+-- todo: markclasses : checking needed (see font-otf)
+--
+-- todo: check all unsigned / signed (will be done last)
+-- todo: more messages (only if really needed)
+--
+-- todo (in old loader and new one) math:
--
--- todo: add checks for versions
--- todo: check all unsigned / signed
--- todo: save mode for context font loader (also deal with unicode dups)
+-- italic_correction -> italic
+-- top_accent -> top accent
+-- vert_parts -> vparts
+-- horiz_parts -> hparts
+-- vert_variants -> vvariants -> next in tex, so better 'sizes'
+-- horiz_variants -> hvariants -> next in tex, so better 'sizes'
--
--- widths and weights are kind of messy: for instance lmmonolt ias a pfmweight of
--- 400 while it should be 300
+-- start -> first (so we can skip the first same-size one)
+-- end -> last
--
--- we can have a bit more in the info data if needed as it will nto really slow
--- down identifying
+-- We can optimize kern pairs (i.e. simple h only positioning) later if we want
+-- which is easier as then we know if we have clashes between features. We can have
+-- kerns as well as moves (smaller files)
--
--- the main loader is not yet for production use (work in progress on the dsp file
--- but as soon we we're done i will also adapt that table (as there is no need to
--- be completely ff compatible)
+-- Widths and weights are kind of messy: for instance lmmonolt has a pfmweight of
+-- 400 while it should be 300. So, for now we mostly stick to the old compromis.
+
+-- We don't really need all those language tables so they might be dropped some
+-- day.
if not characters then
require("char-def")
@@ -42,11 +66,11 @@ if not characters then
end
local next, type, unpack = next, type, unpack
-local byte, lower, char = string.byte, string.lower, string.char
+local byte, lower, char, strip, gsub = string.byte, string.lower, string.char, string.strip, string.gsub
local bittest = bit32.btest
local concat, remove = table.concat, table.remove
local floor, mod, abs, sqrt, round = math.floor, math.mod, math.abs, math.sqrt, math.round
-local P, C, R, S, C, Cs, Cc, Ct, Carg, Cmt = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg, lpeg.Cmt
+local P, R, S, C, Cs, Cc, Ct, Carg, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg, lpeg.Cmt
local lpegmatch = lpeg.match
local setmetatableindex = table.setmetatableindex
@@ -66,25 +90,45 @@ handlers.otf = otf
local readers = otf.readers or { }
otf.readers = readers
-local files = utilities.files
-
-local readbytes = files.readbytes
-local readstring = files.readstring
-local readbyte = files.readcardinal1 -- 8-bit unsigned integer
-local readushort = files.readcardinal2 -- 16-bit unsigned integer
-local readuint = files.readcardinal3 -- 24-bit unsigned integer
-local readulong = files.readcardinal4 -- 24-bit unsigned integer
-local readchar = files.readinteger1 -- 8-bit signed integer
-local readshort = files.readinteger2 -- 16-bit signed integer
-local readlong = files.readinteger4 -- 24-bit unsigned integer
-local readfixed = files.readfixed4
-local readfword = readshort -- 16-bit signed integer that describes a quantity in FUnits
-local readufword = readushort -- 16-bit unsigned integer that describes a quantity in FUnits
+-- local streamreader = utilities.streams -- faster on big files
+local streamreader = utilities.files -- faster on identify
+
+readers.streamreader = streamreader
+
+local openfile = streamreader.open
+local closefile = streamreader.close
+local skipbytes = streamreader.skip
+local setposition = streamreader.setposition
+local skipshort = streamreader.skipshort
+local readbytes = streamreader.readbytes
+local readstring = streamreader.readstring
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readuint = streamreader.readcardinal3 -- 24-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readchar = streamreader.readinteger1 -- 8-bit signed integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local readlong = streamreader.readinteger4 -- 24-bit unsigned integer
+local readfixed = streamreader.readfixed4
+local readfword = readshort -- 16-bit signed integer that describes a quantity in FUnits
+local readufword = readushort -- 16-bit unsigned integer that describes a quantity in FUnits
local readoffset = readushort
-local read2dot14 = files.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
+local read2dot14 = streamreader.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
+
+function streamreader.readtag(f)
+ return lower(strip(readstring(f,4)))
+end
-local readtag = function(f) return f:read(4) end
-local skipshort = function(f,n) f:read(n and 2*n or 2) end
+-- date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a
+-- signed 64-bit integer
+
+local function readlongdatetime(f)
+ local a, b, c, d, e, f, g, h = readbytes(f,8)
+ return 0x100000000 * d + 0x1000000 * e + 0x10000 * f + 0x100 * g + h
+end
+
+local tableversion = 0.001
+local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
local reportedskipped = { }
@@ -94,13 +138,6 @@ local function reportskippedtable(tag)
reportedskipped[tag] = true
end
end
--- date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a
--- signed 64-bit integer
-
-local function readlongdatetime(f)
- local a, b, c, d, e, f, g, h = byte(f:read(8),1,8)
- return 0x100000000 * d + 0x1000000 * e + 0x10000 * f + 0x100 * g + h
-end
-- We have quite some data tables. We are somewhat ff compatible with names but as I used
-- the information form the microsoft site there can be differences. Eventually I might end
@@ -151,6 +188,7 @@ local platforms = { [0] =
}
local encodings = {
+ -- these stay:
unicode = { [0] =
"unicode 1.0 semantics",
"unicode 1.1 semantics",
@@ -160,6 +198,7 @@ local encodings = {
"unicode variation sequences", -- cmap subtable format 14).
"unicode full repertoire", -- cmap subtable formats 0, 4, 6, 10, 12, 13
},
+ -- these can go:
macintosh = { [0] =
"roman", "japanese", "chinese (traditional)", "korean", "arabic", "hebrew", "greek", "russian",
"rsymbol", "devanagari", "gurmukhi", "gujarati", "oriya", "bengali", "tamil", "telugu", "kannada",
@@ -167,11 +206,13 @@ local encodings = {
"chinese (simplified)", "tibetan", "mongolian", "geez", "slavic", "vietnamese", "sindhi",
"uninterpreted",
},
+ -- these stay:
iso = { [0] =
"7-bit ascii",
"iso 10646",
"iso 8859-1",
},
+ -- these stay:
windows = { [0] =
"symbol",
"unicode bmp", -- this is utf16
@@ -204,9 +245,11 @@ local decoders = {
-- names (in that order). A font with no english name is probably a weird one anyway.
local languages = {
+ -- these stay:
unicode = {
[ 0] = "english",
},
+ -- english can stay:
macintosh = {
[ 0] = "english",
[ 1] = "french",
@@ -327,8 +370,10 @@ local languages = {
[149] = "greenlandic",
[150] = "azerbaijani (roman script)",
},
+ -- these can stay:
iso = {
},
+ -- english can stay:
windows = {
[0x0436] = "afrikaans - south africa",
[0x041c] = "albanian - albania",
@@ -652,7 +697,7 @@ local panosewidths = {
function readers.name(f,fontdata)
local datatable = fontdata.tables.name
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local format = readushort(f)
local nofnames = readushort(f)
local offset = readushort(f)
@@ -730,7 +775,7 @@ function readers.name(f,fontdata)
local encoding = name.encoding
local language = name.language
if (not e or encoding == e) and (not l or language == l) then
- f:seek("set",start+name.offset)
+ setposition(f,start+name.offset)
local content = readstring(f,name.length)
local decoder = decoders[platform]
if decoder then
@@ -771,7 +816,7 @@ end
readers["os/2"] = function(f,fontdata)
local datatable = fontdata.tables["os/2"]
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local version = readushort(f)
local windowsmetrics = {
version = version,
@@ -832,7 +877,7 @@ end
readers.head = function(f,fontdata)
local datatable = fontdata.tables.head
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local fontheader = {
version = readfixed(f),
revision = readfixed(f),
@@ -867,7 +912,7 @@ readers.hhea = function(f,fontdata,specification)
if specification.details then
local datatable = fontdata.tables.hhea
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
fontdata.horizontalheader = {
version = readfixed(f),
ascender = readfword(f),
@@ -905,18 +950,20 @@ readers.maxp = function(f,fontdata,specification)
if specification.details then
local datatable = fontdata.tables.maxp
if datatable then
- f:seek("set",datatable.offset)
- local version = readfixed(f)
+ setposition(f,datatable.offset)
+ local version = readfixed(f)
+ local nofglyphs = readushort(f)
+ fontdata.nofglyphs = nofglyphs
if version == 0.5 then
fontdata.maximumprofile = {
version = version,
- nofglyphs = readushort(f),
+ nofglyphs = nofglyphs,
}
return
elseif version == 1.0 then
fontdata.maximumprofile = {
version = version,
- nofglyphs = readushort(f),
+ nofglyphs = nofglyphs,
points = readushort(f),
contours = readushort(f),
compositepoints = readushort(f),
@@ -948,7 +995,7 @@ readers.hmtx = function(f,fontdata,specification)
if specification.glyphs then
local datatable = fontdata.tables.hmtx
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local nofmetrics = fontdata.horizontalheader.nofhmetrics
local glyphs = fontdata.glyphs
local nofglyphs = fontdata.nofglyphs
@@ -962,9 +1009,9 @@ readers.hmtx = function(f,fontdata,specification)
if advance ~= 0 then
glyph.width = width
end
- if leftsidebearing ~= 0 then
- glyph.lsb = leftsidebearing
- end
+ -- if leftsidebearing ~= 0 then
+ -- glyph.lsb = leftsidebearing
+ -- end
end
-- The next can happen in for instance a monospace font or in a cjk font
-- with fixed widths.
@@ -973,9 +1020,9 @@ readers.hmtx = function(f,fontdata,specification)
if width ~= 0 then
glyph.width = width
end
- if leftsidebearing ~= 0 then
- glyph.lsb = leftsidebearing
- end
+ -- if leftsidebearing ~= 0 then
+ -- glyph.lsb = leftsidebearing
+ -- end
end
end
end
@@ -989,7 +1036,7 @@ end
readers.post = function(f,fontdata,specification)
local datatable = fontdata.tables.post
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local version = readfixed(f)
fontdata.postscript = {
version = version,
@@ -1010,12 +1057,11 @@ readers.post = function(f,fontdata,specification)
glyphs[index].name = standardromanencoding[index]
end
elseif version == 2.0 then
- local glyphs = fontdata.glyphs
- local nofglyphs = readushort(f)
- local filesize = fontdata.filesize
- local indices = { }
- local names = { }
- local maxnames = 0
+ local glyphs = fontdata.glyphs
+ local nofglyphs = readushort(f)
+ local indices = { }
+ local names = { }
+ local maxnames = 0
for i=0,nofglyphs-1 do
local nameindex = readushort(f)
if nameindex >= 258 then
@@ -1027,12 +1073,18 @@ readers.post = function(f,fontdata,specification)
end
end
for i=1,maxnames do
- local length = readbyte(f)
- if length > 0 then
- glyphs[indices[i]].name = readstring(f,length)
- else
- report("quit post name fetching at %a of %a",i,maxnames)
+ local mapping = indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
break
+ else
+ local length = readbyte(f)
+ if length > 0 then
+ glyphs[mapping].name = readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
end
end
elseif version == 2.5 then
@@ -1058,7 +1110,7 @@ end
local formatreaders = { }
formatreaders[4] = function(f,fontdata,offset)
- f:seek("set",offset+2) -- skip format
+ setposition(f,offset+2) -- skip format
--
local length = readushort(f) -- in bytes of subtable
local language = readushort(f)
@@ -1071,7 +1123,7 @@ formatreaders[4] = function(f,fontdata,offset)
local deltas = { }
local offsets = { }
local indices = { }
- local mapmap = fontdata.map.map
+ local mapping = fontdata.mapping
local glyphs = fontdata.glyphs
--
for i=1,nofsegments do
@@ -1109,7 +1161,7 @@ formatreaders[4] = function(f,fontdata,offset)
if not glyph.unicode then
glyph.unicode = unicode
end
- mapmap[index] = unicode
+ mapping[index] = unicode
-- report("%C %04i %05i %s",unicode,index,glyphs[index].name)
end
end
@@ -1124,7 +1176,7 @@ formatreaders[4] = function(f,fontdata,offset)
if not glyph.unicode then
glyph.unicode = unicode
end
- mapmap[index] = unicode
+ mapping[index] = unicode
-- report("%C %04i %05i %s",unicode,index,glyphs[index].name)
end
end
@@ -1134,11 +1186,11 @@ formatreaders[4] = function(f,fontdata,offset)
end
formatreaders[6] = function(f,fontdata,offset)
- f:seek("set",offset+2+2+2) -- skip format length language
- local mapmap = fontdata.map.map
- local glyphs = fontdata.glyphs
- local start = readushort(f)
- local count = readushort(f)
+ setposition(f,offset+2+2+2) -- skip format length language
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
+ local start = readushort(f)
+ local count = readushort(f)
for unicode=start,start+count-1 do
local index = readushort(f)
if index > 0 then
@@ -1146,15 +1198,15 @@ formatreaders[6] = function(f,fontdata,offset)
if not glyph.unicode then
glyph.unicode = unicode
end
- mapmap[unicode] = index
+ mapping[index] = unicode
end
end
end
formatreaders[12] = function(f,fontdata,offset)
- f:seek("set",offset+2+2+4+4) -- skip format reserved length language
- local mapmap = fontdata.map.map
- local glyphs = fontdata.glyphs
+ setposition(f,offset+2+2+4+4) -- skip format reserved length language
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
local nofgroups = readulong(f)
for i=1,nofgroups do
local first = readulong(f)
@@ -1165,12 +1217,61 @@ formatreaders[12] = function(f,fontdata,offset)
if not glyph.unicode then
glyph.unicode = unicode
end
- mapmap[unicode] = index
+ mapping[index] = unicode
index = index + 1
end
end
end
+formatreaders[14] = function(f,fontdata,offset)
+ if offset and offset ~= 0 then
+ setposition(f,offset)
+ local format = readushort(f)
+ local length = readulong(f)
+ local nofrecords = readulong(f)
+ local records = { }
+ local variants = { }
+ fontdata.variants = variants
+ for i=1,nofrecords do
+ records[i] = {
+ selector = readuint(f),
+ default = readulong(f), -- default offset
+ other = readulong(f), -- non-default offset
+ }
+ end
+ for i=1,nofrecords do
+ local record = records[i]
+ local selector = record.selector
+ local default = record.default
+ local other = record.other
+ --
+ -- there is no need to map the defaults to themselves
+ --
+ -- if default ~= 0 then
+ -- setposition(f,offset+default)
+ -- local nofranges = readulong(f)
+ -- for i=1,nofranges do
+ -- local start = readuint(f)
+ -- local extra = readbyte(f)
+ -- for i=start,start+extra do
+ -- mapping[i] = i
+ -- end
+ -- end
+ -- end
+ local other = record.other
+ if other ~= 0 then
+ setposition(f,offset+other)
+ local mapping = { }
+ local count = readulong(f)
+ for i=1,count do
+ mapping[readuint(f)] = readushort(f)
+ end
+ variants[selector] = mapping
+ end
+ end
+ end
+end
+
local function checkcmap(f,fontdata,records,platform,encoding,format)
local data = records[platform]
if not data then
@@ -1198,12 +1299,13 @@ function readers.cmap(f,fontdata,specification)
local datatable = fontdata.tables.cmap
if datatable then
local tableoffset = datatable.offset
- f:seek("set",tableoffset)
+ setposition(f,tableoffset)
local version = readushort(f)
local noftables = readushort(f)
local records = { }
local unicodecid = false
local variantcid = false
+ local variants = { }
for i=1,noftables do
local platform = readushort(f)
local encoding = readushort(f)
@@ -1235,7 +1337,7 @@ function readers.cmap(f,fontdata,specification)
local formats = subtables.formats
for i=1,#offsets do
local offset = tableoffset + offsets[i]
- f:seek("set",offset)
+ setposition(f,offset)
formats[readushort(f)] = offset
end
record[encoding] = formats
@@ -1246,8 +1348,11 @@ function readers.cmap(f,fontdata,specification)
checkcmap(f,fontdata,records,3,10,12)
-- checkcmap(f,fontdata,records,0, 3, 4)
-- checkcmap(f,fontdata,records,1, 0, 6)
- -- todo
- variantcid = records[0] and records[0][5]
+ checkcmap(f,fontdata,records,0, 5,14)
+-- variantcid = records[0] and records[0][5]
+-- if variantcid then
+-- formatreaders[14](f,fontdata,offset,variantcid[14])
+-- end
--
fontdata.cidmaps = {
version = version,
@@ -1286,7 +1391,7 @@ function readers.kern(f,fontdata,specification)
if specification.kerns then
local datatable = fontdata.tables.kern
if datatable then
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
local version = readushort(f)
local noftables = readushort(f)
for i=1,noftables do
@@ -1345,14 +1450,7 @@ end
function readers.math(f,fontdata,specification)
if specification.glyphs then
- local datatable = fontdata.tables.math
- if datatable then
- f:seek("set",datatable.offset)
- local scriptlist = readulong(f)
- local featurelist = readulong(f)
- local lookuplist = readulong(f)
- -- todo
- end
+ reportskippedtable("math")
end
end
@@ -1472,24 +1570,81 @@ otf.unpackoutlines = unpackoutlines
-- some properties in order to read following tables. When details is true we also
-- initialize the glyphs data.
--- options:
---
--- properties : common metrics, names, list of features
--- glyphs : metrics, encoding
--- shapes : sequences or segments
--- kerns : global (ttf) kerns
--- lookups : gsub and gpos lookups
+----- validutf = lpeg.patterns.utf8character^0 * P(-1)
+local validutf = lpeg.patterns.validutf8
-local function readdata(f,offset,specification)
+local function getname(fontdata,key)
+ local names = fontdata.names
+ if names then
+ local value = names[key]
+ if value then
+ local content = value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+
+local function getinfo(maindata,sub)
+ local fontdata = sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names = fontdata.names
+ if names then
+ local metrics = fontdata.windowsmetrics or { }
+ local postscript = fontdata.postscript or { }
+ local fontheader = fontdata.fontheader or { }
+ local cffinfo = fontdata.cffinfo or { }
+ local filename = fontdata.filename
+ local weight = getname(fontdata,"weight") or cffinfo.weight or metrics.weight
+ local width = getname(fontdata,"width") or cffinfo.width or metrics.width
+ return { -- we inherit some inconsistencies/choices from ff
+ subfontindex = sub or 0,
+ -- filename = filename,
+ -- version = name("version"),
+ -- format = fontdata.format,
+ fontname = getname(fontdata,"postscriptname"),
+ fullname = getname(fontdata,"fullname"), -- or file.nameonly(filename)
+ familyname = getname(fontdata,"typographicfamily") or getname(fontdata,"family"),
+ subfamily = getname(fontdata,"subfamily"),
+ modifiers = getname(fontdata,"typographicsubfamily"),
+ weight = weight and lower(weight),
+ width = width and lower(width),
+ pfmweight = metrics.weightclass or 400, -- will become weightclass
+ pfmwidth = metrics.widthclass or 5, -- will become widthclass
+ panosewidth = metrics.panosewidth,
+ panoseweight = metrics.panoseweight,
+ italicangle = postscript.italicangle or 0,
+ units = fontheader.units or 0,
+ designsize = fontdata.designsize,
+ minsize = fontdata.minsize,
+ maxsize = fontdata.maxsize,
+ monospaced = (tonumber(postscript.monospaced or 0) > 0) or metrics.panosewidth == "monospaced",
+ averagewidth = metrics.averagewidth,
+ xheight = metrics.xheight,
+ }
+ elseif n then
+ return {
+ filename = fontdata.filename,
+ comment = "there is no info for subfont " .. n,
+ }
+ else
+ return {
+ filename = fontdata.filename,
+ comment = "there is no info",
+ }
+ end
+end
+
+local function loadtables(f,specification,offset)
if offset then
- f:seek("set",offset)
+ setposition(f,offset)
end
- local tables = { }
+ local tables = { }
local basename = file.basename(specification.filename)
local filesize = specification.filesize
+ local filetime = specification.filetime
local fontdata = { -- some can/will go
filename = basename,
filesize = filesize,
+ filetime = filetime,
version = readstring(f,4),
noftables = readushort(f),
searchrange = readushort(f), -- not needed
@@ -1511,23 +1666,44 @@ local function readdata(f,offset,specification)
length = length,
}
end
- if specification.glyphs then
- local glyphs = setmetatableindex(function(t,k)
- local v = {
- -- maybe more defaults
- index = k,
- }
- t[k] = v
- return v
- end)
- local map = {
- map = { },
- backmap = { },
+ if tables.cff then
+ fontdata.format = "opentype"
+ else
+ fontdata.format = "truetype"
+ end
+ return fontdata
+end
+
+local function prepareglyps(fontdata)
+ local glyphs = setmetatableindex(function(t,k)
+ local v = {
+ -- maybe more defaults
+ index = k,
}
- fontdata.glyphs = glyphs
- fontdata.map = map
+ t[k] = v
+ return v
+ end)
+ fontdata.glyphs = glyphs
+ fontdata.mapping = { }
+end
+
+local function readdata(f,offset,specification)
+ local fontdata = loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
end
+ --
readers["name"](f,fontdata,specification)
+ --
+ local askedname = specification.askedname
+ if askedname then
+ local cleanname = gsub(askedname,"[^azAZ09]","")
+ local foundname = gsub(getname(fontdata,"fullname") or "","[^azAZ09]","")
+ if lower(cleanname) ~= lower(foundname) then
+ return -- keep searching
+ end
+ end
+ --
readers["os/2"](f,fontdata,specification)
readers["head"](f,fontdata,specification)
readers["maxp"](f,fontdata,specification)
@@ -1544,53 +1720,66 @@ local function readdata(f,offset,specification)
readers["gpos"](f,fontdata,specification)
readers["math"](f,fontdata,specification)
--
- if readers.filterkerns then
- readers.filterkerns(fontdata)
- end
- if readers.splitlookups then
- readers.splitlookups(fontdata)
- end
- --
fontdata.locations = nil
fontdata.tables = nil
fontdata.cidmaps = nil
fontdata.dictionaries = nil
- --
- -- fontdata.cff = nil
- --
+ -- fontdata.cff = nil
return fontdata
end
local function loadfontdata(specification)
local filename = specification.filename
- local filesize = file.size(filename)
- local f = io.open(filename,"rb")
- if f then
- if filesize > 0 then
- specification.filesize = filesize
- local version = readstring(f,4)
- local fontdata = nil
- if version == "OTTO" or version == "true" or version == "\0\1\0\0" then
- fontdata = readdata(f,0,specification)
- elseif version == "ttcf" then
- local subfont = tonumber(specification.subfont)
- local offsets = { }
- local ttcversion = readulong(f)
- local nofsubfonts = readulong(f)
- for i=1,nofsubfonts do
- offsets[i] = readulong(f)
+ local fileattr = lfs.attributes(filename)
+ local filesize = fileattr and fileattr.size or 0
+ local filetime = fileattr and fileattr.modification or 0
+ local f = openfile(filename,true) -- zero based
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize == 0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize = filesize
+ specification.filetime = filetime
+ local version = readstring(f,4)
+ local fontdata = nil
+ if version == "OTTO" or version == "true" or version == "\0\1\0\0" then
+ fontdata = readdata(f,0,specification)
+ elseif version == "ttcf" then
+ local subfont = tonumber(specification.subfont)
+ local offsets = { }
+ local ttcversion = readulong(f)
+ local nofsubfonts = readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i] = readulong(f)
+ end
+ if subfont then
+ if subfont >= 1 and subfont <= nofsubfonts then
+ fontdata = readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
end
- if subfont then
- if subfont > 1 and subfont <= nofsubfonts then
- fontdata = readdata(f,offsets[subfont],specification)
- else
- report("no subfont %a in file %a",subfont,filename)
+ else
+ subfont = specification.subfont
+ if type(subfont) == "string" and subfont ~= "" then
+ specification.askedname = subfont
+ for i=1,nofsubfonts do
+ fontdata = readdata(f,offsets[i],specification)
+ if fontdata then
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
end
else
local subfonts = { }
fontdata = {
filename = filename,
filesize = filesize,
+ filetime = filetime,
version = version,
subfonts = subfonts,
ttcversion = ttcversion,
@@ -1600,21 +1789,16 @@ local function loadfontdata(specification)
subfonts[i] = readdata(f,offsets[i],specification)
end
end
- else
- report("unknown version %a in file %a",version,filename)
end
- f:close()
- return fontdata
else
- report("empty file %a",filename)
- f:close()
+ report("unknown version %a in file %a",version,filename)
end
- else
- report("unable to open %a",filename)
+ closefile(f)
+ return fontdata or { }
end
end
-local function loadfont(specification)
+local function loadfont(specification,n)
if type(specification) == "string" then
specification = {
filename = specification,
@@ -1625,7 +1809,8 @@ local function loadfont(specification)
kerns = true,
lookups = true,
-- true or number:
- subfont = true,
+ subfont = n or true,
+ tounicode = false,
}
end
-- if shapes only then
@@ -1639,7 +1824,7 @@ local function loadfont(specification)
specification.info = true
end
local function message(str)
- report("fatal error in file %a: %s",specification.filename,str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
end
local ok, result = xpcall(loadfontdata,message,specification)
if ok then
@@ -1647,67 +1832,6 @@ local function loadfont(specification)
end
end
-readers.loadfont = loadfont
-
------ validutf = lpeg.patterns.utf8character^0 * P(-1)
-local validutf = lpeg.patterns.validutf8
-
-local function getinfo(maindata,sub)
- local fontdata = sub and maindata.subfonts[sub] or maindata
- local names = fontdata.names
- if names then
- local metrics = fontdata.windowsmetrics or { }
- local postscript = fontdata.postscript or { }
- local fontheader = fontdata.fontheader or { }
- local cffinfo = fontdata.cffinfo or { }
- local filename = fontdata.filename
- --
- local function name(key)
- local value = names[key]
- if value then
- local content = value.content
- return lpegmatch(validutf,content) and content or nil
- end
- end
- --
- local weight = name("weight") or cffinfo.weight or metrics.weight
- local width = name("width") or cffinfo.width or metrics.width
- local info = { -- we inherit some inconsistencies/choices from ff
- subfontindex = sub or 0,
- -- filename = filename,
- -- version = name("version"),
- fontname = name("postscriptname"),
- fullname = name("fullname"), -- or file.nameonly(filename)
- familyname = name("typographicfamily") or name("family"),
- subfamily = name("subfamily"),
- modifiers = name("typographicsubfamily"),
- weight = weight and lower(weight),
- width = width and lower(width),
- pfmweight = metrics.weightclass or 400, -- will become weightclass
- pfmwidth = metrics.widthclass or 5, -- will become widthclass
- panosewidth = metrics.panosewidth,
- panoseweight = metrics.panoseweight,
- italicangle = postscript.italicangle or 0,
- units = fontheader.units or 0,
- designsize = fontdata.designsize,
- minsize = fontdata.minsize,
- maxsize = fontdata.maxsize,
- monospaced = (tonumber(postscript.monospaced or 0) > 0) or metrics.panosewidth == "monospaced",
- }
- return info
- elseif n then
- return {
- filename = fontdata.filename,
- comment = "there is no info for subfont " .. n,
- }
- else
- return {
- filename = fontdata.filename,
- comment = "there is no info",
- }
- end
-end
-
-- we need even less, but we can have a 'detail' variant
function readers.loadshapes(filename,n)
@@ -1719,23 +1843,72 @@ function readers.loadshapes(filename,n)
return fontdata and {
-- version = 0.123 -- todo
filename = filename,
+ format = fontdata.format,
glyphs = fontdata.glyphs,
units = fontdata.fontheader.units,
} or {
filename = filename,
+ format = "unknown",
glyphs = { },
units = 0,
}
end
+function readers.loadfont(filename,n)
+ local fontdata = loadfont {
+ filename = filename,
+ glyphs = true,
+ shapes = false,
+ lookups = true,
+ subfont = n,
+ }
+ if fontdata then
+ --
+ return {
+ tableversion = tableversion,
+ -- cache_uuid = false, -- only when cached
+ -- cache_version = false, -- only when cached
+ size = fontdata.filesize,
+ time = fontdata.filetime,
+ -- warnings = { },
+ glyphs = fontdata.glyphs,
+ descriptions = fontdata.descriptions,
+ format = fontdata.format,
+ goodies = { },
+ -- lookups = { },
+ metadata = getinfo(fontdata,n),
+ properties = {
+ hasitalics = fontdata.hasitalics or false,
+ },
+ resources = {
+ -- anchor_to_lookup = fontdata.anchor_to_lookup or { },
+ creator = "context mkiv",
+ duplicates = { }, -- todo
+ features = fontdata.features,
+ filename = fontdata.filename,
+ -- lookup_to_anchor = fontdata.lookup_to_anchor or { },
+ sublookups = fontdata.sublookups,
+ subtables = fontdata.subtables,
+ -- lookuptags = { }, -- will be metatable using offsets: gsub-1, gpos-1 etc
+ lookuptypes = fontdata.lookuptypes or { },
+ marks = fontdata.marks or { },
+ markclasses = fontdata.markclasses or { },
+ marksets = fontdata.marksets or { },
+ private = privateoffset,
+ sequences = fontdata.sequences,
+ variants = fontdata.variants, -- variant -> unicode -> glyph
+ version = getname(fontdata,"version"),
+ cidinfo = fontdata.cidinfo,
+ },
+ }
+ end
+end
+
function readers.getinfo(filename,n,details)
local fontdata = loadfont {
filename = filename,
details = true,
}
--- if string.find(filename,"ource") then
--- inspect(fontdata)
--- end
if fontdata then
local subfonts = fontdata.subfonts
if not subfonts then
@@ -1762,6 +1935,26 @@ function readers.getinfo(filename,n,details)
end
end
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+
--
if fonts.hashes then
@@ -1792,7 +1985,7 @@ if fonts.hashes then
data = loadshapes(filename,sub)
if data then
data.size = size
- data.format = "opentype"
+ data.format = data.format or (kind == "otf" and "opentype") or "truetype"
data.time = time
packoutlines(data)
containers.write(readers.cache,hash,data)
diff --git a/tex/context/base/font-tmp.lua b/tex/context/base/font-tmp.lua
index 5b4a08740..fab693d44 100644
--- a/tex/context/base/font-tmp.lua
+++ b/tex/context/base/font-tmp.lua
@@ -11,24 +11,23 @@ if not modules then modules = { } end modules ['font-tmp'] = {
local next, type = next, type
-local report = logs.reporter("otf reader")
+local report = logs.reporter("otf reader")
-local files = utilities.files
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
-local readushort = files.readcardinal2 -- 16-bit unsigned integer
-local readulong = files.readcardinal4 -- 24-bit unsigned integer
-local readshort = files.readinteger2 -- 16-bit signed integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local readtag = streamreader.readtag
+local skipshort = streamreader.skipshort
+local setposition = streamreader.setposition
-local readtag = function(f) return f:read(4) end
-local skipshort = function(f,n) f:read(n and 2*n or 2) end
-
-local readers = fonts.handlers.otf.readers
-
-local plugins = { }
+local plugins = { }
function plugins.size(f,fontdata,tableoffset,parameters)
if not fontdata.designsize then
- f:seek("set",tableoffset+parameters)
+ setposition(f,tableoffset+parameters)
local designsize = readushort(f)
if designsize > 0 then
fontdata.designsize = designsize
@@ -45,7 +44,7 @@ local function readscripts(f,fontdata,what)
return
end
local tableoffset = datatable.offset
- f:seek("set",tableoffset)
+ setposition(f,tableoffset)
local version = readulong(f)
if version ~= 0x00010000 then
report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
@@ -56,7 +55,7 @@ local function readscripts(f,fontdata,what)
local featureoffset = tableoffset + readushort(f)
local lookupoffset = tableoffset + readushort(f)
--
- f:seek("set",scriptoffset)
+ setposition(f,scriptoffset)
local nofscripts = readushort(f)
local scripts = { }
for i=1,nofscripts do
@@ -64,7 +63,7 @@ local function readscripts(f,fontdata,what)
end
local languagesystems = table.setmetatableindex("table") -- we share when possible
for script, offset in next, scripts do
- f:seek("set",offset)
+ setposition(f,offset)
local defaultoffset = readushort(f)
local noflanguages = readushort(f)
local languages = { }
@@ -79,7 +78,7 @@ local function readscripts(f,fontdata,what)
scripts[script] = languages
end
--
- f:seek("set",featureoffset)
+ setposition(f,featureoffset)
local features = { }
local noffeatures = readushort(f)
for i=1,noffeatures do
@@ -92,7 +91,7 @@ local function readscripts(f,fontdata,what)
for i=1,noffeatures do
local feature = features[i]
local offset = featureoffset + feature.offset
- f:seek("set",offset)
+ setposition(f,offset)
local parameters = readushort(f) -- feature.parameters
local noflookups = readushort(f)
skipshort(f,noflookups+1)
@@ -117,4 +116,3 @@ function readers.gpos(f,fontdata,specification)
readscripts(f,fontdata,"gpos")
end
end
-
diff --git a/tex/context/base/font-ttf.lua b/tex/context/base/font-ttf.lua
index f89c0b14e..6df339214 100644
--- a/tex/context/base/font-ttf.lua
+++ b/tex/context/base/font-ttf.lua
@@ -10,16 +10,20 @@ local next, type, unpack = next, type, unpack
local bittest = bit32.btest
local sqrt = math.sqrt
-local report = logs.reporter("otf reader","ttf")
+local report = logs.reporter("otf reader","ttf")
-local files = utilities.files
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
-local readbyte = files.readcardinal1 -- 8-bit unsigned integer
-local readushort = files.readcardinal2 -- 16-bit unsigned integer
-local readulong = files.readcardinal4 -- 24-bit unsigned integer
-local readchar = files.readinteger1 -- 8-bit signed integer
-local readshort = files.readinteger2 -- 16-bit signed integer
-local read2dot14 = files.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
+local setposition = streamreader.setposition
+local getposition = streamreader.getposition
+local skipbytes = streamreader.skip
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readchar = streamreader.readinteger1 -- 8-bit signed integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local read2dot14 = streamreader.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
local function mergecomposites(glyphs,shapes)
@@ -226,7 +230,8 @@ local function readglyph(f,nofcontours)
end
local nofpoints = endpoints[nofcontours]
local nofinstructions = readushort(f)
- f:seek("set",f:seek()+nofinstructions)
+-- f:seek("set",f:seek()+nofinstructions)
+ skipbytes(f,nofinstructions)
-- because flags can repeat we don't know the amount ... in fact this is
-- not that efficient (small files but more mem)
local i = 1
@@ -392,7 +397,7 @@ end
-- need it in our usage (yet). We can remove the locations table when
-- we're done (todo: cleanup finalizer).
-function fonts.handlers.otf.readers.loca(f,fontdata,specification)
+function readers.loca(f,fontdata,specification)
if specification.glyphs then
local datatable = fontdata.tables.loca
if datatable then
@@ -400,7 +405,7 @@ function fonts.handlers.otf.readers.loca(f,fontdata,specification)
local offset = fontdata.tables.glyf.offset
local format = fontdata.fontheader.indextolocformat
local locations = { }
- f:seek("set",datatable.offset)
+ setposition(f,datatable.offset)
if format == 1 then
local nofglyphs = datatable.length/4 - 1
-1
@@ -421,7 +426,7 @@ function fonts.handlers.otf.readers.loca(f,fontdata,specification)
end
end
-function fonts.handlers.otf.readers.glyf(f,fontdata,specification) -- part goes to cff module
+function readers.glyf(f,fontdata,specification) -- part goes to cff module
if specification.glyphs then
local datatable = fontdata.tables.glyf
if datatable then
@@ -441,7 +446,7 @@ function fonts.handlers.otf.readers.glyf(f,fontdata,specification) -- part goes
fontdata.badfont = true
break
elseif location > 0 then
- f:seek("set",location)
+ setposition(f,location)
local nofcontours = readshort(f)
glyphs[index].boundingbox = {
readshort(f), -- xmin
diff --git a/tex/context/base/font-vf.lua b/tex/context/base/font-vf.lua
index 1fe6dd71c..bca2cf99a 100644
--- a/tex/context/base/font-vf.lua
+++ b/tex/context/base/font-vf.lua
@@ -24,36 +24,36 @@ local fonts = fonts
local constructors = fonts.constructors
local vf = constructors.newhandler("vf")
--- general code
-
-function vf.find(name)
- name = file.removesuffix(file.basename(name))
- if constructors.resolvevirtualtoo then
- local format = fonts.loggers.format(name)
- if format == 'tfm' or format == 'ofm' then
- if trace_defining then
- report_defining("locating vf for %a",name)
- end
- return findbinfile(name,"ovf")
- else
- if trace_defining then
- report_defining("vf for %a is already taken care of",name)
- end
- return nil -- ""
- end
- else
- if trace_defining then
- report_defining("locating vf for %a",name)
- end
- return findbinfile(name,"ovf")
- end
-end
-
--[[ldx--
<p>We overload the <l n='vf'/> reader.</p>
--ldx]]--
-callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more
+-- general code / already frozen
+--
+-- function vf.find(name)
+-- name = file.removesuffix(file.basename(name))
+-- if constructors.resolvevirtualtoo then
+-- local format = fonts.loggers.format(name)
+-- if format == 'tfm' or format == 'ofm' then
+-- if trace_defining then
+-- report_defining("locating vf for %a",name)
+-- end
+-- return findbinfile(name,"ovf")
+-- else
+-- if trace_defining then
+-- report_defining("vf for %a is already taken care of",name)
+-- end
+-- return nil -- ""
+-- end
+-- else
+-- if trace_defining then
+-- report_defining("locating vf for %a",name)
+-- end
+-- return findbinfile(name,"ovf")
+-- end
+-- end
+--
+-- callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more
-- specific code (will move to other module)
diff --git a/tex/context/base/lpdf-tag.lua b/tex/context/base/lpdf-tag.lua
index 79ccfe075..828bfed25 100644
--- a/tex/context/base/lpdf-tag.lua
+++ b/tex/context/base/lpdf-tag.lua
@@ -87,6 +87,7 @@ local specifications = structurestags.specifications
local usedlabels = structurestags.labels
local properties = structurestags.properties
local lasttaginchain = structurestags.lastinchain
+local usewithcare = structurestags.usewithcare
local usedmapping = { }
@@ -273,16 +274,19 @@ end
local f_BDC = formatters["/%s <</MCID %s>> BDC"]
-local function makecontent(parent,id)
+local function makecontent(parent,id,specification)
local tag = parent.tag
local kids = parent.kids
local last = index
if id == "image" then
+ local list = specification.taglist
+ local data = usewithcare.images[list[#list]]
+ local label = data and data.label
local d = pdfdictionary {
Type = pdf_mcr,
Pg = pageref,
MCID = last,
- Alt = "image",
+ Alt = pdfunicode(label ~= "" and label or "image"),
}
kids[#kids+1] = d
elseif pagenum == parent.pnum then
@@ -303,6 +307,10 @@ local function makecontent(parent,id)
return f_BDC(tag,last)
end
+local function makeignore(specification)
+ return "/Artifact BMC"
+end
+
-- no need to adapt head, as we always operate on lists
function nodeinjections.addtags(head)
@@ -388,14 +396,17 @@ function nodeinjections.addtags(head)
end
end
- local prev = common > 0 and elements[taglist[common]] or root
+ local prev = common > 0 and elements[taglist[common]] or root
+ local ignore = false
+ local literal = nil
for j=common+1,noftags do
local tag = taglist[j]
local prv = elements[tag] or makeelement(tag,prev)
if prv == false then
-- ignore this one
- prev = false
+ prev = false
+ ignore = true
break
elseif prv == true then
-- skip this one
@@ -405,9 +416,12 @@ function nodeinjections.addtags(head)
end
if prev then
- -- use insert instead:
- local literal = pdfliteral(makecontent(prev,id))
- local prev = getprev(start)
+ literal = pdfliteral(makecontent(prev,id,specification))
+ elseif ignore then
+ literal = pdfliteral(makeignore(specification))
+ end
+ if literal then
+ local prev = getprev(start)
if prev then
setfield(prev,"next",literal)
setfield(literal,"prev",prev)
diff --git a/tex/context/base/luat-cbk.lua b/tex/context/base/luat-cbk.lua
index 8c224ad2c..65319c333 100644
--- a/tex/context/base/luat-cbk.lua
+++ b/tex/context/base/luat-cbk.lua
@@ -6,15 +6,11 @@ if not modules then modules = { } end modules ['luat-cbk'] = {
license = "see context related readme files"
}
-local insert, remove, find, format = table.insert, table.remove, string.find, string.format
+local insert, remove, concat = table.insert, table.remove, table.concat
+local find, format = string.find, string.format
local collectgarbage, type, next = collectgarbage, type, next
local round = math.round
-local sortedhash, tohash = table.sortedhash, table.tohash
-
-local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end)
-
-local report_callbacks = logs.reporter("system","callbacks")
-local report_memory = logs.reporter("system","memory")
+local sortedhash, sortedkeys, tohash = table.sortedhash, table.sortedkeys, table.tohash
--[[ldx--
<p>Callbacks are the real asset of <l n='luatex'/>. They permit you to hook
@@ -28,23 +24,61 @@ local callbacks = callbacks
--[[ldx--
<p>When you (temporarily) want to install a callback function, and after a
while wants to revert to the original one, you can use the following two
-functions.</p>
+functions. This only works for non-frozen ones.</p>
--ldx]]--
-local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end)
-local trace_calls = false -- only used when analyzing performance and initializations
+local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end)
+local trace_calls = false -- only used when analyzing performance and initializations
+local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end)
+
+local report_system = logs.reporter("system")
+local report_callbacks = logs.reporter("system","callbacks")
+local report_memory = logs.reporter("system","memory")
local register_callback = callback.register
local find_callback = callback.find
local list_callbacks = callback.list
+local register_usercall = false
+local original_register = register_callback
-local frozen, stack, list = { }, { }, callbacks.list
+local frozen = { }
+local stack = { }
+local list = callbacks.list
+local permit_overloads = false
+local block_overloads = false
+
+--[[ldx--
+<p>By now most callbacks are frozen and most provide a way to plug in your own code. For instance
+all node list handlers provide before/after namespaces and the file handling code can be extended
+by adding schemes and if needed I can add more hooks. So there is no real need to overload a core
+callback function. It might be ok for quick and dirty testing but anyway you're on your own if
+you permanently overload callback functions.</p>
+--ldx]]--
+
+-- This might become a configuration file only option when it gets abused too much.
+
+directives.register("system.callbacks.permitoverloads", function(v)
+ if block_overloads or permit_overloads then
+ -- once bad news, always bad news
+ elseif v then
+ permit_overloads = { }
+ report_system()
+ report_system("The callback system has been brought in an unprotected state. As a result of directly")
+ report_system("setting of callbacks subsystems of ConTeXt can stop working. There is no support for")
+ report_system("bugs resulting from this state. It's better to use the official extension mechanisms.")
+ report_system()
+ end
+end)
+
+sandbox.initializer(function()
+ block_overloads = true
+end)
if not list then -- otherwise counters get reset
list = utilities.storage.allocate(list_callbacks())
- for k, _ in next, list do
+ for k in next, list do
list[k] = 0
end
@@ -56,11 +90,9 @@ local delayed = tohash {
"buildpage_filter",
}
-
if trace_calls then
local functions = { }
- local original = register_callback
register_callback = function(name,func)
if type(func) == "function" then
@@ -73,21 +105,45 @@ if trace_calls then
list[name] = list[name] + 1
return functions[name](...)
end
- return original(name,cnuf)
+ return original_register(name,cnuf)
end
else
- return original(name,func)
+ return original_register(name,func)
end
end
end
+local reported = { }
+
+local function register_usercall(what,name,func)
+ if list[name] then
+ if trace_callbacks or not reported[name] then
+ report_system()
+ report_system("disabling core code by %s user function into callback '%s' (reported only once)",what,name)
+ report_system()
+ reported[name] = true
+ end
+ permit_overloads[name] = true
+ return original_register(name,function(...)
+ if trace_callbacks then
+ report_callbacks("calling user function from '%s'",name)
+ end
+ return func(...)
+ end)
+ else
+ report_callbacks("not %s function into invalid callback '%s'",name)
+ return nil, format("unknown callback '%s'",name)
+ end
+end
+
local function frozen_message(what,name)
- report_callbacks("not %s frozen %a to %a",what,name,frozen[name])
+ report_callbacks("not %s frozen %a",what,name)
end
local function frozen_callback(name)
- return nil, format("callback '%s' is frozen to '%s'",name,frozen[name]) -- no formatter yet
+ frozen_message("registering",name)
+ return nil, format("callback '%s' is frozen",name) -- no formatter yet
end
local function state(name)
@@ -117,25 +173,28 @@ function callbacks.report()
end
function callbacks.freeze(name,freeze)
- freeze = type(freeze) == "string" and freeze
- if find(name,"*",1,true) then
- local pattern = name
- for name, _ in next, list do
- if find(name,pattern) then
- frozen[name] = freeze or frozen[name] or "frozen"
+ if not permit_overloads then
+ freeze = type(freeze) == "string" and freeze
+ if find(name,"*",1,true) then
+ local pattern = name
+ for name, _ in next, list do
+ if find(name,pattern) then
+ frozen[name] = freeze or frozen[name] or "frozen"
+ end
end
+ else
+ frozen[name] = freeze or frozen[name] or "frozen"
end
- else
- frozen[name] = freeze or frozen[name] or "frozen"
end
end
function callbacks.register(name,func,freeze)
if frozen[name] then
- if trace_callbacks then
- frozen_message("registering",name)
+ if permit_overloads then
+ return register_usercall("registering",name,func)
+ else
+ return frozen_callback(name)
end
- return frozen_callback(name)
elseif freeze then
frozen[name] = type(freeze) == "string" and freeze or "registered"
end
@@ -148,36 +207,41 @@ end
function callback.register(name,func) -- original
if not frozen[name] then
return register_callback(name,func)
- elseif trace_callbacks then
- frozen_message("registering",name)
+ elseif permit_overloads then
+ return register_usercall("registering",name,func)
+ else
+ return frozen_callback(name)
end
- return frozen_callback(name)
end
function callbacks.push(name,func)
- if not frozen[name] then
+ if not frozen[name] or permit_overloads then
local sn = stack[name]
if not sn then
sn = { }
stack[name] = sn
end
insert(sn,find_callback(name))
- register_callback(name, func)
- elseif trace_callbacks then
+ if permit_overloads then
+ register_usercall("pushing",name,func)
+ else
+ register_callback(name,func)
+ end
+ else
frozen_message("pushing",name)
end
end
function callbacks.pop(name)
- if not frozen[name] then
+ if not frozen[name] or permit_overloads then
local sn = stack[name]
if not sn or #sn == 0 then
-- some error
- register_callback(name, nil) -- ! really needed
+ register_callback(name,nil) -- ! really needed
else
-- this fails: register_callback(name, remove(stack[name]))
local func = remove(sn)
- register_callback(name, func)
+ register_callback(name,func)
end
end
end
@@ -194,6 +258,12 @@ if trace_calls then
end)
end
+statistics.register("callbacks overloaded by user", function()
+ if permit_overloads then
+ return concat(sortedkeys(permit_overloads)," ")
+ end
+end)
+
-- -- somehow crashes later on
--
-- callbacks.freeze("find_.*_file","finding file")
diff --git a/tex/context/base/luat-fio.lua b/tex/context/base/luat-fio.lua
index dcc183167..daa6cccb7 100644
--- a/tex/context/base/luat-fio.lua
+++ b/tex/context/base/luat-fio.lua
@@ -66,11 +66,11 @@ if not resolvers.instance then
register('read_sfd_file' , function(file) return loadbinfile(file,"sfd") end, true)
register('read_vf_file' , function(file) return loadbinfile(file,"vf" ) end, true)
- register('find_font_file' , function(name) return findbinfile(name,"ofm") end, true)
- register('find_vf_file' , function(name) return findbinfile(name,"ovf") end, true)
+ -- register('find_font_file' , function(name) return findbinfile(name,"ofm") end, true)
+ -- register('find_vf_file' , function(name) return findbinfile(name,"ovf") end, true)
- register('read_font_file' , function(file) return loadbinfile(file,"ofm") end, true)
- register('read_vf_file' , function(file) return loadbinfile(file,"ovf") end, true)
+ -- register('read_font_file' , function(file) return loadbinfile(file,"ofm") end, true)
+ -- register('read_vf_file' , function(file) return loadbinfile(file,"ovf") end, true)
-- register('read_opentype_file' , function(file) return loadbinfile(file,"otf") end, true)
-- register('read_truetype_file' , function(file) return loadbinfile(file,"ttf") end, true)
diff --git a/tex/context/base/luat-lib.mkiv b/tex/context/base/luat-lib.mkiv
index 62a53c5dc..cbe15c8a1 100644
--- a/tex/context/base/luat-lib.mkiv
+++ b/tex/context/base/luat-lib.mkiv
@@ -16,6 +16,7 @@
\registerctxluafile{util-str}{1.001}
\registerctxluafile{util-tab}{1.001}
\registerctxluafile{util-fil}{1.001}
+\registerctxluafile{util-sac}{1.001}
\registerctxluafile{util-sto}{1.001} % could also be done in trac-deb.mkiv
\registerctxluafile{util-pck}{1.001}
\registerctxluafile{util-seq}{1.001}
diff --git a/tex/context/base/lxml-ini.mkiv b/tex/context/base/lxml-ini.mkiv
index fab644fdb..4a6d530db 100644
--- a/tex/context/base/lxml-ini.mkiv
+++ b/tex/context/base/lxml-ini.mkiv
@@ -496,7 +496,25 @@
\unexpanded\def\xmlresetinjectors
{\clf_xmlresetinjectors{}}
-\def\xmlinjector#1{\executeifdefined{#1}\donothing}
+% \def\xmlinjector#1{\executeifdefined{#1}\donothing}
+
+\def\xmlinjector#1{\fastsetup{xml:directive:injector:#1}}
+
+\startsetups xml:directive:injector:page
+ \page
+\stopsetups
+
+\startsetups xml:directive:injector:column
+ \column
+\stopsetups
+
+\startsetups xml:directive:injector:blank
+ \blank
+\stopsetups
+
+\startsetups xml:directive:injector:noline
+ \vskip-\lineheight
+\stopsetups
\let\xmlapplyselectors\clf_xmlapplyselectors
diff --git a/tex/context/base/lxml-tex.lua b/tex/context/base/lxml-tex.lua
index 4c995acdb..5b4b16184 100644
--- a/tex/context/base/lxml-tex.lua
+++ b/tex/context/base/lxml-tex.lua
@@ -1948,13 +1948,15 @@ function lxml.applyselectors(id)
end
end
end
- if not trace_selectors then
- -- skip
- elseif okay then
- report_lxml("accepting selector: %s",okay)
+ if okay then
+ if trace_selectors then
+ report_lxml("accepting selector: %s",okay)
+ end
else
categories.begin = false
- report_lxml("rejecting selector: % t",sortedkeys(categories))
+ if trace_selectors then
+ report_lxml("rejecting selector: % t",sortedkeys(categories))
+ end
end
for j=i,ndt do
local dtj = dt[j]
@@ -1992,13 +1994,15 @@ function lxml.applyselectors(id)
end
end
end
- if not trace_selectors then
- -- skip
- elseif okay then
- report_lxml("accepting include: %s",okay)
+ if okay then
+ if trace_selectors then
+ report_lxml("accepting include: %s",okay)
+ end
else
categories.begin = false
- report_lxml("rejecting include: % t",sortedkeys(categories))
+ if trace_selectors then
+ report_lxml("rejecting include: % t",sortedkeys(categories))
+ end
end
if okay then
for j=i,ndt do
diff --git a/tex/context/base/meta-imp-outlines.mkiv b/tex/context/base/meta-imp-outlines.mkiv
index d47ec7754..ceecb9bbe 100644
--- a/tex/context/base/meta-imp-outlines.mkiv
+++ b/tex/context/base/meta-imp-outlines.mkiv
@@ -59,7 +59,7 @@ function metapost.showglyph(specification)
return
end
local glyph = shapeglyphs[index]
- if glyph and glyph.segments or glyph.sequence then
+ if glyph and (glyph.segments or glyph.sequence) then
local units = data.fontheader and data.fontheader.emsize or 1000
local factor = 100/units
local paths = metapost.paths(glyph,factor)
@@ -108,7 +108,27 @@ function metapost.showglyph(specification)
shape(index,index,f_index)
return
end
- for index=1,#shapeglyphs do
+ local first, last
+ if type(index) == "string" then
+ first, last = string.match(index,"^(.-):(.*)$")
+ if first and last then
+ first = tonumber(first)
+ last = tonumber(last)
+ else
+ first = tonumber(index)
+ last = first
+ end
+ if not first then
+ first = 1
+ last = #shapeglyphs
+ elseif not last then
+ last = first
+ end
+ else
+ first = 1
+ last = #shapeglyphs
+ end
+ for index=first,last do
shape(index,index,f_index)
end
end
@@ -138,7 +158,6 @@ end
\starttext
\setupbodyfont[pagella]
-
\showshape[character=all,alternative=page]
% \setupbodyfont[dejavu]
@@ -147,4 +166,7 @@ end
% \definedfont[almfixed]
% \showshape[character=all,alternative=page]
+% \definedfont[file:sourcehansans-bold.otf]
+% \showshape[index=40000:41000,alternative=page]
+
\stoptext
diff --git a/tex/context/base/node-fnt.lua b/tex/context/base/node-fnt.lua
index 2edaa04ea..336164c48 100644
--- a/tex/context/base/node-fnt.lua
+++ b/tex/context/base/node-fnt.lua
@@ -351,22 +351,21 @@ function handlers.characters(head)
-- skip
elseif b == 1 then
-- only one font
- local front = head == start
local range = basefonts[1]
local start = range[1]
local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then -- safeguard
- start = ligaturing(start)
- start = kerning(start)
- else
- -- something bad happened
- end
- if front then
- -- shouldn't happen
- head = start
+ if (start or stop) and (start ~= stop) then
+ local front = head == start
+ if stop then
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ elseif start then -- safeguard
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if front then
+ head = start
+ end
end
else
-- multiple fonts
@@ -375,19 +374,34 @@ function handlers.characters(head)
local range = basefonts[i]
local start = range[1]
local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then -- safeguard
- start = ligaturing(start)
- start = kerning(start)
- else
- -- something bad happened
+ if (start or stop) and (start ~= stop) then
+ local prev, next
+ if stop then
+ next = getnext(stop)
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ elseif start then -- safeguard
+ prev = getprev(start)
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if prev then
+ setfield(start,"prev",prev)
+ setfield(prev,"next",start)
+ end
+ if next then
+ setfield(stop,"next",next)
+ setfield(next,"prev",start)
+ end
+ if front then
+ head = start
+ front = nil -- we assume a proper sequence
+ end
+ end
+ if front then
+ -- shouldn't happen
+ head = start
end
- end
- if front then
- -- shouldn't happen
- head = start
end
end
stoptiming(nodes)
diff --git a/tex/context/base/s-fonts-shapes.lua b/tex/context/base/s-fonts-shapes.lua
index bca860f3f..8f872e4bc 100644
--- a/tex/context/base/s-fonts-shapes.lua
+++ b/tex/context/base/s-fonts-shapes.lua
@@ -303,7 +303,10 @@ function moduledata.fonts.shapes.showallglypshapes(specification)
local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
local descriptions = fontdata[id].descriptions
for unicode, description in fonts.iterators.descriptions(tfmdata) do
- context.modulefontsstartshowglyphshape(unicode,description.name)
+ if unicode >= 0x110000 then
+ break
+ end
+ context.modulefontsstartshowglyphshape(unicode,description.name or "",description.index or 0)
showglyphshape { number = id, character = unicode }
context.modulefontsstopshowglyphshape()
end
diff --git a/tex/context/base/s-fonts-shapes.mkiv b/tex/context/base/s-fonts-shapes.mkiv
index f8eb8ffdd..c1e9d61d2 100644
--- a/tex/context/base/s-fonts-shapes.mkiv
+++ b/tex/context/base/s-fonts-shapes.mkiv
@@ -20,21 +20,22 @@
\installmodulecommandluatwo \showlastglyphshapefield {moduledata.fonts.shapes.showlastglyphshapefield}
\installmodulecommandluasingle \showallglyphshapes {moduledata.fonts.shapes.showallglypshapes}
-\let\modulefontsstartshowglyphshape\relax
+\let\modulefontsstartshowglyphshape\gobblethreearguments
\let\modulefontsstopshowglyphshape \relax
\unprotect
\startsetups module:showallglyphshapes:start
- \def\modulefontsstartshowglyphshape##1##2{
+ \unexpanded\def\modulefontsstartshowglyphshape##1##2##3{
\startTEXpage[\c!offset=\exheight]
\edef\lastshownglyphshapefieldunicode{##1}%
\edef\lastshownglyphshapefieldname {##2}%
+ \edef\lastshownglyphshapefieldindex {##3}%
\raggedcenter
}
- \def\modulefontsstopshowglyphshape {
+ \unexpanded\def\modulefontsstopshowglyphshape {
\par
\doifsomething {\lastshownglyphshapefieldunicode} {
\begingroup
@@ -43,8 +44,10 @@
\setstrut
\strut
0x\uchexnumbers\lastshownglyphshapefieldunicode
- :\space
+ \space:\space
\lastshownglyphshapefieldname
+ \space:\space
+ \lastshownglyphshapefieldindex
\par
\endgroup
}
@@ -80,38 +83,33 @@
\starttext
- \savedefinedfont[Bold*default]
+% \savedefinedfont[Bold*default]
+% \showfontshapes[number=\saveddefinedfontid]
+% \page
- \showfontshapes[number=\saveddefinedfontid]
-
- \page
-
- \showfontshapes[name=BoldItalic*default]
-
- \page
+% \showfontshapes[name=BoldItalic*default]
+% \page
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x62A} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x2004} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
-
- \page
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
+% \page
% \showallglyphshapes[name=name:cambria-math,size=100bp]
- % \showallglyphshapes[name=name:dejavuserif,size=100bp]
-
-\stoptext
+% \showallglyphshapes[name=name:dejavuserif,size=100bp]
+\showallglyphshapes[name=file:brill.otf,size=100bp]
\stoptext
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 284cbe4ee..6c0039c43 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index b6f735205..4aea7255e 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-num.mkiv b/tex/context/base/strc-num.mkiv
index 58095b8e7..bad4be514 100644
--- a/tex/context/base/strc-num.mkiv
+++ b/tex/context/base/strc-num.mkiv
@@ -247,7 +247,7 @@
\def\strc_counters_setown_two [#1][#2][#3]{\clf_setownsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax{#3}}
\def\strc_counters_restart_two [#1][#2][#3]{\clf_restartsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax\numexpr#3\relax}
\def\strc_counters_reset_two [#1][#2]{\clf_resetsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
-\def\strc_counters_increment_two [#1][#2]{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+%def\strc_counters_increment_two [#1][#2]{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_decrement_two [#1][#2]{\clf_decrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_raw_two [#1][#2]{\clf_subcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
@@ -261,7 +261,7 @@
\def\strc_counters_setown_one [#1][#2][#3]{\clf_setowncounter {\namedcounterparameter{#1}\s!name}{#2}}
\def\strc_counters_restart_one [#1][#2][#3]{\clf_restartcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_reset_one [#1][#2]{\clf_resetcounter {\namedcounterparameter{#1}\s!name}}
-\def\strc_counters_increment_one [#1][#2]{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
+%def\strc_counters_increment_one [#1][#2]{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_decrement_one [#1][#2]{\clf_decrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_raw_one [#1][#2]{\clf_countervalue {\namedcounterparameter{#1}\s!name}}
@@ -278,7 +278,7 @@
\unexpanded\def\strc_counters_setown #1#2{\clf_setowncounter {\namedcounterparameter{#1}\s!name}{#2}}
\unexpanded\def\strc_counters_restart #1#2{\clf_restartcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\unexpanded\def\strc_counters_reset #1{\clf_resetcounter {\namedcounterparameter{#1}\s!name}}
-\unexpanded\def\strc_counters_increment #1{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
+%unexpanded\def\strc_counters_increment #1{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
\unexpanded\def\strc_counters_decrement #1{\clf_decrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_raw #1{\clf_countervalue {\namedcounterparameter{#1}\s!name}}
@@ -292,7 +292,7 @@
\unexpanded\def\strc_counters_setown_sub #1#2#3{\clf_setownsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax{#3}}
\unexpanded\def\strc_counters_restart_sub #1#2#3{\clf_restartsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax\numexpr#3\relax}
\unexpanded\def\strc_counters_reset_sub #1#2{\clf_resetsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
-\unexpanded\def\strc_counters_increment_sub #1#2{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+%unexpanded\def\strc_counters_increment_sub #1#2{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\unexpanded\def\strc_counters_decrement_sub #1#2{\clf_decrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_raw_sub #1#2{\clf_subcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#2\relax} % maybe raw
@@ -342,6 +342,14 @@
\fi
\clf_incrementsubcounter{\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+% We also need to redefine these because of the page check:
+
+ \def\strc_counters_increment_two [#1][#2]{\strc_counters_increment_sub{#1}{#2}}
+ \def\strc_counters_increment_one [#1][#2]{\strc_counters_increment_sub{#1}\plusone}
+\unexpanded\def\strc_counters_increment #1{\strc_counters_increment_sub{#1}\plusone}
+
+% so far for the hack
+
\unexpanded\def\convertedcounter
{\dodoubleempty\strc_counters_converted}
diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua
index 2a1d0dd59..6c500e14d 100644
--- a/tex/context/base/strc-ref.lua
+++ b/tex/context/base/strc-ref.lua
@@ -2078,9 +2078,9 @@ local function getcurrentprefixspec(default)
local data = currentreference and currentreference.i
local metadata = data and data.metadata
return
- metatadata and metadata.kind or "?",
- metatadata and metadata.name or "?",
- default or "?"
+ metadata and metadata.kind or "?",
+ metadata and metadata.name or "?",
+ default or "?"
end
references.getcurrentprefixspec = getcurrentprefixspec
diff --git a/tex/context/base/strc-tag.mkiv b/tex/context/base/strc-tag.mkiv
index f2b59c29c..bb1fe200d 100644
--- a/tex/context/base/strc-tag.mkiv
+++ b/tex/context/base/strc-tag.mkiv
@@ -262,6 +262,11 @@
\let\strc_tags_start_nop_chained \gobblethreearguments
\let\strc_tags_stop_nop \donothing
+\def\strc_tags_start_yes_ignore{\clf_starttag{\t!ignore}}
+\let\strc_tags_stop_yes_ignore \strc_tags_stop_yes
+\let\strc_tags_start_nop_ignore\donothing
+\let\strc_tags_stop_nop_ignore \donothing
+
% more efficient:
% \dostarttagged % {tag} {detail}
@@ -276,13 +281,17 @@
{\let\dostarttagged \strc_tags_enabled_start_detail
\let\dostarttaggednodetail\strc_tags_enabled_start_no_detail
\let\dostarttaggedchained \strc_tags_enabled_start_chained
- \let\dostoptagged \strc_tags_enabled_stop}
+ \let\dostoptagged \strc_tags_enabled_stop
+ \let\dostartignoretagging \strc_tags_start_yes_ignore
+ \let\dostopignoretagging \strc_tags_stop_yes_ignore}
\unexpanded\def\strc_tags_disable
{\let\dostarttagged \strc_tags_start_nop_detail
\let\dostarttaggednodetail\strc_tags_start_nop_no_detail
\let\dostarttaggedchained \strc_tags_start_nop_chained
- \let\dostoptagged \strc_tags_stop_nop}
+ \let\dostoptagged \strc_tags_stop_nop
+ \let\dostartignoretagging \strc_tags_start_nop_ignore
+ \let\dostopignoretagging \strc_tags_stop_nop_ignore}
% for luigi (beware: fully expandable):
@@ -434,6 +443,16 @@
\strc_tags_disable
\to \everybeforepagebody
+%D This will only work well with sane use.
+
+\appendtoks
+ \dostartignoretagging
+\to \everybeforepagebody
+
+\appendtoks
+ \dostopignoretagging
+\to \everyafterpagebody
+
% \doifelseinelement{structure:section} {yes} {no}
% \doifelseinelement{structure:chapter} {yes} {no}
% \doifelseinelement{division:*-structure:chapter} {yes} {no}
diff --git a/tex/context/base/type-imp-mscore.mkiv b/tex/context/base/type-imp-mscore.mkiv
index 19276c017..971a03de7 100644
--- a/tex/context/base/type-imp-mscore.mkiv
+++ b/tex/context/base/type-imp-mscore.mkiv
@@ -31,6 +31,14 @@
\definefontsynonym [\s!SansBoldItalic] [\s!file:arialbi.ttf] [\s!features=\s!default]
\stoptypescript
+ \starttypescript [\s!sans] [mscorearialnarrow] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:arialn.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:arialnb.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:arialni.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:arialnbi.ttf] [\s!features=\s!default]
+ \stoptypescript
+
\starttypescript [\s!mono] [mscorecourier] [\s!name]
\setups[\s!font:\s!fallback:\s!mono]
\definefontsynonym [\s!Mono] [\s!file:cour.ttf] [\s!features=\s!none]
@@ -54,6 +62,13 @@
\definetypeface [mscore] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.020]
\stoptypescript
+ \starttypescript[mscorenarrow]
+ \definetypeface [mscorenarrow] [\s!rm] [\s!serif] [mscoretimes] [\s!default]
+ \definetypeface [mscorenarrow] [\s!ss] [\s!sans] [mscorearialnarrow] [\s!default] [\s!rscale=0.860]
+ \definetypeface [mscorenarrow] [\s!tt] [\s!mono] [mscorecourier] [\s!default] [\s!rscale=1.065]
+ \definetypeface [mscorenarrow] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.020]
+ \stoptypescript
+
% \starttypescript[mscoress]
% \definetypeface [mscoress] [\s!ss] [\s!sans] [mscorearial] [\s!default]
% \definetypeface [mscoress] [\s!rm] [\s!serif] [mscoretimes] [\s!default] [rscale=1.160]
diff --git a/tex/context/base/util-fil.lua b/tex/context/base/util-fil.lua
index fe6a117fa..3e8c8ea23 100644
--- a/tex/context/base/util-fil.lua
+++ b/tex/context/base/util-fil.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['util-fil'] = {
license = "see context related readme files"
}
-local byte = string.byte
+local byte = string.byte
local extract = bit32.extract
-- Here are a few helpers (the starting point were old ones I used for parsing
@@ -17,20 +17,72 @@ utilities = utilities or { }
local files = { }
utilities.files = files
-function files.readbyte(f)
- return byte(f:read(1))
+local zerobased = { }
+
+function files.open(filename,zb)
+ local f = io.open(filename,"rb")
+ zerobased[f] = zb or false
+ return f
end
-function files.readchar(f)
- return f:read(1)
+function files.close(f)
+ zerobased[f] = nil
+ f:close()
+end
+
+function files.size(f)
+ return f:seek("end")
+end
+
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n - 1)
+ end
+end
+
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek() + 1
+ end
+end
+
+function files.look(f,n,chars)
+ local p = f:seek()
+ local s = f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+
+function files.skip(f,n)
+ if n == 1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+
+function files.readbyte(f)
+ return byte(f:read(1))
end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
-function files.skipbytes(f,n)
- f:read(n or 1) -- or a seek
+function files.readchar(f)
+ return f:read(1)
+end
+
+function files.readstring(f,n)
+ return f:read(n or 1)
end
function files.readinteger1(f) -- one byte
@@ -91,10 +143,6 @@ function files.readfixed4(f)
end
end
-function files.readstring(f,n)
- return f:read(n or 1)
-end
-
function files.read2dot14(f)
local a, b = byte(f:read(2),1,2)
local n = 0x100 * a + b
@@ -107,3 +155,11 @@ function files.read2dot14(f)
return n + m/0x4000
end
end
+
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
diff --git a/tex/context/base/util-sac.lua b/tex/context/base/util-sac.lua
new file mode 100644
index 000000000..8a12e7cf0
--- /dev/null
+++ b/tex/context/base/util-sac.lua
@@ -0,0 +1,202 @@
+if not modules then modules = { } end modules ['util-sac'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- experimental string access (some 3 times faster than file access when messing
+-- with bytes)
+
+local byte, sub = string.byte, string.sub
+local extract = bit32.extract
+
+utilities = utilities or { }
+local streams = { }
+utilities.streams = streams
+
+function streams.open(filename,zerobased)
+ local f = io.loaddata(filename)
+ return { f, 1, #f, zerobased or false }
+end
+
+function streams.close()
+ -- dummy
+end
+
+function streams.size(f)
+ return f and f[3] or 0
+end
+
+function streams.setposition(f,i)
+ if f[4] then
+ -- zerobased
+ if i <= 0 then
+ f[2] = 1
+ else
+ f[2] = i + 1
+ end
+ else
+ if i <= 1 then
+ f[2] = 1
+ else
+ f[2] = i
+ end
+ end
+end
+
+function streams.getposition(f)
+ if f[4] then
+ -- zerobased
+ return f[2] - 1
+ else
+ return f[2]
+ end
+end
+
+function streams.look(f,n,chars)
+ local b = f[2]
+ local e = b + n - 1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+
+function streams.skip(f,n)
+ f[2] = f[2] + n
+end
+
+function streams.readbyte(f)
+ local i = f[2]
+ f[2] = i + 1
+ return byte(f[1],i)
+end
+
+function streams.readbytes(f,n)
+ local i = f[2]
+ local j = i + n
+ f[2] = j
+ return byte(f[1],i,j-1)
+end
+
+function streams.skipbytes(f,n)
+ f[2] = f[2] + n
+end
+
+function streams.readchar(f)
+ local i = f[2]
+ f[2] = i + 1
+ return sub(f[1],i,i)
+end
+
+function streams.readstring(f,n)
+ local i = f[2]
+ local j = i + n
+ f[2] = j
+ return sub(f[1],i,j-1)
+end
+
+function streams.readinteger1(f) -- one byte
+ local i = f[2]
+ f[2] = i + 1
+ local n = byte(f[1],i)
+ if n >= 0x80 then
+ return n - 0xFF - 1
+ else
+ return n
+ end
+end
+
+streams.readcardinal1 = streams.readbyte -- one byte
+streams.readcardinal = streams.readcardinal1
+streams.readinteger = streams.readinteger1
+
+function streams.readcardinal2(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ return 0x100 * a + b
+end
+
+function streams.readinteger2(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1
+ else
+ return n
+ end
+end
+
+function streams.readcardinal3(f)
+ local i = f[2]
+ local j = i + 2
+ f[2] = j + 1
+ local a, b, c = byte(f[1],i,j)
+ return 0x10000 * a + 0x100 * b + c
+end
+
+function streams.readcardinal4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+end
+
+function streams.readinteger4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ local n = 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+ if n >= 0x8000000 then
+ return n - 0xFFFFFFFF - 1
+ else
+ return n
+ end
+end
+
+function streams.readfixed4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1 + (0x100 * c + d)/0xFFFF
+ else
+ return n + (0x100 * c + d)/0xFFFF
+ end
+end
+
+function streams.read2dot14(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ local m = extract(n,0,30)
+ if n > 0x7FFF then
+ n = extract(n,30,2)
+ return m/0x4000 - 4
+ else
+ n = extract(n,30,2)
+ return n + m/0x4000
+ end
+end
+
+function streams.skipshort(f,n)
+ f[2] = f[2] + 2*(n or 1)
+end
+
+function streams.skiplong(f,n)
+ f[2] = f[2] + 4*(n or 1)
+end
diff --git a/tex/context/base/x-asciimath.lua b/tex/context/base/x-asciimath.lua
index 451cd5925..7835d8f93 100644
--- a/tex/context/base/x-asciimath.lua
+++ b/tex/context/base/x-asciimath.lua
@@ -117,6 +117,7 @@ local reserved = {
["sqrt"] = { false, "\\asciimathsqrt", "unary" },
["root"] = { false, "\\asciimathroot", "binary" },
+-- ["\\frac"] = { false, "\\frac", "binary" },
["frac"] = { false, "\\frac", "binary" },
["stackrel"] = { false, "\\asciimathstackrel", "binary" },
["hat"] = { false, "\\widehat", "unary" },
@@ -699,7 +700,7 @@ local reserved = {
-- a bit special:
- ["\\frac"] = { true, "frac" },
+-- ["\\frac"] = { true, "frac" },
-- now it gets real crazy, only these two:
@@ -851,7 +852,10 @@ local digitsymbol = "."
function asciimath.setup(settings)
splitmethod = splitmethods[tonumber(settings.splitmethod) or 0]
if splitmethod then
- digitsymbol = settings.symbol or "."
+ digitsymbol = settings.symbol
+ if not digitsymbol or digitsymbol == "" then
+ digitsymbol = "."
+ end
local separator = settings.separator
if separator == true or not interfaces or interfaces.variables.yes then
digitseparator = utfchar(0x2008)
@@ -889,6 +893,7 @@ end
-- asciimath.setup { splitmethod = 3, symbol = "," }
-- local t = {
+-- "0.00002",
-- "1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789",
-- "1.1",
-- "12.12",
@@ -1105,6 +1110,7 @@ local p_special =
local u_parser = Cs ( (
patterns.doublequoted +
P("text") * p_spaces^0 * P("(") * (1-P(")"))^0 * P(")") + -- -- todo: balanced
+ P("\\frac") / "frac" + -- bah
p_unicode +
p_utf_base
)^0 )
@@ -1883,7 +1889,9 @@ if not context then
-- convert("sqrt")
-- convert("^")
--- convert("\\frac{a}{b}")
+-- convert[[\frac{a}{b}]]
+-- convert[[frac{a}{b}]]
+
-- convert("frac{a}{b}")
-- convert("\\sin{a}{b}")
-- convert("sin{a}{b}")
diff --git a/tex/generic/context/luatex/luatex-fonts-cbk.lua b/tex/generic/context/luatex/luatex-fonts-cbk.lua
index 81b5b6e85..9da8151de 100644
--- a/tex/generic/context/luatex/luatex-fonts-cbk.lua
+++ b/tex/generic/context/luatex/luatex-fonts-cbk.lua
@@ -160,12 +160,31 @@ function nodes.handlers.nodepass(head)
local range = basefonts[i]
local start = range[1]
local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then
- start = ligaturing(start)
- start = kerning(start)
+ -- maybe even: if start and start ~= stop then
+ if start or stop then
+ local prev = nil
+ local next = nil
+ local front = start == head
+ if stop then
+ next = stop.next
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ elseif start then
+ prev = start.prev
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if prev then
+ start.prev = prev
+ prev.next = start
+ end
+ if next then
+ stop.next = next
+ next.prev = stop
+ end
+ if front then
+ head = start
+ end
end
end
end
@@ -176,7 +195,7 @@ function nodes.handlers.nodepass(head)
end
function nodes.handlers.basepass(head)
- if not basepass then
+ if basepass then
head = ligaturing(head)
head = kerning(head)
end
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index edbce4b8f..6597ca93c 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 : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 06/15/15 13:42:51
+-- merge date : 07/01/15 21:40:12
do -- begin closure to overcome local limits and interference
@@ -5423,24 +5423,13 @@ local fonts=fonts or {}
local mappings=fonts.mappings or {}
fonts.mappings=mappings
local allocate=utilities.storage.allocate
-local function loadlumtable(filename)
- local lumname=file.replacesuffix(file.basename(filename),"lum")
- local lumfile=resolvers.findfile(lumname,"map") or ""
- if lumfile~="" and lfs.isfile(lumfile) then
- if trace_loading or trace_mapping then
- report_fonts("loading map table %a",lumfile)
- end
- lumunic=dofile(lumfile)
- return lumunic,lumfile
- end
-end
local hex=R("AF","09")
-local hexfour=(hex*hex*hex*hex)/function(s) return tonumber(s,16) end
-local hexsix=(hex*hex*hex*hex*hex*hex)/function(s) return tonumber(s,16) end
+local hexfour=(hex*hex*hex^-2)/function(s) return tonumber(s,16) end
+local hexsix=(hex*hex*hex^-4)/function(s) return tonumber(s,16) end
local dec=(R("09")^1)/tonumber
local period=P(".")
-local unicode=P("uni")*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
-local ucode=P("u")*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
+local unicode=(P("uni")+P("UNI"))*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
+local ucode=(P("u")+P("U") )*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
local index=P("index")*dec*Cc(false)
local parser=unicode+ucode+index
local parsers={}
@@ -5515,7 +5504,6 @@ local function fromunicode16(str)
return (tonumber(l,16))*0x400+tonumber(r,16)-0xDC00
end
end
-mappings.loadlumtable=loadlumtable
mappings.makenameparser=makenameparser
mappings.tounicode=tounicode
mappings.tounicode16=tounicode16
@@ -5546,244 +5534,162 @@ for k,v in next,overloads do
end
end
mappings.overloads=overloads
-function mappings.addtounicode(data,filename)
+function mappings.addtounicode(data,filename,checklookups)
local resources=data.resources
- local properties=data.properties
- local descriptions=data.descriptions
local unicodes=resources.unicodes
- local lookuptypes=resources.lookuptypes
if not unicodes then
return
end
+ local properties=data.properties
+ local descriptions=data.descriptions
unicodes['space']=unicodes['space'] or 32
unicodes['hyphen']=unicodes['hyphen'] or 45
unicodes['zwj']=unicodes['zwj'] or 0x200D
unicodes['zwnj']=unicodes['zwnj'] or 0x200C
- local private=fonts.constructors.privateoffset
- local unicodevector=fonts.encodings.agl.unicodes
+ local private=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+ local unicodevector=fonts.encodings.agl.unicodes or {}
+ local contextvector=fonts.encodings.agl.ctxcodes or {}
local missing={}
- local lumunic,uparser,oparser
- local cidinfo,cidnames,cidcodes,usedmap
- cidinfo=properties.cidinfo
- usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local nofmissing=0
+ local oparser=nil
+ local cidnames=nil
+ local cidcodes=nil
+ local cidinfo=properties.cidinfo
+ local usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser=makenameparser()
if usedmap then
- oparser=usedmap and makenameparser(cidinfo.ordering)
- cidnames=usedmap.names
- cidcodes=usedmap.unicodes
+ oparser=usedmap and makenameparser(cidinfo.ordering)
+ cidnames=usedmap.names
+ cidcodes=usedmap.unicodes
end
- uparser=makenameparser()
- local ns,nl=0,0
+ local ns=0
+ local nl=0
for unic,glyph in next,descriptions do
- local index=glyph.index
local name=glyph.name
- local r=overloads[name]
- if r then
- glyph.unicode=r.unicode
- elseif unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
- local unicode=lumunic and lumunic[name] or unicodevector[name]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- end
- if (not unicode) and usedmap then
- local foundindex=lpegmatch(oparser,name)
- if foundindex then
- unicode=cidcodes[foundindex]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- else
- local reference=cidnames[foundindex]
- if reference then
- local foundindex=lpegmatch(oparser,reference)
- if foundindex then
- unicode=cidcodes[foundindex]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- end
- end
- if not unicode or unicode=="" then
- local foundcodes,multiple=lpegmatch(uparser,reference)
- if foundcodes then
- glyph.unicode=foundcodes
- if multiple then
- nl=nl+1
- unicode=true
- else
+ if name then
+ local index=glyph.index
+ local r=overloads[name]
+ if r then
+ glyph.unicode=r.unicode
+ elseif not unic or unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
+ local unicode=unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ if (not unicode) and usedmap then
+ local foundindex=lpegmatch(oparser,name)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ else
+ local reference=cidnames[foundindex]
+ if reference then
+ local foundindex=lpegmatch(oparser,reference)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
ns=ns+1
- unicode=foundcodes
+ end
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
end
end
end
end
end
end
- end
- if not unicode or unicode=="" then
- local split=lpegmatch(namesplitter,name)
- local nsplit=split and #split or 0
- local t,n={},0
- unicode=true
- for l=1,nsplit do
- local base=split[l]
- local u=unicodes[base] or unicodevector[base]
- if not u then
- break
- elseif type(u)=="table" then
- if u[1]>=private then
- unicode=false
- break
- end
- n=n+1
- t[n]=u[1]
- else
- if u>=private then
- unicode=false
- break
+ if not unicode or unicode=="" then
+ local split=lpegmatch(namesplitter,name)
+ local nsplit=split and #split or 0
+ if nsplit==0 then
+ elseif nsplit==1 then
+ local base=split[1]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ elseif type(u)=="table" then
+ if u[1]<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ elseif u<private then
+ unicode=u
+ glyph.unicode=unicode
end
- n=n+1
- t[n]=u
- end
- end
- if n==0 then
- elseif n==1 then
- glyph.unicode=t[1]
- else
- glyph.unicode=t
- end
- nl=nl+1
- end
- if not unicode or unicode=="" then
- local foundcodes,multiple=lpegmatch(uparser,name)
- if foundcodes then
- glyph.unicode=foundcodes
- if multiple then
- nl=nl+1
- unicode=true
else
- ns=ns+1
- unicode=foundcodes
- end
- end
- end
- local r=overloads[unicode]
- if r then
- unicode=r.unicode
- glyph.unicode=unicode
- end
- if not unicode then
- missing[name]=true
- end
- end
- end
- if next(missing) then
- local guess={}
- local function check(gname,code,unicode)
- local description=descriptions[code]
- local variant=description.name
- if variant==gname then
- return
- end
- local unic=unicodes[variant]
- if unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
- else
- return
- end
- if descriptions[code].unicode then
- return
- end
- local g=guess[variant]
- if g then
- g[gname]=unicode
- else
- guess[variant]={ [gname]=unicode }
- end
- end
- for unicode,description in next,descriptions do
- local slookups=description.slookups
- if slookups then
- local gname=description.name
- for tag,data in next,slookups do
- local lookuptype=lookuptypes[tag]
- if lookuptype=="alternate" then
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- elseif lookuptype=="substitution" then
- check(gname,data,unicode)
- end
- end
- end
- local mlookups=description.mlookups
- if mlookups then
- local gname=description.name
- for tag,list in next,mlookups do
- local lookuptype=lookuptypes[tag]
- if lookuptype=="alternate" then
- for i=1,#list do
- local data=list[i]
- for i=1,#data do
- check(gname,data[i],unicode)
+ local t,n={},0
+ for l=1,nsplit do
+ local base=split[l]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u)=="table" then
+ if u[1]>=private then
+ break
+ end
+ n=n+1
+ t[n]=u[1]
+ else
+ if u>=private then
+ break
+ end
+ n=n+1
+ t[n]=u
end
end
- elseif lookuptype=="substitution" then
- for i=1,#list do
- check(gname,list[i],unicode)
+ if n>0 then
+ if n==1 then
+ unicode=t[1]
+ else
+ unicode=t
+ end
+ glyph.unicode=unicode
end
end
+ nl=nl+1
end
- end
- end
- local done=true
- while done do
- done=false
- for k,v in next,guess do
- if type(v)~="number" then
- for kk,vv in next,v do
- if vv==-1 or vv>=private or (vv>=0xE000 and vv<=0xF8FF) or vv==0xFFFE or vv==0xFFFF then
- local uu=guess[kk]
- if type(uu)=="number" then
- guess[k]=uu
- done=true
- end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
else
- guess[k]=vv
- done=true
+ ns=ns+1
+ unicode=foundcodes
end
end
end
- end
- end
- local orphans=0
- local guessed=0
- for k,v in next,guess do
- if type(v)=="number" then
- descriptions[unicodes[k]].unicode=descriptions[v].unicode or v
- guessed=guessed+1
- else
- local t=nil
- local l=lower(k)
- local u=unicodes[l]
- if not u then
- orphans=orphans+1
- elseif u==-1 or u>=private or (u>=0xE000 and u<=0xF8FF) or u==0xFFFE or u==0xFFFF then
- local unicode=descriptions[u].unicode
- if unicode then
- descriptions[unicodes[k]].unicode=unicode
- guessed=guessed+1
- else
- orphans=orphans+1
- end
- else
- orphans=orphans+1
+ local r=overloads[unicode]
+ if r then
+ unicode=r.unicode
+ glyph.unicode=unicode
+ end
+ if not unicode then
+ missing[unic]=true
+ nofmissing=nofmissing+1
end
end
- end
- if trace_loading and orphans>0 or guessed>0 then
- report_fonts("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
+ else
end
end
+ if type(checklookups)=="function" then
+ checklookups(data,missing,nofmissing)
+ end
if trace_mapping then
for unic,glyph in table.sortedhash(descriptions) do
local name=glyph.name
@@ -7177,9 +7083,7 @@ local utfbyte=utf.byte
local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
local type,next,tonumber,tostring=type,next,tonumber,tostring
local abs=math.abs
-local insert=table.insert
-local lpegmatch=lpeg.match
-local reversed,concat,remove,sortedkeys=table.reversed,table.concat,table.remove,table.sortedkeys
+local reversed,concat,insert,remove,sortedkeys=table.reversed,table.concat,table.insert,table.remove,table.sortedkeys
local ioflush=io.flush
local fastcopy,tohash,derivetable=table.fastcopy,table.tohash,table.derive
local formatters=string.formatters
@@ -7206,7 +7110,7 @@ local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
otf.glists={ "gsub","gpos" }
-otf.version=2.815
+otf.version=2.816
otf.cache=containers.define("fonts","otf",otf.version,true)
local hashes=fonts.hashes
local definers=fonts.definers
@@ -8067,7 +7971,7 @@ actions["analyze glyphs"]=function(data,filename,raw)
local marks={}
for unicode,description in next,descriptions do
local glyph=description.glyph
- local italic=glyph.italic_correction
+ local italic=glyph.italic_correction
if not italic then
elseif italic==0 then
else
@@ -8128,7 +8032,8 @@ end
actions["reorganize features"]=function(data,filename,raw)
local features={}
data.resources.features=features
- for k,what in next,otf.glists do
+ for k=1,#otf.glists do
+ local what=otf.glists[k]
local dw=raw[what]
if dw then
local f={}
@@ -8210,8 +8115,9 @@ actions["reorganize subtables"]=function(data,filename,raw)
local lookups={}
local chainedfeatures={}
resources.sequences=sequences
- resources.lookups=lookups
- for _,what in next,otf.glists do
+ resources.lookups=lookups
+ for k=1,#otf.glists do
+ local what=otf.glists[k]
local dw=raw[what]
if dw then
for k=1,#dw do
@@ -8818,7 +8724,7 @@ actions["merge kern classes"]=function(data,filename,raw)
report_otf("%s kern overloads ignored",ignored)
end
if blocked>0 then
- report_otf("%s succesive kerns blocked",blocked)
+ report_otf("%s successive kerns blocked",blocked)
end
end
end
@@ -8974,7 +8880,7 @@ actions["reorganize glyph lookups"]=function(data,filename,raw)
end
end
local zero={ 0,0 }
-actions["reorganize glyph anchors"]=function(data,filename,raw)
+actions["reorganize glyph anchors"]=function(data,filename,raw)
local descriptions=data.descriptions
for unicode,description in next,descriptions do
local anchors=description.glyph.anchors
@@ -13780,9 +13686,8 @@ if not modules then modules={} end modules ['font-otp']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local next,type=next,type
+local next,type,tostring=next,type,tostring
local sort,concat=table.sort,table.concat
-local sortedhash=table.sortedhash
local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
local report_otf=logs.reporter("fonts","otf loading")
@@ -15423,12 +15328,30 @@ function nodes.handlers.nodepass(head)
local range=basefonts[i]
local start=range[1]
local stop=range[2]
- if stop then
- start,stop=ligaturing(start,stop)
- start,stop=kerning(start,stop)
- elseif start then
- start=ligaturing(start)
- start=kerning(start)
+ if start or stop then
+ local prev=nil
+ local next=nil
+ local front=start==head
+ if stop then
+ next=stop.next
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ elseif start then
+ prev=start.prev
+ start=ligaturing(start)
+ start=kerning(start)
+ end
+ if prev then
+ start.prev=prev
+ prev.next=start
+ end
+ if next then
+ stop.next=next
+ next.prev=stop
+ end
+ if front then
+ head=start
+ end
end
end
end
@@ -15438,7 +15361,7 @@ function nodes.handlers.nodepass(head)
end
end
function nodes.handlers.basepass(head)
- if not basepass then
+ if basepass then
head=ligaturing(head)
head=kerning(head)
end