diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex')
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 ()% |