summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex')
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-07-04.lua (renamed from Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-05-18.lua)1536
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-chr.lua409
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-nod.lua80
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ocl.lua44
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua1011
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otj.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua85
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-string.lua12
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua1392
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua19
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-characters.lua3363
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua42
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua6
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-loaders.lua8
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua6
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua105
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua64
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty4
30 files changed, 7205 insertions, 1033 deletions
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-05-18.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-07-04.lua
index a413f976917..0a4748abe6a 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-05-18.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2019-07-04.lua
@@ -1,6 +1,6 @@
--[[info-----------------------------------------------------------------------
Luaotfload fontloader package
- build 2019-05-18 17:51:48
+ build 2019-07-14 15:41:55
-------------------------------------------------------------------------------
© 2019 PRAGMA ADE / ConTeXt Development Team
@@ -62,7 +62,7 @@
--info]]-----------------------------------------------------------------------
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “data-con” 7ce546725b1550f655c78ac9d69419ca] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “data-con” 7ce546725b1550f655c78ac9d69419ca] ---
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -174,10 +174,10 @@ function containers.cleanname(name)
return (gsub(lower(name),"[^%w\128-\255]+","-"))
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “data-con”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “data-con”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “basics-nod” aa71dcb849fbe4bdf2464cb2a1ef0456] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “basics-nod” 65064d03c2650a1761ee13ebd9e1400a] ---
if not modules then modules={} end modules ['luatex-fonts-nod']={
version=1.001,
@@ -381,10 +381,10 @@ do
}
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “basics-nod”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “basics-nod”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “basics-chr” a8b8316248b40cc9bc1be19050f7074f] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “basics-chr” 58b7ef0c486e06090b362971b9f85e27] ---
characters=characters or {}
@@ -827,7 +827,6 @@ characters.classifiers={
[1803]=6,
[1804]=6,
[1805]=6,
- [1807]=6,
[1808]=3,
[1809]=5,
[1810]=2,
@@ -1008,6 +1007,9 @@ characters.classifiers={
[2040]=6,
[2041]=6,
[2042]=2,
+ [2045]=5,
+ [2046]=6,
+ [2047]=6,
[2070]=5,
[2071]=5,
[2072]=5,
@@ -1097,6 +1099,7 @@ characters.classifiers={
[2235]=2,
[2236]=2,
[2237]=2,
+ [2259]=5,
[2260]=5,
[2261]=5,
[2262]=5,
@@ -1173,6 +1176,7 @@ characters.classifiers={
[2509]=5,
[2530]=5,
[2531]=5,
+ [2558]=5,
[2561]=5,
[2562]=5,
[2620]=5,
@@ -1221,6 +1225,7 @@ characters.classifiers={
[3008]=5,
[3021]=5,
[3072]=5,
+ [3076]=5,
[3134]=5,
[3135]=5,
[3136]=5,
@@ -1282,6 +1287,7 @@ characters.classifiers={
[3767]=5,
[3768]=5,
[3769]=5,
+ [3770]=5,
[3771]=5,
[3772]=5,
[3784]=5,
@@ -1520,6 +1526,7 @@ characters.classifiers={
[6261]=2,
[6262]=2,
[6263]=2,
+ [6264]=2,
[6272]=4,
[6273]=4,
[6274]=4,
@@ -1920,6 +1927,7 @@ characters.classifiers={
[43247]=5,
[43248]=5,
[43249]=5,
+ [43263]=5,
[43302]=5,
[43303]=5,
[43304]=5,
@@ -2083,6 +2091,83 @@ characters.classifiers={
[68525]=2,
[68526]=2,
[68527]=4,
+ [68864]=1,
+ [68865]=2,
+ [68866]=2,
+ [68867]=2,
+ [68868]=2,
+ [68869]=2,
+ [68870]=2,
+ [68871]=2,
+ [68872]=2,
+ [68873]=2,
+ [68874]=2,
+ [68875]=2,
+ [68876]=2,
+ [68877]=2,
+ [68878]=2,
+ [68879]=2,
+ [68880]=2,
+ [68881]=2,
+ [68882]=2,
+ [68883]=2,
+ [68884]=2,
+ [68885]=2,
+ [68886]=2,
+ [68887]=2,
+ [68888]=2,
+ [68889]=2,
+ [68890]=2,
+ [68891]=2,
+ [68892]=2,
+ [68893]=2,
+ [68894]=2,
+ [68895]=2,
+ [68896]=2,
+ [68897]=2,
+ [68898]=3,
+ [68899]=2,
+ [68900]=5,
+ [68901]=5,
+ [68902]=5,
+ [68903]=5,
+ [69424]=2,
+ [69425]=2,
+ [69426]=2,
+ [69427]=3,
+ [69428]=2,
+ [69429]=2,
+ [69430]=2,
+ [69431]=2,
+ [69432]=2,
+ [69433]=2,
+ [69434]=2,
+ [69435]=2,
+ [69436]=2,
+ [69437]=2,
+ [69438]=2,
+ [69439]=2,
+ [69440]=2,
+ [69441]=2,
+ [69442]=2,
+ [69443]=2,
+ [69444]=2,
+ [69445]=4,
+ [69446]=5,
+ [69447]=5,
+ [69448]=5,
+ [69449]=5,
+ [69450]=5,
+ [69451]=5,
+ [69452]=5,
+ [69453]=5,
+ [69454]=5,
+ [69455]=5,
+ [69456]=5,
+ [69457]=2,
+ [69458]=2,
+ [69459]=2,
+ [69460]=3,
[69633]=5,
[69688]=5,
[69689]=5,
@@ -2108,6 +2193,8 @@ characters.classifiers={
[69814]=5,
[69817]=5,
[69818]=5,
+ [69821]=4,
+ [69837]=4,
[69888]=5,
[69889]=5,
[69890]=5,
@@ -2157,6 +2244,7 @@ characters.classifiers={
[70378]=5,
[70400]=5,
[70401]=5,
+ [70459]=5,
[70460]=5,
[70464]=5,
[70502]=5,
@@ -2183,6 +2271,7 @@ characters.classifiers={
[70723]=5,
[70724]=5,
[70726]=5,
+ [70750]=5,
[70835]=5,
[70836]=5,
[70837]=5,
@@ -2236,6 +2325,24 @@ characters.classifiers={
[71465]=5,
[71466]=5,
[71467]=5,
+ [71727]=5,
+ [71728]=5,
+ [71729]=5,
+ [71730]=5,
+ [71731]=5,
+ [71732]=5,
+ [71733]=5,
+ [71734]=5,
+ [71735]=5,
+ [71737]=5,
+ [71738]=5,
+ [72148]=5,
+ [72149]=5,
+ [72150]=5,
+ [72151]=5,
+ [72154]=5,
+ [72155]=5,
+ [72160]=5,
[72193]=5,
[72194]=5,
[72195]=5,
@@ -2343,6 +2450,12 @@ characters.classifiers={
[73028]=5,
[73029]=5,
[73031]=5,
+ [73104]=5,
+ [73105]=5,
+ [73109]=5,
+ [73111]=5,
+ [73459]=5,
+ [73460]=5,
[92912]=5,
[92913]=5,
[92914]=5,
@@ -2355,6 +2468,7 @@ characters.classifiers={
[92980]=5,
[92981]=5,
[92982]=5,
+ [94031]=5,
[94095]=5,
[94096]=5,
[94097]=5,
@@ -2551,6 +2665,17 @@ characters.classifiers={
[122920]=5,
[122921]=5,
[122922]=5,
+ [123184]=5,
+ [123185]=5,
+ [123186]=5,
+ [123187]=5,
+ [123188]=5,
+ [123189]=5,
+ [123190]=5,
+ [123628]=5,
+ [123629]=5,
+ [123630]=5,
+ [123631]=5,
[125136]=5,
[125137]=5,
[125138]=5,
@@ -2653,6 +2778,7 @@ characters.indicgroups={
[2632]=true,
[2635]=true,
[2636]=true,
+ [2690]=true,
[2757]=true,
[2759]=true,
[2760]=true,
@@ -2664,7 +2790,6 @@ characters.indicgroups={
[3136]=true,
[3142]=true,
[3143]=true,
- [3144]=true,
[3146]=true,
[3147]=true,
[3148]=true,
@@ -2672,6 +2797,21 @@ characters.indicgroups={
[3263]=true,
[3270]=true,
[3406]=true,
+ [4141]=true,
+ [4142]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4150]=true,
+ [4154]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4229]=true,
+ [4230]=true,
+ [4253]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -2690,6 +2830,8 @@ characters.indicgroups={
[43247]=true,
[43248]=true,
[43249]=true,
+ [43493]=true,
+ [43644]=true,
},
["after_half"]={},
["after_main"]={
@@ -2711,6 +2853,7 @@ characters.indicgroups={
[2626]=true,
[2672]=true,
[2673]=true,
+ [2735]=true,
[2750]=true,
[2752]=true,
[2753]=true,
@@ -2874,10 +3017,24 @@ characters.indicgroups={
[3170]=true,
[3171]=true,
[3260]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3426]=true,
[3427]=true,
+ [4143]=true,
+ [4144]=true,
+ [4151]=true,
+ [4153]=true,
+ [4157]=true,
+ [4158]=true,
+ [4184]=true,
+ [4185]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4226]=true,
+ [4237]=true,
},
["consonant"]={
[2325]=true,
@@ -3207,6 +3364,117 @@ characters.indicgroups={
[3384]=true,
[3385]=true,
[3386]=true,
+ [4096]=true,
+ [4097]=true,
+ [4098]=true,
+ [4099]=true,
+ [4100]=true,
+ [4101]=true,
+ [4102]=true,
+ [4103]=true,
+ [4104]=true,
+ [4105]=true,
+ [4106]=true,
+ [4107]=true,
+ [4108]=true,
+ [4109]=true,
+ [4110]=true,
+ [4111]=true,
+ [4112]=true,
+ [4113]=true,
+ [4114]=true,
+ [4115]=true,
+ [4116]=true,
+ [4117]=true,
+ [4118]=true,
+ [4119]=true,
+ [4120]=true,
+ [4121]=true,
+ [4122]=true,
+ [4123]=true,
+ [4124]=true,
+ [4125]=true,
+ [4126]=true,
+ [4127]=true,
+ [4128]=true,
+ [4155]=true,
+ [4156]=true,
+ [4157]=true,
+ [4158]=true,
+ [4159]=true,
+ [4176]=true,
+ [4177]=true,
+ [4186]=true,
+ [4187]=true,
+ [4188]=true,
+ [4189]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4193]=true,
+ [4197]=true,
+ [4198]=true,
+ [4206]=true,
+ [4207]=true,
+ [4208]=true,
+ [4213]=true,
+ [4214]=true,
+ [4215]=true,
+ [4216]=true,
+ [4217]=true,
+ [4218]=true,
+ [4219]=true,
+ [4220]=true,
+ [4221]=true,
+ [4222]=true,
+ [4223]=true,
+ [4224]=true,
+ [4225]=true,
+ [4226]=true,
+ [4238]=true,
+ [43488]=true,
+ [43489]=true,
+ [43490]=true,
+ [43491]=true,
+ [43492]=true,
+ [43495]=true,
+ [43496]=true,
+ [43497]=true,
+ [43498]=true,
+ [43499]=true,
+ [43500]=true,
+ [43501]=true,
+ [43502]=true,
+ [43503]=true,
+ [43514]=true,
+ [43515]=true,
+ [43516]=true,
+ [43517]=true,
+ [43518]=true,
+ [43616]=true,
+ [43617]=true,
+ [43618]=true,
+ [43619]=true,
+ [43620]=true,
+ [43621]=true,
+ [43622]=true,
+ [43623]=true,
+ [43624]=true,
+ [43625]=true,
+ [43626]=true,
+ [43628]=true,
+ [43629]=true,
+ [43630]=true,
+ [43631]=true,
+ [43633]=true,
+ [43634]=true,
+ [43635]=true,
+ [43636]=true,
+ [43637]=true,
+ [43638]=true,
+ [43642]=true,
+ [43646]=true,
+ [43647]=true,
},
["dependent_vowel"]={
[2362]=true,
@@ -3235,13 +3503,14 @@ characters.indicgroups={
[2403]=true,
[2494]=true,
[2495]=true,
- [2496]=true,
[2497]=true,
[2498]=true,
[2499]=true,
[2500]=true,
[2503]=true,
[2504]=true,
+ [2507]=true,
+ [2508]=true,
[2622]=true,
[2623]=true,
[2624]=true,
@@ -3316,6 +3585,8 @@ characters.indicgroups={
[3274]=true,
[3275]=true,
[3276]=true,
+ [3285]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3390]=true,
@@ -3334,6 +3605,35 @@ characters.indicgroups={
[3415]=true,
[3426]=true,
[3427]=true,
+ [4139]=true,
+ [4140]=true,
+ [4141]=true,
+ [4142]=true,
+ [4143]=true,
+ [4144]=true,
+ [4145]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4182]=true,
+ [4183]=true,
+ [4184]=true,
+ [4185]=true,
+ [4194]=true,
+ [4199]=true,
+ [4200]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4227]=true,
+ [4228]=true,
+ [4229]=true,
+ [4230]=true,
+ [4252]=true,
+ [4253]=true,
+ [43493]=true,
},
["halant"]={
[2381]=true,
@@ -3491,6 +3791,20 @@ characters.indicgroups={
[3423]=true,
[3424]=true,
[3425]=true,
+ [4129]=true,
+ [4130]=true,
+ [4131]=true,
+ [4132]=true,
+ [4133]=true,
+ [4134]=true,
+ [4135]=true,
+ [4136]=true,
+ [4137]=true,
+ [4138]=true,
+ [4178]=true,
+ [4179]=true,
+ [4180]=true,
+ [4181]=true,
},
["nukta"]={
[2364]=true,
@@ -3512,8 +3826,6 @@ characters.indicgroups={
[2383]=true,
[2494]=true,
[2496]=true,
- [2503]=true,
- [2504]=true,
[2622]=true,
[2624]=true,
[2750]=true,
@@ -3530,16 +3842,12 @@ characters.indicgroups={
[3139]=true,
[3140]=true,
[3262]=true,
- [3264]=true,
[3265]=true,
[3266]=true,
[3267]=true,
[3268]=true,
- [3271]=true,
- [3272]=true,
- [3274]=true,
- [3275]=true,
[3276]=true,
+ [3285]=true,
[3390]=true,
[3391]=true,
[3392]=true,
@@ -3548,25 +3856,58 @@ characters.indicgroups={
[3395]=true,
[3396]=true,
[3415]=true,
+ [4139]=true,
+ [4140]=true,
+ [4152]=true,
+ [4155]=true,
+ [4182]=true,
+ [4183]=true,
+ [4194]=true,
+ [4195]=true,
+ [4196]=true,
+ [4199]=true,
+ [4200]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4227]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [4252]=true,
+ [43643]=true,
+ [43645]=true,
},
["pre_mark"]={
[2367]=true,
[2382]=true,
[2495]=true,
+ [2503]=true,
+ [2504]=true,
[2623]=true,
[2751]=true,
[2887]=true,
- [2888]=true,
[3014]=true,
[3015]=true,
[3016]=true,
[3398]=true,
[3399]=true,
[3400]=true,
+ [4145]=true,
+ [4228]=true,
},
["ra"]={
[2352]=true,
[2480]=true,
+ [2544]=true,
[2608]=true,
[2736]=true,
[2864]=true,
@@ -3580,17 +3921,43 @@ characters.indicgroups={
[2386]=true,
[2387]=true,
[2388]=true,
- [2507]=true,
- [2508]=true,
- [3277]=true,
- [3405]=true,
+ [4151]=true,
+ [4195]=true,
+ [4196]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4237]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [43643]=true,
+ [43644]=true,
+ [43645]=true,
},
["twopart_mark"]={
+ [2507]={ 2503,2494 },
+ [2508]={ 2503,2519 },
+ [2888]={ 2887,2902 },
[2891]={ 2887,2878 },
[2892]={ 2887,2903 },
[3018]={ 3014,3006 },
[3019]={ 3015,3006 },
[3020]={ 3014,3031 },
+ [3144]={ 3142,3158 },
+ [3264]={ 3263,3285 },
+ [3271]={ 3270,3285 },
+ [3272]={ 3270,3286 },
+ [3274]={ 3270,3266 },
+ [3275]={ 3274,3285 },
[3402]={ 3398,3390 },
[3403]={ 3399,3390 },
[3404]={ 3398,3415 },
@@ -3600,8 +3967,13 @@ characters.indicgroups={
[2305]=true,
[2306]=true,
[2307]=true,
+ [2433]=true,
[3330]=true,
[3331]=true,
+ [4150]=true,
+ [4152]=true,
+ [4153]=true,
+ [4154]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -3618,15 +3990,14 @@ characters.indicgroups={
[43245]=true,
[43246]=true,
[43247]=true,
- [43248]=true,
[43249]=true,
},
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “basics-chr”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “basics-chr”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ini” 4299a02110bbd7c0d27e131235c5319d] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ini” 4299a02110bbd7c0d27e131235c5319d] ---
if not modules then modules={} end modules ['font-ini']={
version=1.001,
@@ -3664,10 +4035,10 @@ fonts.privateoffsets={
keepnames=false,
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ini”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ini”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-mis” bc9eb43c27f63ce9d0fff67e104fe1c6] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-mis” bc9eb43c27f63ce9d0fff67e104fe1c6] ---
if not modules then modules={} end modules ['luatex-font-mis']={
version=1.001,
@@ -3699,10 +4070,10 @@ function font.each()
return table.sortedhash(fonts.hashes.identifiers)
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-mis”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-mis”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-con” f7d973760207e820b954a1e478a6a347] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-con” f7d973760207e820b954a1e478a6a347] ---
if not modules then modules={} end modules ['font-con']={
version=1.001,
@@ -5045,10 +5416,10 @@ function constructors.addcoreunicodes(unicodes)
return unicodes
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-con”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-con”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-enc” 3e71a54297e8f85a1ac438bb0f20dd79] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-enc” 3e71a54297e8f85a1ac438bb0f20dd79] ---
if not modules then modules={} end modules ['luatex-font-enc']={
version=1.001,
@@ -5117,10 +5488,10 @@ function encodings.load(filename)
return containers.write(encodings.cache,name,data)
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-enc”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-enc”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-cid” 4d87988efa86020a14708ee03c23415f] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-cid” 4d87988efa86020a14708ee03c23415f] ---
if not modules then modules={} end modules ['font-cid']={
version=1.001,
@@ -5271,10 +5642,10 @@ function cid.getmap(specification)
return found
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-cid”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-cid”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-map” f486746e90fe972de4b73e208ac7cbb2] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-map” f486746e90fe972de4b73e208ac7cbb2] ---
if not modules then modules={} end modules ['font-map']={
version=1.001,
@@ -5662,10 +6033,10 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-map”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-map”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-vfc” 94937140f2c909e9c831ba021f1ab303] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-vfc” 94937140f2c909e9c831ba021f1ab303] ---
if not modules then modules={} end modules ['font-vfc']={
version=1.001,
@@ -5763,10 +6134,10 @@ helpers.commands=utilities.storage.allocate {
dummy=dummy,
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-vfc”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-vfc”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otr” 340999eb6c53879787a7560bc1a30360] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otr” 340999eb6c53879787a7560bc1a30360] ---
if not modules then modules={} end modules ['font-otr']={
version=1.001,
@@ -7588,10 +7959,10 @@ function readers.extend(fontdata)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otr”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otr”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oti” dbae7722baae24d917a17176553825cf] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oti” dbae7722baae24d917a17176553825cf] ---
if not modules then modules={} end modules ['font-oti']={
version=1.001,
@@ -7734,10 +8105,10 @@ function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oti”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oti”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ott” a8b78a27cbb22d4f697a8dd801a73eea] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ott” aba6d8335a5f38a5a62d3631492f3392] ---
if not modules then modules={} end modules ["font-ott"]={
version=1.001,
@@ -7761,14 +8132,19 @@ otf.tables=tables
local statistics=otf.statistics or {}
otf.statistics=statistics
local scripts=allocate {
+ ["adlm"]="adlam",
+ ["aghb"]="caucasian albanian",
+ ["ahom"]="ahom",
["arab"]="arabic",
["armi"]="imperial aramaic",
["armn"]="armenian",
["avst"]="avestan",
["bali"]="balinese",
["bamu"]="bamum",
+ ["bass"]="bassa vah",
["batk"]="batak",
["beng"]="bengali",
+ ["bhks"]="bhaiksuki",
["bng2"]="bengali variant 2",
["bopo"]="bopomofo",
["brah"]="brahmi",
@@ -7784,23 +8160,33 @@ local scripts=allocate {
["copt"]="coptic",
["cprt"]="cypriot syllabary",
["cyrl"]="cyrillic",
- ["deva"]="devanagari",
["dev2"]="devanagari variant 2",
+ ["deva"]="devanagari",
+ ["dogr"]="dogra",
["dsrt"]="deseret",
+ ["dupl"]="duployan",
["egyp"]="egyptian heiroglyphs",
+ ["elba"]="elbasan",
["ethi"]="ethiopic",
["geor"]="georgian",
+ ["gjr2"]="gujarati variant 2",
["glag"]="glagolitic",
+ ["gong"]="gunjala gondi",
+ ["gonm"]="masaram gondi",
["goth"]="gothic",
+ ["gran"]="grantha",
["grek"]="greek",
["gujr"]="gujarati",
- ["gjr2"]="gujarati variant 2",
- ["guru"]="gurmukhi",
["gur2"]="gurmukhi variant 2",
+ ["guru"]="gurmukhi",
["hang"]="hangul",
["hani"]="cjk ideographic",
["hano"]="hanunoo",
+ ["hatr"]="hatran",
["hebr"]="hebrew",
+ ["hluw"]="anatolian hieroglyphs",
+ ["hmng"]="pahawh hmong",
+ ["hung"]="old hungarian",
["ital"]="old italic",
["jamo"]="hangul jamo",
["java"]="javanese",
@@ -7808,49 +8194,77 @@ local scripts=allocate {
["kana"]="hiragana and katakana",
["khar"]="kharosthi",
["khmr"]="khmer",
- ["knda"]="kannada",
+ ["khoj"]="khojki",
["knd2"]="kannada variant 2",
+ ["knda"]="kannada",
["kthi"]="kaithi",
["lana"]="tai tham",
["lao" ]="lao",
["latn"]="latin",
["lepc"]="lepcha",
["limb"]="limbu",
+ ["lina"]="linear a",
["linb"]="linear b",
["lisu"]="lisu",
["lyci"]="lycian",
["lydi"]="lydian",
+ ["mahj"]="mahajani",
+ ["maka"]="makasar",
["mand"]="mandaic and mandaean",
+ ["mani"]="manichaean",
+ ["marc"]="marchen",
["math"]="mathematical alphanumeric symbols",
+ ["medf"]="medefaidrin",
+ ["mend"]="mende kikakui",
["merc"]="meroitic cursive",
["mero"]="meroitic hieroglyphs",
- ["mlym"]="malayalam",
["mlm2"]="malayalam variant 2",
+ ["mlym"]="malayalam",
+ ["modi"]="modi",
["mong"]="mongolian",
+ ["mroo"]="mro",
["mtei"]="meitei Mayek",
+ ["mult"]="multani",
["musc"]="musical symbols",
["mym2"]="myanmar variant 2",
["mymr"]="myanmar",
+ ["narb"]="old north arabian",
+ ["nbat"]="nabataean",
+ ["newa"]="newa",
["nko" ]='n"ko',
+ ["nshu"]="nüshu",
["ogam"]="ogham",
["olck"]="ol chiki",
["orkh"]="old turkic and orkhon runic",
- ["orya"]="oriya",
["ory2"]="odia variant 2",
+ ["orya"]="oriya",
+ ["osge"]="osage",
["osma"]="osmanya",
+ ["palm"]="palmyrene",
+ ["pauc"]="pau cin hau",
+ ["perm"]="old permic",
["phag"]="phags-pa",
["phli"]="inscriptional pahlavi",
+ ["phlp"]="psalter pahlavi",
["phnx"]="phoenician",
+ ["plrd"]="miao",
["prti"]="inscriptional parthian",
["rjng"]="rejang",
+ ["rohg"]="hanifi rohingya",
["runr"]="runic",
["samr"]="samaritan",
["sarb"]="old south arabian",
["saur"]="saurashtra",
+ ["sgnw"]="sign writing",
["shaw"]="shavian",
["shrd"]="sharada",
+ ["sidd"]="siddham",
+ ["sind"]="khudawadi",
["sinh"]="sinhala",
+ ["sogd"]="sogdian",
+ ["sogo"]="old sogdian",
["sora"]="sora sompeng",
+ ["soyo"]="soyombo",
["sund"]="sundanese",
["sylo"]="syloti nagri",
["syrc"]="syriac",
@@ -7859,20 +8273,24 @@ local scripts=allocate {
["tale"]="tai le",
["talu"]="tai lu",
["taml"]="tamil",
+ ["tang"]="tangut",
["tavt"]="tai viet",
- ["telu"]="telugu",
["tel2"]="telugu variant 2",
+ ["telu"]="telugu",
["tfng"]="tifinagh",
["tglg"]="tagalog",
["thaa"]="thaana",
["thai"]="thai",
["tibt"]="tibetan",
+ ["tirh"]="tirhuta",
["tml2"]="tamil variant 2",
["ugar"]="ugaritic cuneiform",
["vai" ]="vai",
+ ["wara"]="warang citi",
["xpeo"]="old persian cuneiform",
["xsux"]="sumero-akkadian cuneiform",
["yi" ]="yi",
+ ["zanb"]="zanabazar square",
}
local languages=allocate {
["aba" ]="abaza",
@@ -7941,12 +8359,15 @@ local languages=allocate {
["brm" ]="burmese",
["brx" ]="bodo",
["bsh" ]="bashkir",
+ ["bsk" ]="burushaski",
["bti" ]="beti",
["bts" ]="batak simalungun",
["bug" ]="bugis",
+ ["byv" ]="medumba",
["cak" ]="kaqchikel",
["cat" ]="catalan",
["cbk" ]="zamboanga chavacano",
+ ["cchn"]="chinantec",
["ceb" ]="cebuano",
["cgg" ]="chiga",
["cha" ]="chamorro",
@@ -7961,6 +8382,8 @@ local languages=allocate {
["chr" ]="cherokee",
["chu" ]="chuvash",
["chy" ]="cheyenne",
+ ["cja" ]="western cham",
+ ["cjm" ]="eastern cham",
["cmr" ]="comorian",
["cop" ]="coptic",
["cor" ]="cornish",
@@ -8016,6 +8439,7 @@ local languages=allocate {
["fin" ]="finnish",
["fji" ]="fijian",
["fle" ]="dutch (flemish)",
+ ["fmp" ]="fe’fe’",
["fne" ]="forest nenets",
["fon" ]="fon",
["fos" ]="faroese",
@@ -8094,6 +8518,7 @@ local languages=allocate {
["jan" ]="japanese",
["jav" ]="javanese",
["jbo" ]="lojban",
+ ["jct" ]="krymchak",
["jii" ]="yiddish",
["jud" ]="ladino",
["jul" ]="jula",
@@ -8130,6 +8555,7 @@ local languages=allocate {
["kmn" ]="kumaoni",
["kmo" ]="komo",
["kms" ]="komso",
+ ["kmz" ]="khorasani turkic",
["knr" ]="kanuri",
["kod" ]="kodagu",
["koh" ]="korean old hangul",
@@ -8206,6 +8632,7 @@ local languages=allocate {
["mar" ]="marathi",
["maw" ]="marwari",
["mbn" ]="mbundu",
+ ["mbo" ]="mbo",
["mch" ]="manchu",
["mcr" ]="moose cree",
["mde" ]="mende",
@@ -8222,6 +8649,7 @@ local languages=allocate {
["mle" ]="male",
["mlg" ]="malagasy",
["mln" ]="malinke",
+ ["mlr" ]="malayalam reformed",
["mly" ]="malay",
["mnd" ]="mandinka",
["mng" ]="mongolian",
@@ -8275,6 +8703,7 @@ local languages=allocate {
["nto" ]="esperanto",
["nym" ]="nyamwezi",
["nyn" ]="norwegian nynorsk",
+ ["nza" ]="mbembe tigon",
["oci" ]="occitan",
["ocr" ]="oji-cree",
["ojb" ]="ojibway",
@@ -8338,6 +8767,7 @@ local languages=allocate {
["say" ]="sayisi",
["scn" ]="sicilian",
["sco" ]="scots",
+ ["scs" ]="north slavey",
["sek" ]="sekota",
["sel" ]="selkup",
["sga" ]="old irish",
@@ -8382,6 +8812,9 @@ local languages=allocate {
["sxu" ]="upper saxon",
["syl" ]="sylheti",
["syr" ]="syriac",
+ ["syre"]="estrangela syriac",
+ ["syrj"]="western syriac",
+ ["syrn"]="eastern syriac",
["szl" ]="silesian",
["tab" ]="tabasaran",
["taj" ]="tajiki",
@@ -8413,6 +8846,7 @@ local languages=allocate {
["tsj" ]="tshangla",
["tua" ]="turoyo aramaic",
["tul" ]="tulu",
+ ["tum" ]="tulu",
["tuv" ]="tuvin",
["tvl" ]="tuvalu",
["twi" ]="twi",
@@ -8438,6 +8872,7 @@ local languages=allocate {
["wel" ]="welsh",
["wlf" ]="wolof",
["wln" ]="walloon",
+ ["wtm" ]="mewati",
["xbd" ]="lü",
["xhs" ]="xhosa",
["xjb" ]="minjangbal",
@@ -8581,6 +9016,7 @@ local features=allocate {
["vkna"]="vertical kana alternates",
["vkrn"]="vertical kerning",
["vpal"]="proportional alternate vertical metrics",
+ ["vrtr"]="vertical alternates for rotation",
["vrt2"]="vertical rotation",
["zero"]="slashed zero",
["trep"]="traditional tex replacements",
@@ -8791,10 +9227,10 @@ function otffeatures.normalize(features,wrap)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ott”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ott”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-cff” 7ff1a757f6a26f57f635014cc8a174fe] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-cff” 7ff1a757f6a26f57f635014cc8a174fe] ---
if not modules then modules={} end modules ['font-cff']={
version=1.001,
@@ -10814,10 +11250,10 @@ function readers.cffcheck(filename)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-cff”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-cff”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ttf” f2d53377b264d59368703e659a7bc228] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ttf” f2d53377b264d59368703e659a7bc228] ---
if not modules then modules={} end modules ['font-ttf']={
version=1.001,
@@ -11980,10 +12416,10 @@ function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ttf”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ttf”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-dsp” b5bf2f1c198e027a0d4ededcdf3947b4] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-dsp” b5bf2f1c198e027a0d4ededcdf3947b4] ---
if not modules then modules={} end modules ['font-dsp']={
version=1.001,
@@ -15224,10 +15660,10 @@ function readers.mvar(f,fontdata,specification)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-dsp”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-dsp”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oup” 669e479e716999edc626a1f045bd76fa] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oup” 669e479e716999edc626a1f045bd76fa] ---
if not modules then modules={} end modules ['font-oup']={
version=1.001,
@@ -17864,10 +18300,10 @@ function readers.expand(data)
expandlookups(sublookups)
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oup”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oup”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otl” b041e8512af19d28edbbebc683f7cd51] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otl” b041e8512af19d28edbbebc683f7cd51] ---
if not modules then modules={} end modules ['font-otl']={
version=1.001,
@@ -18569,10 +19005,10 @@ otf.coverup={
end
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otl”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otl”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oto” 54ea5c823993e536950b2245e94aee93] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oto” 54ea5c823993e536950b2245e94aee93] ---
if not modules then modules={} end modules ['font-oto']={
version=1.001,
@@ -19030,10 +19466,10 @@ registerotffeature {
}
otf.basemodeinitializer=featuresinitializer
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-oto”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-oto”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otj” bd772fd29bdec537c3c4e9d971b80325] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otj” 66c7a910d95d4a52b81061de776898e1] ---
if not modules then modules={} end modules ['font-otj']={
version=1.001,
@@ -20490,10 +20926,10 @@ function injections.handler(head,where)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otj”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otj”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ota” d6dfb94563d6a52675e274b2e673e4a6] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ota” d6dfb94563d6a52675e274b2e673e4a6] ---
if not modules then modules={} end modules ['font-ota']={
version=1.001,
@@ -20870,10 +21306,10 @@ directives.register("otf.analyze.useunicodemarks",function(v)
analyzers.useunicodemarks=v
end)
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ota”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ota”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ots” 0da86e8e56e342169221ec66c4f05318] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ots” d5504847a278385cd0d20ecf1b3d59cc] ---
if not modules then modules={} end modules ['font-ots']={
version=1.001,
@@ -23446,7 +23882,7 @@ local function testrun(disc,t_run,c_run,...)
end
local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
local renewed=false
- if (post or replace) and prev then
+ if (post or replace) then
if post then
setlink(posttail,next)
else
@@ -23639,6 +24075,7 @@ local function t_run_single(start,stop,font,attr,lookupcache)
ss=nil
end
end
+lookupmatch=lg
else
break
end
@@ -23792,6 +24229,7 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
ss=nil
end
end
+lookupmatch=lg
else
break
end
@@ -24485,10 +24923,10 @@ registerotffeature {
},
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ots”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ots”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-osd” e8111d24e652a181bf2bbd5149fb66d4] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-osd” 79eb2fc4a71364fd73c8b996a109f5df] ---
if not modules then modules={} end modules ['font-osd']={
version=1.001,
@@ -24497,7 +24935,7 @@ if not modules then modules={} end modules ['font-osd']={
copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local insert,imerge,copy=table.insert,table.imerge,table.copy
+local insert,imerge,copy,tohash=table.insert,table.imerge,table.copy,table.tohash
local next,type=next,type
local report=logs.reporter("otf","devanagari")
fonts=fonts or {}
@@ -24543,6 +24981,7 @@ local s_half=states.half
local s_pref=states.pref
local s_blwf=states.blwf
local s_pstf=states.pstf
+local s_init=states.init
local replace_all_nbsp=nil
replace_all_nbsp=function(head)
replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
@@ -24693,15 +25132,10 @@ local zw_char={
[c_zwj ]=true,
}
local dflt_true={
- dflt=true
-}
-local two_defaults={
- dev2=dflt_true,
-}
-local one_defaults={
- dev2=dflt_true,
- deva=dflt_true,
+ dflt=true,
}
+local two_defaults={}
+local one_defaults={}
local false_flags={ false,false,false,false }
local sequence_reorder_matras={
features={ dv01=two_defaults },
@@ -24730,7 +25164,7 @@ local sequence_reorder_reph={
}
}
local sequence_reorder_pre_base_reordering_consonants={
- features={ dv03=two_defaults },
+ features={ dv03=one_defaults },
flags=false_flags,
name="dv03_reorder_pre_base_reordering_consonants",
order={ "dv03" },
@@ -24766,6 +25200,7 @@ local basic_shaping_forms={
rkrf=true,
rphf=true,
vatu=true,
+ locl=true,
}
local valid={
abvs=true,
@@ -24789,6 +25224,7 @@ local valid={
psts=true,
haln=true,
calt=true,
+ locl=true,
}
local scripts={}
local scripts_one={ "deva","mlym","beng","gujr","guru","knda","orya","taml","telu" }
@@ -24799,7 +25235,7 @@ for i=1,nofscripts do
local two=scripts_two[i]
scripts[one]=true
scripts[two]=true
- two_defaults[one]=dflt_true
+ two_defaults[two]=dflt_true
one_defaults[one]=dflt_true
one_defaults[two]=dflt_true
end
@@ -24815,31 +25251,79 @@ local function initializedevanagi(tfmdata)
local gsubfeatures=resources.features.gsub
local sequences=resources.sequences
local sharedfeatures=tfmdata.shared.features
+ gsubfeatures["dv01"]=two_defaults
+ gsubfeatures["dv02"]=two_defaults
+ gsubfeatures["dv03"]=one_defaults
+ gsubfeatures["dv04"]=one_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
local lastmatch=0
for s=1,#sequences do
local features=sequences[s].features
if features then
for k,v in next,features do
+ if k=="locl" then
+ local steps=sequences[s].steps
+ local nofsteps=sequences[s].nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,pre_mark do
+ local locl=coverage[k]
+ if locl then
+ if #locl>0 then
+ for j=1,#locl do
+ local ck=locl[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ locl=coverage[k]
+ end
+ end
+ end
+ end
+ end
+ end
+ if locl then
+ reorder_matras.steps[1].coverage[locl]=true
+ end
+ end
+ end
+ end
+ end
+ end
if basic_shaping_forms[k] then
- lastmatch=s
+ lastmatch=lastmatch+1
+ if s~=lastmatch then
+ table.insert(sequences,lastmatch,table.remove(sequences,s))
+ end
end
end
end
end
local insertindex=lastmatch+1
- gsubfeatures["dv01"]=two_defaults
- gsubfeatures["dv02"]=two_defaults
- gsubfeatures["dv03"]=two_defaults
- gsubfeatures["dv04"]=one_defaults
- local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
- local reorder_reph=copy(sequence_reorder_reph)
- local reorder_matras=copy(sequence_reorder_matras)
- local remove_joiners=copy(sequence_remove_joiners)
+ if tfmdata.properties.language then
+ dflt_true[tfmdata.properties.language]=true
+ end
insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
insert(sequences,insertindex,reorder_reph)
insert(sequences,insertindex,reorder_matras)
insert(sequences,insertindex,remove_joiners)
local blwfcache={}
+ local vatucache={}
+ local pstfcache={}
local seqsubset={}
local rephstep={
coverage={}
@@ -24848,6 +25332,8 @@ local function initializedevanagi(tfmdata)
reph=false,
vattu=false,
blwfcache=blwfcache,
+ vatucache=vatucache,
+ pstfcache=pstfcache,
seqsubset=seqsubset,
reorderreph=rephstep,
}
@@ -24862,17 +25348,89 @@ local function initializedevanagi(tfmdata)
local features=sequence.features
local has_rphf=features.rphf
local has_blwf=features.blwf
- if has_rphf and has_rphf.deva then
+ local has_vatu=features.vatu
+ local has_pstf=features.pstf
+ if has_rphf and has_rphf[script] then
devanagari.reph=true
- elseif has_blwf and has_blwf.deva then
+ elseif (has_blwf and has_blwf[script] ) or (has_vatu and has_vatu[script] ) then
devanagari.vattu=true
for i=1,nofsteps do
local step=steps[i]
local coverage=step.coverage
if coverage then
for k,v in next,coverage do
- if not blwfcache[k] then
- blwfcache[k]=v
+ for h,w in next,halant do
+ if v[h] then
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ if has_vatu and has_vatu[script] and not vatucache[k] then
+ vatucache[k]=v
+ end
+ end
+ end
+ end
+ end
+ elseif has_pstf and has_pstf[script] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not pstfcache[k] then
+ pstfcache[k]=v
+ end
+ end
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local found=false
+ if #r>0 then
+ for j=1,#r do
+ local ck=r[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups and chainlookups[f] then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local h=coverage[k]
+ if h then
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,r do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ end
+ if found then
+ break
+ end
end
end
end
@@ -24884,17 +25442,53 @@ local function initializedevanagi(tfmdata)
local step=steps[i]
local coverage=step.coverage
if coverage then
- local reph=false
+ local reph,rephbase=false,false
if kind=="rphf" then
for k,v in next,ra do
local r=coverage[k]
if r then
+ rephbase=k
local h=false
- for k,v in next,halant do
- local h=r[k]
- if h then
- reph=h.ligature or false
- break
+ if #r>0 then
+ for j=1,#r do
+ local ck=r[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local r=coverage[k]
+ if r then
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if h then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
end
end
if reph then
@@ -24903,7 +25497,7 @@ local function initializedevanagi(tfmdata)
end
end
end
- seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ seqsubset[#seqsubset+1]={ kind,coverage,reph,rephbase }
end
end
end
@@ -24918,11 +25512,46 @@ local function initializedevanagi(tfmdata)
local h=coverage[k]
if h then
local found=false
- for k,v in next,h do
- found=v and v.ligature
- if found then
- pre_base_reordering_consonants[k]=found
- break
+ if #h>0 then
+ for j=1,#h do
+ local ck=h[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local h=coverage[k]
+ if h then
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
end
end
if found then
@@ -24935,27 +25564,17 @@ local function initializedevanagi(tfmdata)
end
end
end
- if script=="deva" then
- sharedfeatures["dv04"]=true
- elseif script=="dev2" then
+ if two_defaults[script] then
sharedfeatures["dv01"]=true
sharedfeatures["dv02"]=true
sharedfeatures["dv03"]=true
sharedfeatures["dv04"]=true
- elseif script=="mlym" then
- sharedfeatures["pstf"]=true
- elseif script=="mlm2" then
- sharedfeatures["pstf"]=true
- sharedfeatures["pref"]=true
+ elseif one_defaults[script] then
sharedfeatures["dv03"]=true
- gsubfeatures ["dv03"]=two_defaults
- insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
- elseif script=="taml" then
sharedfeatures["dv04"]=true
-sharedfeatures["pstf"]=true
- elseif script=="tml2" then
- else
- report("todo: enable the right features for script %a",script)
+ end
+ if script=="mlym" or script=="taml" then
+ devanagari.left_matra_before_base=true
end
end
end
@@ -24988,6 +25607,8 @@ local function initialize_one(font,attr)
reph=false,
vattu=false,
blwfcache={},
+ vatucache={},
+ pstfcache={},
}
datasets.devanagari=devanagaridata
local resources=tfmdata.resources
@@ -24998,17 +25619,80 @@ local function initialize_one(font,attr)
local kind=dataset[4]
if kind=="rphf" then
devanagaridata.reph=true
- elseif kind=="blwf" then
+ elseif kind=="blwf" or kind=="vatu" then
devanagaridata.vattu=true
devanagaridata.blwfcache=devanagari.blwfcache
+ devanagaridata.vatucache=devanagari.vatucache
+ devanagaridata.pstfcache=devanagari.pstfcache
end
end
end
end
- return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache,devanagaridata.vatucache,devanagaridata.pstfcache
+end
+local function contextchain(contexts,n)
+ local char=getchar(n)
+ for k=1,#contexts do
+ local ck=contexts[k]
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ if (l-f)==1 and seq[f+1][char] then
+ local ok=true
+ local c=n
+ for i=l+1,#seq do
+ c=getnext(c)
+ if not c or not seq[i][ischar(c)] then
+ ok=false
+ break
+ end
+ end
+ if ok then
+ c=getprev(n)
+ for i=1,f-1 do
+ c=getprev(c)
+ if not c or not seq[f-i][ischar(c)] then
+ ok=false
+ end
+ end
+ end
+ if ok then
+ return true
+ end
+ end
+ end
+ return false
+end
+local function order_matras(c)
+ local cn=getnext(c)
+ local char=getchar(cn)
+ while dependent_vowel[char] do
+ local next=getnext(cn)
+ local cc=c
+ local cchar=getchar(cc)
+ while cc~=cn do
+ if (above_mark[char] and (below_mark[cchar] or post_mark[cchar])) or (below_mark[char] and (post_mark[cchar])) then
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ setnext(getprev(cc),cn)
+ setprev(cn,getprev(cc))
+ setnext(cn,cc)
+ setprev(cc,cn)
+ break
+ end
+ cc=getnext(cc)
+ cchar=getchar(cc)
+ end
+ cn=next
+ char=getchar(cn)
+ end
end
local function reorder_one(head,start,stop,font,attr,nbspaces)
- local reph,vattu,blwfcache=initialize_one(font,attr)
+ local reph,vattu,blwfcache,vatucache,pstfcache=initialize_one(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
local current=start
local n=getnext(start)
local base=nil
@@ -25091,6 +25775,8 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
base=current
elseif blwfcache[char] then
setprop(current,a_state,s_blwf)
+ elseif pstfcache[char] then
+ setprop(current,a_state,s_pstf)
else
base=current
end
@@ -25159,7 +25845,7 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
current=next
end
- if base~=stop and getprop(base,a_state) then
+ if base~=stop and getprop(base,a_state) then
local next=getnext(base)
if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
setprop(base,a_state,unsetvalue)
@@ -25187,6 +25873,16 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
n=getnext(n)
ch=getchar(n)
end
+ local tpm=twopart_mark[ch]
+ while tpm do
+ local extra=copy_node(n)
+ copyinjection(extra,n)
+ ch=tpm[1]
+ setchar(n,ch)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ tpm=twopart_mark[ch]
+ end
while c~=stop and dependent_vowel[ch] do
c=n
n=getnext(n)
@@ -25210,9 +25906,44 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
local last=getnext(c)
while cn~=last do
if pre_mark[getchar(cn)] then
- if bp then
- setnext(bp,cn)
+ if devanagari.left_matra_before_base then
+ local prev,next=getboth(cn)
+ setlink(prev,next)
+ if cn==stop then
+ stop=getprev(cn)
+ end
+ if base==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ setlink(getprev(base),cn)
+ setlink(cn,base)
+ cn=next
+ else
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ cn=next
end
+ elseif current~=base and dependent_vowel[getchar(cn)] then
local prev,next=getboth(cn)
if next then
setprev(next,prev)
@@ -25221,17 +25952,19 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if cn==stop then
stop=prev
end
- setprev(cn,bp)
- setlink(cn,firstcons)
- if firstcons==start then
- if head==start then
- head=cn
- end
- start=cn
+ setlink(b,cn,getnext(b))
+ order_matras(cn)
+ cn=next
+ elseif current==base and dependent_vowel[getchar(cn)] then
+ local cnn=getnext(cn)
+ order_matras(cn)
+ cn=cnn
+ while cn~=last and dependent_vowel[getchar(cn)] do
+ cn=getnext(cn)
end
- break
+ else
+ cn=getnext(cn)
end
- cn=getnext(cn)
end
allreordered=c==stop
current=getnext(c)
@@ -25289,6 +26022,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns=next
end
+ if not vatucache[char] then
+ next=getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns=next
+ next=getnext(cns)
+ end
+ end
elseif char==c_nbsp then
nbspaces=nbspaces+1
cns=current
@@ -25296,6 +26036,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns=next
end
+ if not vatucache[char] then
+ next=getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns=next
+ next=getnext(cns)
+ end
+ end
end
end
current=getnext(current)
@@ -25303,6 +26050,9 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
if getchar(base)==c_nbsp then
nbspaces=nbspaces-1
+ if base==stop then
+ stop=getprev(stop)
+ end
head=remove_node(head,base)
flush_node(base)
end
@@ -25316,7 +26066,7 @@ function handlers.devanagari_reorder_matras(head,start)
local char=ischar(current,startfont)
local next=getnext(current)
if char and getprop(current,a_syllabe)==startattr then
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then
if next then
local char=ischar(next,startfont)
if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
@@ -25338,6 +26088,7 @@ function handlers.devanagari_reorder_matras(head,start)
end
return head,start,true
end
+local rephbase={}
function handlers.devanagari_reorder_reph(head,start)
local current=getnext(start)
local startnext=nil
@@ -25345,44 +26096,29 @@ function handlers.devanagari_reorder_reph(head,start)
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
::step_1::
- ::step_2::
- while current do
- local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
- if halant[char] and not getprop(current,a_state) then
- local next=getnext(current)
- if next then
- local nextchar=ischar(next,startfont)
- if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
- current=next
- next=getnext(current)
- end
- end
- startnext=getnext(start)
- head=remove_node(head,start)
- setlink(start,next)
- setlink(current,start)
- start=startnext
- startattr=getprop(start,a_syllabe)
- break
- end
- current=getnext(current)
- else
- break
- end
+ local char=ischar(start,startfont)
+ local rephbase=rephbase[startfont][char]
+ if char and after_subscript[rephbase] then
+ goto step_5
end
- ::step_3::
- ::step_4::
- if not startnext then
- current=getnext(start)
+ ::step_2::
+ if char and not after_postscript[rephbase] then
while current do
local char=ischar(current,startfont)
if char and getprop(current,a_syllabe)==startattr then
- if getprop(current,a_state)==s_pstf then
+ if halant[char] then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
startnext=getnext(start)
head=remove_node(head,start)
- setlink(getprev(current),start)
- setlink(start,current)
+ setlink(start,next)
+ setlink(current,start)
start=startnext
startattr=getprop(start,a_syllabe)
break
@@ -25393,6 +26129,63 @@ function handlers.devanagari_reorder_reph(head,start)
end
end
end
+ ::step_3::
+ if not startnext then
+ if char and after_main[rephbase] then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if consonant[char] and not getprop(current,a_state)==s_pref then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(current,start)
+ setlink(start,getnext(current))
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ end
+ ::step_4::
+ if not startnext then
+ if char and before_postscript[rephbase] then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ elseif not c and (vowel_modifier[char] or stress_tone_mark[char] ) then
+ c=current
+ end
+ current=getnext(current)
+ else
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(c),start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ break
+ end
+ end
+ end
+ end
::step_5::
if not startnext then
current=getnext(start)
@@ -25400,7 +26193,10 @@ function handlers.devanagari_reorder_reph(head,start)
while current do
local char=ischar(current,startfont)
if char and getprop(current,a_syllabe)==startattr then
- if not c and mark_above_below_post[char] and not after_subscript[char] then
+ local state=getprop(current,a_state)
+ if before_subscript[rephbase] and (state==s_blwf or state==s_pstf) then
+ c=current
+ elseif after_subscript[rephbase] and (state==s_pstf) then
c=current
end
current=getnext(current)
@@ -25440,63 +26236,64 @@ function handlers.devanagari_reorder_reph(head,start)
end
return head,start,true
end
+local reordered_pre_base_reordering_consonants={}
function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
- local current=start
- local startnext=nil
- local startprev=nil
+ if reordered_pre_base_reordering_consonants[start] then
+ return head,start,true
+ end
+ local current=start
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
while current do
local char=ischar(current,startfont)
+ local next=getnext(current)
if char and getprop(current,a_syllabe)==startattr then
- local next=getnext(current)
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then
if next then
- local nextchar=ischar(next,startfont)
- if nextchar and getprop(next,a_syllabe)==startattr then
- if nextchar==c_zwnj or nextchar==c_zwj then
- current=next
- next=getnext(current)
- end
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
end
end
- startnext=getnext(start)
- removenode(start,start)
+ local startnext=getnext(start)
+ head=remove_node(head,start)
setlink(start,next)
setlink(current,start)
+ reordered_pre_base_reordering_consonants[start]=true
start=startnext
- break
+ return head,start,true
end
- current=next
else
break
end
+ current=next
end
- if not startnext then
- current=getnext(start)
- startattr=getprop(start,a_syllabe)
- while current do
- local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
- if not consonant[char] and getprop(current,a_state) then
- startnext=getnext(start)
- removenode(start,start)
- setlink(getprev(current),start)
- setlink(start,current)
- start=startnext
- break
- end
- current=getnext(current)
+ local startattr=getprop(start,a_syllabe)
+ local current=getprev(start)
+ while current and getprop(current,a_syllabe)==startattr do
+ local char=ischar(current)
+ if (not dependent_vowel[char] and not getprop(current,a_state) or getprop(current,a_state)==s_init) then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ if current==head then
+ setlink(start,current)
+ head=start
else
- break
+ setlink(getprev(current),start)
+ setlink(start,current)
end
+ reordered_pre_base_reordering_consonants[start]=true
+ start=startnext
+ break
end
+ current=getprev(current)
end
return head,start,true
end
function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
local stop=getnext(start)
- local font=getfont(start)
+ local font=getfont(start)
local last=start
while stop do
local char=ischar(stop,font)
@@ -25530,28 +26327,28 @@ local function initialize_two(font,attr)
end
local function reorder_two(head,start,stop,font,attr,nbspaces)
local seqsubset,reorderreph=initialize_two(font,attr)
- local reph=false
local halfpos=nil
local basepos=nil
local subpos=nil
local postpos=nil
- local locl={}
+ reorderreph.coverage={}
+ rephbase[font]={}
for i=1,#seqsubset do
local subset=seqsubset[i]
local kind=subset[1]
local lookupcache=subset[2]
if kind=="rphf" then
- reph=subset[3]
+ reorderreph.coverage[subset[3]]=true
+ rephbase[font][subset[3]]=subset[4]
local current=start
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
+ if found[getchar(next)] or contextchain(found,next) then
local afternext=next~=stop and getnext(next)
if afternext and zw_char[getchar(afternext)] then
current=afternext
@@ -25571,15 +26368,16 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pref)
- setprop(next,a_state,s_pref)
- current=next
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
+ end
end
end
end
@@ -25590,15 +26388,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
+ if found[getchar(next)] or contextchain(found,next) then
if next~=stop and getchar(getnext(next))==c_zwnj then
current=next
- else
+ elseif (not getprop(current,a_state)) then
setprop(current,a_state,s_half)
if not halfpos then
halfpos=current
@@ -25610,21 +26407,22 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
current=getnext(current)
end
- elseif kind=="blwf" then
+ elseif kind=="blwf" or kind=="vatu" then
local current=start
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_blwf)
- setprop(next,a_state,s_blwf)
- current=next
- subpos=current
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
+ end
end
end
end
@@ -25635,16 +26433,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pstf)
- setprop(next,a_state,s_pstf)
- current=next
- postpos=current
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
end
end
end
@@ -25652,7 +26451,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
end
end
- reorderreph.coverage={ [reph]=true }
local current,base,firstcons=start,nil,nil
if getprop(start,a_state)==s_rphf then
current=getnext(getnext(start))
@@ -25713,7 +26511,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
firstcons=current
end
local a=getprop(current,a_state)
- if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ if not (a==s_blwf or a==s_pstf or (a~=s_rphf and a~=s_blwf and ra[getchar(current)])) then
base=current
end
end
@@ -25730,7 +26528,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
return head,stop,nbspaces
else
- if getprop(base,a_state) then
+ if getprop(base,a_state) then
setprop(base,a_state,unsetvalue)
end
basepos=base
@@ -25748,34 +26546,59 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local current=start
local last=getnext(stop)
while current~=last do
- local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local char=getchar(current)
+ local target=nil
+ local cn=getnext(current)
local tpm=twopart_mark[char]
- if tpm then
+ while tpm do
local extra=copy_node(current)
copyinjection(extra,current)
char=tpm[1]
setchar(current,char)
setchar(extra,tpm[2])
head=insert_node_after(head,current,extra)
+ tpm=twopart_mark[char]
end
if not moved[current] and dependent_vowel[char] then
- if pre_mark[char] then
+ if pre_mark[char] then
moved[current]=true
local prev,next=getboth(current)
setlink(prev,next)
if current==stop then
stop=getprev(current)
end
- if halfpos==start then
+ local pos
+ if before_main[char] then
+ pos=basepos
+ else
+ pos=halfpos
+ end
+ local ppos=getprev(pos)
+ while ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) do
+ if getprop(ppos,a_state)==s_pref then
+ pos=ppos
+ end
+ ppos=getprev(ppos)
+ end
+ local ppos=getprev(pos)
+ while ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) and halant[ischar(ppos)] do
+ ppos=getprev(ppos)
+ if ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) and consonant[ischar(ppos)] then
+ pos=ppos
+ ppos=getprev(ppos)
+ else
+ break
+ end
+ end
+ if pos==start then
if head==start then
head=current
end
start=current
end
- setlink(getprev(halfpos),current)
- setlink(current,halfpos)
- halfpos=current
- elseif above_mark[char] then
+ setlink(getprev(pos),current)
+ setlink(current,pos)
+ elseif above_mark[char] then
target=basepos
if subpos==basepos then
subpos=current
@@ -25784,13 +26607,23 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
postpos=current
end
basepos=current
- elseif below_mark[char] then
+ elseif below_mark[char] then
target=subpos
if postpos==subpos then
postpos=current
end
subpos=current
- elseif post_mark[char] then
+ elseif post_mark[char] then
+ local n=getnext(postpos)
+ while n do
+ local v=ischar(n,font)
+ if nukta[v] or stress_tone_mark[v] or vowel_modifier[v] then
+ postpos=n
+ else
+ break
+ end
+ n=getnext(n)
+ end
target=postpos
postpos=current
end
@@ -25809,7 +26642,35 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
current=cn
end
- local current,c=start,nil
+ local current=getnext(start)
+ local last=getnext(stop)
+ while current~=last do
+ local char=getchar(current)
+ local cn=getnext(current)
+ if halant[char] and ra[ischar(cn)] and getprop(cn,a_state)~=s_rphf and getprop(cn,a_state)~=s_blwf then
+ if after_main[ischar(cn)] then
+ local prev=getprev(current)
+ local next=getnext(cn)
+ local bpn=getnext(basepos)
+ while bpn and dependent_vowel[ischar(bpn)] do
+ basepos=bpn
+ bpn=getnext(bpn)
+ end
+ if basepos~=prev then
+ setlink(prev,next)
+ setlink(cn,getnext(basepos))
+ setlink(basepos,current)
+ if cn==stop then
+ stop=prev
+ end
+ cn=next
+ end
+ end
+ end
+ current=cn
+ end
+ local current=start
+ local c=nil
while current~=stop do
local char=getchar(current)
if halant[char] or stress_tone_mark[char] then
@@ -25928,7 +26789,25 @@ local function analyze_next_chars_one(c,font,variant)
if not v then
return c
end
- if dependent_vowel[v] then
+ local already_pre_mark
+ local already_above_mark
+ local already_below_mark
+ local already_post_mark
+ while dependent_vowel[v] do
+ local vowels=twopart_mark[v] or { v }
+ for k,v in next,vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark=true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark=true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark=true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark=true
+ else
+ return c
+ end
+ end
c=getnext(c)
n=getnext(c)
if not n then
@@ -26094,7 +26973,25 @@ local function analyze_next_chars_two(c,font)
end
end
else
- if dependent_vowel[v] then
+ local already_pre_mark
+ local already_above_mark
+ local already_below_mark
+ local already_post_mark
+ while dependent_vowel[v] do
+ local vowels=twopart_mark[v] or { v }
+ for k,v in next,vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark=true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark=true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark=true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark=true
+ else
+ return c
+ end
+ end
c=n
n=getnext(c)
if not n then
@@ -26161,6 +27058,7 @@ local function method_one(head,font,attr)
local start=true
local done=false
local nbspaces=0
+ local syllabe=0
while current do
local char=ischar(current,font)
if char then
@@ -26297,6 +27195,15 @@ local function method_one(head,font,attr)
end
end
if syllablestart~=syllableend then
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
head,current,nbspaces=reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current=getnext(current)
end
@@ -26335,6 +27242,20 @@ local function method_one(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
+ current=head
+ local n=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ if n==0 and not getprop(current,a_state) then
+ setprop(current,a_state,s_init)
+ end
+ n=n+1
+ else
+ n=0
+ end
+ current=getnext(current)
+ end
return head,done
end
local function method_two(head,font,attr)
@@ -26403,7 +27324,7 @@ local function method_two(head,font,attr)
end
if not syllableend and show_syntax_errors then
local char=ischar(current,font)
- if char and not getprop(current,a_state) then
+ if char and not getprop(current,a_state) then
local mark=mark_four[char]
if mark then
head,current=inject_syntax_error(head,current,char)
@@ -26416,6 +27337,20 @@ local function method_two(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
+ current=head
+ local n=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ if n==0 and not getprop(current,a_state) then
+ setprop(current,a_state,s_init)
+ end
+ n=n+1
+ else
+ n=0
+ end
+ current=getnext(current)
+ end
return head,done
end
for i=1,nofscripts do
@@ -26423,10 +27358,10 @@ for i=1,nofscripts do
methods[scripts_two[i]]=method_two
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-osd”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-osd”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ocl” 280ad7888c7c386010598e9fdb83f466] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ocl” b720867fb19a23f0b50377efd2a3c54a] ---
if not modules then modules={} end modules ['font-ocl']={
version=1.001,
@@ -26636,32 +27571,17 @@ do
local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
local hashed={}
local cache={}
- if epdf then
- local openpdf=epdf.openMemStream
- function otf.storepdfdata(pdf)
- local done=hashed[pdf]
- if not done then
- nofstreams=nofstreams+1
- local o,n=openpdf(pdf,#pdf,f_name(nofstreams))
- cache[n]=o
- done=f_used(n)
- hashed[pdf]=done
- end
- return done
- end
- else
- local openpdf=pdfe.new
- function otf.storepdfdata(pdf)
- local done=hashed[pdf]
- if not done then
- nofstreams=nofstreams+1
- local f=f_name(nofstreams)
- local n=openpdf(pdf,#pdf,f)
- done=f_used(n)
- hashed[pdf]=done
- end
- return done
+ local openpdf=pdfe.new
+ function otf.storepdfdata(pdf)
+ local done=hashed[pdf]
+ if not done then
+ nofstreams=nofstreams+1
+ local f=f_name(nofstreams)
+ local n=openpdf(pdf,#pdf,f)
+ done=f_used(n)
+ hashed[pdf]=done
end
+ return done
end
end
local function pdftovirtual(tfmdata,pdfshapes,kind)
@@ -26924,10 +27844,10 @@ fonts.handlers.otf.features.register {
}
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-ocl”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-ocl”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otc” 95a4ff28ba4afb55a978a4aecfd688bf] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otc” 95a4ff28ba4afb55a978a4aecfd688bf] ---
if not modules then modules={} end modules ['font-otc']={
version=1.001,
@@ -27677,10 +28597,10 @@ end
otf.enhancers.enhance=enhance
otf.enhancers.register("check extra features",enhance)
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-otc”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-otc”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-onr” 20b0d2753f58ff91180947ce4078571e] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-onr” 20b0d2753f58ff91180947ce4078571e] ---
if not modules then modules={} end modules ['font-onr']={
version=1.001,
@@ -28052,10 +28972,10 @@ function readers.getinfo(filename)
end
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-onr”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-onr”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-one” 987c5c5ed3754ad2feab80985067d59e] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-one” 987c5c5ed3754ad2feab80985067d59e] ---
if not modules then modules={} end modules ['font-one']={
version=1.001,
@@ -28766,10 +29686,10 @@ registerafmenhancer("normalize features",enhance_normalize_features)
registerafmenhancer("check extra features",otfenhancers.enhance)
registerafmenhancer("fix names",enhance_fix_names)
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-one”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-one”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-afk” 54d554530e75c57c56ee76234724e26d] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-afk” 54d554530e75c57c56ee76234724e26d] ---
if not modules then modules={} end modules ['font-afk']={
version=1.001,
@@ -28936,10 +29856,10 @@ fonts.handlers.afm.helpdata={
}
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-afk”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-afk”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-tfm” 3bbba3214fd0b8c6f35ad85592fc2917] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-tfm” 3bbba3214fd0b8c6f35ad85592fc2917] ---
if not modules then modules={} end modules ['luatex-fonts-tfm']={
version=1.001,
@@ -29454,10 +30374,10 @@ registertfmfeature {
}
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-tfm”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-tfm”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-lua” 55b281fb98f7bd848fc19928f376f647] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-lua” 55b281fb98f7bd848fc19928f376f647] ---
if not modules then modules={} end modules ['font-lua']={
version=1.001,
@@ -29497,10 +30417,10 @@ function readers.lua(specification)
return check_lua(specification,fullname)
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-lua”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-lua”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-def” f66c365dae4499f982d8bf16e5d37de3] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-def” f66c365dae4499f982d8bf16e5d37de3] ---
if not modules then modules={} end modules ['font-def']={
version=1.001,
@@ -29902,10 +30822,10 @@ function font.getfont(id)
end
callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-def”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-def”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-def” 5ad79120ebc5e60f4d322fb3ee13bffe] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-def” 5ad79120ebc5e60f4d322fb3ee13bffe] ---
if not modules then modules={} end modules ['luatex-fonts-def']={
version=1.001,
@@ -29986,10 +30906,10 @@ function fonts.definers.applypostprocessors(tfmdata)
return tfmdata
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-def”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-def”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-ext” 01015ab3758cdc2af29394e6d502a91a] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-ext” 01015ab3758cdc2af29394e6d502a91a] ---
if not modules then modules={} end modules ['luatex-fonts-ext']={
version=1.001,
@@ -30175,10 +31095,10 @@ registerotffeature {
}
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-ext”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-ext”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-tex” 77c374b0ef00c2fb12188ec42beb4257] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-tex” 77c374b0ef00c2fb12188ec42beb4257] ---
if not modules then modules={} end modules ['font-imp-tex']={
version=1.001,
@@ -30277,10 +31197,10 @@ registerotffeature {
description="arabic digits",
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-tex”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-tex”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-ligatures” 043daa4fcccf2560868da359d71d3a4a] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-ligatures” 043daa4fcccf2560868da359d71d3a4a] ---
if not modules then modules={} end modules ['font-imp-ligatures']={
version=1.001,
@@ -30394,10 +31314,10 @@ if context then
}
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-ligatures”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-ligatures”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-italics” fe1ca80fb5ea4a2f8d2d5c484e7ba913] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-italics” fe1ca80fb5ea4a2f8d2d5c484e7ba913] ---
if not modules then modules={} end modules ['font-imp-italics']={
version=1.001,
@@ -30503,10 +31423,10 @@ if context then
registerafmfeature(dimensions_specification)
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-italics”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-italics”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-effects” 73a660359a0ec71e44cc2b7225a715ac] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-effects” 73a660359a0ec71e44cc2b7225a715ac] ---
if not modules then modules={} end modules ['font-imp-effects']={
version=1.001,
@@ -30863,10 +31783,10 @@ local specification={
registerotffeature(specification)
registerafmfeature(specification)
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “font-imp-effects”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “font-imp-effects”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-lig” b9dbe77ce747d4c35bb2a20ffbe5aa51] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-lig” b9dbe77ce747d4c35bb2a20ffbe5aa51] ---
fonts.handlers.otf.addfeature {
@@ -32935,10 +33855,10 @@ fonts.handlers.otf.addfeature {
["type"]="ligature",
}
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-lig”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-lig”] ---
-do --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-gbn” d25472d54c4841db43a745764a63533e] ---
+do --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-gbn” d25472d54c4841db43a745764a63533e] ---
if not modules then modules={} end modules ['luatex-fonts-gbn']={
version=1.001,
@@ -33203,7 +34123,7 @@ function nodes.simple_font_handler(head,groupcode,size,packtype,direction)
return head
end
-end --- [luaotfload, fontloader-2019-05-18.lua scope for “fonts-gbn”] ---
+end --- [luaotfload, fontloader-2019-07-14.lua scope for “fonts-gbn”] ---
--- vim:ft=lua:sw=2:ts=8:et:tw=79
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-chr.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-chr.lua
index 14a55d7b011..0ac0eab14e1 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-chr.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-chr.lua
@@ -1,4 +1,4 @@
--- automatically generated from context data
+-- automatically generated from context data (luatex-basics-prepare.tex)
characters = characters or { }
@@ -446,7 +446,6 @@ characters.classifiers={
[1803]=6,
[1804]=6,
[1805]=6,
- [1807]=6,
[1808]=3,
[1809]=5,
[1810]=2,
@@ -627,6 +626,9 @@ characters.classifiers={
[2040]=6,
[2041]=6,
[2042]=2,
+ [2045]=5,
+ [2046]=6,
+ [2047]=6,
[2070]=5,
[2071]=5,
[2072]=5,
@@ -716,6 +718,7 @@ characters.classifiers={
[2235]=2,
[2236]=2,
[2237]=2,
+ [2259]=5,
[2260]=5,
[2261]=5,
[2262]=5,
@@ -792,6 +795,7 @@ characters.classifiers={
[2509]=5,
[2530]=5,
[2531]=5,
+ [2558]=5,
[2561]=5,
[2562]=5,
[2620]=5,
@@ -840,6 +844,7 @@ characters.classifiers={
[3008]=5,
[3021]=5,
[3072]=5,
+ [3076]=5,
[3134]=5,
[3135]=5,
[3136]=5,
@@ -901,6 +906,7 @@ characters.classifiers={
[3767]=5,
[3768]=5,
[3769]=5,
+ [3770]=5,
[3771]=5,
[3772]=5,
[3784]=5,
@@ -1139,6 +1145,7 @@ characters.classifiers={
[6261]=2,
[6262]=2,
[6263]=2,
+ [6264]=2,
[6272]=4,
[6273]=4,
[6274]=4,
@@ -1539,6 +1546,7 @@ characters.classifiers={
[43247]=5,
[43248]=5,
[43249]=5,
+ [43263]=5,
[43302]=5,
[43303]=5,
[43304]=5,
@@ -1702,6 +1710,83 @@ characters.classifiers={
[68525]=2,
[68526]=2,
[68527]=4,
+ [68864]=1,
+ [68865]=2,
+ [68866]=2,
+ [68867]=2,
+ [68868]=2,
+ [68869]=2,
+ [68870]=2,
+ [68871]=2,
+ [68872]=2,
+ [68873]=2,
+ [68874]=2,
+ [68875]=2,
+ [68876]=2,
+ [68877]=2,
+ [68878]=2,
+ [68879]=2,
+ [68880]=2,
+ [68881]=2,
+ [68882]=2,
+ [68883]=2,
+ [68884]=2,
+ [68885]=2,
+ [68886]=2,
+ [68887]=2,
+ [68888]=2,
+ [68889]=2,
+ [68890]=2,
+ [68891]=2,
+ [68892]=2,
+ [68893]=2,
+ [68894]=2,
+ [68895]=2,
+ [68896]=2,
+ [68897]=2,
+ [68898]=3,
+ [68899]=2,
+ [68900]=5,
+ [68901]=5,
+ [68902]=5,
+ [68903]=5,
+ [69424]=2,
+ [69425]=2,
+ [69426]=2,
+ [69427]=3,
+ [69428]=2,
+ [69429]=2,
+ [69430]=2,
+ [69431]=2,
+ [69432]=2,
+ [69433]=2,
+ [69434]=2,
+ [69435]=2,
+ [69436]=2,
+ [69437]=2,
+ [69438]=2,
+ [69439]=2,
+ [69440]=2,
+ [69441]=2,
+ [69442]=2,
+ [69443]=2,
+ [69444]=2,
+ [69445]=4,
+ [69446]=5,
+ [69447]=5,
+ [69448]=5,
+ [69449]=5,
+ [69450]=5,
+ [69451]=5,
+ [69452]=5,
+ [69453]=5,
+ [69454]=5,
+ [69455]=5,
+ [69456]=5,
+ [69457]=2,
+ [69458]=2,
+ [69459]=2,
+ [69460]=3,
[69633]=5,
[69688]=5,
[69689]=5,
@@ -1727,6 +1812,8 @@ characters.classifiers={
[69814]=5,
[69817]=5,
[69818]=5,
+ [69821]=4,
+ [69837]=4,
[69888]=5,
[69889]=5,
[69890]=5,
@@ -1776,6 +1863,7 @@ characters.classifiers={
[70378]=5,
[70400]=5,
[70401]=5,
+ [70459]=5,
[70460]=5,
[70464]=5,
[70502]=5,
@@ -1802,6 +1890,7 @@ characters.classifiers={
[70723]=5,
[70724]=5,
[70726]=5,
+ [70750]=5,
[70835]=5,
[70836]=5,
[70837]=5,
@@ -1855,6 +1944,24 @@ characters.classifiers={
[71465]=5,
[71466]=5,
[71467]=5,
+ [71727]=5,
+ [71728]=5,
+ [71729]=5,
+ [71730]=5,
+ [71731]=5,
+ [71732]=5,
+ [71733]=5,
+ [71734]=5,
+ [71735]=5,
+ [71737]=5,
+ [71738]=5,
+ [72148]=5,
+ [72149]=5,
+ [72150]=5,
+ [72151]=5,
+ [72154]=5,
+ [72155]=5,
+ [72160]=5,
[72193]=5,
[72194]=5,
[72195]=5,
@@ -1962,6 +2069,12 @@ characters.classifiers={
[73028]=5,
[73029]=5,
[73031]=5,
+ [73104]=5,
+ [73105]=5,
+ [73109]=5,
+ [73111]=5,
+ [73459]=5,
+ [73460]=5,
[92912]=5,
[92913]=5,
[92914]=5,
@@ -1974,6 +2087,7 @@ characters.classifiers={
[92980]=5,
[92981]=5,
[92982]=5,
+ [94031]=5,
[94095]=5,
[94096]=5,
[94097]=5,
@@ -2170,6 +2284,17 @@ characters.classifiers={
[122920]=5,
[122921]=5,
[122922]=5,
+ [123184]=5,
+ [123185]=5,
+ [123186]=5,
+ [123187]=5,
+ [123188]=5,
+ [123189]=5,
+ [123190]=5,
+ [123628]=5,
+ [123629]=5,
+ [123630]=5,
+ [123631]=5,
[125136]=5,
[125137]=5,
[125138]=5,
@@ -2273,6 +2398,7 @@ characters.indicgroups={
[2632]=true,
[2635]=true,
[2636]=true,
+ [2690]=true,
[2757]=true,
[2759]=true,
[2760]=true,
@@ -2284,7 +2410,6 @@ characters.indicgroups={
[3136]=true,
[3142]=true,
[3143]=true,
- [3144]=true,
[3146]=true,
[3147]=true,
[3148]=true,
@@ -2292,6 +2417,21 @@ characters.indicgroups={
[3263]=true,
[3270]=true,
[3406]=true,
+ [4141]=true,
+ [4142]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4150]=true,
+ [4154]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4229]=true,
+ [4230]=true,
+ [4253]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -2310,6 +2450,8 @@ characters.indicgroups={
[43247]=true,
[43248]=true,
[43249]=true,
+ [43493]=true,
+ [43644]=true,
},
["after_half"]={},
["after_main"]={
@@ -2331,6 +2473,7 @@ characters.indicgroups={
[2626]=true,
[2672]=true,
[2673]=true,
+ [2735]=true,
[2750]=true,
[2752]=true,
[2753]=true,
@@ -2494,10 +2637,24 @@ characters.indicgroups={
[3170]=true,
[3171]=true,
[3260]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3426]=true,
[3427]=true,
+ [4143]=true,
+ [4144]=true,
+ [4151]=true,
+ [4153]=true,
+ [4157]=true,
+ [4158]=true,
+ [4184]=true,
+ [4185]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4226]=true,
+ [4237]=true,
},
["consonant"]={
[2325]=true,
@@ -2827,6 +2984,117 @@ characters.indicgroups={
[3384]=true,
[3385]=true,
[3386]=true,
+ [4096]=true,
+ [4097]=true,
+ [4098]=true,
+ [4099]=true,
+ [4100]=true,
+ [4101]=true,
+ [4102]=true,
+ [4103]=true,
+ [4104]=true,
+ [4105]=true,
+ [4106]=true,
+ [4107]=true,
+ [4108]=true,
+ [4109]=true,
+ [4110]=true,
+ [4111]=true,
+ [4112]=true,
+ [4113]=true,
+ [4114]=true,
+ [4115]=true,
+ [4116]=true,
+ [4117]=true,
+ [4118]=true,
+ [4119]=true,
+ [4120]=true,
+ [4121]=true,
+ [4122]=true,
+ [4123]=true,
+ [4124]=true,
+ [4125]=true,
+ [4126]=true,
+ [4127]=true,
+ [4128]=true,
+ [4155]=true,
+ [4156]=true,
+ [4157]=true,
+ [4158]=true,
+ [4159]=true,
+ [4176]=true,
+ [4177]=true,
+ [4186]=true,
+ [4187]=true,
+ [4188]=true,
+ [4189]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4193]=true,
+ [4197]=true,
+ [4198]=true,
+ [4206]=true,
+ [4207]=true,
+ [4208]=true,
+ [4213]=true,
+ [4214]=true,
+ [4215]=true,
+ [4216]=true,
+ [4217]=true,
+ [4218]=true,
+ [4219]=true,
+ [4220]=true,
+ [4221]=true,
+ [4222]=true,
+ [4223]=true,
+ [4224]=true,
+ [4225]=true,
+ [4226]=true,
+ [4238]=true,
+ [43488]=true,
+ [43489]=true,
+ [43490]=true,
+ [43491]=true,
+ [43492]=true,
+ [43495]=true,
+ [43496]=true,
+ [43497]=true,
+ [43498]=true,
+ [43499]=true,
+ [43500]=true,
+ [43501]=true,
+ [43502]=true,
+ [43503]=true,
+ [43514]=true,
+ [43515]=true,
+ [43516]=true,
+ [43517]=true,
+ [43518]=true,
+ [43616]=true,
+ [43617]=true,
+ [43618]=true,
+ [43619]=true,
+ [43620]=true,
+ [43621]=true,
+ [43622]=true,
+ [43623]=true,
+ [43624]=true,
+ [43625]=true,
+ [43626]=true,
+ [43628]=true,
+ [43629]=true,
+ [43630]=true,
+ [43631]=true,
+ [43633]=true,
+ [43634]=true,
+ [43635]=true,
+ [43636]=true,
+ [43637]=true,
+ [43638]=true,
+ [43642]=true,
+ [43646]=true,
+ [43647]=true,
},
["dependent_vowel"]={
[2362]=true,
@@ -2855,13 +3123,14 @@ characters.indicgroups={
[2403]=true,
[2494]=true,
[2495]=true,
- [2496]=true,
[2497]=true,
[2498]=true,
[2499]=true,
[2500]=true,
[2503]=true,
[2504]=true,
+ [2507]=true,
+ [2508]=true,
[2622]=true,
[2623]=true,
[2624]=true,
@@ -2936,6 +3205,8 @@ characters.indicgroups={
[3274]=true,
[3275]=true,
[3276]=true,
+ [3285]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3390]=true,
@@ -2954,6 +3225,35 @@ characters.indicgroups={
[3415]=true,
[3426]=true,
[3427]=true,
+ [4139]=true,
+ [4140]=true,
+ [4141]=true,
+ [4142]=true,
+ [4143]=true,
+ [4144]=true,
+ [4145]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4182]=true,
+ [4183]=true,
+ [4184]=true,
+ [4185]=true,
+ [4194]=true,
+ [4199]=true,
+ [4200]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4227]=true,
+ [4228]=true,
+ [4229]=true,
+ [4230]=true,
+ [4252]=true,
+ [4253]=true,
+ [43493]=true,
},
["halant"]={
[2381]=true,
@@ -3111,6 +3411,20 @@ characters.indicgroups={
[3423]=true,
[3424]=true,
[3425]=true,
+ [4129]=true,
+ [4130]=true,
+ [4131]=true,
+ [4132]=true,
+ [4133]=true,
+ [4134]=true,
+ [4135]=true,
+ [4136]=true,
+ [4137]=true,
+ [4138]=true,
+ [4178]=true,
+ [4179]=true,
+ [4180]=true,
+ [4181]=true,
},
["nukta"]={
[2364]=true,
@@ -3132,8 +3446,6 @@ characters.indicgroups={
[2383]=true,
[2494]=true,
[2496]=true,
- [2503]=true,
- [2504]=true,
[2622]=true,
[2624]=true,
[2750]=true,
@@ -3150,16 +3462,12 @@ characters.indicgroups={
[3139]=true,
[3140]=true,
[3262]=true,
- [3264]=true,
[3265]=true,
[3266]=true,
[3267]=true,
[3268]=true,
- [3271]=true,
- [3272]=true,
- [3274]=true,
- [3275]=true,
[3276]=true,
+ [3285]=true,
[3390]=true,
[3391]=true,
[3392]=true,
@@ -3168,25 +3476,58 @@ characters.indicgroups={
[3395]=true,
[3396]=true,
[3415]=true,
+ [4139]=true,
+ [4140]=true,
+ [4152]=true,
+ [4155]=true,
+ [4182]=true,
+ [4183]=true,
+ [4194]=true,
+ [4195]=true,
+ [4196]=true,
+ [4199]=true,
+ [4200]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4227]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [4252]=true,
+ [43643]=true,
+ [43645]=true,
},
["pre_mark"]={
[2367]=true,
[2382]=true,
[2495]=true,
+ [2503]=true,
+ [2504]=true,
[2623]=true,
[2751]=true,
[2887]=true,
- [2888]=true,
[3014]=true,
[3015]=true,
[3016]=true,
[3398]=true,
[3399]=true,
[3400]=true,
+ [4145]=true,
+ [4228]=true,
},
["ra"]={
[2352]=true,
[2480]=true,
+ [2544]=true,
[2608]=true,
[2736]=true,
[2864]=true,
@@ -3200,17 +3541,43 @@ characters.indicgroups={
[2386]=true,
[2387]=true,
[2388]=true,
- [2507]=true,
- [2508]=true,
- [3277]=true,
- [3405]=true,
+ [4151]=true,
+ [4195]=true,
+ [4196]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4237]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [43643]=true,
+ [43644]=true,
+ [43645]=true,
},
["twopart_mark"]={
+ [2507]={ 2503, 2494 },
+ [2508]={ 2503, 2519 },
+ [2888]={ 2887, 2902 },
[2891]={ 2887, 2878 },
[2892]={ 2887, 2903 },
[3018]={ 3014, 3006 },
[3019]={ 3015, 3006 },
[3020]={ 3014, 3031 },
+ [3144]={ 3142, 3158 },
+ [3264]={ 3263, 3285 },
+ [3271]={ 3270, 3285 },
+ [3272]={ 3270, 3286 },
+ [3274]={ 3270, 3266 },
+ [3275]={ 3274, 3285 },
[3402]={ 3398, 3390 },
[3403]={ 3399, 3390 },
[3404]={ 3398, 3415 },
@@ -3220,8 +3587,13 @@ characters.indicgroups={
[2305]=true,
[2306]=true,
[2307]=true,
+ [2433]=true,
[3330]=true,
[3331]=true,
+ [4150]=true,
+ [4152]=true,
+ [4153]=true,
+ [4154]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -3238,9 +3610,10 @@ characters.indicgroups={
[43245]=true,
[43246]=true,
[43247]=true,
- [43248]=true,
[43249]=true,
},
}
--- done
+-- done, uncomment for testing:
+
+-- return characters.indicgroups
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-nod.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-nod.lua
index 2b996829e4c..418b9d69d42 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-nod.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-basics-nod.lua
@@ -12,7 +12,7 @@ end
-- Don't depend on code here as it is only needed to complement the font handler
-- code. I will move some to another namespace as I don't see other macro packages
--- use the context logic. It's a subset anyway.
+-- use the context logic. It's a subset anyway. More will be stripped.
-- Attributes:
@@ -73,75 +73,6 @@ nodes.disccodes = disccodes
nodes.handlers.protectglyphs = node.protect_glyphs -- beware: nodes!
nodes.handlers.unprotectglyphs = node.unprotect_glyphs -- beware: nodes!
--- These are now gone in generic as they are context specific.
-
--- local flush_node = node.flush_node
--- local remove_node = node.remove
--- local traverse_id = node.traverse_id
---
--- function nodes.remove(head, current, free_too)
--- local t = current
--- head, current = remove_node(head,current)
--- if t then
--- if free_too then
--- flush_node(t)
--- t = nil
--- else
--- t.next, t.prev = nil, nil
--- end
--- end
--- return head, current, t
--- end
---
--- function nodes.delete(head,current)
--- return nodes.remove(head,current,true)
--- end
-
------ getfield = node.getfield
------ setfield = node.setfield
-
------.getfield = getfield
------.setfield = setfield
------.getattr = getfield
------.setattr = setfield
-
------.tostring = node.tostring or tostring
------.copy = node.copy
------.copy_node = node.copy
------.copy_list = node.copy_list
------.delete = node.delete
------.dimensions = node.dimensions
------.end_of_math = node.end_of_math
------.flush_list = node.flush_list
------.flush_node = node.flush_node
------.flush = node.flush_node
------.free = node.free
------.insert_after = node.insert_after
------.insert_before = node.insert_before
------.hpack = node.hpack
------.new = node.new
------.tail = node.tail
------.traverse = node.traverse
------.traverse_id = node.traverse_id
------.slide = node.slide
------.vpack = node.vpack
-
------.first_glyph = node.first_glyph
------.has_glyph = node.has_glyph or node.first_glyph
------.current_attr = node.current_attr
------.has_field = node.has_field
------.usedlist = node.usedlist
------.protrusion_skippable = node.protrusion_skippable
------.write = node.write
-
------.has_attribute = node.has_attribute
------.set_attribute = node.set_attribute
------.unset_attribute = node.unset_attribute
-
------.protect_glyphs = node.protect_glyphs
------.unprotect_glyphs = node.unprotect_glyphs
------.mlist_to_hlist = node.mlist_to_hlist
-
-- in generic code, at least for some time, we stay nodes, while in context
-- we can go nuts (e.g. experimental); this split permits us us keep code
-- used elsewhere stable but at the same time play around in context
@@ -166,16 +97,12 @@ nuts.getattr = direct.get_attribute
nuts.getboth = direct.getboth
nuts.getchar = direct.getchar
nuts.getcomponents = direct.getcomponents
-----.getdepth = direct.getdepth
-----.getdir = direct.getdir
nuts.getdirection = direct.getdirection
nuts.getdisc = direct.getdisc
nuts.getfield = direct.getfield
nuts.getfont = direct.getfont
-----.getheight = direct.getheight
nuts.getid = direct.getid
nuts.getkern = direct.getkern
-----.getleader = direct.getleader
nuts.getlist = direct.getlist
nuts.getnext = direct.getnext
nuts.getoffsets = direct.getoffsets
@@ -186,15 +113,10 @@ nuts.setattr = direct.setfield
nuts.setboth = direct.setboth
nuts.setchar = direct.setchar
nuts.setcomponents = direct.setcomponents
-----.setdepth = direct.setdepth
-----.setdir = direct.setdir
nuts.setdirection = direct.setdirection
nuts.setdisc = direct.setdisc
nuts.setfield = setfield
-----.setfont = direct.setfont
-----.setheight = direct.setheight
nuts.setkern = direct.setkern
-----.setleader = direct.setleader
nuts.setlink = direct.setlink
nuts.setlist = direct.setlist
nuts.setnext = direct.setnext
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ocl.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ocl.lua
index 0976cdb21c0..d79ed657e02 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ocl.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ocl.lua
@@ -330,39 +330,19 @@ do
local hashed = { }
local cache = { }
- if epdf then
-
- local openpdf = epdf.openMemStream
-
- function otf.storepdfdata(pdf)
- local done = hashed[pdf]
- if not done then
- nofstreams = nofstreams + 1
- local o, n = openpdf(pdf,#pdf,f_name(nofstreams))
- cache[n] = o -- we need to keep in mem
- done = f_used(n)
- hashed[pdf] = done
- end
- return done
+ local openpdf = pdfe.new
+ ----- prefix = "data:application/pdf,"
+
+ function otf.storepdfdata(pdf)
+ local done = hashed[pdf]
+ if not done then
+ nofstreams = nofstreams + 1
+ local f = f_name(nofstreams)
+ local n = openpdf(pdf,#pdf,f)
+ done = f_used(n)
+ hashed[pdf] = done
end
-
- else
-
- local openpdf = pdfe.new
- ----- prefix = "data:application/pdf,"
-
- function otf.storepdfdata(pdf)
- local done = hashed[pdf]
- if not done then
- nofstreams = nofstreams + 1
- local f = f_name(nofstreams)
- local n = openpdf(pdf,#pdf,f)
- done = f_used(n)
- hashed[pdf] = done
- end
- return done
- end
-
+ return done
end
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua
index 91cf1522c4c..203c1d79d40 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua
@@ -81,7 +81,7 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag
-- malayalam, oriya, tamil and tolugu but not all are checked. Also, some of the
-- code below might need to be adapted to the extra scripts.
-local insert, imerge, copy = table.insert, table.imerge, table.copy
+local insert, imerge, copy, tohash = table.insert, table.imerge, table.copy, table.tohash
local next, type = next, type
local report = logs.reporter("otf","devanagari")
@@ -143,6 +143,7 @@ local s_half = states.half
local s_pref = states.pref
local s_blwf = states.blwf
local s_pstf = states.pstf
+local s_init = states.init
local replace_all_nbsp = nil
@@ -209,10 +210,10 @@ if not indicgroups and characters then
local indicorders = {
bp = { }, -- before_postscript
ap = { }, -- after_postscript
- bs = { }, -- before_half
- as = { }, -- after_half
- bh = { }, -- before_subscript
- ah = { }, -- after_subscript
+ bs = { }, -- before_subscript
+ as = { }, -- after_subscript
+ bh = { }, -- before_half
+ ah = { }, -- after_half
bm = { }, -- before_main
am = { }, -- after_main
}
@@ -324,17 +325,11 @@ local zw_char = { -- both_joiners_true
}
local dflt_true = {
- dflt = true
+ dflt = true,
}
-local two_defaults = {
- dev2 = dflt_true,
-}
-
-local one_defaults = {
- dev2 = dflt_true,
- deva = dflt_true,
-}
+local two_defaults = { }
+local one_defaults = { }
local false_flags = { false, false, false, false }
@@ -367,7 +362,7 @@ local sequence_reorder_reph = {
}
local sequence_reorder_pre_base_reordering_consonants = {
- features = { dv03 = two_defaults },
+ features = { dv03 = one_defaults },
flags = false_flags,
name = "dv03_reorder_pre_base_reordering_consonants",
order = { "dv03" },
@@ -399,34 +394,20 @@ local sequence_remove_joiners = {
-- as it might depends on the font. Not that it's a bottleneck.
local basic_shaping_forms = {
- -- init = true, -- new
- -- abvs = true, -- new
akhn = true,
blwf = true,
- -- calt = true, -- new
cjct = true,
half = true,
- -- haln = true, -- new
nukt = true,
pref = true,
- -- pres = true, -- new
pstf = true,
- -- psts = true, -- new
rkrf = true,
rphf = true,
vatu = true,
+ locl = true,
}
local valid = {
- -- akhn = true, -- malayalam
- -- rphf = true,
- -- pref = true,
- -- half = true,
- -- blwf = true,
- -- pstf = true,
- -- pres = true, -- malayalam
- -- blws = true, -- malayalam
- -- psts = true, -- malayalam
abvs = true,
akhn = true,
blwf = true,
@@ -448,6 +429,7 @@ local valid = {
psts = true,
haln = true,
calt = true,
+ locl = true,
}
local scripts = { }
@@ -462,7 +444,7 @@ for i=1,nofscripts do
local two = scripts_two[i]
scripts[one] = true
scripts[two] = true
- two_defaults[one] = dflt_true
+ two_defaults[two] = dflt_true
one_defaults[one] = dflt_true
one_defaults[two] = dflt_true
end
@@ -483,28 +465,75 @@ local function initializedevanagi(tfmdata)
local sequences = resources.sequences
local sharedfeatures = tfmdata.shared.features
--
- local lastmatch = 0
- for s=1,#sequences do -- classify chars
+ gsubfeatures["dv01"] = two_defaults -- reorder matras
+ gsubfeatures["dv02"] = two_defaults -- reorder reph
+ gsubfeatures["dv03"] = one_defaults -- reorder pre base reordering consonants
+ gsubfeatures["dv04"] = one_defaults -- remove joiners
+ --
+ local reorder_pre_base_reordering_consonants = copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph = copy(sequence_reorder_reph)
+ local reorder_matras = copy(sequence_reorder_matras)
+ local remove_joiners = copy(sequence_remove_joiners)
+
+ local lastmatch = 0
+ for s=1,#sequences do -- classify chars and make sure basic_shaping_forms come first
local features = sequences[s].features
if features then
for k, v in next, features do
+ if k == "locl" then
+ local steps = sequences[s].steps
+ local nofsteps = sequences[s].nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, pre_mark do
+ local locl = coverage[k]
+ if locl then
+ if #locl > 0 then --contextchain; KE: is this right?
+ for j=1,#locl do
+ local ck = locl[j]
+ local f = ck[4]
+ local chainlookups = ck[6]
+ if chainlookups then
+ local chainlookup = chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local steps = chainstep.steps
+ local nofsteps = chainstep.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ locl = coverage[k]
+ end
+ end
+ end
+ end
+ end
+ end
+ if locl then
+ reorder_matras.steps[1].coverage[locl] = true
+ end
+ end
+ end
+ end
+ end
+ end
if basic_shaping_forms[k] then
- lastmatch = s
+ lastmatch = lastmatch + 1
+ if s ~= lastmatch then
+ table.insert(sequences, lastmatch, table.remove(sequences, s))
+ end
end
end
end
end
local insertindex = lastmatch + 1
--
- gsubfeatures["dv01"] = two_defaults -- reorder matras
- gsubfeatures["dv02"] = two_defaults -- reorder reph
- gsubfeatures["dv03"] = two_defaults -- reorder pre base reordering consonants
- gsubfeatures["dv04"] = one_defaults -- remove joiners
- --
- local reorder_pre_base_reordering_consonants = copy(sequence_reorder_pre_base_reordering_consonants)
- local reorder_reph = copy(sequence_reorder_reph)
- local reorder_matras = copy(sequence_reorder_matras)
- local remove_joiners = copy(sequence_remove_joiners)
+ if tfmdata.properties.language then
+ dflt_true[tfmdata.properties.language] = true
+ end
--
insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
insert(sequences,insertindex,reorder_reph)
@@ -512,6 +541,8 @@ local function initializedevanagi(tfmdata)
insert(sequences,insertindex,remove_joiners)
--
local blwfcache = { }
+ local vatucache = { }
+ local pstfcache = { }
local seqsubset = { }
local rephstep = {
coverage = { } -- will be adapted each work
@@ -520,6 +551,8 @@ local function initializedevanagi(tfmdata)
reph = false,
vattu = false,
blwfcache = blwfcache,
+ vatucache = vatucache,
+ pstfcache = pstfcache,
seqsubset = seqsubset,
reorderreph = rephstep,
@@ -539,41 +572,148 @@ local function initializedevanagi(tfmdata)
local features = sequence.features
local has_rphf = features.rphf
local has_blwf = features.blwf
- if has_rphf and has_rphf.deva then
+ local has_vatu = features.vatu
+ local has_pstf = features.pstf
+ if has_rphf and has_rphf[script] then
devanagari.reph = true
- elseif has_blwf and has_blwf.deva then
+ elseif (has_blwf and has_blwf[script] ) or (has_vatu and has_vatu[script] ) then
devanagari.vattu = true
for i=1,nofsteps do
local step = steps[i]
local coverage = step.coverage
if coverage then
for k, v in next, coverage do
- if not blwfcache[k] then
- blwfcache[k] = v
+ for h, w in next, halant do
+ if v[h] then
+ if not blwfcache[k] then
+ blwfcache[k] = v
+ end
+ end
+ if has_vatu and has_vatu[script] and not vatucache[k] then
+ vatucache[k] = v
+ end
+ end
+ end
+ end
+ end
+ elseif has_pstf and has_pstf[script] then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, coverage do
+ if not pstfcache[k] then
+ pstfcache[k] = v
+ end
+ end
+ for k, v in next, ra do
+ local r = coverage[k]
+ if r then
+ local found = false
+ if #r > 0 then -- contextchain; KE: is this right?
+ for j=1,#r do
+ local ck = r[j]
+ local f = ck[4]
+ local chainlookups = ck[6]
+ if chainlookups and chainlookups[f] then --KE: why is check for chainlookups[f] necessacy???
+ local chainlookup = chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local steps = chainstep.steps
+ local nofsteps = chainstep.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local h = coverage[k]
+ if h then
+ for k, v in next, h do
+ found = v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found] = true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k, v in next, r do
+ found = v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found] = true
+ break
+ end
+ end
+ end
+ if found then
+ break
+ end
end
end
end
end
end
for kind, spec in next, features do
- -- if spec.dev2 and valid[kind] then
if valid[kind] and valid_two(spec)then
for i=1,nofsteps do
local step = steps[i]
local coverage = step.coverage
if coverage then
- local reph = false
+ local reph, rephbase = false, false
if kind == "rphf" then
-- rphf acts on consonant + halant
for k, v in next, ra do
local r = coverage[k]
if r then
+ rephbase = k
local h = false
- for k, v in next, halant do
- local h = r[k]
- if h then
- reph = h.ligature or false
- break
+ if #r > 0 then --contextchain; KE: is this right?
+ for j=1,#r do
+ local ck = r[j]
+ local f = ck[4]
+ local chainlookups = ck[6]
+ if chainlookups then
+ local chainlookup = chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local steps = chainstep.steps
+ local nofsteps = chainstep.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local r = coverage[k]
+ if r then
+ for k, v in next, halant do
+ local h = r[k]
+ if h then
+ reph = h.ligature or false
+ break
+ end
+ end
+ if h then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k, v in next, halant do
+ local h = r[k]
+ if h then
+ reph = h.ligature or false
+ break
+ end
end
end
if reph then
@@ -582,7 +722,7 @@ local function initializedevanagi(tfmdata)
end
end
end
- seqsubset[#seqsubset+1] = { kind, coverage, reph }
+ seqsubset[#seqsubset+1] = { kind, coverage, reph, rephbase }
end
end
end
@@ -597,11 +737,46 @@ local function initializedevanagi(tfmdata)
local h = coverage[k]
if h then
local found = false
- for k, v in next, h do
- found = v and v.ligature
- if found then
- pre_base_reordering_consonants[k] = found
- break
+ if #h > 0 then -- contextchain; KE: is this right?
+ for j=1,#h do
+ local ck = h[j]
+ local f = ck[4]
+ local chainlookups = ck[6]
+ if chainlookups then
+ local chainlookup = chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local steps = chainstep.steps
+ local nofsteps = chainstep.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local h = coverage[k]
+ if h then
+ for k, v in next, h do
+ found = v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found] = true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k, v in next, h do
+ found = v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found] = true
+ break
+ end
end
end
if found then
@@ -615,45 +790,17 @@ local function initializedevanagi(tfmdata)
end
end
--
- -- needs checking: this might be needed per instance ?
- --
- if script == "deva" then
- sharedfeatures["dv04"] = true -- dv04_remove_joiners
- elseif script == "dev2" then
+ if two_defaults[script] then
sharedfeatures["dv01"] = true -- dv01_reorder_matras
sharedfeatures["dv02"] = true -- dv02_reorder_reph
sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
sharedfeatures["dv04"] = true -- dv04_remove_joiners
- elseif script == "mlym" then
- sharedfeatures["pstf"] = true
- elseif script == "mlm2" then
- sharedfeatures["pstf"] = true
- sharedfeatures["pref"] = true
+ elseif one_defaults[script] then
sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
- gsubfeatures ["dv03"] = two_defaults -- reorder pre base reordering consonants
- insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
- -- elseif script == "beng" then
- -- elseif script == "bng2" then
- -- elseif script == "gujr" then
- -- elseif script == "gjr2" then
- -- elseif script == "guru" then
- -- elseif script == "gur2" then
- -- elseif script == "knda" then
- -- elseif script == "knd2" then
- elseif script == "taml" then
sharedfeatures["dv04"] = true -- dv04_remove_joiners
-sharedfeatures["pstf"] = true
- elseif script == "tml2" then
--- sharedfeatures["pstf"] = true
--- sharedfeatures["pref"] = true
--- sharedfeatures["dv01"] = true -- dv01_reorder_matras
--- sharedfeatures["dv02"] = true -- dv02_reorder_reph
--- sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
--- sharedfeatures["dv04"] = true -- dv04_remove_joiners
- -- elseif script == "telu" then
- -- elseif script == "tel2" then
- else
- report("todo: enable the right features for script %a",script)
+ end
+ if script == "mlym" or script == "taml" then
+ devanagari.left_matra_before_base = true
end
end
end
@@ -695,6 +842,8 @@ local function initialize_one(font,attr) -- we need a proper hook into the datas
reph = false,
vattu = false,
blwfcache = { },
+ vatucache = { },
+ pstfcache = { },
}
datasets.devanagari = devanagaridata
local resources = tfmdata.resources
@@ -707,31 +856,97 @@ local function initialize_one(font,attr) -- we need a proper hook into the datas
if kind == "rphf" then
-- deva
devanagaridata.reph = true
- elseif kind == "blwf" then
+ elseif kind == "blwf" or kind == "vatu" then
-- deva
devanagaridata.vattu = true
-- dev2
devanagaridata.blwfcache = devanagari.blwfcache
+ devanagaridata.vatucache = devanagari.vatucache
+ devanagaridata.pstfcache = devanagari.pstfcache
end
end
end
end
- return devanagaridata.reph, devanagaridata.vattu, devanagaridata.blwfcache
+ return devanagaridata.reph, devanagaridata.vattu, devanagaridata.blwfcache, devanagaridata.vatucache, devanagaridata.pstfcache
end
+local function contextchain(contexts, n)
+ local char = getchar(n)
+ for k=1,#contexts do
+ local ck = contexts[k]
+ local seq = ck[3]
+ local f = ck[4]
+ local l = ck[5]
+ if (l - f) == 1 and seq[f+1][char] then
+ local ok = true
+ local c = n
+ for i=l+1,#seq do
+ c = getnext(c)
+ if not c or not seq[i][ischar(c)] then
+ ok = false
+ break
+ end
+ end
+ if ok then
+ c = getprev(n)
+ for i=1,f-1 do
+ c = getprev(c)
+ if not c or not seq[f-i][ischar(c)] then
+ ok = false
+ end
+ end
+ end
+ if ok then
+ return true
+ end
+ end
+ end
+ return false
+end
+
+local function order_matras(c)
+ local cn = getnext(c)
+ local char = getchar(cn)
+ while dependent_vowel[char] do
+ local next = getnext(cn)
+ local cc = c
+ local cchar = getchar(cc)
+ while cc ~= cn do
+ if (above_mark[char] and (below_mark[cchar] or post_mark[cchar])) or (below_mark[char] and (post_mark[cchar])) then
+ local prev, next = getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ -- todo: setlink
+ setnext(prev,next)
+ setnext(getprev(cc),cn)
+ setprev(cn,getprev(cc))
+ setnext(cn,cc)
+ setprev(cc,cn)
+ break
+ end
+ cc = getnext(cc)
+ cchar = getchar(cc)
+ end
+ cn = next
+ char = getchar(cn)
+ end
+end
+
local function reorder_one(head,start,stop,font,attr,nbspaces)
- local reph, vattu, blwfcache = initialize_one(font,attr) -- todo: a hash[font]
+ local reph, vattu, blwfcache, vatucache, pstfcache = initialize_one(font,attr) -- todo: a hash[font]
- local current = start
- local n = getnext(start)
- local base = nil
- local firstcons = nil
- local lastcons = nil
- local basefound = false
+ local devanagari = fontdata[font].resources.devanagari
+ local current = start
+ local n = getnext(start)
+ local base = nil
+ local firstcons = nil
+ local lastcons = nil
+ local basefound = false
if reph and ra[getchar(start)] and halant[getchar(n)] then
-- if syllable starts with Ra + H and script has 'Reph' then exclude Reph
@@ -814,8 +1029,11 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if not base then
base = current
elseif blwfcache[char] then
- -- consonant has below-base (or post-base) form
+ -- consonant has below-base form
setprop(current,a_state,s_blwf)
+ elseif pstfcache[char] then
+ -- consonant has post-base form
+ setprop(current,a_state,s_pstf)
else
base = current
end
@@ -894,16 +1112,14 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
current = next
end
- if base ~= stop and getprop(base,a_state) then
+ if base ~= stop and getprop(base,a_state) then -- a_state can also be init
local next = getnext(base)
if halant[getchar(next)] and not (next ~= stop and getchar(getnext(next)) == c_zwj) then
setprop(base,a_state,unsetvalue)
end
end
- -- ToDo: split two- or three-part matras into their parts. Then, move the left 'matra' part to the beginning of the syllable.
- -- Not necessary for Devanagari. However it is necessay for other scripts, such as Tamil (e.g. TAMIL VOWEL SIGN O - 0BCA)
-
+ -- split two- or three-part matras into their parts. Then, move the left 'matra' part to the beginning of the syllable.
-- classify consonants and 'matra' parts as pre-base, above-base (Reph), below-base or post-base, and group elements of the syllable (consonants and 'matras') according to this classification
local current, allreordered, moved = start, false, { [base] = true }
@@ -929,6 +1145,17 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
n = getnext(n)
ch = getchar(n)
end
+
+ local tpm = twopart_mark[ch]
+ while tpm do
+ local extra = copy_node(n)
+ copyinjection(extra,n)
+ ch = tpm[1]
+ setchar(n,ch)
+ setchar(extra,tpm[2])
+ head = insert_node_after(head,current,extra)
+ tpm = twopart_mark[ch]
+ end
while c ~= stop and dependent_vowel[ch] do
c = n
n = getnext(n)
@@ -947,15 +1174,51 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
end
end
- local bp = getprev(firstcons)
- local cn = getnext(current)
+ local bp = getprev(firstcons)
+ local cn = getnext(current)
local last = getnext(c)
while cn ~= last do
-- move pre-base matras...
if pre_mark[getchar(cn)] then
- if bp then
- setnext(bp,cn)
+ if devanagari.left_matra_before_base then
+ local prev, next = getboth(cn)
+ setlink(prev,next)
+ if cn == stop then
+ stop = getprev(cn)
+ end
+ if base == start then
+ if head == start then
+ head = cn
+ end
+ start = cn
+ end
+ setlink(getprev(base),cn)
+ setlink(cn,base)
+ -- setlink(getprev(base),cn,base) -- maybe
+ cn = next
+ else
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev, next = getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn == stop then
+ stop = prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons == start then
+ if head == start then
+ head = cn
+ end
+ start = cn
+ end
+ cn = next
end
+ elseif current ~= base and dependent_vowel[getchar(cn)] then
local prev, next = getboth(cn)
if next then
setprev(next,prev)
@@ -964,17 +1227,19 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if cn == stop then
stop = prev
end
- setprev(cn,bp)
- setlink(cn,firstcons)
- if firstcons == start then
- if head == start then
- head = cn
- end
- start = cn
+ setlink(b,cn,getnext(b))
+ order_matras(cn)
+ cn = next
+ elseif current == base and dependent_vowel[getchar(cn)] then
+ local cnn = getnext(cn)
+ order_matras(cn)
+ cn = cnn
+ while cn ~= last and dependent_vowel[getchar(cn)] do
+ cn = getnext(cn)
end
- break
+ else
+ cn = getnext(cn)
end
- cn = getnext(cn)
end
allreordered = c == stop
current = getnext(c)
@@ -1036,6 +1301,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns = next
end
+ if not vatucache[char] then
+ next = getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns = next
+ next = getnext(cns)
+ end
+ end
elseif char == c_nbsp then
nbspaces = nbspaces + 1
cns = current
@@ -1043,6 +1315,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns = next
end
+ if not vatucache[char] then
+ next = getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns = next
+ next = getnext(cns)
+ end
+ end
end
end
current = getnext(current)
@@ -1051,6 +1330,9 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if getchar(base) == c_nbsp then
nbspaces = nbspaces - 1
+ if base == stop then
+ stop = getprev(stop)
+ end
head = remove_node(head,base)
flush_node(base)
end
@@ -1075,7 +1357,7 @@ function handlers.devanagari_reorder_matras(head,start) -- no leak
local char = ischar(current,startfont)
local next = getnext(current)
if char and getprop(current,a_syllabe) == startattr then
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then -- a_state can also be init
if next then
local char = ischar(next,startfont)
if char and zw_char[char] and getprop(next,a_syllabe) == startattr then
@@ -1091,6 +1373,18 @@ function handlers.devanagari_reorder_matras(head,start) -- no leak
-- setlink(current,start,next) -- maybe
start = startnext
break
+ -- elseif consonant[char] and ( not getprop(current,a_state) or getprop(current,a_state) == s_init) then
+ -- startnext = getnext(start)
+ -- head = remove_node(head,start)
+ -- if current == head then
+ -- setlink(start,current)
+ -- head = start
+ -- else
+ -- setlink(getprev(current),start)
+ -- setlink(start,current)
+ -- end
+ -- start = startnext
+ -- break
end
else
break
@@ -1109,6 +1403,8 @@ end
-- In Devanagari reph has reordering position 'before postscript' and dev2 only
-- follows step 2, 4, and 6.
+local rephbase = { }
+
function handlers.devanagari_reorder_reph(head,start)
local current = getnext(start)
local startnext = nil
@@ -1120,6 +1416,12 @@ function handlers.devanagari_reorder_reph(head,start)
--
-- If reph should be positioned after post-base consonant forms, proceed to step 5.
--
+ local char = ischar(start,startfont)
+ local rephbase = rephbase[startfont][char]
+ if char and after_subscript[rephbase] then
+ goto step_5
+ end
+ --
::step_2::
--
-- If the reph repositioning class is not after post-base: target position is after
@@ -1130,39 +1432,64 @@ function handlers.devanagari_reorder_reph(head,start)
-- fixed in shaping engine, there was no case where reph position will be found on
-- this step.
--
- while current do
- local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then
- if halant[char] and not getprop(current,a_state) then
- local next = getnext(current)
- if next then
- local nextchar = ischar(next,startfont)
- if nextchar and zw_char[nextchar] and getprop(next,a_syllabe) == startattr then
- current = next
- next = getnext(current)
+ if char and not after_postscript[rephbase] then
+ while current do
+ local char = ischar(current,startfont)
+ if char and getprop(current,a_syllabe) == startattr then
+ if halant[char] then
+ local next = getnext(current)
+ if next then
+ local nextchar = ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe) == startattr then
+ current = next
+ next = getnext(current)
+ end
end
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ -- setlink(current,start,next) -- maybe
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ break
end
- startnext = getnext(start)
- head = remove_node(head,start)
- setlink(start,next)
- setlink(current,start)
- -- setlink(current,start,next) -- maybe
- start = startnext
- startattr = getprop(start,a_syllabe)
+ current = getnext(current)
+ else
break
end
- current = getnext(current)
- else
- break
end
end
+ --
::step_3::
--
- -- If reph should be repositioned after the main consonant: from the first consonant
+ -- If reph should be repositioned after the main consonant: find the first consonant
-- not ligated with main, or find the first consonant that is not a potential
-- pre-base reordering Ra.
--
- -- Kai: todo
+ if not startnext then
+ if char and after_main[rephbase] then
+ current = getnext(start)
+ while current do
+ local char = ischar(current,startfont)
+ if char and getprop(current,a_syllabe) == startattr then
+ if consonant[char] and not getprop(current,a_state) == s_pref then
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(current,start)
+ setlink(start,getnext(current))
+ -- setlink(current,start,getnext(current)) -- maybe
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ break
+ end
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ end
+ end
--
::step_4::
--
@@ -1171,23 +1498,37 @@ function handlers.devanagari_reorder_reph(head,start)
-- position should be before the first matra, syllable modifier sign or vedic sign.
--
if not startnext then
- current = getnext(start)
- while current do
- local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then
- if getprop(current,a_state) == s_pstf then -- post-base
- startnext = getnext(start)
- head = remove_node(head,start)
- setlink(getprev(current),start)
- setlink(start,current)
- -- setlink(getprev(current),start,current) -- maybe
- start = startnext
- startattr = getprop(start,a_syllabe)
+ if char and before_postscript[rephbase] then
+ current = getnext(start)
+ local c = nil
+ while current do
+ local char = ischar(current,startfont)
+ if char and getprop(current,a_syllabe) == startattr then
+ if getprop(current,a_state) == s_pstf then -- post-base
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ -- setlink(getprev(current),start,current) -- maybe
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ break
+ elseif not c and ( vowel_modifier[char] or stress_tone_mark[char] ) then
+ c = current
+ end
+ current = getnext(current)
+ else
+ if c then
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(getprev(c),start)
+ setlink(start,c)
+ -- setlink(getprev(c),start,c) -- maybe
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ end
break
end
- current = getnext(current)
- else
- break
end
end
end
@@ -1206,7 +1547,10 @@ function handlers.devanagari_reorder_reph(head,start)
while current do
local char = ischar(current,startfont)
if char and getprop(current,a_syllabe) == startattr then
- if not c and mark_above_below_post[char] and not after_subscript[char] then
+ local state = getprop(current,a_state)
+ if before_subscript[rephbase] and (state == s_blwf or state == s_pstf) then
+ c = current
+ elseif after_subscript[rephbase] and (state == s_pstf) then
c = current
end
current = getnext(current)
@@ -1271,67 +1615,82 @@ end
-- return head, start, done
-- end
+local reordered_pre_base_reordering_consonants = { } -- shared ? not reset ?
+
function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
- local current = start
- local startnext = nil
- local startprev = nil
+ if reordered_pre_base_reordering_consonants[start] then
+ return head, start, true
+ end
+ local current = start -- we could cache attributes here
local startfont = getfont(start)
local startattr = getprop(start,a_syllabe)
- -- can be fast for loop + caching state
while current do
local char = ischar(current,startfont)
+ local next = getnext(current)
if char and getprop(current,a_syllabe) == startattr then
- local next = getnext(current)
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then -- a_state can also be init
if next then
- local nextchar = ischar(next,startfont)
- if nextchar and getprop(next,a_syllabe) == startattr then
- if nextchar == c_zwnj or nextchar == c_zwj then
- current = next
- next = getnext(current)
- end
+ local char = ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe) == startattr then
+ current = next
+ next = getnext(current)
end
end
- startnext = getnext(start)
- removenode(start,start)
+ -- can be optimzied
+ local startnext = getnext(start)
+ head = remove_node(head,start)
setlink(start,next)
setlink(current,start)
-- setlink(current,start,next) -- maybe
+ reordered_pre_base_reordering_consonants[start] = true
start = startnext
- break
+ return head, start, true
+ -- elseif consonant[char] and ( not getprop(current,a_state) or getprop(current,a_state) == s_init) then
+ -- startnext = getnext(start)
+ -- head = remove_node(head,start)
+ -- if current == head then
+ -- setlink(start,current)
+ -- head = start
+ -- else
+ -- setlink(getprev(current),start)
+ -- setlink(start,current)
+ -- end
+ -- start = startnext
+ -- break
end
- current = next
else
break
end
+ current = next
end
- if not startnext then
- current = getnext(start)
- startattr = getprop(start,a_syllabe)
- while current do
- local char = ischar(current,startfont)
- if char and getprop(current,a_syllabe) == startattr then
- if not consonant[char] and getprop(current,a_state) then -- main
- startnext = getnext(start)
- removenode(start,start)
- setlink(getprev(current),start)
- setlink(start,current)
- -- setlink(getprev(current),start,current) -- maybe
- start = startnext
- break
- end
- current = getnext(current)
+
+ local startattr = getprop(start,a_syllabe)
+ local current = getprev(start)
+ while current and getprop(current,a_syllabe) == startattr do
+ local char = ischar(current)
+ if ( not dependent_vowel[char] and not getprop(current,a_state) or getprop(current,a_state) == s_init) then
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ if current == head then
+ setlink(start,current)
+ head = start
else
- break
+ setlink(getprev(current),start)
+ setlink(start,current)
end
+ reordered_pre_base_reordering_consonants[start] = true
+ start = startnext
+ break
end
+ current = getprev(current)
end
+
return head, start, true
end
function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
local stop = getnext(start)
- local font = getfont(start) -- hm
+ local font = getfont(start)
local last = start
while stop do
local char = ischar(stop,font)
@@ -1372,15 +1731,15 @@ end
-- of the actions
local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pass over (determine stop in sweep)
-
local seqsubset, reorderreph = initialize_two(font,attr)
- local reph = false -- was nil ... probably went unnoticed because never assigned
local halfpos = nil
local basepos = nil
local subpos = nil
local postpos = nil
- local locl = { }
+
+ reorderreph.coverage = { }
+ rephbase[font] = { }
for i=1,#seqsubset do
@@ -1390,17 +1749,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
local kind = subset[1]
local lookupcache = subset[2]
if kind == "rphf" then
- reph = subset[3]
+ reorderreph.coverage[subset[3]] = true -- neat
+ rephbase[font][subset[3]] = subset[4]
local current = start
local last = getnext(stop)
while current ~= last do
if current ~= stop then
- local c = locl[current] or getchar(current)
+ local c = getchar(current)
local found = lookupcache[c]
if found then
local next = getnext(current)
- local n = locl[next] or getchar(next)
- if found[n] then --above-base: rphf Consonant + Halant
+ if found[getchar(next)] or contextchain(found, next) then --above-base: rphf Consonant + Halant
local afternext = next ~= stop and getnext(next)
if afternext and zw_char[getchar(afternext)] then -- ZWJ and ZWNJ prevent creation of reph
current = afternext -- getnext(next)
@@ -1420,15 +1779,16 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
local last = getnext(stop)
while current ~= last do
if current ~= stop then
- local c = locl[current] or getchar(current)
+ local c = getchar(current)
local found = lookupcache[c]
if found then -- pre-base: pref Halant + Consonant
local next = getnext(current)
- local n = locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pref)
- setprop(next,a_state,s_pref)
- current = next
+ if found[getchar(next)] or contextchain(found, next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then --KE: a_state can also be init...
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current = next
+ end
end
end
end
@@ -1439,15 +1799,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
local last = getnext(stop)
while current ~= last do
if current ~= stop then
- local c = locl[current] or getchar(current)
+ local c = getchar(current)
local found = lookupcache[c]
if found then
local next = getnext(current)
- local n = locl[next] or getchar(next)
- if found[n] then
+ if found[getchar(next)] or contextchain(found, next) then
if next ~= stop and getchar(getnext(next)) == c_zwnj then -- zwnj prevent creation of half
current = next
- else
+ elseif (not getprop(current,a_state)) then --KE: a_state can also be init...
setprop(current,a_state,s_half)
if not halfpos then
halfpos = current
@@ -1459,21 +1818,22 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
current = getnext(current)
end
- elseif kind == "blwf" then -- below-base: blwf / Halant + Consonant
+ elseif kind == "blwf" or kind == "vatu" then -- below-base: blwf / Halant + Consonant
local current = start
local last = getnext(stop)
while current ~= last do
if current ~= stop then
- local c = locl[current] or getchar(current)
+ local c = getchar(current)
local found = lookupcache[c]
if found then
local next = getnext(current)
- local n = locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_blwf)
- setprop(next,a_state,s_blwf)
- current = next
- subpos = current
+ if found[getchar(next)] or contextchain(found, next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then --KE: a_state can also be init...
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current = next
+ subpos = current
+ end
end
end
end
@@ -1484,16 +1844,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
local last = getnext(stop)
while current ~= last do
if current ~= stop then
- local c = locl[current] or getchar(current)
+ local c = getchar(current)
local found = lookupcache[c]
if found then
local next = getnext(current)
- local n = locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pstf)
- setprop(next,a_state,s_pstf)
- current = next
- postpos = current
+ if found[getchar(next)] or contextchain(found, next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then --KE: a_state can also be init...
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current = next
+ postpos = current
+ end
end
end
end
@@ -1502,12 +1863,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
end
- -- this one changes per word ...
-
- reorderreph.coverage = { [reph] = true } -- neat
-
- -- end of weird
-
local current, base, firstcons = start, nil, nil
if getprop(start,a_state) == s_rphf then
@@ -1573,7 +1928,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
-- check whether consonant has below-base or post-base form or is pre-base reordering Ra
local a = getprop(current,a_state)
- if not (a == s_pref or a == s_blwf or a == s_pstf) then
+ if not (a == s_blwf or a == s_pstf or (a ~= s_rphf and a ~= s_blwf and ra[getchar(current)])) then
base = current
end
end
@@ -1591,7 +1946,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
return head, stop, nbspaces
else
- if getprop(base,a_state) then
+ if getprop(base,a_state) then -- a_state can also be init
setprop(base,a_state,unsetvalue)
end
basepos = base
@@ -1608,24 +1963,27 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
-- Matra characters are classified and reordered by which consonant in a conjunct they have affinity for
- local moved = { }
+ local moved = { }
local current = start
- local last = getnext(stop)
+ local last = getnext(stop)
while current ~= last do
- local char, target, cn = locl[current] or getchar(current), nil, getnext(current)
+ local char = getchar(current)
+ local target = nil
+ local cn = getnext(current)
-- not so efficient (needed for malayalam)
local tpm = twopart_mark[char]
- if tpm then
+ while tpm do
local extra = copy_node(current)
copyinjection(extra,current)
char = tpm[1]
setchar(current,char)
setchar(extra,tpm[2])
head = insert_node_after(head,current,extra)
+ tpm = twopart_mark[char]
end
--
if not moved[current] and dependent_vowel[char] then
- if pre_mark[char] then -- Before first half form in the syllable
+ if pre_mark[char] then -- or: if before_main or before_half
moved[current] = true
-- can be helper to remove one node
local prev, next = getboth(current)
@@ -1633,17 +1991,47 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
if current == stop then
stop = getprev(current)
end
- if halfpos == start then
+
+ local pos
+ if before_main[char] then
+ pos = basepos
+ -- basepos = current -- is this correct?
+ else
+ -- must be before_half
+ pos = halfpos
+ -- halfpos = current -- is this correct?
+ end
+
+ local ppos = getprev(pos) -- necessary?
+ while ppos and getprop(ppos,a_syllabe) == getprop(pos,a_syllabe) do
+ if getprop(ppos,a_state) == s_pref then
+ pos = ppos
+ end
+ ppos = getprev(ppos)
+ end
+
+ local ppos = getprev(pos) -- necessary?
+ while ppos and getprop(ppos,a_syllabe) == getprop(pos,a_syllabe) and halant[ischar(ppos)] do
+ ppos = getprev(ppos)
+ if ppos and getprop(ppos,a_syllabe) == getprop(pos,a_syllabe) and consonant[ischar(ppos)] then
+ pos = ppos
+ ppos = getprev(ppos)
+ else
+ break
+ end
+ end
+
+ if pos == start then
if head == start then
head = current
end
start = current
end
- setlink(getprev(halfpos),current)
- setlink(current,halfpos)
- -- setlink(getprev(halfpos),current,halfpos) -- maybe
- halfpos = current
- elseif above_mark[char] then -- After main consonant
+ setlink(getprev(pos),current)
+ setlink(current,pos)
+ -- setlink(getprev(pos),current,pos) -- maybe
+ elseif above_mark[char] then
+ -- after main consonant
target = basepos
if subpos == basepos then
subpos = current
@@ -1652,13 +2040,25 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
postpos = current
end
basepos = current
- elseif below_mark[char] then -- After subjoined consonants
+ elseif below_mark[char] then
+ -- after subjoined consonants
target = subpos
if postpos == subpos then
postpos = current
end
subpos = current
- elseif post_mark[char] then -- After post-form consonant
+ elseif post_mark[char] then
+ -- after post-form consonant
+ local n = getnext(postpos) -- nukta and vedic sign come first - is that right? and also halant+ra
+ while n do
+ local v = ischar(n,font)
+ if nukta[v] or stress_tone_mark[v] or vowel_modifier[v] then
+ postpos = n
+ else
+ break
+ end
+ n = getnext(n)
+ end
target = postpos
postpos = current
end
@@ -1679,9 +2079,44 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
current = cn
end
+ -- reorder halant+Ra
+
+ local current = getnext(start)
+ local last = getnext(stop)
+ while current ~= last do
+ local char = getchar(current)
+ local cn = getnext(current)
+ if halant[char] and ra[ischar(cn)] and getprop(cn,a_state) ~= s_rphf and getprop(cn,a_state) ~= s_blwf then
+ if after_main[ischar(cn)] then
+ local prev = getprev(current)
+ local next = getnext(cn)
+ local bpn = getnext(basepos)
+ while bpn and dependent_vowel[ischar(bpn)] do
+ basepos = bpn
+ bpn = getnext(bpn)
+ end
+ if basepos ~= prev then
+ setlink(prev,next)
+ setlink(cn, getnext(basepos))
+ setlink(basepos, current)
+ if cn == stop then
+ stop = prev
+ end
+ cn = next
+ end
+ end
+ -- after_postscript
+ -- after_subscript
+ -- before_postscript
+ -- before_subscript
+ end
+ current = cn
+ end
+
-- Reorder marks to canonical order: Adjacent nukta and halant or nukta and vedic sign are always repositioned if necessary, so that the nukta is first.
- local current, c = start, nil
+ local current = start
+ local c = nil
while current ~= stop do
local char = getchar(current)
if halant[char] or stress_tone_mark[char] then
@@ -1810,7 +2245,25 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe
if not v then
return c
end
- if dependent_vowel[v] then
+ local already_pre_mark -- = false
+ local already_above_mark -- = false
+ local already_below_mark -- = false
+ local already_post_mark -- = false
+ while dependent_vowel[v] do
+ local vowels = twopart_mark[v] or { v }
+ for k, v in next, vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark = true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark = true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark = true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark = true
+ else
+ return c
+ end
+ end
c = getnext(c)
n = getnext(c)
if not n then
@@ -1982,7 +2435,25 @@ local function analyze_next_chars_two(c,font)
else
-- c = ms_matra(c)
-- same as one
- if dependent_vowel[v] then
+ local already_pre_mark -- = false
+ local already_above_mark -- = false
+ local already_below_mark -- = false
+ local already_post_mark -- = false
+ while dependent_vowel[v] do
+ local vowels = twopart_mark[v] or { v }
+ for k, v in next, vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark = true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark = true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark = true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark = true
+ else
+ return c
+ end
+ end
c = n
n = getnext(c)
if not n then
@@ -2054,6 +2525,7 @@ local function method_one(head,font,attr)
local start = true
local done = false
local nbspaces = 0
+ local syllabe = 0
while current do
local char = ischar(current,font)
if char then
@@ -2203,6 +2675,15 @@ local function method_one(head,font,attr)
end
end
if syllablestart ~= syllableend then
+ if syllableend then
+ syllabe = syllabe + 1
+ local c = syllablestart
+ local n = getnext(syllableend)
+ while c ~= n do
+ setprop(c,a_syllabe,syllabe)
+ c = getnext(c)
+ end
+ end
head, current, nbspaces = reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current = getnext(current)
end
@@ -2244,6 +2725,21 @@ local function method_one(head,font,attr)
head = replace_all_nbsp(head)
end
+ current = head
+ local n = 0
+ while current do
+ local char = ischar(current,font)
+ if char then
+ if n == 0 and not getprop(current,a_state) then
+ setprop(current,a_state,s_init)
+ end
+ n = n + 1
+ else
+ n = 0
+ end
+ current = getnext(current)
+ end
+
return head, done
end
@@ -2324,7 +2820,7 @@ local function method_two(head,font,attr)
end
if not syllableend and show_syntax_errors then
local char = ischar(current,font)
- if char and not getprop(current,a_state) then
+ if char and not getprop(current,a_state) then -- a_state can also be init
local mark = mark_four[char]
if mark then
head, current = inject_syntax_error(head,current,char)
@@ -2339,6 +2835,21 @@ local function method_two(head,font,attr)
head = replace_all_nbsp(head)
end
+ current = head
+ local n = 0
+ while current do
+ local char = ischar(current,font)
+ if char then
+ if n == 0 and not getprop(current,a_state) then -- a_state can also be init
+ setprop(current,a_state,s_init)
+ end
+ n = n + 1
+ else
+ n = 0
+ end
+ current = getnext(current)
+ end
+
return head, done
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otj.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otj.lua
index b8be2ec7565..2e7878d3dfd 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otj.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otj.lua
@@ -836,8 +836,8 @@ local function inject_positions_only(head,where)
if replace then
-- error, we expect an empty one
else
---KE setfield(next,"replace",fontkern(rightkern)) -- maybe also leftkern
- replace = fontkern(rightkern) -- maybe also leftkern --KE
+ -- KE setfield(next,"replace",fontkern(rightkern)) -- maybe also leftkern
+ replace = fontkern(rightkern) -- maybe also leftkern
done = true --KE
end
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua
index 24a8688875f..63130220069 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua
@@ -3178,7 +3178,7 @@ local function testrun(disc,t_run,c_run,...)
end
local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
local renewed = false
- if (post or replace) and prev then
+ if (post or replace) then -- and prev then -- hm, we can start with a disc
if post then
setlink(posttail,next)
else
@@ -3419,6 +3419,7 @@ local function t_run_single(start,stop,font,attr,lookupcache)
ss = nil
end
end
+lookupmatch = lg
else
break
end
@@ -3588,6 +3589,7 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
ss = nil
end
end
+lookupmatch = lg
else
break
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
index 10420f6eeb1..c9e467f2253 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
@@ -27,14 +27,19 @@ local statistics = otf.statistics or { }
otf.statistics = statistics
local scripts = allocate {
+ ["adlm"] = "adlam",
+ ["aghb"] = "caucasian albanian",
+ ["ahom"] = "ahom",
["arab"] = "arabic",
["armi"] = "imperial aramaic",
["armn"] = "armenian",
["avst"] = "avestan",
["bali"] = "balinese",
["bamu"] = "bamum",
+ ["bass"] = "bassa vah",
["batk"] = "batak",
["beng"] = "bengali",
+ ["bhks"] = "bhaiksuki",
["bng2"] = "bengali variant 2",
["bopo"] = "bopomofo",
["brah"] = "brahmi",
@@ -50,23 +55,33 @@ local scripts = allocate {
["copt"] = "coptic",
["cprt"] = "cypriot syllabary",
["cyrl"] = "cyrillic",
- ["deva"] = "devanagari",
["dev2"] = "devanagari variant 2",
+ ["deva"] = "devanagari",
+ ["dogr"] = "dogra",
["dsrt"] = "deseret",
+ ["dupl"] = "duployan",
["egyp"] = "egyptian heiroglyphs",
+ ["elba"] = "elbasan",
["ethi"] = "ethiopic",
["geor"] = "georgian",
+ ["gjr2"] = "gujarati variant 2",
["glag"] = "glagolitic",
+ ["gong"] = "gunjala gondi",
+ ["gonm"] = "masaram gondi",
["goth"] = "gothic",
+ ["gran"] = "grantha",
["grek"] = "greek",
["gujr"] = "gujarati",
- ["gjr2"] = "gujarati variant 2",
- ["guru"] = "gurmukhi",
["gur2"] = "gurmukhi variant 2",
+ ["guru"] = "gurmukhi",
["hang"] = "hangul",
["hani"] = "cjk ideographic",
["hano"] = "hanunoo",
+ ["hatr"] = "hatran",
["hebr"] = "hebrew",
+ ["hluw"] = "anatolian hieroglyphs",
+ ["hmng"] = "pahawh hmong",
+ ["hung"] = "old hungarian",
["ital"] = "old italic",
["jamo"] = "hangul jamo",
["java"] = "javanese",
@@ -74,49 +89,77 @@ local scripts = allocate {
["kana"] = "hiragana and katakana",
["khar"] = "kharosthi",
["khmr"] = "khmer",
- ["knda"] = "kannada",
+ ["khoj"] = "khojki",
["knd2"] = "kannada variant 2",
+ ["knda"] = "kannada",
["kthi"] = "kaithi",
["lana"] = "tai tham",
["lao" ] = "lao",
["latn"] = "latin",
["lepc"] = "lepcha",
["limb"] = "limbu",
+ ["lina"] = "linear a",
["linb"] = "linear b",
["lisu"] = "lisu",
["lyci"] = "lycian",
["lydi"] = "lydian",
+ ["mahj"] = "mahajani",
+ ["maka"] = "makasar",
["mand"] = "mandaic and mandaean",
+ ["mani"] = "manichaean",
+ ["marc"] = "marchen",
["math"] = "mathematical alphanumeric symbols",
+ ["medf"] = "medefaidrin",
+ ["mend"] = "mende kikakui",
["merc"] = "meroitic cursive",
["mero"] = "meroitic hieroglyphs",
- ["mlym"] = "malayalam",
["mlm2"] = "malayalam variant 2",
+ ["mlym"] = "malayalam",
+ ["modi"] = "modi",
["mong"] = "mongolian",
+ ["mroo"] = "mro",
["mtei"] = "meitei Mayek",
+ ["mult"] = "multani",
["musc"] = "musical symbols",
["mym2"] = "myanmar variant 2",
["mymr"] = "myanmar",
+ ["narb"] = "old north arabian",
+ ["nbat"] = "nabataean",
+ ["newa"] = "newa",
["nko" ] = 'n"ko',
+ ["nshu"] = "nüshu",
["ogam"] = "ogham",
["olck"] = "ol chiki",
["orkh"] = "old turkic and orkhon runic",
- ["orya"] = "oriya",
["ory2"] = "odia variant 2",
+ ["orya"] = "oriya",
+ ["osge"] = "osage",
["osma"] = "osmanya",
+ ["palm"] = "palmyrene",
+ ["pauc"] = "pau cin hau",
+ ["perm"] = "old permic",
["phag"] = "phags-pa",
["phli"] = "inscriptional pahlavi",
+ ["phlp"] = "psalter pahlavi",
["phnx"] = "phoenician",
+ ["plrd"] = "miao",
["prti"] = "inscriptional parthian",
["rjng"] = "rejang",
+ ["rohg"] = "hanifi rohingya",
["runr"] = "runic",
["samr"] = "samaritan",
["sarb"] = "old south arabian",
["saur"] = "saurashtra",
+ ["sgnw"] = "sign writing",
["shaw"] = "shavian",
["shrd"] = "sharada",
+ ["sidd"] = "siddham",
+ ["sind"] = "khudawadi",
["sinh"] = "sinhala",
+ ["sogd"] = "sogdian",
+ ["sogo"] = "old sogdian",
["sora"] = "sora sompeng",
+ ["soyo"] = "soyombo",
["sund"] = "sundanese",
["sylo"] = "syloti nagri",
["syrc"] = "syriac",
@@ -125,20 +168,24 @@ local scripts = allocate {
["tale"] = "tai le",
["talu"] = "tai lu",
["taml"] = "tamil",
+ ["tang"] = "tangut",
["tavt"] = "tai viet",
- ["telu"] = "telugu",
["tel2"] = "telugu variant 2",
+ ["telu"] = "telugu",
["tfng"] = "tifinagh",
["tglg"] = "tagalog",
["thaa"] = "thaana",
["thai"] = "thai",
["tibt"] = "tibetan",
+ ["tirh"] = "tirhuta",
["tml2"] = "tamil variant 2",
["ugar"] = "ugaritic cuneiform",
["vai" ] = "vai",
+ ["wara"] = "warang citi",
["xpeo"] = "old persian cuneiform",
["xsux"] = "sumero-akkadian cuneiform",
["yi" ] = "yi",
+ ["zanb"] = "zanabazar square",
}
local languages = allocate {
@@ -208,12 +255,15 @@ local languages = allocate {
["brm" ] = "burmese",
["brx" ] = "bodo",
["bsh" ] = "bashkir",
+ ["bsk" ] = "burushaski",
["bti" ] = "beti",
["bts" ] = "batak simalungun",
["bug" ] = "bugis",
+ ["byv" ] = "medumba",
["cak" ] = "kaqchikel",
["cat" ] = "catalan",
["cbk" ] = "zamboanga chavacano",
+ ["cchn"] = "chinantec",
["ceb" ] = "cebuano",
["cgg" ] = "chiga",
["cha" ] = "chamorro",
@@ -228,6 +278,8 @@ local languages = allocate {
["chr" ] = "cherokee",
["chu" ] = "chuvash",
["chy" ] = "cheyenne",
+ ["cja" ] = "western cham",
+ ["cjm" ] = "eastern cham",
["cmr" ] = "comorian",
["cop" ] = "coptic",
["cor" ] = "cornish",
@@ -283,6 +335,7 @@ local languages = allocate {
["fin" ] = "finnish",
["fji" ] = "fijian",
["fle" ] = "dutch (flemish)",
+ ["fmp" ] = "fe’fe’",
["fne" ] = "forest nenets",
["fon" ] = "fon",
["fos" ] = "faroese",
@@ -361,6 +414,7 @@ local languages = allocate {
["jan" ] = "japanese",
["jav" ] = "javanese",
["jbo" ] = "lojban",
+ ["jct" ] = "krymchak",
["jii" ] = "yiddish",
["jud" ] = "ladino",
["jul" ] = "jula",
@@ -397,6 +451,7 @@ local languages = allocate {
["kmn" ] = "kumaoni",
["kmo" ] = "komo",
["kms" ] = "komso",
+ ["kmz" ] = "khorasani turkic",
["knr" ] = "kanuri",
["kod" ] = "kodagu",
["koh" ] = "korean old hangul",
@@ -473,6 +528,7 @@ local languages = allocate {
["mar" ] = "marathi",
["maw" ] = "marwari",
["mbn" ] = "mbundu",
+ ["mbo" ] = "mbo",
["mch" ] = "manchu",
["mcr" ] = "moose cree",
["mde" ] = "mende",
@@ -489,6 +545,7 @@ local languages = allocate {
["mle" ] = "male",
["mlg" ] = "malagasy",
["mln" ] = "malinke",
+ ["mlr" ] = "malayalam reformed",
["mly" ] = "malay",
["mnd" ] = "mandinka",
["mng" ] = "mongolian",
@@ -542,6 +599,7 @@ local languages = allocate {
["nto" ] = "esperanto",
["nym" ] = "nyamwezi",
["nyn" ] = "norwegian nynorsk",
+ ["nza" ] = "mbembe tigon",
["oci" ] = "occitan",
["ocr" ] = "oji-cree",
["ojb" ] = "ojibway",
@@ -605,6 +663,7 @@ local languages = allocate {
["say" ] = "sayisi",
["scn" ] = "sicilian",
["sco" ] = "scots",
+ ["scs" ] = "north slavey",
["sek" ] = "sekota",
["sel" ] = "selkup",
["sga" ] = "old irish",
@@ -649,6 +708,9 @@ local languages = allocate {
["sxu" ] = "upper saxon",
["syl" ] = "sylheti",
["syr" ] = "syriac",
+ ["syre"] = "estrangela syriac",
+ ["syrj"] = "western syriac",
+ ["syrn"] = "eastern syriac",
["szl" ] = "silesian",
["tab" ] = "tabasaran",
["taj" ] = "tajiki",
@@ -680,6 +742,7 @@ local languages = allocate {
["tsj" ] = "tshangla",
["tua" ] = "turoyo aramaic",
["tul" ] = "tulu",
+ ["tum" ] = "tulu",
["tuv" ] = "tuvin",
["tvl" ] = "tuvalu",
["twi" ] = "twi",
@@ -705,6 +768,7 @@ local languages = allocate {
["wel" ] = "welsh",
["wlf" ] = "wolof",
["wln" ] = "walloon",
+ ["wtm" ] = "mewati",
["xbd" ] = "lü",
["xhs" ] = "xhosa",
["xjb" ] = "minjangbal",
@@ -730,6 +794,7 @@ local languages = allocate {
["zza" ] = "zazaki",
}
+
local features = allocate {
["aalt"] = "access all alternates",
["abvf"] = "above-base forms",
@@ -869,6 +934,7 @@ local features = allocate {
["vkna"] = "vertical kana alternates",
["vkrn"] = "vertical kerning",
["vpal"] = "proportional alternate vertical metrics",
+ ["vrtr"] = "vertical alternates for rotation",
["vrt2"] = "vertical rotation",
["zero"] = "slashed zero",
@@ -879,8 +945,9 @@ local features = allocate {
["cv.."] = "character variant ..",
["js.."] = "justification ..",
- ["dv.."] = "devanagari ..",
- ["ml.."] = "malayalam ..",
+ ["dv.."] = "devanagari ..", -- for internal use
+ ["ml.."] = "malayalam ..", -- for internal use
+
}
local baselines = allocate {
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-string.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-string.lua
index 8ae8d8d1d76..1dee85e2894 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-string.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-string.lua
@@ -155,11 +155,13 @@ end
--- needs checking
local anything = patterns.anything
-local allescapes = Cc("%") * S(".-+%?()[]*") -- also {} and ^$ ?
-local someescapes = Cc("%") * S(".-+%()[]") -- also {} and ^$ ?
-local matchescapes = Cc(".") * S("*?") -- wildcard and single match
+local moreescapes = Cc("%") * S(".-+%?()[]*$^{}")
+local allescapes = Cc("%") * S(".-+%?()[]*") -- also {} and ^$ ?
+local someescapes = Cc("%") * S(".-+%()[]") -- also {} and ^$ ?
+local matchescapes = Cc(".") * S("*?") -- wildcard and single match
-local pattern_a = Cs ( ( allescapes + anything )^0 )
+local pattern_m = Cs ( ( moreescapes + anything )^0 )
+local pattern_a = Cs ( ( allescapes + anything )^0 )
local pattern_b = Cs ( ( someescapes + matchescapes + anything )^0 )
local pattern_c = Cs ( Cc("^") * ( someescapes + matchescapes + anything )^0 * Cc("$") )
@@ -170,6 +172,8 @@ end
function string.topattern(str,lowercase,strict)
if str == "" or type(str) ~= "string" then
return ".*"
+ elseif strict == "all" then
+ str = lpegmatch(pattern_m,str)
elseif strict then
str = lpegmatch(pattern_c,str)
else
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua
index 8a940cc22ba..6bd9bbd5930 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 05/18/19 10:42:24
+-- merge date : 07/04/19 12:29:22
do -- begin closure to overcome local limits and interference
@@ -977,9 +977,11 @@ function string.is_empty(str)
end
end
local anything=patterns.anything
-local allescapes=Cc("%")*S(".-+%?()[]*")
-local someescapes=Cc("%")*S(".-+%()[]")
-local matchescapes=Cc(".")*S("*?")
+local moreescapes=Cc("%")*S(".-+%?()[]*$^{}")
+local allescapes=Cc("%")*S(".-+%?()[]*")
+local someescapes=Cc("%")*S(".-+%()[]")
+local matchescapes=Cc(".")*S("*?")
+local pattern_m=Cs ((moreescapes+anything )^0 )
local pattern_a=Cs ((allescapes+anything )^0 )
local pattern_b=Cs ((someescapes+matchescapes+anything )^0 )
local pattern_c=Cs (Cc("^")*(someescapes+matchescapes+anything )^0*Cc("$") )
@@ -989,6 +991,8 @@ end
function string.topattern(str,lowercase,strict)
if str=="" or type(str)~="string" then
return ".*"
+ elseif strict=="all" then
+ str=lpegmatch(pattern_m,str)
elseif strict then
str=lpegmatch(pattern_c,str)
else
@@ -5425,7 +5429,6 @@ characters.classifiers={
[1803]=6,
[1804]=6,
[1805]=6,
- [1807]=6,
[1808]=3,
[1809]=5,
[1810]=2,
@@ -5606,6 +5609,9 @@ characters.classifiers={
[2040]=6,
[2041]=6,
[2042]=2,
+ [2045]=5,
+ [2046]=6,
+ [2047]=6,
[2070]=5,
[2071]=5,
[2072]=5,
@@ -5695,6 +5701,7 @@ characters.classifiers={
[2235]=2,
[2236]=2,
[2237]=2,
+ [2259]=5,
[2260]=5,
[2261]=5,
[2262]=5,
@@ -5771,6 +5778,7 @@ characters.classifiers={
[2509]=5,
[2530]=5,
[2531]=5,
+ [2558]=5,
[2561]=5,
[2562]=5,
[2620]=5,
@@ -5819,6 +5827,7 @@ characters.classifiers={
[3008]=5,
[3021]=5,
[3072]=5,
+ [3076]=5,
[3134]=5,
[3135]=5,
[3136]=5,
@@ -5880,6 +5889,7 @@ characters.classifiers={
[3767]=5,
[3768]=5,
[3769]=5,
+ [3770]=5,
[3771]=5,
[3772]=5,
[3784]=5,
@@ -6118,6 +6128,7 @@ characters.classifiers={
[6261]=2,
[6262]=2,
[6263]=2,
+ [6264]=2,
[6272]=4,
[6273]=4,
[6274]=4,
@@ -6518,6 +6529,7 @@ characters.classifiers={
[43247]=5,
[43248]=5,
[43249]=5,
+ [43263]=5,
[43302]=5,
[43303]=5,
[43304]=5,
@@ -6681,6 +6693,83 @@ characters.classifiers={
[68525]=2,
[68526]=2,
[68527]=4,
+ [68864]=1,
+ [68865]=2,
+ [68866]=2,
+ [68867]=2,
+ [68868]=2,
+ [68869]=2,
+ [68870]=2,
+ [68871]=2,
+ [68872]=2,
+ [68873]=2,
+ [68874]=2,
+ [68875]=2,
+ [68876]=2,
+ [68877]=2,
+ [68878]=2,
+ [68879]=2,
+ [68880]=2,
+ [68881]=2,
+ [68882]=2,
+ [68883]=2,
+ [68884]=2,
+ [68885]=2,
+ [68886]=2,
+ [68887]=2,
+ [68888]=2,
+ [68889]=2,
+ [68890]=2,
+ [68891]=2,
+ [68892]=2,
+ [68893]=2,
+ [68894]=2,
+ [68895]=2,
+ [68896]=2,
+ [68897]=2,
+ [68898]=3,
+ [68899]=2,
+ [68900]=5,
+ [68901]=5,
+ [68902]=5,
+ [68903]=5,
+ [69424]=2,
+ [69425]=2,
+ [69426]=2,
+ [69427]=3,
+ [69428]=2,
+ [69429]=2,
+ [69430]=2,
+ [69431]=2,
+ [69432]=2,
+ [69433]=2,
+ [69434]=2,
+ [69435]=2,
+ [69436]=2,
+ [69437]=2,
+ [69438]=2,
+ [69439]=2,
+ [69440]=2,
+ [69441]=2,
+ [69442]=2,
+ [69443]=2,
+ [69444]=2,
+ [69445]=4,
+ [69446]=5,
+ [69447]=5,
+ [69448]=5,
+ [69449]=5,
+ [69450]=5,
+ [69451]=5,
+ [69452]=5,
+ [69453]=5,
+ [69454]=5,
+ [69455]=5,
+ [69456]=5,
+ [69457]=2,
+ [69458]=2,
+ [69459]=2,
+ [69460]=3,
[69633]=5,
[69688]=5,
[69689]=5,
@@ -6706,6 +6795,8 @@ characters.classifiers={
[69814]=5,
[69817]=5,
[69818]=5,
+ [69821]=4,
+ [69837]=4,
[69888]=5,
[69889]=5,
[69890]=5,
@@ -6755,6 +6846,7 @@ characters.classifiers={
[70378]=5,
[70400]=5,
[70401]=5,
+ [70459]=5,
[70460]=5,
[70464]=5,
[70502]=5,
@@ -6781,6 +6873,7 @@ characters.classifiers={
[70723]=5,
[70724]=5,
[70726]=5,
+ [70750]=5,
[70835]=5,
[70836]=5,
[70837]=5,
@@ -6834,6 +6927,24 @@ characters.classifiers={
[71465]=5,
[71466]=5,
[71467]=5,
+ [71727]=5,
+ [71728]=5,
+ [71729]=5,
+ [71730]=5,
+ [71731]=5,
+ [71732]=5,
+ [71733]=5,
+ [71734]=5,
+ [71735]=5,
+ [71737]=5,
+ [71738]=5,
+ [72148]=5,
+ [72149]=5,
+ [72150]=5,
+ [72151]=5,
+ [72154]=5,
+ [72155]=5,
+ [72160]=5,
[72193]=5,
[72194]=5,
[72195]=5,
@@ -6941,6 +7052,12 @@ characters.classifiers={
[73028]=5,
[73029]=5,
[73031]=5,
+ [73104]=5,
+ [73105]=5,
+ [73109]=5,
+ [73111]=5,
+ [73459]=5,
+ [73460]=5,
[92912]=5,
[92913]=5,
[92914]=5,
@@ -6953,6 +7070,7 @@ characters.classifiers={
[92980]=5,
[92981]=5,
[92982]=5,
+ [94031]=5,
[94095]=5,
[94096]=5,
[94097]=5,
@@ -7149,6 +7267,17 @@ characters.classifiers={
[122920]=5,
[122921]=5,
[122922]=5,
+ [123184]=5,
+ [123185]=5,
+ [123186]=5,
+ [123187]=5,
+ [123188]=5,
+ [123189]=5,
+ [123190]=5,
+ [123628]=5,
+ [123629]=5,
+ [123630]=5,
+ [123631]=5,
[125136]=5,
[125137]=5,
[125138]=5,
@@ -7251,6 +7380,7 @@ characters.indicgroups={
[2632]=true,
[2635]=true,
[2636]=true,
+ [2690]=true,
[2757]=true,
[2759]=true,
[2760]=true,
@@ -7262,7 +7392,6 @@ characters.indicgroups={
[3136]=true,
[3142]=true,
[3143]=true,
- [3144]=true,
[3146]=true,
[3147]=true,
[3148]=true,
@@ -7270,6 +7399,21 @@ characters.indicgroups={
[3263]=true,
[3270]=true,
[3406]=true,
+ [4141]=true,
+ [4142]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4150]=true,
+ [4154]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4229]=true,
+ [4230]=true,
+ [4253]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -7288,6 +7432,8 @@ characters.indicgroups={
[43247]=true,
[43248]=true,
[43249]=true,
+ [43493]=true,
+ [43644]=true,
},
["after_half"]={},
["after_main"]={
@@ -7309,6 +7455,7 @@ characters.indicgroups={
[2626]=true,
[2672]=true,
[2673]=true,
+ [2735]=true,
[2750]=true,
[2752]=true,
[2753]=true,
@@ -7472,10 +7619,24 @@ characters.indicgroups={
[3170]=true,
[3171]=true,
[3260]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3426]=true,
[3427]=true,
+ [4143]=true,
+ [4144]=true,
+ [4151]=true,
+ [4153]=true,
+ [4157]=true,
+ [4158]=true,
+ [4184]=true,
+ [4185]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4226]=true,
+ [4237]=true,
},
["consonant"]={
[2325]=true,
@@ -7805,6 +7966,117 @@ characters.indicgroups={
[3384]=true,
[3385]=true,
[3386]=true,
+ [4096]=true,
+ [4097]=true,
+ [4098]=true,
+ [4099]=true,
+ [4100]=true,
+ [4101]=true,
+ [4102]=true,
+ [4103]=true,
+ [4104]=true,
+ [4105]=true,
+ [4106]=true,
+ [4107]=true,
+ [4108]=true,
+ [4109]=true,
+ [4110]=true,
+ [4111]=true,
+ [4112]=true,
+ [4113]=true,
+ [4114]=true,
+ [4115]=true,
+ [4116]=true,
+ [4117]=true,
+ [4118]=true,
+ [4119]=true,
+ [4120]=true,
+ [4121]=true,
+ [4122]=true,
+ [4123]=true,
+ [4124]=true,
+ [4125]=true,
+ [4126]=true,
+ [4127]=true,
+ [4128]=true,
+ [4155]=true,
+ [4156]=true,
+ [4157]=true,
+ [4158]=true,
+ [4159]=true,
+ [4176]=true,
+ [4177]=true,
+ [4186]=true,
+ [4187]=true,
+ [4188]=true,
+ [4189]=true,
+ [4190]=true,
+ [4191]=true,
+ [4192]=true,
+ [4193]=true,
+ [4197]=true,
+ [4198]=true,
+ [4206]=true,
+ [4207]=true,
+ [4208]=true,
+ [4213]=true,
+ [4214]=true,
+ [4215]=true,
+ [4216]=true,
+ [4217]=true,
+ [4218]=true,
+ [4219]=true,
+ [4220]=true,
+ [4221]=true,
+ [4222]=true,
+ [4223]=true,
+ [4224]=true,
+ [4225]=true,
+ [4226]=true,
+ [4238]=true,
+ [43488]=true,
+ [43489]=true,
+ [43490]=true,
+ [43491]=true,
+ [43492]=true,
+ [43495]=true,
+ [43496]=true,
+ [43497]=true,
+ [43498]=true,
+ [43499]=true,
+ [43500]=true,
+ [43501]=true,
+ [43502]=true,
+ [43503]=true,
+ [43514]=true,
+ [43515]=true,
+ [43516]=true,
+ [43517]=true,
+ [43518]=true,
+ [43616]=true,
+ [43617]=true,
+ [43618]=true,
+ [43619]=true,
+ [43620]=true,
+ [43621]=true,
+ [43622]=true,
+ [43623]=true,
+ [43624]=true,
+ [43625]=true,
+ [43626]=true,
+ [43628]=true,
+ [43629]=true,
+ [43630]=true,
+ [43631]=true,
+ [43633]=true,
+ [43634]=true,
+ [43635]=true,
+ [43636]=true,
+ [43637]=true,
+ [43638]=true,
+ [43642]=true,
+ [43646]=true,
+ [43647]=true,
},
["dependent_vowel"]={
[2362]=true,
@@ -7833,13 +8105,14 @@ characters.indicgroups={
[2403]=true,
[2494]=true,
[2495]=true,
- [2496]=true,
[2497]=true,
[2498]=true,
[2499]=true,
[2500]=true,
[2503]=true,
[2504]=true,
+ [2507]=true,
+ [2508]=true,
[2622]=true,
[2623]=true,
[2624]=true,
@@ -7914,6 +8187,8 @@ characters.indicgroups={
[3274]=true,
[3275]=true,
[3276]=true,
+ [3285]=true,
+ [3286]=true,
[3298]=true,
[3299]=true,
[3390]=true,
@@ -7932,6 +8207,35 @@ characters.indicgroups={
[3415]=true,
[3426]=true,
[3427]=true,
+ [4139]=true,
+ [4140]=true,
+ [4141]=true,
+ [4142]=true,
+ [4143]=true,
+ [4144]=true,
+ [4145]=true,
+ [4146]=true,
+ [4147]=true,
+ [4148]=true,
+ [4149]=true,
+ [4182]=true,
+ [4183]=true,
+ [4184]=true,
+ [4185]=true,
+ [4194]=true,
+ [4199]=true,
+ [4200]=true,
+ [4209]=true,
+ [4210]=true,
+ [4211]=true,
+ [4212]=true,
+ [4227]=true,
+ [4228]=true,
+ [4229]=true,
+ [4230]=true,
+ [4252]=true,
+ [4253]=true,
+ [43493]=true,
},
["halant"]={
[2381]=true,
@@ -8089,6 +8393,20 @@ characters.indicgroups={
[3423]=true,
[3424]=true,
[3425]=true,
+ [4129]=true,
+ [4130]=true,
+ [4131]=true,
+ [4132]=true,
+ [4133]=true,
+ [4134]=true,
+ [4135]=true,
+ [4136]=true,
+ [4137]=true,
+ [4138]=true,
+ [4178]=true,
+ [4179]=true,
+ [4180]=true,
+ [4181]=true,
},
["nukta"]={
[2364]=true,
@@ -8110,8 +8428,6 @@ characters.indicgroups={
[2383]=true,
[2494]=true,
[2496]=true,
- [2503]=true,
- [2504]=true,
[2622]=true,
[2624]=true,
[2750]=true,
@@ -8128,16 +8444,12 @@ characters.indicgroups={
[3139]=true,
[3140]=true,
[3262]=true,
- [3264]=true,
[3265]=true,
[3266]=true,
[3267]=true,
[3268]=true,
- [3271]=true,
- [3272]=true,
- [3274]=true,
- [3275]=true,
[3276]=true,
+ [3285]=true,
[3390]=true,
[3391]=true,
[3392]=true,
@@ -8146,25 +8458,58 @@ characters.indicgroups={
[3395]=true,
[3396]=true,
[3415]=true,
+ [4139]=true,
+ [4140]=true,
+ [4152]=true,
+ [4155]=true,
+ [4182]=true,
+ [4183]=true,
+ [4194]=true,
+ [4195]=true,
+ [4196]=true,
+ [4199]=true,
+ [4200]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4227]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [4252]=true,
+ [43643]=true,
+ [43645]=true,
},
["pre_mark"]={
[2367]=true,
[2382]=true,
[2495]=true,
+ [2503]=true,
+ [2504]=true,
[2623]=true,
[2751]=true,
[2887]=true,
- [2888]=true,
[3014]=true,
[3015]=true,
[3016]=true,
[3398]=true,
[3399]=true,
[3400]=true,
+ [4145]=true,
+ [4228]=true,
},
["ra"]={
[2352]=true,
[2480]=true,
+ [2544]=true,
[2608]=true,
[2736]=true,
[2864]=true,
@@ -8178,17 +8523,43 @@ characters.indicgroups={
[2386]=true,
[2387]=true,
[2388]=true,
- [2507]=true,
- [2508]=true,
- [3277]=true,
- [3405]=true,
+ [4151]=true,
+ [4195]=true,
+ [4196]=true,
+ [4201]=true,
+ [4202]=true,
+ [4203]=true,
+ [4204]=true,
+ [4205]=true,
+ [4231]=true,
+ [4232]=true,
+ [4233]=true,
+ [4234]=true,
+ [4235]=true,
+ [4236]=true,
+ [4237]=true,
+ [4239]=true,
+ [4250]=true,
+ [4251]=true,
+ [43643]=true,
+ [43644]=true,
+ [43645]=true,
},
["twopart_mark"]={
+ [2507]={ 2503,2494 },
+ [2508]={ 2503,2519 },
+ [2888]={ 2887,2902 },
[2891]={ 2887,2878 },
[2892]={ 2887,2903 },
[3018]={ 3014,3006 },
[3019]={ 3015,3006 },
[3020]={ 3014,3031 },
+ [3144]={ 3142,3158 },
+ [3264]={ 3263,3285 },
+ [3271]={ 3270,3285 },
+ [3272]={ 3270,3286 },
+ [3274]={ 3270,3266 },
+ [3275]={ 3274,3285 },
[3402]={ 3398,3390 },
[3403]={ 3399,3390 },
[3404]={ 3398,3415 },
@@ -8198,8 +8569,13 @@ characters.indicgroups={
[2305]=true,
[2306]=true,
[2307]=true,
+ [2433]=true,
[3330]=true,
[3331]=true,
+ [4150]=true,
+ [4152]=true,
+ [4153]=true,
+ [4154]=true,
[43232]=true,
[43233]=true,
[43234]=true,
@@ -8216,7 +8592,6 @@ characters.indicgroups={
[43245]=true,
[43246]=true,
[43247]=true,
- [43248]=true,
[43249]=true,
},
}
@@ -12426,14 +12801,19 @@ otf.tables=tables
local statistics=otf.statistics or {}
otf.statistics=statistics
local scripts=allocate {
+ ["adlm"]="adlam",
+ ["aghb"]="caucasian albanian",
+ ["ahom"]="ahom",
["arab"]="arabic",
["armi"]="imperial aramaic",
["armn"]="armenian",
["avst"]="avestan",
["bali"]="balinese",
["bamu"]="bamum",
+ ["bass"]="bassa vah",
["batk"]="batak",
["beng"]="bengali",
+ ["bhks"]="bhaiksuki",
["bng2"]="bengali variant 2",
["bopo"]="bopomofo",
["brah"]="brahmi",
@@ -12449,23 +12829,33 @@ local scripts=allocate {
["copt"]="coptic",
["cprt"]="cypriot syllabary",
["cyrl"]="cyrillic",
- ["deva"]="devanagari",
["dev2"]="devanagari variant 2",
+ ["deva"]="devanagari",
+ ["dogr"]="dogra",
["dsrt"]="deseret",
+ ["dupl"]="duployan",
["egyp"]="egyptian heiroglyphs",
+ ["elba"]="elbasan",
["ethi"]="ethiopic",
["geor"]="georgian",
+ ["gjr2"]="gujarati variant 2",
["glag"]="glagolitic",
+ ["gong"]="gunjala gondi",
+ ["gonm"]="masaram gondi",
["goth"]="gothic",
+ ["gran"]="grantha",
["grek"]="greek",
["gujr"]="gujarati",
- ["gjr2"]="gujarati variant 2",
- ["guru"]="gurmukhi",
["gur2"]="gurmukhi variant 2",
+ ["guru"]="gurmukhi",
["hang"]="hangul",
["hani"]="cjk ideographic",
["hano"]="hanunoo",
+ ["hatr"]="hatran",
["hebr"]="hebrew",
+ ["hluw"]="anatolian hieroglyphs",
+ ["hmng"]="pahawh hmong",
+ ["hung"]="old hungarian",
["ital"]="old italic",
["jamo"]="hangul jamo",
["java"]="javanese",
@@ -12473,49 +12863,77 @@ local scripts=allocate {
["kana"]="hiragana and katakana",
["khar"]="kharosthi",
["khmr"]="khmer",
- ["knda"]="kannada",
+ ["khoj"]="khojki",
["knd2"]="kannada variant 2",
+ ["knda"]="kannada",
["kthi"]="kaithi",
["lana"]="tai tham",
["lao" ]="lao",
["latn"]="latin",
["lepc"]="lepcha",
["limb"]="limbu",
+ ["lina"]="linear a",
["linb"]="linear b",
["lisu"]="lisu",
["lyci"]="lycian",
["lydi"]="lydian",
+ ["mahj"]="mahajani",
+ ["maka"]="makasar",
["mand"]="mandaic and mandaean",
+ ["mani"]="manichaean",
+ ["marc"]="marchen",
["math"]="mathematical alphanumeric symbols",
+ ["medf"]="medefaidrin",
+ ["mend"]="mende kikakui",
["merc"]="meroitic cursive",
["mero"]="meroitic hieroglyphs",
- ["mlym"]="malayalam",
["mlm2"]="malayalam variant 2",
+ ["mlym"]="malayalam",
+ ["modi"]="modi",
["mong"]="mongolian",
+ ["mroo"]="mro",
["mtei"]="meitei Mayek",
+ ["mult"]="multani",
["musc"]="musical symbols",
["mym2"]="myanmar variant 2",
["mymr"]="myanmar",
+ ["narb"]="old north arabian",
+ ["nbat"]="nabataean",
+ ["newa"]="newa",
["nko" ]='n"ko',
+ ["nshu"]="nüshu",
["ogam"]="ogham",
["olck"]="ol chiki",
["orkh"]="old turkic and orkhon runic",
- ["orya"]="oriya",
["ory2"]="odia variant 2",
+ ["orya"]="oriya",
+ ["osge"]="osage",
["osma"]="osmanya",
+ ["palm"]="palmyrene",
+ ["pauc"]="pau cin hau",
+ ["perm"]="old permic",
["phag"]="phags-pa",
["phli"]="inscriptional pahlavi",
+ ["phlp"]="psalter pahlavi",
["phnx"]="phoenician",
+ ["plrd"]="miao",
["prti"]="inscriptional parthian",
["rjng"]="rejang",
+ ["rohg"]="hanifi rohingya",
["runr"]="runic",
["samr"]="samaritan",
["sarb"]="old south arabian",
["saur"]="saurashtra",
+ ["sgnw"]="sign writing",
["shaw"]="shavian",
["shrd"]="sharada",
+ ["sidd"]="siddham",
+ ["sind"]="khudawadi",
["sinh"]="sinhala",
+ ["sogd"]="sogdian",
+ ["sogo"]="old sogdian",
["sora"]="sora sompeng",
+ ["soyo"]="soyombo",
["sund"]="sundanese",
["sylo"]="syloti nagri",
["syrc"]="syriac",
@@ -12524,20 +12942,24 @@ local scripts=allocate {
["tale"]="tai le",
["talu"]="tai lu",
["taml"]="tamil",
+ ["tang"]="tangut",
["tavt"]="tai viet",
- ["telu"]="telugu",
["tel2"]="telugu variant 2",
+ ["telu"]="telugu",
["tfng"]="tifinagh",
["tglg"]="tagalog",
["thaa"]="thaana",
["thai"]="thai",
["tibt"]="tibetan",
+ ["tirh"]="tirhuta",
["tml2"]="tamil variant 2",
["ugar"]="ugaritic cuneiform",
["vai" ]="vai",
+ ["wara"]="warang citi",
["xpeo"]="old persian cuneiform",
["xsux"]="sumero-akkadian cuneiform",
["yi" ]="yi",
+ ["zanb"]="zanabazar square",
}
local languages=allocate {
["aba" ]="abaza",
@@ -12606,12 +13028,15 @@ local languages=allocate {
["brm" ]="burmese",
["brx" ]="bodo",
["bsh" ]="bashkir",
+ ["bsk" ]="burushaski",
["bti" ]="beti",
["bts" ]="batak simalungun",
["bug" ]="bugis",
+ ["byv" ]="medumba",
["cak" ]="kaqchikel",
["cat" ]="catalan",
["cbk" ]="zamboanga chavacano",
+ ["cchn"]="chinantec",
["ceb" ]="cebuano",
["cgg" ]="chiga",
["cha" ]="chamorro",
@@ -12626,6 +13051,8 @@ local languages=allocate {
["chr" ]="cherokee",
["chu" ]="chuvash",
["chy" ]="cheyenne",
+ ["cja" ]="western cham",
+ ["cjm" ]="eastern cham",
["cmr" ]="comorian",
["cop" ]="coptic",
["cor" ]="cornish",
@@ -12681,6 +13108,7 @@ local languages=allocate {
["fin" ]="finnish",
["fji" ]="fijian",
["fle" ]="dutch (flemish)",
+ ["fmp" ]="fe’fe’",
["fne" ]="forest nenets",
["fon" ]="fon",
["fos" ]="faroese",
@@ -12759,6 +13187,7 @@ local languages=allocate {
["jan" ]="japanese",
["jav" ]="javanese",
["jbo" ]="lojban",
+ ["jct" ]="krymchak",
["jii" ]="yiddish",
["jud" ]="ladino",
["jul" ]="jula",
@@ -12795,6 +13224,7 @@ local languages=allocate {
["kmn" ]="kumaoni",
["kmo" ]="komo",
["kms" ]="komso",
+ ["kmz" ]="khorasani turkic",
["knr" ]="kanuri",
["kod" ]="kodagu",
["koh" ]="korean old hangul",
@@ -12871,6 +13301,7 @@ local languages=allocate {
["mar" ]="marathi",
["maw" ]="marwari",
["mbn" ]="mbundu",
+ ["mbo" ]="mbo",
["mch" ]="manchu",
["mcr" ]="moose cree",
["mde" ]="mende",
@@ -12887,6 +13318,7 @@ local languages=allocate {
["mle" ]="male",
["mlg" ]="malagasy",
["mln" ]="malinke",
+ ["mlr" ]="malayalam reformed",
["mly" ]="malay",
["mnd" ]="mandinka",
["mng" ]="mongolian",
@@ -12940,6 +13372,7 @@ local languages=allocate {
["nto" ]="esperanto",
["nym" ]="nyamwezi",
["nyn" ]="norwegian nynorsk",
+ ["nza" ]="mbembe tigon",
["oci" ]="occitan",
["ocr" ]="oji-cree",
["ojb" ]="ojibway",
@@ -13003,6 +13436,7 @@ local languages=allocate {
["say" ]="sayisi",
["scn" ]="sicilian",
["sco" ]="scots",
+ ["scs" ]="north slavey",
["sek" ]="sekota",
["sel" ]="selkup",
["sga" ]="old irish",
@@ -13047,6 +13481,9 @@ local languages=allocate {
["sxu" ]="upper saxon",
["syl" ]="sylheti",
["syr" ]="syriac",
+ ["syre"]="estrangela syriac",
+ ["syrj"]="western syriac",
+ ["syrn"]="eastern syriac",
["szl" ]="silesian",
["tab" ]="tabasaran",
["taj" ]="tajiki",
@@ -13078,6 +13515,7 @@ local languages=allocate {
["tsj" ]="tshangla",
["tua" ]="turoyo aramaic",
["tul" ]="tulu",
+ ["tum" ]="tulu",
["tuv" ]="tuvin",
["tvl" ]="tuvalu",
["twi" ]="twi",
@@ -13103,6 +13541,7 @@ local languages=allocate {
["wel" ]="welsh",
["wlf" ]="wolof",
["wln" ]="walloon",
+ ["wtm" ]="mewati",
["xbd" ]="lü",
["xhs" ]="xhosa",
["xjb" ]="minjangbal",
@@ -13246,6 +13685,7 @@ local features=allocate {
["vkna"]="vertical kana alternates",
["vkrn"]="vertical kerning",
["vpal"]="proportional alternate vertical metrics",
+ ["vrtr"]="vertical alternates for rotation",
["vrt2"]="vertical rotation",
["zero"]="slashed zero",
["trep"]="traditional tex replacements",
@@ -28095,7 +28535,7 @@ local function testrun(disc,t_run,c_run,...)
end
local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
local renewed=false
- if (post or replace) and prev then
+ if (post or replace) then
if post then
setlink(posttail,next)
else
@@ -28288,6 +28728,7 @@ local function t_run_single(start,stop,font,attr,lookupcache)
ss=nil
end
end
+lookupmatch=lg
else
break
end
@@ -28441,6 +28882,7 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
ss=nil
end
end
+lookupmatch=lg
else
break
end
@@ -29145,7 +29587,7 @@ if not modules then modules={} end modules ['font-osd']={
copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local insert,imerge,copy=table.insert,table.imerge,table.copy
+local insert,imerge,copy,tohash=table.insert,table.imerge,table.copy,table.tohash
local next,type=next,type
local report=logs.reporter("otf","devanagari")
fonts=fonts or {}
@@ -29191,6 +29633,7 @@ local s_half=states.half
local s_pref=states.pref
local s_blwf=states.blwf
local s_pstf=states.pstf
+local s_init=states.init
local replace_all_nbsp=nil
replace_all_nbsp=function(head)
replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
@@ -29336,15 +29779,10 @@ local zw_char={
[c_zwj ]=true,
}
local dflt_true={
- dflt=true
-}
-local two_defaults={
- dev2=dflt_true,
-}
-local one_defaults={
- dev2=dflt_true,
- deva=dflt_true,
+ dflt=true,
}
+local two_defaults={}
+local one_defaults={}
local false_flags={ false,false,false,false }
local sequence_reorder_matras={
features={ dv01=two_defaults },
@@ -29373,7 +29811,7 @@ local sequence_reorder_reph={
}
}
local sequence_reorder_pre_base_reordering_consonants={
- features={ dv03=two_defaults },
+ features={ dv03=one_defaults },
flags=false_flags,
name="dv03_reorder_pre_base_reordering_consonants",
order={ "dv03" },
@@ -29409,6 +29847,7 @@ local basic_shaping_forms={
rkrf=true,
rphf=true,
vatu=true,
+ locl=true,
}
local valid={
abvs=true,
@@ -29432,6 +29871,7 @@ local valid={
psts=true,
haln=true,
calt=true,
+ locl=true,
}
local scripts={}
local scripts_one={ "deva","mlym","beng","gujr","guru","knda","orya","taml","telu" }
@@ -29442,7 +29882,7 @@ for i=1,nofscripts do
local two=scripts_two[i]
scripts[one]=true
scripts[two]=true
- two_defaults[one]=dflt_true
+ two_defaults[two]=dflt_true
one_defaults[one]=dflt_true
one_defaults[two]=dflt_true
end
@@ -29458,31 +29898,79 @@ local function initializedevanagi(tfmdata)
local gsubfeatures=resources.features.gsub
local sequences=resources.sequences
local sharedfeatures=tfmdata.shared.features
+ gsubfeatures["dv01"]=two_defaults
+ gsubfeatures["dv02"]=two_defaults
+ gsubfeatures["dv03"]=one_defaults
+ gsubfeatures["dv04"]=one_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
local lastmatch=0
for s=1,#sequences do
local features=sequences[s].features
if features then
for k,v in next,features do
+ if k=="locl" then
+ local steps=sequences[s].steps
+ local nofsteps=sequences[s].nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,pre_mark do
+ local locl=coverage[k]
+ if locl then
+ if #locl>0 then
+ for j=1,#locl do
+ local ck=locl[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ locl=coverage[k]
+ end
+ end
+ end
+ end
+ end
+ end
+ if locl then
+ reorder_matras.steps[1].coverage[locl]=true
+ end
+ end
+ end
+ end
+ end
+ end
if basic_shaping_forms[k] then
- lastmatch=s
+ lastmatch=lastmatch+1
+ if s~=lastmatch then
+ table.insert(sequences,lastmatch,table.remove(sequences,s))
+ end
end
end
end
end
local insertindex=lastmatch+1
- gsubfeatures["dv01"]=two_defaults
- gsubfeatures["dv02"]=two_defaults
- gsubfeatures["dv03"]=two_defaults
- gsubfeatures["dv04"]=one_defaults
- local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
- local reorder_reph=copy(sequence_reorder_reph)
- local reorder_matras=copy(sequence_reorder_matras)
- local remove_joiners=copy(sequence_remove_joiners)
+ if tfmdata.properties.language then
+ dflt_true[tfmdata.properties.language]=true
+ end
insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
insert(sequences,insertindex,reorder_reph)
insert(sequences,insertindex,reorder_matras)
insert(sequences,insertindex,remove_joiners)
local blwfcache={}
+ local vatucache={}
+ local pstfcache={}
local seqsubset={}
local rephstep={
coverage={}
@@ -29491,6 +29979,8 @@ local function initializedevanagi(tfmdata)
reph=false,
vattu=false,
blwfcache=blwfcache,
+ vatucache=vatucache,
+ pstfcache=pstfcache,
seqsubset=seqsubset,
reorderreph=rephstep,
}
@@ -29505,17 +29995,89 @@ local function initializedevanagi(tfmdata)
local features=sequence.features
local has_rphf=features.rphf
local has_blwf=features.blwf
- if has_rphf and has_rphf.deva then
+ local has_vatu=features.vatu
+ local has_pstf=features.pstf
+ if has_rphf and has_rphf[script] then
devanagari.reph=true
- elseif has_blwf and has_blwf.deva then
+ elseif (has_blwf and has_blwf[script] ) or (has_vatu and has_vatu[script] ) then
devanagari.vattu=true
for i=1,nofsteps do
local step=steps[i]
local coverage=step.coverage
if coverage then
for k,v in next,coverage do
- if not blwfcache[k] then
- blwfcache[k]=v
+ for h,w in next,halant do
+ if v[h] then
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ if has_vatu and has_vatu[script] and not vatucache[k] then
+ vatucache[k]=v
+ end
+ end
+ end
+ end
+ end
+ elseif has_pstf and has_pstf[script] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not pstfcache[k] then
+ pstfcache[k]=v
+ end
+ end
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local found=false
+ if #r>0 then
+ for j=1,#r do
+ local ck=r[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups and chainlookups[f] then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local h=coverage[k]
+ if h then
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,r do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ end
+ if found then
+ break
+ end
end
end
end
@@ -29527,17 +30089,53 @@ local function initializedevanagi(tfmdata)
local step=steps[i]
local coverage=step.coverage
if coverage then
- local reph=false
+ local reph,rephbase=false,false
if kind=="rphf" then
for k,v in next,ra do
local r=coverage[k]
if r then
+ rephbase=k
local h=false
- for k,v in next,halant do
- local h=r[k]
- if h then
- reph=h.ligature or false
- break
+ if #r>0 then
+ for j=1,#r do
+ local ck=r[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local r=coverage[k]
+ if r then
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if h then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
end
end
if reph then
@@ -29546,7 +30144,7 @@ local function initializedevanagi(tfmdata)
end
end
end
- seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ seqsubset[#seqsubset+1]={ kind,coverage,reph,rephbase }
end
end
end
@@ -29561,11 +30159,46 @@ local function initializedevanagi(tfmdata)
local h=coverage[k]
if h then
local found=false
- for k,v in next,h do
- found=v and v.ligature
- if found then
- pre_base_reordering_consonants[k]=found
- break
+ if #h>0 then
+ for j=1,#h do
+ local ck=h[j]
+ local f=ck[4]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local chainlookup=chainlookups[f]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local steps=chainstep.steps
+ local nofsteps=chainstep.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local h=coverage[k]
+ if h then
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ else
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[found]=true
+ break
+ end
end
end
if found then
@@ -29578,27 +30211,17 @@ local function initializedevanagi(tfmdata)
end
end
end
- if script=="deva" then
- sharedfeatures["dv04"]=true
- elseif script=="dev2" then
+ if two_defaults[script] then
sharedfeatures["dv01"]=true
sharedfeatures["dv02"]=true
sharedfeatures["dv03"]=true
sharedfeatures["dv04"]=true
- elseif script=="mlym" then
- sharedfeatures["pstf"]=true
- elseif script=="mlm2" then
- sharedfeatures["pstf"]=true
- sharedfeatures["pref"]=true
+ elseif one_defaults[script] then
sharedfeatures["dv03"]=true
- gsubfeatures ["dv03"]=two_defaults
- insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
- elseif script=="taml" then
sharedfeatures["dv04"]=true
-sharedfeatures["pstf"]=true
- elseif script=="tml2" then
- else
- report("todo: enable the right features for script %a",script)
+ end
+ if script=="mlym" or script=="taml" then
+ devanagari.left_matra_before_base=true
end
end
end
@@ -29631,6 +30254,8 @@ local function initialize_one(font,attr)
reph=false,
vattu=false,
blwfcache={},
+ vatucache={},
+ pstfcache={},
}
datasets.devanagari=devanagaridata
local resources=tfmdata.resources
@@ -29641,17 +30266,80 @@ local function initialize_one(font,attr)
local kind=dataset[4]
if kind=="rphf" then
devanagaridata.reph=true
- elseif kind=="blwf" then
+ elseif kind=="blwf" or kind=="vatu" then
devanagaridata.vattu=true
devanagaridata.blwfcache=devanagari.blwfcache
+ devanagaridata.vatucache=devanagari.vatucache
+ devanagaridata.pstfcache=devanagari.pstfcache
+ end
+ end
+ end
+ end
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache,devanagaridata.vatucache,devanagaridata.pstfcache
+end
+local function contextchain(contexts,n)
+ local char=getchar(n)
+ for k=1,#contexts do
+ local ck=contexts[k]
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ if (l-f)==1 and seq[f+1][char] then
+ local ok=true
+ local c=n
+ for i=l+1,#seq do
+ c=getnext(c)
+ if not c or not seq[i][ischar(c)] then
+ ok=false
+ break
+ end
+ end
+ if ok then
+ c=getprev(n)
+ for i=1,f-1 do
+ c=getprev(c)
+ if not c or not seq[f-i][ischar(c)] then
+ ok=false
+ end
+ end
+ end
+ if ok then
+ return true
+ end
+ end
+ end
+ return false
+end
+local function order_matras(c)
+ local cn=getnext(c)
+ local char=getchar(cn)
+ while dependent_vowel[char] do
+ local next=getnext(cn)
+ local cc=c
+ local cchar=getchar(cc)
+ while cc~=cn do
+ if (above_mark[char] and (below_mark[cchar] or post_mark[cchar])) or (below_mark[char] and (post_mark[cchar])) then
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
end
+ setnext(prev,next)
+ setnext(getprev(cc),cn)
+ setprev(cn,getprev(cc))
+ setnext(cn,cc)
+ setprev(cc,cn)
+ break
end
+ cc=getnext(cc)
+ cchar=getchar(cc)
end
+ cn=next
+ char=getchar(cn)
end
- return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
end
local function reorder_one(head,start,stop,font,attr,nbspaces)
- local reph,vattu,blwfcache=initialize_one(font,attr)
+ local reph,vattu,blwfcache,vatucache,pstfcache=initialize_one(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
local current=start
local n=getnext(start)
local base=nil
@@ -29734,6 +30422,8 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
base=current
elseif blwfcache[char] then
setprop(current,a_state,s_blwf)
+ elseif pstfcache[char] then
+ setprop(current,a_state,s_pstf)
else
base=current
end
@@ -29802,7 +30492,7 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
current=next
end
- if base~=stop and getprop(base,a_state) then
+ if base~=stop and getprop(base,a_state) then
local next=getnext(base)
if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
setprop(base,a_state,unsetvalue)
@@ -29830,6 +30520,16 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
n=getnext(n)
ch=getchar(n)
end
+ local tpm=twopart_mark[ch]
+ while tpm do
+ local extra=copy_node(n)
+ copyinjection(extra,n)
+ ch=tpm[1]
+ setchar(n,ch)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ tpm=twopart_mark[ch]
+ end
while c~=stop and dependent_vowel[ch] do
c=n
n=getnext(n)
@@ -29853,9 +30553,44 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
local last=getnext(c)
while cn~=last do
if pre_mark[getchar(cn)] then
- if bp then
- setnext(bp,cn)
+ if devanagari.left_matra_before_base then
+ local prev,next=getboth(cn)
+ setlink(prev,next)
+ if cn==stop then
+ stop=getprev(cn)
+ end
+ if base==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ setlink(getprev(base),cn)
+ setlink(cn,base)
+ cn=next
+ else
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
+ end
+ cn=next
end
+ elseif current~=base and dependent_vowel[getchar(cn)] then
local prev,next=getboth(cn)
if next then
setprev(next,prev)
@@ -29864,17 +30599,19 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if cn==stop then
stop=prev
end
- setprev(cn,bp)
- setlink(cn,firstcons)
- if firstcons==start then
- if head==start then
- head=cn
- end
- start=cn
+ setlink(b,cn,getnext(b))
+ order_matras(cn)
+ cn=next
+ elseif current==base and dependent_vowel[getchar(cn)] then
+ local cnn=getnext(cn)
+ order_matras(cn)
+ cn=cnn
+ while cn~=last and dependent_vowel[getchar(cn)] do
+ cn=getnext(cn)
end
- break
+ else
+ cn=getnext(cn)
end
- cn=getnext(cn)
end
allreordered=c==stop
current=getnext(c)
@@ -29932,6 +30669,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns=next
end
+ if not vatucache[char] then
+ next=getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns=next
+ next=getnext(cns)
+ end
+ end
elseif char==c_nbsp then
nbspaces=nbspaces+1
cns=current
@@ -29939,6 +30683,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if halant[getchar(next)] then
cns=next
end
+ if not vatucache[char] then
+ next=getnext(cns)
+ while dependent_vowel[getchar(next)] do
+ cns=next
+ next=getnext(cns)
+ end
+ end
end
end
current=getnext(current)
@@ -29946,6 +30697,9 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
if getchar(base)==c_nbsp then
nbspaces=nbspaces-1
+ if base==stop then
+ stop=getprev(stop)
+ end
head=remove_node(head,base)
flush_node(base)
end
@@ -29959,7 +30713,7 @@ function handlers.devanagari_reorder_matras(head,start)
local char=ischar(current,startfont)
local next=getnext(current)
if char and getprop(current,a_syllabe)==startattr then
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then
if next then
local char=ischar(next,startfont)
if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
@@ -29981,6 +30735,7 @@ function handlers.devanagari_reorder_matras(head,start)
end
return head,start,true
end
+local rephbase={}
function handlers.devanagari_reorder_reph(head,start)
local current=getnext(start)
local startnext=nil
@@ -29988,44 +30743,29 @@ function handlers.devanagari_reorder_reph(head,start)
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
::step_1::
- ::step_2::
- while current do
- local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
- if halant[char] and not getprop(current,a_state) then
- local next=getnext(current)
- if next then
- local nextchar=ischar(next,startfont)
- if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
- current=next
- next=getnext(current)
- end
- end
- startnext=getnext(start)
- head=remove_node(head,start)
- setlink(start,next)
- setlink(current,start)
- start=startnext
- startattr=getprop(start,a_syllabe)
- break
- end
- current=getnext(current)
- else
- break
- end
+ local char=ischar(start,startfont)
+ local rephbase=rephbase[startfont][char]
+ if char and after_subscript[rephbase] then
+ goto step_5
end
- ::step_3::
- ::step_4::
- if not startnext then
- current=getnext(start)
+ ::step_2::
+ if char and not after_postscript[rephbase] then
while current do
local char=ischar(current,startfont)
if char and getprop(current,a_syllabe)==startattr then
- if getprop(current,a_state)==s_pstf then
+ if halant[char] then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,startfont)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ end
+ end
startnext=getnext(start)
head=remove_node(head,start)
- setlink(getprev(current),start)
- setlink(start,current)
+ setlink(start,next)
+ setlink(current,start)
start=startnext
startattr=getprop(start,a_syllabe)
break
@@ -30036,6 +30776,63 @@ function handlers.devanagari_reorder_reph(head,start)
end
end
end
+ ::step_3::
+ if not startnext then
+ if char and after_main[rephbase] then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if consonant[char] and not getprop(current,a_state)==s_pref then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(current,start)
+ setlink(start,getnext(current))
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ end
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ end
+ end
+ ::step_4::
+ if not startnext then
+ if char and before_postscript[rephbase] then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,startfont)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(current),start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
+ elseif not c and (vowel_modifier[char] or stress_tone_mark[char] ) then
+ c=current
+ end
+ current=getnext(current)
+ else
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(getprev(c),start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ break
+ end
+ end
+ end
+ end
::step_5::
if not startnext then
current=getnext(start)
@@ -30043,7 +30840,10 @@ function handlers.devanagari_reorder_reph(head,start)
while current do
local char=ischar(current,startfont)
if char and getprop(current,a_syllabe)==startattr then
- if not c and mark_above_below_post[char] and not after_subscript[char] then
+ local state=getprop(current,a_state)
+ if before_subscript[rephbase] and (state==s_blwf or state==s_pstf) then
+ c=current
+ elseif after_subscript[rephbase] and (state==s_pstf) then
c=current
end
current=getnext(current)
@@ -30083,63 +30883,64 @@ function handlers.devanagari_reorder_reph(head,start)
end
return head,start,true
end
+local reordered_pre_base_reordering_consonants={}
function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
- local current=start
- local startnext=nil
- local startprev=nil
+ if reordered_pre_base_reordering_consonants[start] then
+ return head,start,true
+ end
+ local current=start
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
while current do
local char=ischar(current,startfont)
+ local next=getnext(current)
if char and getprop(current,a_syllabe)==startattr then
- local next=getnext(current)
- if halant[char] and not getprop(current,a_state) then
+ if halant[char] then
if next then
- local nextchar=ischar(next,startfont)
- if nextchar and getprop(next,a_syllabe)==startattr then
- if nextchar==c_zwnj or nextchar==c_zwj then
- current=next
- next=getnext(current)
- end
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
end
end
- startnext=getnext(start)
- removenode(start,start)
+ local startnext=getnext(start)
+ head=remove_node(head,start)
setlink(start,next)
setlink(current,start)
+ reordered_pre_base_reordering_consonants[start]=true
start=startnext
- break
+ return head,start,true
end
- current=next
else
break
end
+ current=next
end
- if not startnext then
- current=getnext(start)
- startattr=getprop(start,a_syllabe)
- while current do
- local char=ischar(current,startfont)
- if char and getprop(current,a_syllabe)==startattr then
- if not consonant[char] and getprop(current,a_state) then
- startnext=getnext(start)
- removenode(start,start)
- setlink(getprev(current),start)
- setlink(start,current)
- start=startnext
- break
- end
- current=getnext(current)
+ local startattr=getprop(start,a_syllabe)
+ local current=getprev(start)
+ while current and getprop(current,a_syllabe)==startattr do
+ local char=ischar(current)
+ if (not dependent_vowel[char] and not getprop(current,a_state) or getprop(current,a_state)==s_init) then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ if current==head then
+ setlink(start,current)
+ head=start
else
- break
+ setlink(getprev(current),start)
+ setlink(start,current)
end
+ reordered_pre_base_reordering_consonants[start]=true
+ start=startnext
+ break
end
+ current=getprev(current)
end
return head,start,true
end
function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
local stop=getnext(start)
- local font=getfont(start)
+ local font=getfont(start)
local last=start
while stop do
local char=ischar(stop,font)
@@ -30173,28 +30974,28 @@ local function initialize_two(font,attr)
end
local function reorder_two(head,start,stop,font,attr,nbspaces)
local seqsubset,reorderreph=initialize_two(font,attr)
- local reph=false
local halfpos=nil
local basepos=nil
local subpos=nil
local postpos=nil
- local locl={}
+ reorderreph.coverage={}
+ rephbase[font]={}
for i=1,#seqsubset do
local subset=seqsubset[i]
local kind=subset[1]
local lookupcache=subset[2]
if kind=="rphf" then
- reph=subset[3]
+ reorderreph.coverage[subset[3]]=true
+ rephbase[font][subset[3]]=subset[4]
local current=start
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
+ if found[getchar(next)] or contextchain(found,next) then
local afternext=next~=stop and getnext(next)
if afternext and zw_char[getchar(afternext)] then
current=afternext
@@ -30214,15 +31015,16 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pref)
- setprop(next,a_state,s_pref)
- current=next
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
+ end
end
end
end
@@ -30233,15 +31035,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
+ if found[getchar(next)] or contextchain(found,next) then
if next~=stop and getchar(getnext(next))==c_zwnj then
current=next
- else
+ elseif (not getprop(current,a_state)) then
setprop(current,a_state,s_half)
if not halfpos then
halfpos=current
@@ -30253,21 +31054,22 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
current=getnext(current)
end
- elseif kind=="blwf" then
+ elseif kind=="blwf" or kind=="vatu" then
local current=start
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_blwf)
- setprop(next,a_state,s_blwf)
- current=next
- subpos=current
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
+ end
end
end
end
@@ -30278,16 +31080,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local last=getnext(stop)
while current~=last do
if current~=stop then
- local c=locl[current] or getchar(current)
+ local c=getchar(current)
local found=lookupcache[c]
if found then
local next=getnext(current)
- local n=locl[next] or getchar(next)
- if found[n] then
- setprop(current,a_state,s_pstf)
- setprop(next,a_state,s_pstf)
- current=next
- postpos=current
+ if found[getchar(next)] or contextchain(found,next) then
+ if (not getprop(current,a_state) and not getprop(next,a_state)) then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
end
end
end
@@ -30295,7 +31098,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
end
end
- reorderreph.coverage={ [reph]=true }
local current,base,firstcons=start,nil,nil
if getprop(start,a_state)==s_rphf then
current=getnext(getnext(start))
@@ -30356,7 +31158,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
firstcons=current
end
local a=getprop(current,a_state)
- if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ if not (a==s_blwf or a==s_pstf or (a~=s_rphf and a~=s_blwf and ra[getchar(current)])) then
base=current
end
end
@@ -30373,7 +31175,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
return head,stop,nbspaces
else
- if getprop(base,a_state) then
+ if getprop(base,a_state) then
setprop(base,a_state,unsetvalue)
end
basepos=base
@@ -30391,34 +31193,59 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local current=start
local last=getnext(stop)
while current~=last do
- local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local char=getchar(current)
+ local target=nil
+ local cn=getnext(current)
local tpm=twopart_mark[char]
- if tpm then
+ while tpm do
local extra=copy_node(current)
copyinjection(extra,current)
char=tpm[1]
setchar(current,char)
setchar(extra,tpm[2])
head=insert_node_after(head,current,extra)
+ tpm=twopart_mark[char]
end
if not moved[current] and dependent_vowel[char] then
- if pre_mark[char] then
+ if pre_mark[char] then
moved[current]=true
local prev,next=getboth(current)
setlink(prev,next)
if current==stop then
stop=getprev(current)
end
- if halfpos==start then
+ local pos
+ if before_main[char] then
+ pos=basepos
+ else
+ pos=halfpos
+ end
+ local ppos=getprev(pos)
+ while ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) do
+ if getprop(ppos,a_state)==s_pref then
+ pos=ppos
+ end
+ ppos=getprev(ppos)
+ end
+ local ppos=getprev(pos)
+ while ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) and halant[ischar(ppos)] do
+ ppos=getprev(ppos)
+ if ppos and getprop(ppos,a_syllabe)==getprop(pos,a_syllabe) and consonant[ischar(ppos)] then
+ pos=ppos
+ ppos=getprev(ppos)
+ else
+ break
+ end
+ end
+ if pos==start then
if head==start then
head=current
end
start=current
end
- setlink(getprev(halfpos),current)
- setlink(current,halfpos)
- halfpos=current
- elseif above_mark[char] then
+ setlink(getprev(pos),current)
+ setlink(current,pos)
+ elseif above_mark[char] then
target=basepos
if subpos==basepos then
subpos=current
@@ -30427,13 +31254,23 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
postpos=current
end
basepos=current
- elseif below_mark[char] then
+ elseif below_mark[char] then
target=subpos
if postpos==subpos then
postpos=current
end
subpos=current
- elseif post_mark[char] then
+ elseif post_mark[char] then
+ local n=getnext(postpos)
+ while n do
+ local v=ischar(n,font)
+ if nukta[v] or stress_tone_mark[v] or vowel_modifier[v] then
+ postpos=n
+ else
+ break
+ end
+ n=getnext(n)
+ end
target=postpos
postpos=current
end
@@ -30452,7 +31289,35 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
current=cn
end
- local current,c=start,nil
+ local current=getnext(start)
+ local last=getnext(stop)
+ while current~=last do
+ local char=getchar(current)
+ local cn=getnext(current)
+ if halant[char] and ra[ischar(cn)] and getprop(cn,a_state)~=s_rphf and getprop(cn,a_state)~=s_blwf then
+ if after_main[ischar(cn)] then
+ local prev=getprev(current)
+ local next=getnext(cn)
+ local bpn=getnext(basepos)
+ while bpn and dependent_vowel[ischar(bpn)] do
+ basepos=bpn
+ bpn=getnext(bpn)
+ end
+ if basepos~=prev then
+ setlink(prev,next)
+ setlink(cn,getnext(basepos))
+ setlink(basepos,current)
+ if cn==stop then
+ stop=prev
+ end
+ cn=next
+ end
+ end
+ end
+ current=cn
+ end
+ local current=start
+ local c=nil
while current~=stop do
local char=getchar(current)
if halant[char] or stress_tone_mark[char] then
@@ -30571,7 +31436,25 @@ local function analyze_next_chars_one(c,font,variant)
if not v then
return c
end
- if dependent_vowel[v] then
+ local already_pre_mark
+ local already_above_mark
+ local already_below_mark
+ local already_post_mark
+ while dependent_vowel[v] do
+ local vowels=twopart_mark[v] or { v }
+ for k,v in next,vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark=true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark=true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark=true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark=true
+ else
+ return c
+ end
+ end
c=getnext(c)
n=getnext(c)
if not n then
@@ -30737,7 +31620,25 @@ local function analyze_next_chars_two(c,font)
end
end
else
- if dependent_vowel[v] then
+ local already_pre_mark
+ local already_above_mark
+ local already_below_mark
+ local already_post_mark
+ while dependent_vowel[v] do
+ local vowels=twopart_mark[v] or { v }
+ for k,v in next,vowels do
+ if pre_mark[v] and not already_pre_mark then
+ already_pre_mark=true
+ elseif above_mark[v] and not already_above_mark then
+ already_above_mark=true
+ elseif below_mark[v] and not already_below_mark then
+ already_below_mark=true
+ elseif post_mark[v] and not already_post_mark then
+ already_post_mark=true
+ else
+ return c
+ end
+ end
c=n
n=getnext(c)
if not n then
@@ -30804,6 +31705,7 @@ local function method_one(head,font,attr)
local start=true
local done=false
local nbspaces=0
+ local syllabe=0
while current do
local char=ischar(current,font)
if char then
@@ -30940,6 +31842,15 @@ local function method_one(head,font,attr)
end
end
if syllablestart~=syllableend then
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
head,current,nbspaces=reorder_one(head,syllablestart,syllableend,font,attr,nbspaces)
current=getnext(current)
end
@@ -30978,6 +31889,20 @@ local function method_one(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
+ current=head
+ local n=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ if n==0 and not getprop(current,a_state) then
+ setprop(current,a_state,s_init)
+ end
+ n=n+1
+ else
+ n=0
+ end
+ current=getnext(current)
+ end
return head,done
end
local function method_two(head,font,attr)
@@ -31046,7 +31971,7 @@ local function method_two(head,font,attr)
end
if not syllableend and show_syntax_errors then
local char=ischar(current,font)
- if char and not getprop(current,a_state) then
+ if char and not getprop(current,a_state) then
local mark=mark_four[char]
if mark then
head,current=inject_syntax_error(head,current,char)
@@ -31059,6 +31984,20 @@ local function method_two(head,font,attr)
if nbspaces>0 then
head=replace_all_nbsp(head)
end
+ current=head
+ local n=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ if n==0 and not getprop(current,a_state) then
+ setprop(current,a_state,s_init)
+ end
+ n=n+1
+ else
+ n=0
+ end
+ current=getnext(current)
+ end
return head,done
end
for i=1,nofscripts do
@@ -31241,32 +32180,17 @@ do
local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
local hashed={}
local cache={}
- if epdf then
- local openpdf=epdf.openMemStream
- function otf.storepdfdata(pdf)
- local done=hashed[pdf]
- if not done then
- nofstreams=nofstreams+1
- local o,n=openpdf(pdf,#pdf,f_name(nofstreams))
- cache[n]=o
- done=f_used(n)
- hashed[pdf]=done
- end
- return done
- end
- else
- local openpdf=pdfe.new
- function otf.storepdfdata(pdf)
- local done=hashed[pdf]
- if not done then
- nofstreams=nofstreams+1
- local f=f_name(nofstreams)
- local n=openpdf(pdf,#pdf,f)
- done=f_used(n)
- hashed[pdf]=done
- end
- return done
- end
+ local openpdf=pdfe.new
+ function otf.storepdfdata(pdf)
+ local done=hashed[pdf]
+ if not done then
+ nofstreams=nofstreams+1
+ local f=f_name(nofstreams)
+ local n=openpdf(pdf,#pdf,f)
+ done=f_used(n)
+ hashed[pdf]=done
+ end
+ return done
end
end
local function pdftovirtual(tfmdata,pdfshapes,kind)
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
index da9cdcc9981..c1b8236cb58 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
@@ -6,8 +6,8 @@
local ProvidesLuaModule = {
name = "luaotfload-auxiliary",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / auxiliary functions",
license = "GPL v2.0"
}
@@ -287,6 +287,21 @@ luaotfload_callbacks [#luaotfload_callbacks + 1] = {
"patch_font", set_capheight, "set_capheight",
}
+-- Of course there are also fonts with no sensible x-height, so let's add a
+-- fallback there:
+local function set_xheight(tfmdata)
+ local parameters = tfmdata.parameters
+ if not parameters then return end
+ if not (parameters.x_height or parameters[5] or 0) == 0 then return end
+ if tfmdata.characters and tfmdata.characters[120] then
+ parameters.x_height = tfmdata.characters[120].height
+ else
+ parameters.x_height = (parameters.ascender or 0)/2
+ end
+end
+luaotfload_callbacks [#luaotfload_callbacks + 1] = {
+ "patch_font", set_xheight, "set_xheight",
+}
-----------------------------------------------------------------------
--- glyphs and characters
-----------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-characters.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-characters.lua
index de59715f19e..ded3b3eaf08 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-characters.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-characters.lua
@@ -14397,7 +14397,7 @@ return {
[0x981]={
category="mn",
direction="nsm",
- indic="o",
+ indic="m",
indicorder="ap",
linebreak="cm",
unicodeslot=0x981,
@@ -14763,7 +14763,7 @@ return {
[0x9C0]={
category="mc",
direction="l",
- indic="d",
+ indic="o",
indicmark="r",
indicorder="ap",
linebreak="cm",
@@ -14809,7 +14809,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="l",
indicorder="bh",
linebreak="cm",
unicodeslot=0x9C7,
@@ -14818,7 +14818,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="l",
indicorder="bh",
linebreak="cm",
unicodeslot=0x9C8,
@@ -14826,7 +14826,8 @@ return {
[0x9CB]={
category="mc",
direction="l",
- indic="s",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0x9C7, 0x9BE },
unicodeslot=0x9CB,
@@ -14834,7 +14835,8 @@ return {
[0x9CC]={
category="mc",
direction="l",
- indic="s",
+ indic="d",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0x9C7, 0x9D7 },
unicodeslot=0x9CC,
@@ -14991,6 +14993,7 @@ return {
category="lo",
direction="l",
indic="o",
+ indicclass="ra",
indicorder="as",
linebreak="al",
unicodeslot=0x9F0,
@@ -15696,6 +15699,7 @@ return {
category="mn",
direction="nsm",
indic="o",
+ indicmark="t",
linebreak="cm",
unicodeslot=0xA82,
},
@@ -15983,6 +15987,7 @@ return {
category="lo",
direction="l",
indic="c",
+ indicorder="ap",
linebreak="al",
unicodeslot=0xAAF,
},
@@ -16793,7 +16798,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="l",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xB47, 0xB56 },
unicodeslot=0xB48,
@@ -18030,7 +18035,7 @@ return {
category="mn",
direction="nsm",
indic="d",
- indicmark="t",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xC46, 0xC56 },
unicodeslot=0xC48,
@@ -18208,6 +18213,12 @@ return {
linebreak="nu",
unicodeslot=0xC6F,
},
+ [0xC77]={
+ category="po",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0xC77,
+ },
[0xC78]={
category="no",
direction="on",
@@ -18681,7 +18692,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xCBF, 0xCD5 },
unicodeslot=0xCC0,
@@ -18735,7 +18746,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xCC6, 0xCD5 },
unicodeslot=0xCC7,
@@ -18744,7 +18755,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xCC6, 0xCD6 },
unicodeslot=0xCC8,
@@ -18753,7 +18764,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xCC6, 0xCC2 },
unicodeslot=0xCCA,
@@ -18762,7 +18773,7 @@ return {
category="mc",
direction="l",
indic="d",
- indicmark="r",
+ indicmark="s",
linebreak="cm",
specials={ "char", 0xCCA, 0xCD5 },
unicodeslot=0xCCB,
@@ -18779,7 +18790,7 @@ return {
[0xCCD]={
category="mn",
direction="nsm",
- indic="s",
+ indic="o",
indicclass="halant",
linebreak="cm",
unicodeslot=0xCCD,
@@ -18787,7 +18798,8 @@ return {
[0xCD5]={
category="mc",
direction="l",
- indic="o",
+ indic="d",
+ indicmark="r",
indicorder="as",
linebreak="cm",
unicodeslot=0xCD5,
@@ -18795,7 +18807,8 @@ return {
[0xCD6]={
category="mc",
direction="l",
- indic="o",
+ indic="d",
+ indicmark="b",
indicorder="as",
linebreak="cm",
unicodeslot=0xCD6,
@@ -19457,7 +19470,7 @@ return {
[0xD4D]={
category="mn",
direction="nsm",
- indic="s",
+ indic="o",
indicclass="halant",
linebreak="cm",
unicodeslot=0xD4D,
@@ -20860,6 +20873,12 @@ return {
linebreak="sa",
unicodeslot=0xE84,
},
+ [0xE86]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE86,
+ },
[0xE87]={
category="lo",
direction="l",
@@ -20872,18 +20891,66 @@ return {
linebreak="sa",
unicodeslot=0xE88,
},
+ [0xE89]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE89,
+ },
[0xE8A]={
category="lo",
direction="l",
linebreak="sa",
unicodeslot=0xE8A,
},
+ [0xE8C]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE8C,
+ },
[0xE8D]={
category="lo",
direction="l",
linebreak="sa",
unicodeslot=0xE8D,
},
+ [0xE8E]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE8E,
+ },
+ [0xE8F]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE8F,
+ },
+ [0xE90]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE90,
+ },
+ [0xE91]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE91,
+ },
+ [0xE92]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE92,
+ },
+ [0xE93]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE93,
+ },
[0xE94]={
category="lo",
direction="l",
@@ -20908,6 +20975,12 @@ return {
linebreak="sa",
unicodeslot=0xE97,
},
+ [0xE98]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xE98,
+ },
[0xE99]={
category="lo",
direction="l",
@@ -20950,6 +21023,12 @@ return {
linebreak="sa",
unicodeslot=0xE9F,
},
+ [0xEA0]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xEA0,
+ },
[0xEA1]={
category="lo",
direction="l",
@@ -20980,6 +21059,18 @@ return {
linebreak="sa",
unicodeslot=0xEA7,
},
+ [0xEA8]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xEA8,
+ },
+ [0xEA9]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xEA9,
+ },
[0xEAA]={
category="lo",
direction="l",
@@ -20992,6 +21083,12 @@ return {
linebreak="sa",
unicodeslot=0xEAB,
},
+ [0xEAC]={
+ category="lo",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0xEAC,
+ },
[0xEAD]={
category="lo",
direction="l",
@@ -21071,6 +21168,12 @@ return {
linebreak="sa",
unicodeslot=0xEB9,
},
+ [0xEBA]={
+ category="mn",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0xEBA,
+ },
[0xEBB]={
category="mn",
direction="nsm",
@@ -40832,13 +40935,13 @@ return {
[0x1CF2]={
category="mc",
direction="l",
- linebreak="cm",
+ linebreak="al",
unicodeslot=0x1CF2,
},
[0x1CF3]={
category="mc",
direction="l",
- linebreak="cm",
+ linebreak="al",
unicodeslot=0x1CF3,
},
[0x1CF4]={
@@ -40877,6 +40980,12 @@ return {
linebreak="cm",
unicodeslot=0x1CF9,
},
+ [0x1CFA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1CFA,
+ },
[0x1D00]={
category="ll",
direction="l",
@@ -64191,6 +64300,12 @@ return {
linebreak="al",
unicodeslot=0x2BC8,
},
+ [0x2BC9]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BC9,
+ },
[0x2BCA]={
category="so",
direction="on",
@@ -64510,6 +64625,12 @@ return {
mirror=0x221F,
unicodeslot=0x2BFE,
},
+ [0x2BFF]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BFF,
+ },
[0x2C00]={
category="lu",
direction="l",
@@ -67761,6 +67882,12 @@ return {
linebreak="ba",
unicodeslot=0x2E4E,
},
+ [0x2E4F]={
+ category="po",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E4F,
+ },
[0x2E80]={
category="so",
direction="on",
@@ -74895,6 +75022,13 @@ return {
specials={ "circle", 0x30F2 },
unicodeslot=0x32FE,
},
+ [0x32FF]={
+ category="so",
+ direction="l",
+ linebreak="id",
+ specials={ "square", 0x4EE4, 0x548C },
+ unicodeslot=0x32FF,
+ },
[0x3300]={
category="so",
direction="l",
@@ -88702,6 +88836,72 @@ return {
linebreak="al",
unicodeslot=0xA7B9,
},
+ [0xA7BA]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BA,
+ },
+ [0xA7BB]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BB,
+ },
+ [0xA7BC]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BC,
+ },
+ [0xA7BD]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BD,
+ },
+ [0xA7BE]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BE,
+ },
+ [0xA7BF]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7BF,
+ },
+ [0xA7C2]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7C2,
+ },
+ [0xA7C3]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7C3,
+ },
+ [0xA7C4]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7C4,
+ },
+ [0xA7C5]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7C5,
+ },
+ [0xA7C6]={
+ category="lu",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7C6,
+ },
[0xA7F7]={
category="lo",
direction="l",
@@ -90041,7 +90241,7 @@ return {
[0xA8F0]={
category="mn",
direction="nsm",
- indic="m",
+ indic="o",
indicmark="t",
linebreak="cm",
unicodeslot=0xA8F0,
@@ -91190,7 +91390,7 @@ return {
},
[0xA9BD]={
category="mc",
- direction="l",
+ direction="nsm",
linebreak="cm",
unicodeslot=0xA9BD,
},
@@ -93400,6 +93600,18 @@ return {
linebreak="al",
unicodeslot=0xAB65,
},
+ [0xAB66]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB66,
+ },
+ [0xAB67]={
+ category="ll",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB67,
+ },
[0xAB70]={
category="ll",
direction="l",
@@ -120324,6 +120536,144 @@ return {
linebreak="al",
unicodeslot=0x10F59,
},
+ [0x10FE0]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE0,
+ },
+ [0x10FE1]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE1,
+ },
+ [0x10FE2]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE2,
+ },
+ [0x10FE3]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE3,
+ },
+ [0x10FE4]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE4,
+ },
+ [0x10FE5]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE5,
+ },
+ [0x10FE6]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE6,
+ },
+ [0x10FE7]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE7,
+ },
+ [0x10FE8]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE8,
+ },
+ [0x10FE9]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FE9,
+ },
+ [0x10FEA]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FEA,
+ },
+ [0x10FEB]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FEB,
+ },
+ [0x10FEC]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FEC,
+ },
+ [0x10FED]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FED,
+ },
+ [0x10FEE]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FEE,
+ },
+ [0x10FEF]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FEF,
+ },
+ [0x10FF0]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF0,
+ },
+ [0x10FF1]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF1,
+ },
+ [0x10FF2]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF2,
+ },
+ [0x10FF3]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF3,
+ },
+ [0x10FF4]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF4,
+ },
+ [0x10FF5]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF5,
+ },
+ [0x10FF6]={
+ category="lo",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10FF6,
+ },
[0x11000]={
category="mc",
direction="l",
@@ -125023,6 +125373,12 @@ return {
linebreak="cm",
unicodeslot=0x1145E,
},
+ [0x1145F]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1145F,
+ },
[0x11480]={
category="lo",
direction="l",
@@ -126960,6 +127316,12 @@ return {
linebreak="cm",
unicodeslot=0x116B7,
},
+ [0x116B8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x116B8,
+ },
[0x116C0]={
category="nd",
direction="l",
@@ -128232,6 +128594,396 @@ return {
linebreak="al",
unicodeslot=0x118FF,
},
+ [0x119A0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A0,
+ },
+ [0x119A1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A1,
+ },
+ [0x119A2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A2,
+ },
+ [0x119A3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A3,
+ },
+ [0x119A4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A4,
+ },
+ [0x119A5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A5,
+ },
+ [0x119A6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A6,
+ },
+ [0x119A7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119A7,
+ },
+ [0x119AA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AA,
+ },
+ [0x119AB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AB,
+ },
+ [0x119AC]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AC,
+ },
+ [0x119AD]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AD,
+ },
+ [0x119AE]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AE,
+ },
+ [0x119AF]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119AF,
+ },
+ [0x119B0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B0,
+ },
+ [0x119B1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B1,
+ },
+ [0x119B2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B2,
+ },
+ [0x119B3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B3,
+ },
+ [0x119B4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B4,
+ },
+ [0x119B5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B5,
+ },
+ [0x119B6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B6,
+ },
+ [0x119B7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B7,
+ },
+ [0x119B8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B8,
+ },
+ [0x119B9]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119B9,
+ },
+ [0x119BA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BA,
+ },
+ [0x119BB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BB,
+ },
+ [0x119BC]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BC,
+ },
+ [0x119BD]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BD,
+ },
+ [0x119BE]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BE,
+ },
+ [0x119BF]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119BF,
+ },
+ [0x119C0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C0,
+ },
+ [0x119C1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C1,
+ },
+ [0x119C2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C2,
+ },
+ [0x119C3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C3,
+ },
+ [0x119C4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C4,
+ },
+ [0x119C5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C5,
+ },
+ [0x119C6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C6,
+ },
+ [0x119C7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C7,
+ },
+ [0x119C8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C8,
+ },
+ [0x119C9]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119C9,
+ },
+ [0x119CA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CA,
+ },
+ [0x119CB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CB,
+ },
+ [0x119CC]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CC,
+ },
+ [0x119CD]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CD,
+ },
+ [0x119CE]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CE,
+ },
+ [0x119CF]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119CF,
+ },
+ [0x119D0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119D0,
+ },
+ [0x119D1]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119D1,
+ },
+ [0x119D2]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119D2,
+ },
+ [0x119D3]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119D3,
+ },
+ [0x119D4]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119D4,
+ },
+ [0x119D5]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119D5,
+ },
+ [0x119D6]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119D6,
+ },
+ [0x119D7]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119D7,
+ },
+ [0x119DA]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119DA,
+ },
+ [0x119DB]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119DB,
+ },
+ [0x119DC]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119DC,
+ },
+ [0x119DD]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119DD,
+ },
+ [0x119DE]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119DE,
+ },
+ [0x119DF]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119DF,
+ },
+ [0x119E0]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x119E0,
+ },
+ [0x119E1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119E1,
+ },
+ [0x119E2]={
+ category="po",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x119E2,
+ },
+ [0x119E3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x119E3,
+ },
+ [0x119E4]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x119E4,
+ },
[0x11A00]={
category="lo",
direction="l",
@@ -128976,6 +129728,18 @@ return {
linebreak="al",
unicodeslot=0x11A83,
},
+ [0x11A84]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11A84,
+ },
+ [0x11A85]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11A85,
+ },
[0x11A86]={
category="lo",
direction="l",
@@ -131460,6 +132224,312 @@ return {
linebreak="al",
unicodeslot=0x11EF8,
},
+ [0x11FC0]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC0,
+ },
+ [0x11FC1]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC1,
+ },
+ [0x11FC2]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC2,
+ },
+ [0x11FC3]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC3,
+ },
+ [0x11FC4]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC4,
+ },
+ [0x11FC5]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC5,
+ },
+ [0x11FC6]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC6,
+ },
+ [0x11FC7]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC7,
+ },
+ [0x11FC8]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC8,
+ },
+ [0x11FC9]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FC9,
+ },
+ [0x11FCA]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCA,
+ },
+ [0x11FCB]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCB,
+ },
+ [0x11FCC]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCC,
+ },
+ [0x11FCD]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCD,
+ },
+ [0x11FCE]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCE,
+ },
+ [0x11FCF]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FCF,
+ },
+ [0x11FD0]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FD0,
+ },
+ [0x11FD1]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FD1,
+ },
+ [0x11FD2]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FD2,
+ },
+ [0x11FD3]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FD3,
+ },
+ [0x11FD4]={
+ category="no",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11FD4,
+ },
+ [0x11FD5]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FD5,
+ },
+ [0x11FD6]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FD6,
+ },
+ [0x11FD7]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FD7,
+ },
+ [0x11FD8]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FD8,
+ },
+ [0x11FD9]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FD9,
+ },
+ [0x11FDA]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FDA,
+ },
+ [0x11FDB]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FDB,
+ },
+ [0x11FDC]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FDC,
+ },
+ [0x11FDD]={
+ category="sc",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x11FDD,
+ },
+ [0x11FDE]={
+ category="sc",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x11FDE,
+ },
+ [0x11FDF]={
+ category="sc",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x11FDF,
+ },
+ [0x11FE0]={
+ category="sc",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x11FE0,
+ },
+ [0x11FE1]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE1,
+ },
+ [0x11FE2]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE2,
+ },
+ [0x11FE3]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE3,
+ },
+ [0x11FE4]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE4,
+ },
+ [0x11FE5]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE5,
+ },
+ [0x11FE6]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE6,
+ },
+ [0x11FE7]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE7,
+ },
+ [0x11FE8]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE8,
+ },
+ [0x11FE9]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FE9,
+ },
+ [0x11FEA]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FEA,
+ },
+ [0x11FEB]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FEB,
+ },
+ [0x11FEC]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FEC,
+ },
+ [0x11FED]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FED,
+ },
+ [0x11FEE]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FEE,
+ },
+ [0x11FEF]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FEF,
+ },
+ [0x11FF0]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FF0,
+ },
+ [0x11FF1]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x11FF1,
+ },
+ [0x11FFF]={
+ category="po",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11FFF,
+ },
[0x12000]={
category="lo",
direction="l",
@@ -145290,6 +146360,60 @@ return {
linebreak="al",
unicodeslot=0x1342E,
},
+ [0x13430]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13430,
+ },
+ [0x13431]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13431,
+ },
+ [0x13432]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13432,
+ },
+ [0x13433]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13433,
+ },
+ [0x13434]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13434,
+ },
+ [0x13435]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13435,
+ },
+ [0x13436]={
+ category="cf",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13436,
+ },
+ [0x13437]={
+ category="cf",
+ direction="l",
+ linebreak="op",
+ unicodeslot=0x13437,
+ },
+ [0x13438]={
+ category="cf",
+ direction="l",
+ linebreak="cl",
+ unicodeslot=0x13438,
+ },
[0x14400]={
category="lo",
direction="l",
@@ -154398,6 +155522,48 @@ return {
linebreak="al",
unicodeslot=0x16F44,
},
+ [0x16F45]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F45,
+ },
+ [0x16F46]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F46,
+ },
+ [0x16F47]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F47,
+ },
+ [0x16F48]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F48,
+ },
+ [0x16F49]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F49,
+ },
+ [0x16F4A]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x16F4A,
+ },
+ [0x16F4F]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x16F4F,
+ },
[0x16F50]={
category="lo",
direction="l",
@@ -154680,6 +155846,60 @@ return {
linebreak="cm",
unicodeslot=0x16F7E,
},
+ [0x16F7F]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F7F,
+ },
+ [0x16F80]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F80,
+ },
+ [0x16F81]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F81,
+ },
+ [0x16F82]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F82,
+ },
+ [0x16F83]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F83,
+ },
+ [0x16F84]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F84,
+ },
+ [0x16F85]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F85,
+ },
+ [0x16F86]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F86,
+ },
+ [0x16F87]={
+ category="mc",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x16F87,
+ },
[0x16F8F]={
category="mn",
direction="nsm",
@@ -154794,6 +156014,18 @@ return {
linebreak="ns",
unicodeslot=0x16FE1,
},
+ [0x16FE2]={
+ category="po",
+ direction="on",
+ linebreak="ns",
+ unicodeslot=0x16FE2,
+ },
+ [0x16FE3]={
+ category="lm",
+ direction="l",
+ linebreak="ns",
+ unicodeslot=0x16FE3,
+ },
[0x18800]={
category="lo",
direction="l",
@@ -161046,6 +162278,48 @@ return {
linebreak="id",
unicodeslot=0x1B11E,
},
+ [0x1B150]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B150,
+ },
+ [0x1B151]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B151,
+ },
+ [0x1B152]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B152,
+ },
+ [0x1B164]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B164,
+ },
+ [0x1B165]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B165,
+ },
+ [0x1B166]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B166,
+ },
+ [0x1B167]={
+ category="lo",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B167,
+ },
[0x1B170]={
category="lo",
direction="l",
@@ -179623,6 +180897,786 @@ return {
linebreak="cm",
unicodeslot=0x1E02A,
},
+ [0x1E100]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E100,
+ },
+ [0x1E101]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E101,
+ },
+ [0x1E102]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E102,
+ },
+ [0x1E103]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E103,
+ },
+ [0x1E104]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E104,
+ },
+ [0x1E105]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E105,
+ },
+ [0x1E106]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E106,
+ },
+ [0x1E107]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E107,
+ },
+ [0x1E108]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E108,
+ },
+ [0x1E109]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E109,
+ },
+ [0x1E10A]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10A,
+ },
+ [0x1E10B]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10B,
+ },
+ [0x1E10C]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10C,
+ },
+ [0x1E10D]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10D,
+ },
+ [0x1E10E]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10E,
+ },
+ [0x1E10F]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E10F,
+ },
+ [0x1E110]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E110,
+ },
+ [0x1E111]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E111,
+ },
+ [0x1E112]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E112,
+ },
+ [0x1E113]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E113,
+ },
+ [0x1E114]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E114,
+ },
+ [0x1E115]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E115,
+ },
+ [0x1E116]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E116,
+ },
+ [0x1E117]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E117,
+ },
+ [0x1E118]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E118,
+ },
+ [0x1E119]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E119,
+ },
+ [0x1E11A]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11A,
+ },
+ [0x1E11B]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11B,
+ },
+ [0x1E11C]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11C,
+ },
+ [0x1E11D]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11D,
+ },
+ [0x1E11E]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11E,
+ },
+ [0x1E11F]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E11F,
+ },
+ [0x1E120]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E120,
+ },
+ [0x1E121]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E121,
+ },
+ [0x1E122]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E122,
+ },
+ [0x1E123]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E123,
+ },
+ [0x1E124]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E124,
+ },
+ [0x1E125]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E125,
+ },
+ [0x1E126]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E126,
+ },
+ [0x1E127]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E127,
+ },
+ [0x1E128]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E128,
+ },
+ [0x1E129]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E129,
+ },
+ [0x1E12A]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E12A,
+ },
+ [0x1E12B]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E12B,
+ },
+ [0x1E12C]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E12C,
+ },
+ [0x1E130]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E130,
+ },
+ [0x1E131]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E131,
+ },
+ [0x1E132]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E132,
+ },
+ [0x1E133]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E133,
+ },
+ [0x1E134]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E134,
+ },
+ [0x1E135]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E135,
+ },
+ [0x1E136]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E136,
+ },
+ [0x1E137]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E137,
+ },
+ [0x1E138]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E138,
+ },
+ [0x1E139]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E139,
+ },
+ [0x1E13A]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E13A,
+ },
+ [0x1E13B]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E13B,
+ },
+ [0x1E13C]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E13C,
+ },
+ [0x1E13D]={
+ category="lm",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E13D,
+ },
+ [0x1E140]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E140,
+ },
+ [0x1E141]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E141,
+ },
+ [0x1E142]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E142,
+ },
+ [0x1E143]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E143,
+ },
+ [0x1E144]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E144,
+ },
+ [0x1E145]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E145,
+ },
+ [0x1E146]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E146,
+ },
+ [0x1E147]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E147,
+ },
+ [0x1E148]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E148,
+ },
+ [0x1E149]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E149,
+ },
+ [0x1E14E]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E14E,
+ },
+ [0x1E14F]={
+ category="so",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E14F,
+ },
+ [0x1E2C0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C0,
+ },
+ [0x1E2C1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C1,
+ },
+ [0x1E2C2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C2,
+ },
+ [0x1E2C3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C3,
+ },
+ [0x1E2C4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C4,
+ },
+ [0x1E2C5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C5,
+ },
+ [0x1E2C6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C6,
+ },
+ [0x1E2C7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C7,
+ },
+ [0x1E2C8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C8,
+ },
+ [0x1E2C9]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2C9,
+ },
+ [0x1E2CA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CA,
+ },
+ [0x1E2CB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CB,
+ },
+ [0x1E2CC]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CC,
+ },
+ [0x1E2CD]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CD,
+ },
+ [0x1E2CE]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CE,
+ },
+ [0x1E2CF]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2CF,
+ },
+ [0x1E2D0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D0,
+ },
+ [0x1E2D1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D1,
+ },
+ [0x1E2D2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D2,
+ },
+ [0x1E2D3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D3,
+ },
+ [0x1E2D4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D4,
+ },
+ [0x1E2D5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D5,
+ },
+ [0x1E2D6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D6,
+ },
+ [0x1E2D7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D7,
+ },
+ [0x1E2D8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D8,
+ },
+ [0x1E2D9]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2D9,
+ },
+ [0x1E2DA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DA,
+ },
+ [0x1E2DB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DB,
+ },
+ [0x1E2DC]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DC,
+ },
+ [0x1E2DD]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DD,
+ },
+ [0x1E2DE]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DE,
+ },
+ [0x1E2DF]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2DF,
+ },
+ [0x1E2E0]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E0,
+ },
+ [0x1E2E1]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E1,
+ },
+ [0x1E2E2]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E2,
+ },
+ [0x1E2E3]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E3,
+ },
+ [0x1E2E4]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E4,
+ },
+ [0x1E2E5]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E5,
+ },
+ [0x1E2E6]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E6,
+ },
+ [0x1E2E7]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E7,
+ },
+ [0x1E2E8]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E8,
+ },
+ [0x1E2E9]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2E9,
+ },
+ [0x1E2EA]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2EA,
+ },
+ [0x1E2EB]={
+ category="lo",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E2EB,
+ },
+ [0x1E2EC]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E2EC,
+ },
+ [0x1E2ED]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E2ED,
+ },
+ [0x1E2EE]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E2EE,
+ },
+ [0x1E2EF]={
+ category="mn",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E2EF,
+ },
+ [0x1E2F0]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F0,
+ },
+ [0x1E2F1]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F1,
+ },
+ [0x1E2F2]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F2,
+ },
+ [0x1E2F3]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F3,
+ },
+ [0x1E2F4]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F4,
+ },
+ [0x1E2F5]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F5,
+ },
+ [0x1E2F6]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F6,
+ },
+ [0x1E2F7]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F7,
+ },
+ [0x1E2F8]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F8,
+ },
+ [0x1E2F9]={
+ category="nd",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E2F9,
+ },
+ [0x1E2FF]={
+ category="sc",
+ direction="et",
+ linebreak="pr",
+ unicodeslot=0x1E2FF,
+ },
[0x1E800]={
category="lo",
direction="r",
@@ -181351,6 +183405,12 @@ return {
linebreak="cm",
unicodeslot=0x1E94A,
},
+ [0x1E94B]={
+ category="lm",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E94B,
+ },
[0x1E950]={
category="nd",
direction="r",
@@ -181831,6 +183891,372 @@ return {
linebreak="al",
unicodeslot=0x1ECB4,
},
+ [0x1ED01]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED01,
+ },
+ [0x1ED02]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED02,
+ },
+ [0x1ED03]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED03,
+ },
+ [0x1ED04]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED04,
+ },
+ [0x1ED05]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED05,
+ },
+ [0x1ED06]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED06,
+ },
+ [0x1ED07]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED07,
+ },
+ [0x1ED08]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED08,
+ },
+ [0x1ED09]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED09,
+ },
+ [0x1ED0A]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0A,
+ },
+ [0x1ED0B]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0B,
+ },
+ [0x1ED0C]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0C,
+ },
+ [0x1ED0D]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0D,
+ },
+ [0x1ED0E]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0E,
+ },
+ [0x1ED0F]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED0F,
+ },
+ [0x1ED10]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED10,
+ },
+ [0x1ED11]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED11,
+ },
+ [0x1ED12]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED12,
+ },
+ [0x1ED13]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED13,
+ },
+ [0x1ED14]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED14,
+ },
+ [0x1ED15]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED15,
+ },
+ [0x1ED16]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED16,
+ },
+ [0x1ED17]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED17,
+ },
+ [0x1ED18]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED18,
+ },
+ [0x1ED19]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED19,
+ },
+ [0x1ED1A]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1A,
+ },
+ [0x1ED1B]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1B,
+ },
+ [0x1ED1C]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1C,
+ },
+ [0x1ED1D]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1D,
+ },
+ [0x1ED1E]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1E,
+ },
+ [0x1ED1F]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED1F,
+ },
+ [0x1ED20]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED20,
+ },
+ [0x1ED21]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED21,
+ },
+ [0x1ED22]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED22,
+ },
+ [0x1ED23]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED23,
+ },
+ [0x1ED24]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED24,
+ },
+ [0x1ED25]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED25,
+ },
+ [0x1ED26]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED26,
+ },
+ [0x1ED27]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED27,
+ },
+ [0x1ED28]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED28,
+ },
+ [0x1ED29]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED29,
+ },
+ [0x1ED2A]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2A,
+ },
+ [0x1ED2B]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2B,
+ },
+ [0x1ED2C]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2C,
+ },
+ [0x1ED2D]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2D,
+ },
+ [0x1ED2E]={
+ category="so",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2E,
+ },
+ [0x1ED2F]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED2F,
+ },
+ [0x1ED30]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED30,
+ },
+ [0x1ED31]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED31,
+ },
+ [0x1ED32]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED32,
+ },
+ [0x1ED33]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED33,
+ },
+ [0x1ED34]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED34,
+ },
+ [0x1ED35]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED35,
+ },
+ [0x1ED36]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED36,
+ },
+ [0x1ED37]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED37,
+ },
+ [0x1ED38]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED38,
+ },
+ [0x1ED39]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED39,
+ },
+ [0x1ED3A]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED3A,
+ },
+ [0x1ED3B]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED3B,
+ },
+ [0x1ED3C]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED3C,
+ },
+ [0x1ED3D]={
+ category="no",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x1ED3D,
+ },
[0x1EE00]={
category="lo",
direction="al",
@@ -184892,6 +187318,13 @@ return {
specials={ "super", 0x4D, 0x44 },
unicodeslot=0x1F16B,
},
+ [0x1F16C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ specials={ "super", 0x4D, 0x52 },
+ unicodeslot=0x1F16C,
+ },
[0x1F170]={
category="so",
direction="l",
@@ -188032,25 +190465,25 @@ return {
[0x1F46A]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46A,
},
[0x1F46B]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46B,
},
[0x1F46C]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46C,
},
[0x1F46D]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46D,
},
[0x1F46E]={
@@ -188062,7 +190495,7 @@ return {
[0x1F46F]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46F,
},
[0x1F470]={
@@ -188254,7 +190687,7 @@ return {
[0x1F48F]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F48F,
},
[0x1F490]={
@@ -188266,7 +190699,7 @@ return {
[0x1F491]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F491,
},
[0x1F492]={
@@ -191743,6 +194176,12 @@ return {
linebreak="id",
unicodeslot=0x1F6D4,
},
+ [0x1F6D5]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6D5,
+ },
[0x1F6E0]={
category="so",
direction="on",
@@ -191881,6 +194320,12 @@ return {
linebreak="id",
unicodeslot=0x1F6F9,
},
+ [0x1F6FA]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6FA,
+ },
[0x1F700]={
category="so",
direction="on",
@@ -193111,6 +195556,78 @@ return {
linebreak="id",
unicodeslot=0x1F7D8,
},
+ [0x1F7E0]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E0,
+ },
+ [0x1F7E1]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E1,
+ },
+ [0x1F7E2]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E2,
+ },
+ [0x1F7E3]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E3,
+ },
+ [0x1F7E4]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E4,
+ },
+ [0x1F7E5]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E5,
+ },
+ [0x1F7E6]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E6,
+ },
+ [0x1F7E7]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E7,
+ },
+ [0x1F7E8]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E8,
+ },
+ [0x1F7E9]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7E9,
+ },
+ [0x1F7EA]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7EA,
+ },
+ [0x1F7EB]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7EB,
+ },
[0x1F800]={
category="so",
direction="on",
@@ -194071,6 +196588,24 @@ return {
linebreak="al",
unicodeslot=0x1F90B,
},
+ [0x1F90D]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F90D,
+ },
+ [0x1F90E]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F90E,
+ },
+ [0x1F90F]={
+ category="so",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F90F,
+ },
[0x1F910]={
category="so",
direction="on",
@@ -194152,7 +196687,7 @@ return {
[0x1F91D]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F91D,
},
[0x1F91E]={
@@ -194338,7 +196873,7 @@ return {
[0x1F93C]={
category="so",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F93C,
},
[0x1F93D]={
@@ -194353,6 +196888,12 @@ return {
linebreak="eb",
unicodeslot=0x1F93E,
},
+ [0x1F93F]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F93F,
+ },
[0x1F940]={
category="so",
direction="on",
@@ -194647,6 +197188,12 @@ return {
linebreak="id",
unicodeslot=0x1F970,
},
+ [0x1F971]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F971,
+ },
[0x1F973]={
category="so",
direction="on",
@@ -194677,6 +197224,12 @@ return {
linebreak="id",
unicodeslot=0x1F97A,
},
+ [0x1F97B]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F97B,
+ },
[0x1F97C]={
category="so",
direction="on",
@@ -194911,6 +197464,54 @@ return {
linebreak="id",
unicodeslot=0x1F9A2,
},
+ [0x1F9A5]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A5,
+ },
+ [0x1F9A6]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A6,
+ },
+ [0x1F9A7]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A7,
+ },
+ [0x1F9A8]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A8,
+ },
+ [0x1F9A9]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9A9,
+ },
+ [0x1F9AA]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9AA,
+ },
+ [0x1F9AE]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9AE,
+ },
+ [0x1F9AF]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9AF,
+ },
[0x1F9B0]={
category="so",
direction="on",
@@ -194971,6 +197572,42 @@ return {
linebreak="eb",
unicodeslot=0x1F9B9,
},
+ [0x1F9BA]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9BA,
+ },
+ [0x1F9BB]={
+ category="so",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9BB,
+ },
+ [0x1F9BC]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9BC,
+ },
+ [0x1F9BD]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9BD,
+ },
+ [0x1F9BE]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9BE,
+ },
+ [0x1F9BF]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9BF,
+ },
[0x1F9C0]={
category="so",
direction="on",
@@ -194989,6 +197626,72 @@ return {
linebreak="id",
unicodeslot=0x1F9C2,
},
+ [0x1F9C3]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C3,
+ },
+ [0x1F9C4]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C4,
+ },
+ [0x1F9C5]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C5,
+ },
+ [0x1F9C6]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C6,
+ },
+ [0x1F9C7]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C7,
+ },
+ [0x1F9C8]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C8,
+ },
+ [0x1F9C9]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C9,
+ },
+ [0x1F9CA]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9CA,
+ },
+ [0x1F9CD]={
+ category="so",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9CD,
+ },
+ [0x1F9CE]={
+ category="so",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9CE,
+ },
+ [0x1F9CF]={
+ category="so",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F9CF,
+ },
[0x1F9D0]={
category="so",
direction="on",
@@ -195277,6 +197980,510 @@ return {
linebreak="id",
unicodeslot=0x1F9FF,
},
+ [0x1FA00]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA00,
+ },
+ [0x1FA01]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA01,
+ },
+ [0x1FA02]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA02,
+ },
+ [0x1FA03]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA03,
+ },
+ [0x1FA04]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA04,
+ },
+ [0x1FA05]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA05,
+ },
+ [0x1FA06]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA06,
+ },
+ [0x1FA07]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA07,
+ },
+ [0x1FA08]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA08,
+ },
+ [0x1FA09]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA09,
+ },
+ [0x1FA0A]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0A,
+ },
+ [0x1FA0B]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0B,
+ },
+ [0x1FA0C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0C,
+ },
+ [0x1FA0D]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0D,
+ },
+ [0x1FA0E]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0E,
+ },
+ [0x1FA0F]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA0F,
+ },
+ [0x1FA10]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA10,
+ },
+ [0x1FA11]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA11,
+ },
+ [0x1FA12]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA12,
+ },
+ [0x1FA13]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA13,
+ },
+ [0x1FA14]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA14,
+ },
+ [0x1FA15]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA15,
+ },
+ [0x1FA16]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA16,
+ },
+ [0x1FA17]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA17,
+ },
+ [0x1FA18]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA18,
+ },
+ [0x1FA19]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA19,
+ },
+ [0x1FA1A]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1A,
+ },
+ [0x1FA1B]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1B,
+ },
+ [0x1FA1C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1C,
+ },
+ [0x1FA1D]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1D,
+ },
+ [0x1FA1E]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1E,
+ },
+ [0x1FA1F]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA1F,
+ },
+ [0x1FA20]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA20,
+ },
+ [0x1FA21]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA21,
+ },
+ [0x1FA22]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA22,
+ },
+ [0x1FA23]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA23,
+ },
+ [0x1FA24]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA24,
+ },
+ [0x1FA25]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA25,
+ },
+ [0x1FA26]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA26,
+ },
+ [0x1FA27]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA27,
+ },
+ [0x1FA28]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA28,
+ },
+ [0x1FA29]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA29,
+ },
+ [0x1FA2A]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2A,
+ },
+ [0x1FA2B]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2B,
+ },
+ [0x1FA2C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2C,
+ },
+ [0x1FA2D]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2D,
+ },
+ [0x1FA2E]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2E,
+ },
+ [0x1FA2F]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA2F,
+ },
+ [0x1FA30]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA30,
+ },
+ [0x1FA31]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA31,
+ },
+ [0x1FA32]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA32,
+ },
+ [0x1FA33]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA33,
+ },
+ [0x1FA34]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA34,
+ },
+ [0x1FA35]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA35,
+ },
+ [0x1FA36]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA36,
+ },
+ [0x1FA37]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA37,
+ },
+ [0x1FA38]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA38,
+ },
+ [0x1FA39]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA39,
+ },
+ [0x1FA3A]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3A,
+ },
+ [0x1FA3B]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3B,
+ },
+ [0x1FA3C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3C,
+ },
+ [0x1FA3D]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3D,
+ },
+ [0x1FA3E]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3E,
+ },
+ [0x1FA3F]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA3F,
+ },
+ [0x1FA40]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA40,
+ },
+ [0x1FA41]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA41,
+ },
+ [0x1FA42]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA42,
+ },
+ [0x1FA43]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA43,
+ },
+ [0x1FA44]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA44,
+ },
+ [0x1FA45]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA45,
+ },
+ [0x1FA46]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA46,
+ },
+ [0x1FA47]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA47,
+ },
+ [0x1FA48]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA48,
+ },
+ [0x1FA49]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA49,
+ },
+ [0x1FA4A]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4A,
+ },
+ [0x1FA4B]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4B,
+ },
+ [0x1FA4C]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4C,
+ },
+ [0x1FA4D]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4D,
+ },
+ [0x1FA4E]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4E,
+ },
+ [0x1FA4F]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA4F,
+ },
+ [0x1FA50]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA50,
+ },
+ [0x1FA51]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA51,
+ },
+ [0x1FA52]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA52,
+ },
+ [0x1FA53]={
+ category="so",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1FA53,
+ },
[0x1FA60]={
category="so",
direction="on",
@@ -195361,6 +198568,102 @@ return {
linebreak="id",
unicodeslot=0x1FA6D,
},
+ [0x1FA70]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA70,
+ },
+ [0x1FA71]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA71,
+ },
+ [0x1FA72]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA72,
+ },
+ [0x1FA73]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA73,
+ },
+ [0x1FA78]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA78,
+ },
+ [0x1FA79]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA79,
+ },
+ [0x1FA7A]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA7A,
+ },
+ [0x1FA80]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA80,
+ },
+ [0x1FA81]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA81,
+ },
+ [0x1FA82]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA82,
+ },
+ [0x1FA90]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA90,
+ },
+ [0x1FA91]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA91,
+ },
+ [0x1FA92]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA92,
+ },
+ [0x1FA93]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA93,
+ },
+ [0x1FA94]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA94,
+ },
+ [0x1FA95]={
+ category="so",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA95,
+ },
[0x2F800]={
category="lo",
direction="l",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
index 4ef6b978e4a..164d5bfa7df 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
@@ -5,8 +5,8 @@
local ProvidesLuaModule = {
name = "luaotfload-colors",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / color",
license = "GPL v2.0",
author = "Khaled Hosny, Elie Roux, Philipp Gesang, Dohyun Kim, David Carlisle",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
index e4923d37b26..fd3db5f7a29 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
@@ -7,8 +7,8 @@
local ProvidesLuaModule = {
name = "luaotfload-configuration",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / config file reader",
license = "GPL v2.0"
}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
index 385944a5ab6..322cd5e9144 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
@@ -5,8 +5,8 @@
do -- block to avoid to many local variables error
local ProvidesLuaModule = {
name = "luaotfload-database",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / database",
license = "GPL v2.0",
author = "Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua
index c738cd4316a..74fc4dcb542 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua
@@ -7,8 +7,8 @@
local ProvidesLuaModule = {
name = "luaotfload-diagnostics",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload-tool submodule / diagnostics",
license = "GPL v2.0"
}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua
new file mode 100644
index 00000000000..f30e259e33a
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua
@@ -0,0 +1,42 @@
+-----------------------------------------------------------------------
+-- FILE: luaotfload-embolden.lua
+-- DESCRIPTION: part of luaotfload / embolden
+-----------------------------------------------------------------------
+
+local ProvidesLuaModule = {
+ name = "luaotfload-embolden",
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
+ description = "luaotfload submodule / color",
+ license = "GPL v2.0",
+ author = "Marcel Krüger"
+}
+
+if luatexbase and luatexbase.provides_module then
+ luatexbase.provides_module (ProvidesLuaModule)
+end
+
+local otffeatures = fonts.constructors.newfeatures "otf"
+
+local function setembolden(tfmdata, factor)
+ tfmdata.embolden = factor
+end
+
+local function enableembolden(tfmdata)
+ tfmdata.mode, tfmdata.width = 2, tfmdata.size*tfmdata.unscaled.embolden/6578.176
+end
+
+otffeatures.register {
+ name = "embolden",
+ description = "embolden",
+ initializers = {
+ base = setembolden,
+ node = setembolden,
+ },
+ manipulators = {
+ base = enableembolden,
+ node = enableembolden,
+ }
+}
+
+--- vim:sw=2:ts=2:expandtab:tw=71
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
index d2d6d81482c..72f63a9b92f 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
@@ -5,8 +5,8 @@
local ProvidesLuaModule = {
name = "luaotfload-features",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / features",
license = "GPL v2.0",
author = "Hans Hagen, Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
index ce363840c47..78ffeb1aaf4 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
@@ -6,8 +6,8 @@
local ProvidesLuaModule = {
name = "luaotfload-filelist",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / filelist",
license = "GPL v2.0"
}
@@ -246,6 +246,8 @@ luaotfload.filelist.data =
{ name = "database" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
{ name = "features" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
{ name = "letterspace" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
+ { name = "embolden" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
+ { name = "notdef" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
{ name = "loaders" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
{ name = "parsers" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
{ name = "resolvers" ,kind = kind_library, ext =".lua", gitdir=gitdirsrc, texdir=texdirtex, gitpref = "luaotfload-" },
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua
index a97ed1fde8d..06294e5b44e 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua
@@ -1,7 +1,7 @@
local ProvidesLuaModule = {
name = "luaotfload-glyphlist",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / autogenerated glyphlist",
copyright = "derived from https://raw.githubusercontent.com/adobe-type-tools/agl-aglfn/master/glyphlist.txt",
original = "Adobe Glyph List, version 2.0, September 20, 2002",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
index f91d85a93de..e578e7b1845 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
@@ -7,8 +7,8 @@
local ProvidesLuaModule = {
name = "luaotfload-init",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / initialization",
license = "GPL v2.0"
}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
index 6cd8dcced36..071f737053c 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
@@ -5,8 +5,8 @@
local ProvidesLuaModule = {
name = "luaotfload-letterspace",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / color",
license = "GPL v2.0",
copyright = "PRAGMA ADE / ConTeXt Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-loaders.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-loaders.lua
index ba63b9c0ab9..5c9e9d01192 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-loaders.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-loaders.lua
@@ -8,8 +8,8 @@
local ProvidesLuaModule = {
name = "luaotfload-loaders",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / callback handling",
license = "GPL v2.0"
}
@@ -138,9 +138,9 @@ do
--- We need to test for `encodingbytes` to avoid passing
--- tfm fonts to `patch_font`. These fonts are fragile
--- because they use traditional TeX font handling.
- luatexbase.call_callback ("luaotfload.patch_font", fontdata, specification)
+ luatexbase.call_callback ("luaotfload.patch_font", fontdata, specification, id)
else
- luatexbase.call_callback ("luaotfload.patch_font_unsafe", fontdata, specification)
+ luatexbase.call_callback ("luaotfload.patch_font_unsafe", fontdata, specification, id)
end
return fontdata
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
index 2561eade488..4b8f4670437 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
@@ -6,8 +6,8 @@
local ProvidesLuaModule = {
name = "luaotfload-log",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / logging",
license = "GPL v2.0",
author = "Khaled Hosny, Elie Roux, Philipp Gesang",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
index 422ebfed2d1..12b364355e6 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
@@ -20,8 +20,8 @@ local authors = "\z
-- version number is used below!
local ProvidesLuaModule = {
name = "luaotfload-main",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload entry point",
author = authors,
copyright = authors,
@@ -300,6 +300,8 @@ luaotfload.main = function ()
initialize "features" --- font request and feature handling
loadmodule "letterspace" --- extra character kerning
+ loadmodule "embolden" --- fake bold
+ loadmodule "notdef" --- missing glyph handling
initialize "auxiliary" --- additional high-level functionality
luaotfload.aux.start_rewrite_fontname () --- to be migrated to fontspec
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua
new file mode 100644
index 00000000000..a5ab257f2d9
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua
@@ -0,0 +1,105 @@
+-----------------------------------------------------------------------
+-- FILE: luaotfload-notdef.lua
+-- DESCRIPTION: part of luaotfload / notdef
+-----------------------------------------------------------------------
+
+local ProvidesLuaModule = {
+ name = "luaotfload-notdef",
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
+ description = "luaotfload submodule / color",
+ license = "GPL v2.0",
+ author = "Marcel Krüger"
+}
+
+if luatexbase and luatexbase.provides_module then
+ luatexbase.provides_module (ProvidesLuaModule)
+end
+
+local nodenew = node.direct.new
+local getfont = font.getfont
+local setfont = node.direct.setfont
+local getwhd = node.direct.getwhd
+local insert_after = node.direct.insert_after
+local traverse_char = node.direct.traverse_char
+local protect_glyph = node.direct.protect_glyph
+local otffeatures = fonts.constructors.newfeatures "otf"
+
+local function setnotdef(tfmdata, factor)
+ local desc = tfmdata.shared.rawdata.descriptions
+ -- So we have to find the .notdef glyph. We only know that it has GID
+ -- 0, but we need it's Unicode mapping. Normally it isn't mapped in
+ -- the font, so we auto-assigned the first private slot:
+ local guess = desc[0xF0000]
+ if guess and guess.index == 0 then
+ tfmdata.notdefcode = 0xF0000
+ return
+ end
+ print')'
+ -- If this didn't happen, it might be mapped to one of the
+ -- replacement characters:
+ for code = 0xFFFC,0xFFFF do
+ guess = desc[code]
+ if guess and guess.index == 0 then
+ tfmdata.notdefcode = code
+ return
+ end
+ end
+ print')))'
+ -- Oh no, we couldn't find it. Maybe we can find it by name?
+ local code = tfmdata.resources.unicodes[".notdef"]
+ -- Better safe than sorry
+ guess = code and desc[code]
+ if guess and guess.index == 0 then
+ tfmdata.notdefcode = code
+ return
+ end
+ print'))))'
+ -- So the font didn't do the obvious things and then it lied to us.
+ -- At this point we should think about sending an automated complain
+ -- to the font author, but we probably can't trust the contact
+ -- information either.
+ -- We will fall back to brute force now:
+ for code, char in pairs(desc) do
+ if char.index == 0 then
+ tfmdata.notdefcode = code
+ return
+ end
+ end
+ -- If we ever reach this point, something odd happened. Either there
+ -- are no glyphs at all (then LuaTeX will complain anyway, so let's
+ -- ignore that case) or someone tried to use this with a legacy font.
+ -- In that case there most likely isn't a `.notdef` glyph anyway and
+ -- inserting glyph 0 would insert a random character, so `notdefcode`
+ -- better stays `nil`.
+end
+
+local glyph_id = node.id'glyph'
+local function donotdef(head, font, _, _, _)
+ local tfmdata = getfont(font)
+ local notdef, chars = tfmdata.unscaled.notdefcode, tfmdata.characters
+ if not notdef then return end
+ for cur, cid, fid in traverse_char(head) do if fid == font then
+ local w, h, d = getwhd(cur)
+ if w == 0 and h == 0 and d == 0 and not chars[cid] then
+ local notdefnode = nodenew(glyph_id, 256)
+ setfont(notdefnode, font, notdef)
+ insert_after(cur, cur, notdefnode)
+ protect_glyph(cur)
+ end
+ end end
+end
+
+otffeatures.register {
+ name = "notdef",
+ description = "Add notdef glyphs",
+ default = 1,
+ initializers = {
+ node = setnotdef,
+ },
+ processors = {
+ node = donotdef,
+ }
+}
+
+--- vim:sw=2:ts=2:expandtab:tw=71
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua
index a727abda07e..39e17362418 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua
@@ -7,8 +7,8 @@
local ProvidesLuaModule = {
name = "luaotfload-parsers",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / filelist",
license = "GPL v2.0"
}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua
index 7c004c1f21e..eeb706eb1d2 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua
@@ -11,8 +11,8 @@
local ProvidesLuaModule = {
name = "luaotfload-resolvers",
- version = "2.97", --TAGVERSION
- date = "2019-05-18", --TAGDATE
+ version = "2.98", --TAGVERSION
+ date = "2019-07-04", --TAGDATE
description = "luaotfload submodule / resolvers",
license = "GPL v2.0"
}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
index 5dc23493998..ddf53c29960 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
@@ -1,6 +1,6 @@
return {
["hashes"]={
- { "fontloader-2019-05-18.lua", "af4223350ab821b795edff7b293d4a0c" },
+ { "fontloader-2019-07-04.lua", "ecbc47be678c3cde76fac1c793213284" },
{ "fontloader-util-fil.lua", "4bb3e4dc72e308d8ed67cd7a80027fa7" },
{ "fontloader-util-str.lua", "a09020dcaed195ea9acaace2b7b9a66f" },
{ "fontloader-l-unicode.lua", "d46cc6cf18fb3f368ef1e404dc9fcb5c" },
@@ -9,7 +9,7 @@ return {
{ "fontloader-l-file.lua", "3d6ea476061292a0da98c3f65cdabe46" },
{ "fontloader-l-io.lua", "42608ad95eb2822fdc370d1c11f08fb5" },
{ "fontloader-l-table.lua", "bc6b9fca25a9d65bead10e250db68bb1" },
- { "fontloader-l-string.lua", "2b20a19dfc8d00e856196a446336625e" },
+ { "fontloader-l-string.lua", "e1347bef0eeeff9f098df83b30b32df9" },
{ "fontloader-l-function.lua", "f771cc91839ebcdfc094083434fbe00f" },
{ "fontloader-l-lpeg.lua", "a5364ddabb490408da9276ea7f7a7ba1" },
{ "fontloader-l-lua.lua", "10134a2dd786bd16b69377eaddab2906" },
@@ -20,8 +20,8 @@ return {
{ "fontloader-fonts-tfm.lua", "3bbba3214fd0b8c6f35ad85592fc2917" },
{ "fontloader-fonts-enc.lua", "3e71a54297e8f85a1ac438bb0f20dd79" },
{ "fontloader-fonts-mis.lua", "bc9eb43c27f63ce9d0fff67e104fe1c6" },
- { "fontloader-basics-chr.lua", "a8b8316248b40cc9bc1be19050f7074f" },
- { "fontloader-basics-nod.lua", "aa71dcb849fbe4bdf2464cb2a1ef0456" },
+ { "fontloader-basics-chr.lua", "58b7ef0c486e06090b362971b9f85e27" },
+ { "fontloader-basics-nod.lua", "65064d03c2650a1761ee13ebd9e1400a" },
{ "fontloader-font-imp-effects.lua", "73a660359a0ec71e44cc2b7225a715ac" },
{ "fontloader-font-imp-italics.lua", "fe1ca80fb5ea4a2f8d2d5c484e7ba913" },
{ "fontloader-font-imp-ligatures.lua", "043daa4fcccf2560868da359d71d3a4a" },
@@ -32,18 +32,18 @@ return {
{ "fontloader-font-one.lua", "987c5c5ed3754ad2feab80985067d59e" },
{ "fontloader-font-onr.lua", "20b0d2753f58ff91180947ce4078571e" },
{ "fontloader-font-otc.lua", "95a4ff28ba4afb55a978a4aecfd688bf" },
- { "fontloader-font-ocl.lua", "280ad7888c7c386010598e9fdb83f466" },
- { "fontloader-font-osd.lua", "e8111d24e652a181bf2bbd5149fb66d4" },
- { "fontloader-font-ots.lua", "0da86e8e56e342169221ec66c4f05318" },
+ { "fontloader-font-ocl.lua", "b720867fb19a23f0b50377efd2a3c54a" },
+ { "fontloader-font-osd.lua", "79eb2fc4a71364fd73c8b996a109f5df" },
+ { "fontloader-font-ots.lua", "d5504847a278385cd0d20ecf1b3d59cc" },
{ "fontloader-font-ota.lua", "d6dfb94563d6a52675e274b2e673e4a6" },
- { "fontloader-font-otj.lua", "bd772fd29bdec537c3c4e9d971b80325" },
+ { "fontloader-font-otj.lua", "66c7a910d95d4a52b81061de776898e1" },
{ "fontloader-font-oto.lua", "54ea5c823993e536950b2245e94aee93" },
{ "fontloader-font-otl.lua", "b041e8512af19d28edbbebc683f7cd51" },
{ "fontloader-font-oup.lua", "669e479e716999edc626a1f045bd76fa" },
{ "fontloader-font-dsp.lua", "b5bf2f1c198e027a0d4ededcdf3947b4" },
{ "fontloader-font-ttf.lua", "f2d53377b264d59368703e659a7bc228" },
{ "fontloader-font-cff.lua", "7ff1a757f6a26f57f635014cc8a174fe" },
- { "fontloader-font-ott.lua", "a8b78a27cbb22d4f697a8dd801a73eea" },
+ { "fontloader-font-ott.lua", "aba6d8335a5f38a5a62d3631492f3392" },
{ "fontloader-font-oti.lua", "dbae7722baae24d917a17176553825cf" },
{ "fontloader-font-otr.lua", "340999eb6c53879787a7560bc1a30360" },
{ "fontloader-font-vfc.lua", "94937140f2c909e9c831ba021f1ab303" },
@@ -52,36 +52,38 @@ return {
{ "fontloader-font-con.lua", "f7d973760207e820b954a1e478a6a347" },
{ "fontloader-font-ini.lua", "4299a02110bbd7c0d27e131235c5319d" },
{ "fontloader-data-con.lua", "7ce546725b1550f655c78ac9d69419ca" },
- { "fontloader-reference.lua", "06c79e8da5a0141322bf4fa7303753db" },
+ { "fontloader-reference.lua", "e4e7faea340329c82b338804d5860368" },
{ "fontloader-basics-gen.lua", "b21e91bbd534f77e368f0ec13f865aed" },
{ "mktests", "c7cff7025962922944376acc1ffa9c47" },
{ "mkstatus", "54c20ea0757ef99b5f01b7c6bdeb69f4" },
{ "mkcharacters", "92c24bb582fc84c0365634f29eb89863" },
{ "mkglyphlist", "557836886d4f0e6d656eac3ded4456a2" },
{ "mkimport", "60e0b11a1a68719033e86a3e0f4d5e86" },
- { "luaotfload-glyphlist.lua", "c17cc5b6a874fea4725ef1447d98d48f" },
- { "luaotfload-characters.lua", "1ef110e1710f53689b2e22783f648b14" },
- { "luaotfload-resolvers.lua", "ad6862959cf2834c17161cf607b3b549" },
- { "luaotfload-parsers.lua", "33555595b544effa65646476cc24cd49" },
- { "luaotfload-loaders.lua", "9223c8551aabd9cbd48fba4778ce35bf" },
- { "luaotfload-letterspace.lua", "e4c5c5ce88fa8c0ace98130d88fe6509" },
- { "luaotfload-features.lua", "7f1dbbd587c0eda8a561420dc0cb6dac" },
- { "luaotfload-database.lua", "5b35db067a22ca1e18c28d2ca1336e47" },
- { "luaotfload-configuration.lua", "dba9d42bdf0ea8b62d05a1f4b033f255" },
- { "luaotfload-colors.lua", "bdc46e95a543767612e72ccfe1365796" },
- { "luaotfload-auxiliary.lua", "10ca85d4d0cc0511c845f7e7af72cb17" },
- { "luaotfload-filelist.lua", "f948ffa6f2497dae412d35fc4246f7bb" },
- { "luaotfload-tool.lua", "d1a47905960d7f32dd51c4d7e8c5564f" },
- { "luaotfload-diagnostics.lua", "e859506183be49f4a7bb27d2c7518499" },
- { "luaotfload-log.lua", "8be58667b8e14eaa7cb2213f3b13d543" },
- { "luaotfload-init.lua", "d9be3995344aee603255c115c2d26792" },
- { "luaotfload-main.lua", "01588c31ddfe55b5db4fbc20ce579a8e" },
+ { "luaotfload-glyphlist.lua", "cb00ea9b0aa15756c768ab6270d8f9f6" },
+ { "luaotfload-characters.lua", "593ce9dccf6ddc4f7d4be0514f581102" },
+ { "luaotfload-resolvers.lua", "aa5b547c46529f1d61afb611d1aa0bc1" },
+ { "luaotfload-parsers.lua", "07697fd60be0e731bca7252b8f0b1b60" },
+ { "luaotfload-loaders.lua", "9649f7747c8a87237d037ee2c9d9aaa3" },
+ { "luaotfload-notdef.lua", "7b0ccdbc629638230f715da857747e10" },
+ { "luaotfload-embolden.lua", "dd7153f9fcca37f251d44f8769e6368a" },
+ { "luaotfload-letterspace.lua", "61a7479fe93af06bb1a01a5f86ce1068" },
+ { "luaotfload-features.lua", "4a784f251797b79b65742e3405ed94c0" },
+ { "luaotfload-database.lua", "582da708e2bbcd5f7ed283b9da059883" },
+ { "luaotfload-configuration.lua", "a9fc3f22a1c4b828668bdedc8105db8a" },
+ { "luaotfload-colors.lua", "71377fb41bae4f4958c34999a73282b8" },
+ { "luaotfload-auxiliary.lua", "73c4a8e13f0ac20a86406213e178a839" },
+ { "luaotfload-filelist.lua", "99fe8524d86d61f5e261abf550c54187" },
+ { "luaotfload-tool.lua", "ad691c108c79b4417f1b957584faf366" },
+ { "luaotfload-diagnostics.lua", "941490076281ab08383d987464c76011" },
+ { "luaotfload-log.lua", "aaa3ae3dffa7bf888a8f14fd2181d81c" },
+ { "luaotfload-init.lua", "7ca1c4fd2bb50eb89f485fe6e7b12e7a" },
+ { "luaotfload-main.lua", "1212b51ec3865dc30898d0e43b1e0555" },
},
["notes"]={
["committer"]="Ulrike Fischer <fischer@troubleshooting-tex.de>",
- ["description"]="v2.97",
- ["loader"]="fontloader-2019-05-18.lua",
- ["revision"]="e70d156b9b36c4e1029d7e613eb414d45b54c508",
- ["timestamp"]="2019-05-19 14:34:44 +0200",
+ ["description"]="v2.98",
+ ["loader"]="fontloader-2019-07-04.lua",
+ ["revision"]="aed2845ed28088243e91589a2707e3c0d8a12e50",
+ ["timestamp"]="2019-07-14 16:41:58 +0200",
},
} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
index 0cb3166174a..44b28377990 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
@@ -40,9 +40,7 @@
\fi
\ifdefined\ProvidesPackage
\ProvidesPackage{luaotfload}%
- %% FIXME The date is meaningless, we need to find a way to
- %% use the git revision instead.
- [2018/10/28 v.2.93 OpenType layout system]
+ [2019/07/04 v2.98 OpenType layout system]
\fi
\directlua{
if xpcall(function ()%