diff options
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 Binary files differindex 153a6475b..9a613cc88 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf 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 Binary files differindex 284cbe4ee..6c0039c43 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex b6f735205..4aea7255e 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf 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 |