diff options
63 files changed, 897 insertions, 586 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/luaotfload/luaotfload-tool.lua b/Build/source/texk/texlive/linked_scripts/luaotfload/luaotfload-tool.lua index 9eeed6dc2c8..45517448e74 100755 --- a/Build/source/texk/texlive/linked_scripts/luaotfload/luaotfload-tool.lua +++ b/Build/source/texk/texlive/linked_scripts/luaotfload/luaotfload-tool.lua @@ -9,8 +9,8 @@ local ProvidesLuaModule = { name = "luaotfload-tool", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload-tool / database functionality", license = "GPL v2.0" } diff --git a/Master/texmf-dist/doc/luatex/luaotfload/NEWS b/Master/texmf-dist/doc/luatex/luaotfload/NEWS index d263b2e002c..17ce0a00c44 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/NEWS +++ b/Master/texmf-dist/doc/luatex/luaotfload/NEWS @@ -1,5 +1,13 @@ Change History -------------- +2024-02-14 luaotfload v3.27 + + * Improved support for arabic mark rendering in \texttt{node} mode. + * Better ordering of GSUB substitutions. + * Avoid dropping hyphens in DVI mode + * Compatibility with \identifier{luatex} 1.18 + * Various bug fixes + 2023-08-31 luaotfload v3.26 * Reimplement mathsize feature recently dropped from fontloader diff --git a/Master/texmf-dist/doc/luatex/luaotfload/README.md b/Master/texmf-dist/doc/luatex/luaotfload/README.md index e22815220cb..ed2ece5f295 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/README.md +++ b/Master/texmf-dist/doc/luatex/luaotfload/README.md @@ -1,8 +1,8 @@ # The Luaotfload Package -VERSION: 3.26 +VERSION: 3.27 -DATE: 2023-08-31 +DATE: 2024-02-14 ## Description diff --git a/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf Binary files differindex f4d68bbf6f9..d0640d1ad6b 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf Binary files differindex 078ba7de523..001729a1e23 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf Binary files differindex 8368bd9db32..bc1e5abae63 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex index 1df20a5cee9..f631263deed 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex @@ -32,7 +32,7 @@ \beginfrontmatter \setdocumenttitle {The \identifier{luaotfload} package} - \setdocumentdate {2023-08-31 v3.26} + \setdocumentdate {2024-02-14 v3.27} \setdocumentauthor {LaTeX3 Project\\ Elie Roux · Khaled Hosny · Philipp Gesang · Ulrike Fischer · Marcel Krüger\\ Home: \hyperlink {https://github.com/latex3/luaotfload}} @@ -62,6 +62,16 @@ Supported is the \identifier{luatex} versions of a current TeXLive 2019 (and a c \endsection \beginsection{Changes} +\beginsubsection{New in version 3.27} +\begin{itemize} + \item Improved support for arabic mark rendering in \texttt{node} mode. + \item Better ordering of GSUB substitutions. + \item Avoid dropping hyphens in DVI mode + \item Compatibility with \identifier{luatex} 1.18 + \item Various bug fixes +\end{itemize} +\endsubsection + \beginsubsection{New in version 3.24} \begin{itemize} \item Add experimental configuration option to change default font lookup location diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf Binary files differindex e1a613e4b19..b87a1914e0d 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst index 6ef9270430a..778bbf5f1b0 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst @@ -6,9 +6,9 @@ generate and query the Luaotfload font names database ----------------------------------------------------------------------- -:Date: 2023-08-31 +:Date: 2024-02-14 :Copyright: GPL v2.0 -:Version: 3.26 +:Version: 3.27 :Manual section: 1 :Manual group: text processing diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst index 877699a4044..f9e48cb7a2b 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst @@ -6,9 +6,9 @@ Luaotfload configuration file ----------------------------------------------------------------------- -:Date: 2023-08-31 +:Date: 2024-02-14 :Copyright: GPL v2.0 -:Version: 3.26 +:Version: 3.27 :Manual section: 5 :Manual group: text processing diff --git a/Master/texmf-dist/doc/luatex/luaotfload/scripts-demo.pdf b/Master/texmf-dist/doc/luatex/luaotfload/scripts-demo.pdf Binary files differindex ab6d26d4768..0049165b555 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/scripts-demo.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/scripts-demo.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo-graphite.pdf b/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo-graphite.pdf Binary files differindex 129ca947250..d46132c76ef 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo-graphite.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo-graphite.pdf diff --git a/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo.pdf b/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo.pdf Binary files differindex 01f952dcca2..3ad7f54fa1c 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/shaper-demo.pdf diff --git a/Master/texmf-dist/doc/man/man1/luaotfload-tool.1 b/Master/texmf-dist/doc/man/man1/luaotfload-tool.1 index cd100af1f0c..1334d48da9e 100644 --- a/Master/texmf-dist/doc/man/man1/luaotfload-tool.1 +++ b/Master/texmf-dist/doc/man/man1/luaotfload-tool.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH LUAOTFLOAD-TOOL 1 "2023-08-31" "3.26" "text processing" +.TH LUAOTFLOAD-TOOL 1 "2024-02-14" "3.27" "text processing" .SH NAME luaotfload-tool \- generate and query the Luaotfload font names database . diff --git a/Master/texmf-dist/doc/man/man1/luaotfload-tool.man1.pdf b/Master/texmf-dist/doc/man/man1/luaotfload-tool.man1.pdf Binary files differindex e24377b39a6..912ff0357fe 100644 --- a/Master/texmf-dist/doc/man/man1/luaotfload-tool.man1.pdf +++ b/Master/texmf-dist/doc/man/man1/luaotfload-tool.man1.pdf diff --git a/Master/texmf-dist/doc/man/man5/luaotfload.conf.5 b/Master/texmf-dist/doc/man/man5/luaotfload.conf.5 index 457025497e1..3ebd68b72a5 100644 --- a/Master/texmf-dist/doc/man/man5/luaotfload.conf.5 +++ b/Master/texmf-dist/doc/man/man5/luaotfload.conf.5 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH LUAOTFLOAD.CONF 5 "2023-08-31" "3.26" "text processing" +.TH LUAOTFLOAD.CONF 5 "2024-02-14" "3.27" "text processing" .SH NAME luaotfload.conf \- Luaotfload configuration file . diff --git a/Master/texmf-dist/doc/man/man5/luaotfload.conf.man5.pdf b/Master/texmf-dist/doc/man/man5/luaotfload.conf.man5.pdf Binary files differindex cd0fcc013cd..a2ceaa228e7 100644 --- a/Master/texmf-dist/doc/man/man5/luaotfload.conf.man5.pdf +++ b/Master/texmf-dist/doc/man/man5/luaotfload.conf.man5.pdf diff --git a/Master/texmf-dist/scripts/luaotfload/luaotfload-tool.lua b/Master/texmf-dist/scripts/luaotfload/luaotfload-tool.lua index 9eeed6dc2c8..45517448e74 100755 --- a/Master/texmf-dist/scripts/luaotfload/luaotfload-tool.lua +++ b/Master/texmf-dist/scripts/luaotfload/luaotfload-tool.lua @@ -9,8 +9,8 @@ local ProvidesLuaModule = { name = "luaotfload-tool", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload-tool / database functionality", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2023-08-19.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2023-12-28.lua index dd457f02213..562516746a4 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2023-08-19.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2023-12-28.lua @@ -1,6 +1,6 @@ --[[info----------------------------------------------------------------------- Luaotfload fontloader package - build 2023-08-19 22:30:03 + build 2023-12-28 15:52:34 ------------------------------------------------------------------------------- © 2023 PRAGMA ADE / ConTeXt Development Team @@ -63,7 +63,7 @@ --info]]----------------------------------------------------------------------- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “data-con” b4ab51aaeab872d86d827f3e216bf05e] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “data-con” b4ab51aaeab872d86d827f3e216bf05e] --- if not modules then modules={} end modules ['data-con']={ version=1.100, @@ -186,10 +186,10 @@ function containers.cleanname(name) return (gsub(lower(name),"[^%w\128-\255]+","-")) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “data-con”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “data-con”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “basics-nod” 1750af43148def9e7a75c6900a96f9dc] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “basics-nod” 1750af43148def9e7a75c6900a96f9dc] --- if not modules then modules={} end modules ['luatex-fonts-nod']={ version=1.001, @@ -456,10 +456,10 @@ do end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “basics-nod”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “basics-nod”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “basics-chr” ce4afac7ba19471f3c8f90800839f315] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “basics-chr” ce4afac7ba19471f3c8f90800839f315] --- characters=characters or {} @@ -4293,10 +4293,10 @@ characters.indicgroups={ }, } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “basics-chr”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “basics-chr”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ini” 16b855c98602e4a3e9df39512916a427] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ini” 16b855c98602e4a3e9df39512916a427] --- if not modules then modules={} end modules ['font-ini']={ version=1.001, @@ -4337,10 +4337,10 @@ if node and not tex.getfontoffamily then tex.getfontoffamily=node.family_font end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ini”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ini”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-mis” 17e967c9ec4d001deefd43ddf25e98f7] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-mis” 17e967c9ec4d001deefd43ddf25e98f7] --- if not modules then modules={} end modules ['luatex-font-mis']={ version=1.001, @@ -4372,10 +4372,10 @@ function font.each() return table.sortedhash(fonts.hashes.identifiers) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-mis”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-mis”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-con” bdbaaa361308c9ccc0a7dac0bf6c17ec] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-con” ebdd0ca857deafdc0152c7a4f1ed2490] --- if not modules then modules={} end modules ['font-con']={ version=1.001, @@ -4858,6 +4858,13 @@ function constructors.scale(tfmdata,specification) if changed then local c=changed[unicode] if c and c~=unicode then + local cc=changed[c] + if cc then + while cc do + c=cc + cc=changed[c] + end + end if c then description=descriptions[c] or descriptions[unicode] or character character=characters[c] or character @@ -5733,10 +5740,10 @@ function constructors.addcoreunicodes(unicodes) return unicodes end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-con”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-con”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-enc” c24fd6b4f34f87b9c4ff5e6193ce2656] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-enc” c24fd6b4f34f87b9c4ff5e6193ce2656] --- if not modules then modules={} end modules ['luatex-font-enc']={ version=1.001, @@ -5811,10 +5818,10 @@ function encodings.load(filename) return containers.write(encodings.cache,name,data) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-enc”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-enc”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] --- if not modules then modules={} end modules ['font-cid']={ version=1.001, @@ -5965,10 +5972,10 @@ function cid.getmap(specification) return found end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-cid”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-cid”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-map” 27ee748150e56f5f0e5f0fefc864f35e] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-map” b1444428c238a17d2a998ff1a4769183] --- if not modules then modules={} end modules ['font-map']={ version=1.001, @@ -6030,7 +6037,7 @@ local function tounicode16(unicode) return s_unknown else unicode=unicode-0x10000 - return f_double(idiv(k,0x400)+0xD800,unicode%0x400+0xDC00) + return f_double(idiv(unicode,0x400)+0xD800,unicode%0x400+0xDC00) end end local function tounicode16sequence(unicodes) @@ -6049,7 +6056,7 @@ local function tounicode16sequence(unicodes) t[l]=s_unknown else u=u-0x10000 - t[l]=f_double(idiv(k,0x400)+0xD800,u%0x400+0xDC00) + t[l]=f_double(idiv(u,0x400)+0xD800,u%0x400+0xDC00) end end return concat(t) @@ -6376,10 +6383,10 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-map”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-map”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-vfc” a81c29eda98cd62cbebdb6c93544b50d] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-vfc” a81c29eda98cd62cbebdb6c93544b50d] --- if not modules then modules={} end modules ['font-vfc']={ version=1.001, @@ -6476,10 +6483,10 @@ helpers.commands=utilities.storage.allocate { dummy=dummy, } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-vfc”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-vfc”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otr” 2958a21bebcf0579f4e11f0646d1b402] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otr” 2958a21bebcf0579f4e11f0646d1b402] --- if not modules then modules={} end modules ['font-otr']={ version=1.001, @@ -8328,10 +8335,10 @@ function readers.extend(fontdata) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otr”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otr”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] --- if not modules then modules={} end modules ['font-oti']={ version=1.001, @@ -8474,10 +8481,10 @@ function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oti”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oti”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ott” 427bdc77dd187158eafb79b7193400dc] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ott” 427bdc77dd187158eafb79b7193400dc] --- if not modules then modules={} end modules ["font-ott"]={ version=1.001, @@ -9636,10 +9643,10 @@ function otffeatures.normalize(features,wrap) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ott”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ott”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-cff” 999da544079698ce70178fd84bcdd67a] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-cff” 999da544079698ce70178fd84bcdd67a] --- if not modules then modules={} end modules ['font-cff']={ version=1.001, @@ -11913,10 +11920,10 @@ function readers.cff2(f,fontdata,specification) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-cff”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-cff”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ttf” ff94e130d7c71edd899c4bae7745b7db] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ttf” ff94e130d7c71edd899c4bae7745b7db] --- if not modules then modules={} end modules ['font-ttf']={ version=1.001, @@ -13172,10 +13179,10 @@ function readers.gvar(f,fontdata,specification,glyphdata,shapedata) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ttf”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ttf”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-dsp” 755beef1b31e9dfd050e9d221d4e9ae3] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-dsp” f2897da5fd67280b4700c32696d21fb1] --- if not modules then modules={} end modules ['font-dsp']={ version=1.001, @@ -14877,7 +14884,7 @@ do end return features end - local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) setposition(f,lookupoffset) local noflookups=readushort(f) local lookups=readcardinaltable(f,noflookups,ushort) @@ -14894,12 +14901,12 @@ do subtables[j]=offset+readushort(f) end local markclass=band(flagbits,0x0010)~=0 + local markset=rshift(flagbits,8) if markclass then markclass=readushort(f) end - local markset=rshift(flagbits,8) if markset>0 then - markclass=markset + markclass=nofmarkclasses+markset end lookups[lookupid]={ type=lookuptype, @@ -15243,7 +15250,8 @@ do if not lookupstoo then return end - local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local nofmarkclasses=(fontdata.markclasses and #fontdata.markclasses or 0)-(fontdata.marksets and #fontdata.marksets or 0) + local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) if lookups then resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset) end @@ -15412,6 +15420,7 @@ function readers.gdef(f,fontdata,specification) end end if marksetsoffset~=0 then + local nofmarkclasses=fontdata.markclasses and #fontdata.markclasses or 0 marksetsoffset=tableoffset+marksetsoffset setposition(f,marksetsoffset) local format=readushort(f) @@ -15421,7 +15430,8 @@ function readers.gdef(f,fontdata,specification) for i=1,nofsets do local offset=sets[i] if offset~=0 then - marksets[i]=readcoverage(f,marksetsoffset+offset) + markclasses[nofmarkclasses+i]=readcoverage(f,marksetsoffset+offset) + marksets[i]={} end end end @@ -16468,10 +16478,10 @@ function readers.mvar(f,fontdata,specification) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-dsp”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-dsp”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oup” aaff9c28233bbea56e6d27ae50e04ff0] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oup” aaff9c28233bbea56e6d27ae50e04ff0] --- if not modules then modules={} end modules ['font-oup']={ version=1.001, @@ -19327,10 +19337,10 @@ end expandlookups(sublookups,sequences) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oup”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oup”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otl” 21196d193ce16f3996c9aa75e81e440c] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otl” 84499d355f82829841b8e304952a9d5d] --- if not modules then modules={} end modules ['font-otl']={ version=1.001, @@ -19358,7 +19368,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_d local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf -otf.version=3.133 +otf.version=3.134 otf.cache=containers.define("fonts","otl",otf.version,true) otf.svgcache=containers.define("fonts","svg",otf.version,true) otf.pngcache=containers.define("fonts","png",otf.version,true) @@ -20040,10 +20050,10 @@ otf.coverup={ end } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otl”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otl”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oto” 1cc20f34606fb55d4646a0dd323499ef] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oto” b148d66f642aaa3d0ddc427f71d6e02d] --- if not modules then modules={} end modules ['font-oto']={ version=1.001, @@ -20244,7 +20254,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis for i=1,#steps do for unicode,data in next,steps[i].coverage do if unicode~=data then - changed[unicode]=data + changed[unicode]=changed[unicode] or data end if trace_singles then report_substitution(feature,sequence,descriptions,unicode,data) @@ -20257,7 +20267,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis local replacement=data[alternate] if replacement then if unicode~=replacement then - changed[unicode]=replacement + changed[unicode]=changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal") @@ -20265,7 +20275,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis elseif defaultalt=="first" then replacement=data[1] if unicode~=replacement then - changed[unicode]=replacement + changed[unicode]=changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt) @@ -20273,7 +20283,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis elseif defaultalt=="last" then replacement=data[#data] if unicode~=replacement then - changed[unicode]=replacement + changed[unicode]=changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt) @@ -20512,10 +20522,10 @@ registerotffeature { } otf.basemodeinitializer=featuresinitializer -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-oto”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-oto”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otj” b2c165bd6771a57633f992d07384b739] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otj” b2c165bd6771a57633f992d07384b739] --- if not modules then modules={} end modules ['font-otj']={ version=1.001, @@ -22008,10 +22018,10 @@ function injections.handler(head,where) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otj”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otj”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ota” 7407b709ae7b2cdf36f68d5c98d51d12] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ota” 7407b709ae7b2cdf36f68d5c98d51d12] --- if not modules then modules={} end modules ['font-ota']={ version=1.001, @@ -22505,10 +22515,10 @@ directives.register("otf.analyze.useunicodemarks",function(v) analyzers.useunicodemarks=v end) -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ota”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ota”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ots” c039b20490b526ec469e41a8584ebe6d] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ots” 2ba92e909a45b68592f7271d8190f390] --- if not modules then modules={} end modules ['font-ots']={ version=1.001, @@ -24561,17 +24571,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if last then local char,id=ischar(last,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n<l then + last=getnext(last) + end + n=n+1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end last=getnext(last) - elseif seq[n][char] then - if n<l then - last=getnext(last) - end - n=n+1 elseif discfound then notmatchreplace[discfound]=true if notmatchpre[discfound] then @@ -24662,17 +24672,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if prev then local char,id=ischar(prev,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n>1 then + prev=getprev(prev) + end + n=n-1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end prev=getprev(prev) - elseif seq[n][char] then - if n>1 then - prev=getprev(prev) - end - n=n-1 elseif discfound then notmatchreplace[discfound]=true if notmatchpost[discfound] then @@ -24778,17 +24788,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if current then local char,id=ischar(current,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n<s then + current=getnext(current) + end + n=n+1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end - current=getnext(current) - elseif seq[n][char] then - if n<s then - current=getnext(current) - end - n=n+1 + current=getnext(current) elseif discfound then notmatchreplace[discfound]=true if notmatchpre[discfound] then @@ -25733,32 +25743,28 @@ do while start do local char,id=ischar(start,font) if char then - if skiphash and skiphash[char] then - start=getnext(start) - else - local lookupmatch=lookupcache[char] - if lookupmatch then - local a - if attr then - if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then - a=true - end - elseif not attribute or getstate(start,attribute) then + local lookupmatch=lookupcache[char] + if lookupmatch then + local a + if attr then + if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then a=true end - if a then - local ok,df - head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if df then - elseif start then - start=getnext(start) - end - else + elseif not attribute or getstate(start,attribute) then + a=true + end + if a then + local ok,df + head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if df then + elseif start then start=getnext(start) end else - start=getnext(start) + start=getnext(start) end + else + start=getnext(start) end elseif char==false or id==glue_code then start=getnext(start) @@ -25788,46 +25794,42 @@ do while start do local char,id=ischar(start,font) if char then - if skiphash and skiphash[char] then - start=getnext(start) - else - local m=merged[char] - if m then - local a - if attr then - if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then - a=true - end - elseif not attribute or getstate(start,attribute) then + local m=merged[char] + if m then + local a + if attr then + if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then a=true end - if a then - local ok,df - for i=m[1],m[2] do - local step=steps[i] - local lookupcache=step.coverage - local lookupmatch=lookupcache[char] - if lookupmatch then - head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if df then - break - elseif ok then - break - elseif not start then - break - end + elseif not attribute or getstate(start,attribute) then + a=true + end + if a then + local ok,df + for i=m[1],m[2] do + local step=steps[i] + local lookupcache=step.coverage + local lookupmatch=lookupcache[char] + if lookupmatch then + head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if df then + break + elseif ok then + break + elseif not start then + break end end - if df then - elseif start then - start=getnext(start) - end - else + end + if df then + elseif start then start=getnext(start) end else start=getnext(start) end + else + start=getnext(start) end elseif char==false or id==glue_code then start=getnext(start) @@ -25895,26 +25897,22 @@ do position=position+1 local m=merged[char] if m then - if skiphash and skiphash[char] then - start=getnext(start) - else - for i=m[1],m[2] do - local step=steps[i] - local lookupcache=step.coverage - local lookupmatch=lookupcache[char] - if lookupmatch then - local ok - head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if ok then - break - elseif not start then - break - end + for i=m[1],m[2] do + local step=steps[i] + local lookupcache=step.coverage + local lookupmatch=lookupcache[char] + if lookupmatch then + local ok + head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if ok then + break + elseif not start then + break end end - if start then - start=getnext(start) - end + end + if start then + start=getnext(start) end else start=getnext(start) @@ -26210,10 +26208,10 @@ registerotffeature { }, } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ots”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ots”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-osd” c38c14c118680202c6f4b09734542c49] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-osd” 837039b0dca88edd3f4b54222f7cf54c] --- if not modules then modules={} end modules ['font-osd']={ version=1.001, @@ -28847,10 +28845,10 @@ for i=1,nofscripts do methods[scripts_two[i]]=method_two end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-osd”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-osd”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ocl” 2a377351ae23c339764ec8ce2e8e9164] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ocl” 2a377351ae23c339764ec8ce2e8e9164] --- if not modules then modules={} end modules ['font-ocl']={ version=1.001, @@ -29398,10 +29396,10 @@ if context then } end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-ocl”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-ocl”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otc” 0ad931eec679ebeceed5d4f02f4ba31b] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otc” 0ad931eec679ebeceed5d4f02f4ba31b] --- if not modules then modules={} end modules ['font-otc']={ version=1.001, @@ -30233,10 +30231,10 @@ end otf.enhancers.enhance=enhance otf.enhancers.register("check extra features",enhance) -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-otc”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-otc”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-onr” a3f85c886cf22fb27760d98603d51ffd] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-onr” a3f85c886cf22fb27760d98603d51ffd] --- if not modules then modules={} end modules ['font-onr']={ version=1.001, @@ -30609,10 +30607,10 @@ function readers.getinfo(filename) end end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-onr”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-onr”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-one” b7fb0389462a49bc1f41bebd2da85401] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-one” b7fb0389462a49bc1f41bebd2da85401] --- if not modules then modules={} end modules ['font-one']={ version=1.001, @@ -31327,10 +31325,10 @@ registerafmenhancer("normalize features",enhance_normalize_features) registerafmenhancer("check extra features",otfenhancers.enhance) registerafmenhancer("fix names",enhance_fix_names) -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-one”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-one”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-afk” b7bef80aa4c18357cbfa0ae4df4d4046] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-afk” b7bef80aa4c18357cbfa0ae4df4d4046] --- if not modules then modules={} end modules ['font-afk']={ version=1.001, @@ -31497,10 +31495,10 @@ fonts.handlers.afm.helpdata={ } } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-afk”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-afk”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-tfm” f0eb5e2a8068b17ad401bb7efdba1630] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-tfm” f0eb5e2a8068b17ad401bb7efdba1630] --- if not modules then modules={} end modules ['luatex-fonts-tfm']={ version=1.001, @@ -32015,10 +32013,10 @@ registertfmfeature { } } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-tfm”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-tfm”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] --- if not modules then modules={} end modules ['font-lua']={ version=1.001, @@ -32058,10 +32056,10 @@ function readers.lua(specification) return check_lua(specification,fullname) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-lua”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-lua”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-def” cec0e49aee881c4cbd36d541f0162c6f] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-def” cec0e49aee881c4cbd36d541f0162c6f] --- if not modules then modules={} end modules ['font-def']={ version=1.001, @@ -32461,10 +32459,10 @@ if not context then callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)") end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-def”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-def”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-shp” a174ac26390bd0828805747500df0077] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-shp” a174ac26390bd0828805747500df0077] --- if not modules then modules={} end modules ['font-shp']={ version=1.001, @@ -32831,10 +32829,10 @@ callback.register("glyph_stream_provider",function(id,index,mode) return "" end) -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-shp”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-shp”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] --- if not modules then modules={} end modules ['luatex-fonts-def']={ version=1.001, @@ -32915,10 +32913,10 @@ function fonts.definers.applypostprocessors(tfmdata) return tfmdata end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-def”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-def”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] --- if not modules then modules={} end modules ['luatex-fonts-ext']={ version=1.001, @@ -33104,10 +33102,10 @@ registerotffeature { } } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-ext”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-ext”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-tex” 9882d382700e714cace08b7f09820958] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-tex” 9882d382700e714cace08b7f09820958] --- if not modules then modules={} end modules ['font-imp-tex']={ version=1.001, @@ -33212,10 +33210,10 @@ registerotffeature { description="arabic digits", } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-tex”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-tex”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-ligatures” 250f6f4488ee770c23177afb2ff75676] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-ligatures” 250f6f4488ee770c23177afb2ff75676] --- if not modules then modules={} end modules ['font-imp-ligatures']={ version=1.001, @@ -33329,10 +33327,10 @@ if context then } end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-ligatures”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-ligatures”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-italics” 3cc555a1fe00dc45449f1e4a47a5c990] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-italics” 3cc555a1fe00dc45449f1e4a47a5c990] --- if not modules then modules={} end modules ['font-imp-italics']={ version=1.001, @@ -33417,10 +33415,10 @@ if context then registerafmfeature(dimensions_specification) end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-italics”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-italics”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-effects” d05997c1826355548ec9aec1346f9f23] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-effects” d05997c1826355548ec9aec1346f9f23] --- if not modules then modules={} end modules ['font-imp-effects']={ version=1.001, @@ -33777,10 +33775,10 @@ local specification={ registerotffeature(specification) registerafmfeature(specification) -end --- [luaotfload, fontloader-2023-08-19.lua scope for “font-imp-effects”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “font-imp-effects”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] --- fonts.handlers.otf.addfeature { @@ -35849,10 +35847,10 @@ fonts.handlers.otf.addfeature { ["type"]="ligature", } -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-lig”] --- +end --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-lig”] --- -do --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-gbn” 34e4543a02f6fbc8c2ade896cb6dc7df] --- +do --- [luaotfload, fontloader-2023-12-28.lua scope for “fonts-gbn” 34e4543a02f6fbc8c2ade896cb6dc7df] --- if not modules then modules={} end modules ['luatex-fonts-gbn']={ version=1.001, @@ -36117,7 +36115,7 @@ function nodes.simple_font_handler(head,groupcode,size,packtype,direction) return head end -end --- [luaotfload, fontloader-2023-08-19.lua scope for “fonts-gbn”] --- +end --- [luaotfload, fontloader-2023-12-28.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-font-con.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua index 10f98ca1201..6005897796b 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua @@ -651,13 +651,13 @@ function constructors.scale(tfmdata,specification) if changed then local c = changed[unicode] if c and c ~= unicode then - -- local cc = changed[c] - -- if cc then - -- while cc do - -- c = cc - -- cc = changed[c] - -- end - -- end + local cc = changed[c] + if cc then + while cc do + c = cc + cc = changed[c] + end + end -- check not needed: if c then description = descriptions[c] or descriptions[unicode] or character diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua index 5f9cf1a62e3..788c59322de 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua @@ -2134,7 +2134,7 @@ do return features end - local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) setposition(f,lookupoffset) local noflookups = readushort(f) local lookups = readcardinaltable(f,noflookups,ushort) @@ -2152,12 +2152,12 @@ do end -- which one wins? local markclass = band(flagbits,0x0010) ~= 0 -- usemarkfilteringset + local markset = rshift(flagbits,8) if markclass then markclass = readushort(f) -- + 1 end - local markset = rshift(flagbits,8) if markset > 0 then - markclass = markset -- + 1 + markclass = nofmarkclasses + markset end lookups[lookupid] = { type = lookuptype, @@ -2559,7 +2559,8 @@ do return end -- - local lookups = readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local nofmarkclasses = (fontdata.markclasses and #fontdata.markclasses or 0) - (fontdata.marksets and #fontdata.marksets or 0) + local lookups = readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) -- if lookups then resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset) @@ -2740,8 +2741,9 @@ function readers.gdef(f,fontdata,specification) end end end - -- mark sets : todo: just make the same as class sets above + -- mark sets if marksetsoffset ~= 0 then + local nofmarkclasses = fontdata.markclasses and #fontdata.markclasses or 0 marksetsoffset = tableoffset + marksetsoffset setposition(f,marksetsoffset) local format = readushort(f) @@ -2751,7 +2753,8 @@ function readers.gdef(f,fontdata,specification) for i=1,nofsets do local offset = sets[i] if offset ~= 0 then - marksets[i] = readcoverage(f,marksetsoffset+offset) + markclasses[nofmarkclasses + i] = readcoverage(f,marksetsoffset+offset) + marksets[i] = { } end end end diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua index 4aa937ed162..3ead64d561f 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua @@ -72,7 +72,7 @@ local function tounicode16(unicode) return s_unknown else unicode = unicode - 0x10000 - return f_double(idiv(k,0x400)+0xD800,unicode%0x400+0xDC00) + return f_double(idiv(unicode,0x400)+0xD800,unicode%0x400+0xDC00) end end @@ -93,7 +93,7 @@ local function tounicode16sequence(unicodes) t[l] = s_unknown else u = u - 0x10000 - t[l] = f_double(idiv(k,0x400)+0xD800,u%0x400+0xDC00) + t[l] = f_double(idiv(u,0x400)+0xD800,u%0x400+0xDC00) end end return concat(t) 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 4177e3035a6..cff9272741c 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-osd.lua @@ -220,6 +220,9 @@ end -- we might need to have consonants etc per script and initialize a local table -- pointing to the right one. But not now. +-- We have additional data in char-def that provides information not present (at +-- least when this was written) in Unicode. + local indicgroups = characters and characters.indicgroups if not indicgroups and characters then diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua index 0825077b3f2..57e219a4af3 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.133 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.134 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oto.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oto.lua index 0689f4dfb5b..131cbbe3c5d 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oto.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oto.lua @@ -263,9 +263,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis for i=1,#steps do for unicode, data in next, steps[i].coverage do if unicode ~= data then --- if not changed[unicode] then - changed[unicode] = data --- end + changed[unicode] = changed[unicode] or data end if trace_singles then report_substitution(feature,sequence,descriptions,unicode,data) @@ -278,9 +276,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis local replacement = data[alternate] if replacement then if unicode ~= replacement then --- if not changed[unicode] then - changed[unicode] = replacement --- end + changed[unicode] = changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal") @@ -288,9 +284,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis elseif defaultalt == "first" then replacement = data[1] if unicode ~= replacement then --- if not changed[unicode] then - changed[unicode] = replacement --- end + changed[unicode] = changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt) @@ -298,9 +292,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis elseif defaultalt == "last" then replacement = data[#data] if unicode ~= replacement then --- if not changed[unicode] then - changed[unicode] = replacement --- end + changed[unicode] = changed[unicode] or replacement end if trace_alternatives then report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt) 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 48f85c3658d..3b4f5b3cc79 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ots.lua @@ -2552,17 +2552,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if last then local char, id = ischar(last,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n < l then + last = getnext(last) + end + n = n + 1 + elseif skiphash and skiphash[char] then skipped = true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end last = getnext(last) - elseif seq[n][char] then - if n < l then - last = getnext(last) - end - n = n + 1 elseif discfound then notmatchreplace[discfound] = true if notmatchpre[discfound] then @@ -2661,17 +2661,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if prev then local char, id = ischar(prev,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n > 1 then + prev = getprev(prev) + end + n = n - 1 + elseif skiphash and skiphash[char] then skipped = true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end prev = getprev(prev) - elseif seq[n][char] then - if n > 1 then - prev = getprev(prev) - end - n = n - 1 elseif discfound then notmatchreplace[discfound] = true if notmatchpost[discfound] then @@ -2792,17 +2792,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if current then local char, id = ischar(current,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n < s then + current = getnext(current) + end + n = n + 1 + elseif skiphash and skiphash[char] then skipped = true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end - current = getnext(current) -- was absent - elseif seq[n][char] then - if n < s then -- new test - current = getnext(current) -- was absent - end - n = n + 1 + current = getnext(current) elseif discfound then notmatchreplace[discfound] = true if notmatchpre[discfound] then @@ -3978,36 +3978,32 @@ do while start do local char, id = ischar(start,font) if char then - if skiphash and skiphash[char] then -- we never needed it here but let's try - start = getnext(start) - else - local lookupmatch = lookupcache[char] - if lookupmatch then - local a -- happens often so no assignment is faster - if attr then - if getglyphdata(start) == attr and (not attribute or getstate(start,attribute)) then - a = true - end - elseif not attribute or getstate(start,attribute) then + local lookupmatch = lookupcache[char] + if lookupmatch then + local a -- happens often so no assignment is faster + if attr then + if getglyphdata(start) == attr and (not attribute or getstate(start,attribute)) then a = true end - if a then - local ok, df - head, start, ok, df = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - -- if ok then - -- done = true - -- end - if df then + elseif not attribute or getstate(start,attribute) then + a = true + end + if a then + local ok, df + head, start, ok, df = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + -- if ok then + -- done = true + -- end + if df then -- print("restart 1",typ) - elseif start then - start = getnext(start) - end - else + elseif start then start = getnext(start) end else - start = getnext(start) + start = getnext(start) end + else + start = getnext(start) end elseif char == false or id == glue_code then -- a different font|state or glue (happens often) @@ -4041,53 +4037,49 @@ do while start do local char, id = ischar(start,font) if char then - if skiphash and skiphash[char] then -- we never needed it here but let's try - start = getnext(start) - else - local m = merged[char] - if m then - local a -- happens often so no assignment is faster - if attr then - if getglyphdata(start) == attr and (not attribute or getstate(start,attribute)) then - a = true - end - elseif not attribute or getstate(start,attribute) then + local m = merged[char] + if m then + local a -- happens often so no assignment is faster + if attr then + if getglyphdata(start) == attr and (not attribute or getstate(start,attribute)) then a = true end - if a then - local ok, df - for i=m[1],m[2] do - local step = steps[i] - -- for i=1,#m do - -- local step = m[i] - local lookupcache = step.coverage - local lookupmatch = lookupcache[char] - if lookupmatch then - -- we could move all code inline but that makes things even more unreadable + elseif not attribute or getstate(start,attribute) then + a = true + end + if a then + local ok, df + for i=m[1],m[2] do + local step = steps[i] + -- for i=1,#m do + -- local step = m[i] + local lookupcache = step.coverage + local lookupmatch = lookupcache[char] + if lookupmatch then + -- we could move all code inline but that makes things even more unreadable -- local ok, df - head, start, ok, df = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if df then - break - elseif ok then - -- done = true - break - elseif not start then - -- don't ask why ... shouldn't happen - break - end + head, start, ok, df = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if df then + break + elseif ok then + -- done = true + break + elseif not start then + -- don't ask why ... shouldn't happen + break end end - if df then + end + if df then -- print("restart 2",typ) - elseif start then - start = getnext(start) - end - else + elseif start then start = getnext(start) end else start = getnext(start) end + else + start = getnext(start) end elseif char == false or id == glue_code then -- a different font|state or glue (happens often) @@ -4183,31 +4175,27 @@ do position = position + 1 local m = merged[char] if m then - if skiphash and skiphash[char] then -- we never needed it here but let's try - start = getnext(start) - else - for i=m[1],m[2] do - local step = steps[i] - local lookupcache = step.coverage - local lookupmatch = lookupcache[char] - if lookupmatch then - local ok - head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if ok then - -- if matches then - -- matches[position] = i - -- else - -- matches = { [position] = i } - -- end - break - elseif not start then - break - end + for i=m[1],m[2] do + local step = steps[i] + local lookupcache = step.coverage + local lookupmatch = lookupcache[char] + if lookupmatch then + local ok + head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if ok then + -- if matches then + -- matches[position] = i + -- else + -- matches = { [position] = i } + -- end + break + elseif not start then + break end end - if start then - start = getnext(start) - end + end + if start then + start = getnext(start) end else start = getnext(start) diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-table.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-table.lua index b6c3744b8b9..429466179e0 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-table.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-l-table.lua @@ -740,7 +740,8 @@ local function do_serialize(root,name,depth,level,indexed) if accurate then handle(format("%s %s=%q,",depth,k,v)) else - handle(format("%s %s=%s,",depth,k,v)) +-- handle(format("%s %s=%s,",depth,k,v)) + handle(format("%s %s=0x%X,",depth,k,v)) end elseif accurate then handle(format("%s %s=%q,",depth,k,v)) @@ -752,7 +753,8 @@ local function do_serialize(root,name,depth,level,indexed) if accurate then handle(format("%s [%q]=%q,",depth,k,v)) else - handle(format("%s [%q]=%s,",depth,k,v)) +-- handle(format("%s [%q]=%s,",depth,k,v)) + handle(format("%s [%q]=0x%X,",depth,k,v)) end elseif accurate then handle(format("%s [%q]=%q,",depth,k,v)) diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua index 6997a417a7d..8cff7fb9090 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 : 2023-08-16 19:31 +-- merge date : 2023-09-26 18:19 do -- begin closure to overcome local limits and interference @@ -1578,7 +1578,7 @@ local function do_serialize(root,name,depth,level,indexed) if accurate then handle(format("%s %s=%q,",depth,k,v)) else - handle(format("%s %s=%s,",depth,k,v)) + handle(format("%s %s=0x%X,",depth,k,v)) end elseif accurate then handle(format("%s %s=%q,",depth,k,v)) @@ -1590,7 +1590,7 @@ local function do_serialize(root,name,depth,level,indexed) if accurate then handle(format("%s [%q]=%q,",depth,k,v)) else - handle(format("%s [%q]=%s,",depth,k,v)) + handle(format("%s [%q]=0x%X,",depth,k,v)) end elseif accurate then handle(format("%s [%q]=%q,",depth,k,v)) @@ -4103,6 +4103,20 @@ do return cache[s] end end +if CONTEXTLMTXMODE and CONTEXTLMTXMODE>0 then + local t={ + ["#"]="#H", + ["\n"]="#L", + ['"']="#Q", + ["\r"]="#R", + [" "]="#S", + ["\t"]="#T", + ["\\"]="#X", + } + function string.texhashed(s) + return (gsub(s,".",t)) + end +end end -- closure @@ -10814,7 +10828,7 @@ local function tounicode16(unicode) return s_unknown else unicode=unicode-0x10000 - return f_double(idiv(k,0x400)+0xD800,unicode%0x400+0xDC00) + return f_double(idiv(unicode,0x400)+0xD800,unicode%0x400+0xDC00) end end local function tounicode16sequence(unicodes) @@ -10833,7 +10847,7 @@ local function tounicode16sequence(unicodes) t[l]=s_unknown else u=u-0x10000 - t[l]=f_double(idiv(k,0x400)+0xD800,u%0x400+0xDC00) + t[l]=f_double(idiv(u,0x400)+0xD800,u%0x400+0xDC00) end end return concat(t) @@ -18425,7 +18439,7 @@ do end return features end - local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) setposition(f,lookupoffset) local noflookups=readushort(f) local lookups=readcardinaltable(f,noflookups,ushort) @@ -18442,12 +18456,12 @@ do subtables[j]=offset+readushort(f) end local markclass=band(flagbits,0x0010)~=0 + local markset=rshift(flagbits,8) if markclass then markclass=readushort(f) end - local markset=rshift(flagbits,8) if markset>0 then - markclass=markset + markclass=nofmarkclasses+markset end lookups[lookupid]={ type=lookuptype, @@ -18791,7 +18805,8 @@ do if not lookupstoo then return end - local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder) + local nofmarkclasses=(fontdata.markclasses and #fontdata.markclasses or 0)-(fontdata.marksets and #fontdata.marksets or 0) + local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder,nofmarkclasses) if lookups then resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset) end @@ -18960,6 +18975,7 @@ function readers.gdef(f,fontdata,specification) end end if marksetsoffset~=0 then + local nofmarkclasses=fontdata.markclasses and #fontdata.markclasses or 0 marksetsoffset=tableoffset+marksetsoffset setposition(f,marksetsoffset) local format=readushort(f) @@ -18969,7 +18985,8 @@ function readers.gdef(f,fontdata,specification) for i=1,nofsets do local offset=sets[i] if offset~=0 then - marksets[i]=readcoverage(f,marksetsoffset+offset) + markclasses[nofmarkclasses+i]=readcoverage(f,marksetsoffset+offset) + marksets[i]={} end end end @@ -21352,7 +21369,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_d local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf -otf.version=3.133 +otf.version=3.134 otf.cache=containers.define("fonts","otl",otf.version,true) otf.svgcache=containers.define("fonts","svg",otf.version,true) otf.pngcache=containers.define("fonts","png",otf.version,true) @@ -29402,17 +29419,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if last then local char,id=ischar(last,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n<l then + last=getnext(last) + end + n=n+1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end last=getnext(last) - elseif seq[n][char] then - if n<l then - last=getnext(last) - end - n=n+1 elseif discfound then notmatchreplace[discfound]=true if notmatchpre[discfound] then @@ -29503,17 +29520,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if prev then local char,id=ischar(prev,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n>1 then + prev=getprev(prev) + end + n=n-1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end prev=getprev(prev) - elseif seq[n][char] then - if n>1 then - prev=getprev(prev) - end - n=n-1 elseif discfound then notmatchreplace[discfound]=true if notmatchpost[discfound] then @@ -29619,17 +29636,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s if current then local char,id=ischar(current,currentfont) if char then - if skiphash and skiphash[char] then + if seq[n][char] then + if n<s then + current=getnext(current) + end + n=n+1 + elseif skiphash and skiphash[char] then skipped=true if trace_skips then show_skip(dataset,sequence,char,ck,classes[char]) end - current=getnext(current) - elseif seq[n][char] then - if n<s then - current=getnext(current) - end - n=n+1 + current=getnext(current) elseif discfound then notmatchreplace[discfound]=true if notmatchpre[discfound] then @@ -30574,32 +30591,28 @@ do while start do local char,id=ischar(start,font) if char then - if skiphash and skiphash[char] then - start=getnext(start) - else - local lookupmatch=lookupcache[char] - if lookupmatch then - local a - if attr then - if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then - a=true - end - elseif not attribute or getstate(start,attribute) then + local lookupmatch=lookupcache[char] + if lookupmatch then + local a + if attr then + if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then a=true end - if a then - local ok,df - head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if df then - elseif start then - start=getnext(start) - end - else + elseif not attribute or getstate(start,attribute) then + a=true + end + if a then + local ok,df + head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if df then + elseif start then start=getnext(start) end else - start=getnext(start) + start=getnext(start) end + else + start=getnext(start) end elseif char==false or id==glue_code then start=getnext(start) @@ -30629,46 +30642,42 @@ do while start do local char,id=ischar(start,font) if char then - if skiphash and skiphash[char] then - start=getnext(start) - else - local m=merged[char] - if m then - local a - if attr then - if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then - a=true - end - elseif not attribute or getstate(start,attribute) then + local m=merged[char] + if m then + local a + if attr then + if getglyphdata(start)==attr and (not attribute or getstate(start,attribute)) then a=true end - if a then - local ok,df - for i=m[1],m[2] do - local step=steps[i] - local lookupcache=step.coverage - local lookupmatch=lookupcache[char] - if lookupmatch then - head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if df then - break - elseif ok then - break - elseif not start then - break - end + elseif not attribute or getstate(start,attribute) then + a=true + end + if a then + local ok,df + for i=m[1],m[2] do + local step=steps[i] + local lookupcache=step.coverage + local lookupmatch=lookupcache[char] + if lookupmatch then + head,start,ok,df=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if df then + break + elseif ok then + break + elseif not start then + break end end - if df then - elseif start then - start=getnext(start) - end - else + end + if df then + elseif start then start=getnext(start) end else start=getnext(start) end + else + start=getnext(start) end elseif char==false or id==glue_code then start=getnext(start) @@ -30736,26 +30745,22 @@ do position=position+1 local m=merged[char] if m then - if skiphash and skiphash[char] then - start=getnext(start) - else - for i=m[1],m[2] do - local step=steps[i] - local lookupcache=step.coverage - local lookupmatch=lookupcache[char] - if lookupmatch then - local ok - head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) - if ok then - break - elseif not start then - break - end + for i=m[1],m[2] do + local step=steps[i] + local lookupcache=step.coverage + local lookupmatch=lookupcache[char] + if lookupmatch then + local ok + head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,skiphash,step) + if ok then + break + elseif not start then + break end end - if start then - start=getnext(start) - end + end + if start then + start=getnext(start) end else start=getnext(start) diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-util-str.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-util-str.lua index a9150b886ac..3663b384896 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-util-str.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-util-str.lua @@ -315,7 +315,8 @@ function strings.collapse(str) -- maybe also in strings return str and lpegmatch(p_prune_intospace,str) or str end --- local s = "\naa\n\naa\na a\n\n" +-- local s = " \naa\n\naa\na a\n\n " +-- local s = [[ \naa\n\naa\na a\n\n]] -- print("["..strings.striplines(s,"collapse all").."]") -- also see: string.collapsespaces @@ -1557,3 +1558,20 @@ do end +if CONTEXTLMTXMODE and CONTEXTLMTXMODE > 0 then + + local t = { + ["#"] = "#H", + ["\n"] = "#L", + ['"'] = "#Q", + ["\r"] = "#R", + [" "] = "#S", + ["\t"] = "#T", + ["\\"] = "#X", + } + + function string.texhashed(s) + return (gsub(s,".",t)) + end + +end diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-arabic.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-arabic.lua new file mode 100644 index 00000000000..ac599ebca76 --- /dev/null +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-arabic.lua @@ -0,0 +1,143 @@ +----------------------------------------------------------------------- +-- FILE: luaotfload-arabic.lua +-- DESCRIPTION: part of luaotfload / arabic specific support +----------------------------------------------------------------------- + +assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { + name = "luaotfload-arabic", + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE + description = "luaotfload submodule / features", + license = "GPL v2.0", + author = "Marcel Krüger", + copyright = "The LaTeX Project", +} + +local unicode = require'luaotfload-unicode' +local ccc = unicode.ccc + +local node_new = node.direct.new +local setlink = node.direct.setlink +local is_char = node.direct.is_char +local getnext = node.direct.getnext + +-- Mark combining marks +local mcm = { + [0x0654] = true, -- ARABIC HAMZA ABOVE + [0x0655] = true, -- ARABIC HAMZA BELOW + [0x0658] = true, -- ARABIC MARK NOON GHUNNA + [0x06DC] = true, -- ARABIC SMALL HIGH SEEN + [0x06E3] = true, -- ARABIC SMALL LOW SEEN + [0x06E7] = true, -- ARABIC SMALL HIGH YEH + [0x06E8] = true, -- ARABIC SMALL HIGH NOON + [0x08CA] = true, -- ARABIC SMALL HIGH FARSI YEH + [0x08CB] = true, -- ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW + [0x08CD] = true, -- ARABIC SMALL HIGH ZAH + [0x08CE] = true, -- ARABIC LARGE ROUND DOT ABOVE + [0x08CF] = true, -- ARABIC LARGE ROUND DOT BELOW + [0x08D3] = true, -- ARABIC SMALL LOW WAW + [0x08F3] = true, -- ARABIC SMALL HIGH WAW +} + +-- Implement AMTRA from UTR #53. +-- This assumes that the text is already normalized according to NFD. For most +-- fonts, normalizing to NFC should be good enough. +local function reorder_amtra(head, f) + local n = head + while n do + local base, prev = n + prev, n = n, getnext(n) + while true do + local char = is_char(n, f) -- is_char(nil, f) == is_char(0, f) == nil + local this_ccc = ccc[char] + if not this_ccc then break end -- ! This `break` is the hot path + if this_ccc == 33 then + local after_33, tail_33 = n + repeat + tail_33 = after_33 + after_33 = getnext(tail_33) + local char = is_char(after_33, f) + local after_ccc = ccc[char] + until after_ccc ~= 33 + setlink(prev, after_33) + setlink(tail_33, getnext(base)) + setlink(base, n) + if prev == base then + prev = tail_33 + end + n = after_33 + elseif this_ccc == 220 then + local after_220, tail_220, found = n + repeat + tail_220 = after_220 + after_220 = getnext(tail_220) + local char = is_char(after_220, f) + if mcm[char] then found = true end + local after_ccc = ccc[char] + until after_ccc ~= 220 + if found then + setlink(prev, after_220) + setlink(tail_220, getnext(base)) + setlink(base, n) + if prev == base then + prev = tail_220 + end + n = after_220 + base = tail_220 -- Because ccc230 should get inserted after this + else + prev, n = tail_220, after_220 + end + elseif this_ccc == 230 then + local after_230, tail_230, found = n + repeat + tail_230 = after_230 + after_230 = getnext(tail_230) + local char = is_char(after_230, f) + if mcm[char] then found = true end + local after_ccc = ccc[char] + until after_ccc ~= 230 + if found then + setlink(prev, after_230) + setlink(tail_230, getnext(base)) + setlink(base, n) + if prev == base then + prev = tail_230 + end + n = after_230 + else + prev, n = tail_220, after_220 + end + else + prev, n = n, getnext(n) + end + end + end + return n +end + +-- We need to run after normalize and ideally directly afterwards. So try to insert after normalize +-- or default to the start of the list such that normalize can insert itself before us later. +local normalize_index = 0 +for i, manipulator in ipairs(fonts.constructors.features.otf.processors.node) do + if manipulator.name == 'normalize' then + normalize_index = i + end +end +fonts.constructors.features.otf.register { + name = 'amtra', + default = 'auto', + description = 'Apply Unicode Arabic Mark Rendering', + initializers = { + node = function(fonttable, value, features) + if values == 'auto' then + features.amtra = fonttable.properties.script == 'arab' + end + end, + }, + processors = { + position = normalize_index + 1, + node = function(head, f) + return reorder_amtra(head, f) + end, + }, +} diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua index 5e2022a18be..71abb0e1bdb 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-auxiliary", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / auxiliary functions", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua index 2d8942a3d99..944d1745e42 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-colors", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --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 b59897b2173..d8590666afc 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-configuration", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --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 9b81f6a3d0e..f1b59fcc7ba 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 assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-database", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / database", license = "GPL v2.0", author = "Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger", @@ -150,7 +150,6 @@ local kpsefind_file = kpse.find_file local kpselookup = kpse.lookup local kpsereadable_file = kpse.readable_file local lfsattributes = lfs.attributes -local lfschdir = lfs.chdir local lfscurrentdir = lfs.currentdir local lfsdir = lfs.dir local mathabs = math.abs @@ -202,6 +201,7 @@ local resolversfindfile = context_environment.resolvers.findfile --- some of our own local unicode = require'luaotfload-unicode' local casefold = require'lua-uni-case'.casefold +local realpath = require'luaotfload-realpath'.realpath local alphnum_only = unicode.alphnum_only local name_index = nil --> upvalue for names.data @@ -318,49 +318,53 @@ local function sanitize_fontnames (rawnames) return result end -local function find_files_indeed (acc, dirs, filter) - if not next (dirs) then --- done - return acc +local list_dir_or_empty do + local function inner_list_dir_or_empty (dir, success, ...) + if success then + return ... + else + -- Skipping unreadable directory. + -- TODO: Print warning + return next, {} + end + end + function list_dir_or_empty (dir) + return inner_list_dir_or_empty(dir, pcall(lfsdir, dir)) end +end - local pwd = lfscurrentdir () - local dir = dirs[#dirs] - dirs[#dirs] = nil +local function dummyfilter () return true end + +--- the optional filter function receives the full path of a file +--- system entity. a filter applies if the first argument it returns is +--- true. + +--- string -> function? -> string list +local function find_files (root, filter) + if not lfsisdir (root) then return end + + local files = {} + local dirs = { root } + filter = filter or dummyfilter - if lfschdir (dir) then - lfschdir (pwd) + while dirs[1] do + local dir = dirs[#dirs] + dirs[#dirs] = nil - local newfiles = { } - for ent in lfsdir (dir) do + for ent in list_dir_or_empty (dir) do if ent ~= "." and ent ~= ".." then local fullpath = dir .. "/" .. ent if filter (fullpath) == true then if lfsisdir (fullpath) then dirs[#dirs+1] = fullpath elseif lfsisfile (fullpath) then - newfiles[#newfiles+1] = fullpath + files[#files+1] = fullpath end end end end - return find_files_indeed (tableappend (acc, newfiles), - dirs, filter) - end - --- could not cd into, so we skip it - return find_files_indeed (acc, dirs, filter) -end - -local function dummyfilter () return true end - ---- the optional filter function receives the full path of a file ---- system entity. a filter applies if the first argument it returns is ---- true. - ---- string -> function? -> string list -local function find_files (root, filter) - if lfsisdir (root) then - return find_files_indeed ({}, { root }, filter or dummyfilter) end + return files end @@ -2177,17 +2181,19 @@ local function process_dir_tree (acc, dirs, done) return acc end - local pwd = lfscurrentdir () local dir = dirs[#dirs] dirs[#dirs] = nil - if not lfschdir (dir) then - --- Cannot cd; skip. + local mode_or_err + dir, mode_or_err = realpath(dir) + if not dir then + logreport ("both", 1, "db", "Skipping font directory: %s", mode_or_err) + return process_dir_tree (acc, dirs, done) + elseif mode_or_err ~= 'directory' then + logreport ("both", 1, "db", "Skipping non-directory while searching fonts: %q (%s)", dir, mode_or_err) return process_dir_tree (acc, dirs, done) end - dir = lfscurrentdir () --- resolve symlinks - lfschdir (pwd) if tablecontains (done, dir) then --- Already traversed. Note that it’d be unsafe to rely on the --- hash part above due to Lua only processing up to 32 bytes @@ -2226,35 +2232,38 @@ local function process_dir_tree (acc, dirs, done) end local function process_dir (dir) - local pwd = lfscurrentdir () - if lfschdir (dir) then - dir = lfscurrentdir () --- resolve symlinks - lfschdir (pwd) - - local files = { } - local blacklist = names.blacklist - for ent in lfsdir (dir) do - if ent ~= "." and ent ~= ".." and not blacklist[ent] then - local fullpath = dir .. "/" .. ent - if lfsisfile (fullpath) then - ent = stringlower (ent) - if lpegmatch (p_font_filter, ent) - then - if filesuffix (ent) == "afm" then - local pfbpath = locate_matching_pfb (ent, dir) - if pfbpath then - files[#files+1] = pfbpath - end - else - files[#files+1] = fullpath + local mode_or_err + dir, mode_or_err = realpath(dir) + if not dir then + logreport ("both", 1, "db", "Skipping font directory: %s", mode_or_err) + return {} + elseif mode_or_err ~= 'directory' then + logreport ("both", 1, "db", "Skipping non-directory while searching fonts: %q (%s)", dir, mode_or_err) + return {} + end + + local files = { } + local blacklist = names.blacklist + for ent in lfsdir (dir) do + if ent ~= "." and ent ~= ".." and not blacklist[ent] then + local fullpath = dir .. "/" .. ent + if lfsisfile (fullpath) then + ent = stringlower (ent) + if lpegmatch (p_font_filter, ent) + then + if filesuffix (ent) == "afm" then + local pfbpath = locate_matching_pfb (ent, dir) + if pfbpath then + files[#files+1] = pfbpath end + else + files[#files+1] = fullpath end end end end - return files end - return { } + return files end --- string -> bool -> string list diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-diagnostics.lua index 1a48ec9a08d..83780b99291 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-diagnostics", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload-tool submodule / diagnostics", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-dvi.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-dvi.lua index c1b6d227c95..f8d4d268f72 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-dvi.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-dvi.lua @@ -6,8 +6,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-dvi", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / DVI", license = "GPL v2.0", author = "Marcel Krüger", @@ -85,7 +85,7 @@ function full_hprocess(head) end if last_mapping then local mapped = last_mapping[c] - if mapped then setfont(n, mapped_font, mapped) end + if mapped then setfont(n, last_mapped_font, mapped) end end end elseif id == glyph_t then diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua index fad5ce7b2c8..caff50ed4d4 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-embolden.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-embolden", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / embolden", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-fallback.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-fallback.lua index ef0ce1fb631..a527095618d 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-fallback.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-fallback.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-fallback", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / fallback", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua index 862f50aad35..d4d96217aab 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-features", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / features", license = "GPL v2.0", author = "Hans Hagen, Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger", @@ -890,6 +890,7 @@ fonts.constructors.features.otf.register { end, }, } +require'luaotfload-arabic' -- mathsize feature for compatibility with older fontloader versions -- Not all that useful in most cases since it leads to messy font sizes, diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua index fea69928b59..9b5f618cc24 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 @@ if luaotfload_module then luaotfload_module { name = "luaotfload-filelist", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / filelist", license = "GPL v2.0" } end diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua index 370cfbd6118..f300d4955d6 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-glyphlist.lua @@ -1,8 +1,8 @@ if luaotfload_module then luaotfload_module { name = "luaotfload-glyphlist", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --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-harf-define.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-define.lua index 32cad5fc540..7eb795d1763 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-define.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-define.lua @@ -5,8 +5,8 @@ do -- block to avoid to many local variables error assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-harf-define", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / HarfBuzz font loading", license = "GPL v2.0", author = "Khaled Hosny, Marcel Krüger", diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-plug.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-plug.lua index e9d4a15b9fd..5c2d13df00f 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-plug.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-plug.lua @@ -4,8 +4,8 @@ ----------------------------------------------------------------------- assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-harf-plug", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / HarfBuzz shaping", license = "GPL v2.0", author = "Khaled Hosny, Marcel Krüger", diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-cff2.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-cff2.lua index 063b99c2be4..ad8fbdcd26f 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-cff2.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-cff2.lua @@ -5,8 +5,8 @@ do assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-harf-var-cff2", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / CFF2 table processing", license = "GPL v2.0", author = "Marcel Krüger", diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-t2-writer.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-t2-writer.lua index 491c127f9c8..1d40d09ad00 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-t2-writer.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-t2-writer.lua @@ -5,8 +5,8 @@ do assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-harf-var-t2-writer", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / Type 2 charstring writer", license = "GPL v2.0", author = "Marcel Krüger", diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-ttf.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-ttf.lua index 0853a62fc43..a6d4d36aba0 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-ttf.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-harf-var-ttf.lua @@ -5,8 +5,8 @@ do assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-harf-var-ttf", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / gvar table processing", license = "GPL v2.0", author = "Marcel Krüger", diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua index 78cb99ff7eb..13b1099752c 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-init", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --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 d641b028bf1..b2b848bfc68 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-letterspace", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / letterspacing", 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 eceaff81888..86f48ee69a2 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-loaders", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / callback handling", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua index 95f02beed53..d22c48eda56 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-log", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --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-multiscript.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-multiscript.lua index 2b2136ff68d..c3a611a1f87 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-multiscript.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-multiscript.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-multiscript", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / multiscript", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua index 311a377148e..f738fbdae99 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-notdef.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-notdef", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / notdef", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-parsers.lua index 2650e21e614..27c8c449ca8 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-parsers", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / parsers", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-realpath.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-realpath.lua new file mode 100644 index 00000000000..2738da8a1b2 --- /dev/null +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-realpath.lua @@ -0,0 +1,131 @@ +-- Helper to resolve symlinks in paths + +local sub = string.sub +local symlinkattributes = lfs.symlinkattributes +local attributes = lfs.attributes +local currentdir = lfs.currentdir +local concat = table.concat +local move = table.move +local newtable = lua.newtable +local setmetatable = setmetatable + +-- Marker key for elements of result_tree to indicate the path components entry and the file mode +local path_components, file_mode = {}, {} +local tree_root + +local split_path do + local l = lpeg + local separator = os.type == 'unix' and l.S'/' or l.S'/\\' + -- We do not allow empty segments here because they get ignored. + local segment = l.C((1 - separator)^1) + -- Duplicate and trailing separators are dropped. + local unc = os.type == 'unix' and l.P(false) or separator * separator * l.Cg(l.P(1)^0 * -1, 'unc') + local drive_letter = os.type == 'unix' and l.P(false) or l.Cg(l.R('az', 'AZ') * ':', 'drive') + local path_pat = l.Ct(unc + drive_letter^-1 * (l.Cc'' * separator^1)^-1 * (segment * separator^1)^0 * segment^-1 * -1) + function split_path(path) + local splitted = path_pat:match(path) + if not splitted then + error'Invalid path rejected' + elseif splitted.unc then + error'Unsupported UNC path encountered' + elseif splitted.drive and splitted[1] ~= '' then + error'Unsupported relative path with drive letter encountered' + end + return splitted + end +end + +local function recombine_path(components) + local joined = concat(components, '/') + if components.drive then + joined = components.drive .. joined + end + return joined +end + +local function lookup_split_path_in_tree(components, tree) + if components[1] == '' then + tree = tree_root + end + for i=1, #components do + local next_tree = tree[components[i]] + if not next_tree then + return nil, string.format("Unable to find %q in %q", components[i], recombine_path(tree[path_components])) + end + tree = next_tree + end + return tree +end + +local tree_meta +tree_meta = { + __index = function(parent, component) + local parent_components = parent[path_components] + local depth = #parent_components + local components = move(parent[path_components], 1, depth, 1, newtable(depth + 1, 0)) + components[depth + 1] = component + local path = recombine_path(components) + + local mode = symlinkattributes(path, 'mode') + if not mode then + parent[component] = false + return false + end + if mode == 'link' then + local target = symlinkattributes(path, 'target') + local splitted_target = split_path(target) + local target_tree = lookup_split_path_in_tree(splitted_target, parent) or false + parent[component] = target_tree + return target_tree + end + + local child = { + [path_components] = components, + [file_mode] = mode, + } + if mode == 'directory' then + setmetatable(child, tree_meta) + child['.'] = child + child['..'] = parent + end + parent[component] = child + return child + end, +} + +-- We assume that the directory structure does not change during our run. +function build_root_dir(drive) + local root_dir = setmetatable({ + [path_components] = {'', drive = drive}, + [file_mode] = 'directory', -- "If [your root is not a directory] you are having a bad problem and you will not go to space today". + }, tree_meta) + root_dir['.'] = root_dir + root_dir['..'] = root_dir + return root_dir +end +tree_root = os.type == 'unix' and build_root_dir() or setmetatable({}, {__index = function(t, drive) + local root_dir = build_root_dir(drive) + t[drive] = root_dir + return root_dir +end}) + +local function resolve_path_to_tree(path) + local splitted = split_path(path) + if splitted[1] == '' then -- Optimization to avoid currentdir lookup. + return lookup_split_path_in_tree(splitted, tree_root) + else + local splitted_currentdir = split_path(currentdir()) + local current_tree = assert(lookup_split_path_in_tree(splitted_currentdir, tree_root)) + return lookup_split_path_in_tree(splitted, current_tree) + end +end + +local function resolve_path(path) + local tree, err = resolve_path_to_tree(path) + if not tree then return tree, err end + return recombine_path(tree[path_components]), tree[file_mode] +end + +return { + realpath = resolve_path, +} diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-resolvers.lua index a719d8f91bc..93e8f61c301 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 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-resolvers", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / resolvers", license = "GPL v2.0" } diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-scripts.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-scripts.lua index 5ee0b451a52..75f9e3b579c 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-scripts.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-scripts.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-script", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / Script helpers", license = "CC0 1.0 Universal", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua index 78d097c0f2c..530fc06eddd 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua @@ -1,14 +1,14 @@ return { ["hashes"]={ - { "fontloader-2023-08-19.lua", "5e8a5e13801cd8eff23f5e8dc4cbbc10" }, + { "fontloader-2023-12-28.lua", "f33a8946b4d6a005e76276706db83059" }, { "fontloader-util-fil.lua", "d0accf4180201efd567816a25ad5e037" }, - { "fontloader-util-str.lua", "9a601a851ef3595cddc01b40dc79e1d6" }, + { "fontloader-util-str.lua", "f9cf43057eb25bbf466821908686fc3d" }, { "fontloader-l-unicode.lua", "f368874f11f3c525de5864fd413e4b24" }, { "fontloader-l-math.lua", "e19c80b7e700a69df942d4df2e14aa28" }, { "fontloader-l-boolean.lua", "abe28515dd33e8f6c416c09bca351cf8" }, { "fontloader-l-file.lua", "525b1c6af6f94d93ae929bfbe980d656" }, { "fontloader-l-io.lua", "3396a8644bae37e49b2cfc0c388c78f8" }, - { "fontloader-l-table.lua", "87aad875871bba16bbf7d4c3208b3637" }, + { "fontloader-l-table.lua", "baa3aea43dbc57e6fb5ff7850129218c" }, { "fontloader-l-string.lua", "3e97812b1d8eff26f19837ab00813e71" }, { "fontloader-l-function.lua", "a7e68a9703c35238729da41a474e951b" }, { "fontloader-l-lpeg.lua", "8315a56e6bc7b2ede3f70c49bf2b5af5" }, @@ -33,67 +33,67 @@ return { { "fontloader-font-one.lua", "b7fb0389462a49bc1f41bebd2da85401" }, { "fontloader-font-onr.lua", "a3f85c886cf22fb27760d98603d51ffd" }, { "fontloader-font-ocl.lua", "2a377351ae23c339764ec8ce2e8e9164" }, - { "fontloader-font-osd.lua", "c38c14c118680202c6f4b09734542c49" }, + { "fontloader-font-osd.lua", "837039b0dca88edd3f4b54222f7cf54c" }, { "fontloader-font-otc.lua", "0ad931eec679ebeceed5d4f02f4ba31b" }, - { "fontloader-font-ots.lua", "c039b20490b526ec469e41a8584ebe6d" }, + { "fontloader-font-ots.lua", "2ba92e909a45b68592f7271d8190f390" }, { "fontloader-font-ota.lua", "7407b709ae7b2cdf36f68d5c98d51d12" }, { "fontloader-font-oup.lua", "aaff9c28233bbea56e6d27ae50e04ff0" }, { "fontloader-font-otj.lua", "b2c165bd6771a57633f992d07384b739" }, - { "fontloader-font-oto.lua", "1cc20f34606fb55d4646a0dd323499ef" }, - { "fontloader-font-otl.lua", "21196d193ce16f3996c9aa75e81e440c" }, + { "fontloader-font-oto.lua", "b148d66f642aaa3d0ddc427f71d6e02d" }, + { "fontloader-font-otl.lua", "84499d355f82829841b8e304952a9d5d" }, { "fontloader-font-ott.lua", "427bdc77dd187158eafb79b7193400dc" }, { "fontloader-font-oti.lua", "309a75f9c14b77d87e94eba827dc4e71" }, - { "fontloader-font-dsp.lua", "755beef1b31e9dfd050e9d221d4e9ae3" }, + { "fontloader-font-dsp.lua", "d07a0663bafeb7603c5456639afaf2e8" }, { "fontloader-font-ttf.lua", "ff94e130d7c71edd899c4bae7745b7db" }, { "fontloader-font-cff.lua", "999da544079698ce70178fd84bcdd67a" }, { "fontloader-font-otr.lua", "2958a21bebcf0579f4e11f0646d1b402" }, { "fontloader-font-vfc.lua", "a81c29eda98cd62cbebdb6c93544b50d" }, - { "fontloader-font-map.lua", "27ee748150e56f5f0e5f0fefc864f35e" }, + { "fontloader-font-map.lua", "b1444428c238a17d2a998ff1a4769183" }, { "fontloader-font-cid.lua", "22b0367742fb253deef84ef7ccf5e8de" }, - { "fontloader-font-con.lua", "bdbaaa361308c9ccc0a7dac0bf6c17ec" }, + { "fontloader-font-con.lua", "ebdd0ca857deafdc0152c7a4f1ed2490" }, { "fontloader-font-ini.lua", "16b855c98602e4a3e9df39512916a427" }, { "fontloader-data-con.lua", "b4ab51aaeab872d86d827f3e216bf05e" }, - { "fontloader-reference.lua", "50f2268d2d34d5f2ad630151fc1e5b8e" }, + { "fontloader-reference.lua", "23d03b682af6417aa08995f2ec10de22" }, { "fontloader-basics-gen.lua", "4bc43036e9796fccb0b8869f4b05bf2e" }, { "mktests", "918cb50be9ee8bd645ac1a27dc501e8c" }, - { "mkstatus", "590e9cffec69376c1888aa78c5b9275e" }, + { "mkstatus", "201011fcb01d8d804cc27b69d184b1e5" }, { "mkcharacters", "bfca0e96e1e351afe7077502f9595af9" }, { "mkglyphlist", "7a8a8fdc0eac7fac2f13ec8f4e8e7aa9" }, { "mkimport", "7d62f1042e548f8b9368f26b9ba4be5c" }, - { "luaotfload-glyphlist.lua", "fa2a4b91221ca59a6af8ebf8f6d36092" }, + { "luaotfload-glyphlist.lua", "5b7427a864ba333f2f674b172bba2b63" }, { "luaotfload-characters.lua", "76415ca3ede312cad6e09038323489ae" }, - { "luaotfload-dvi.lua", "2c42e84f6c9cfdbe19bcc544f74bc3c8" }, - { "luaotfload-tounicode.lua", "c5b104d6d5d1d86f13d45294df8ac77f" }, - { "luaotfload-unicode.lua", "2ac5fb697191fbe7f30f4ab4e5f7037b" }, - { "luaotfload-resolvers.lua", "70abe38786679abb1ca55cc5911bba83" }, - { "luaotfload-parsers.lua", "72ab0dbd52fba0249530872bfde6163b" }, - { "luaotfload-fallback.lua", "653007bbe201edfe3d3841af3ec39b70" }, - { "luaotfload-szss.lua", "df7e044b32e6fa3105ebd7f31e5b03cf" }, - { "luaotfload-scripts.lua", "0d7bf2d895f46c408c26f23f5035affb" }, - { "luaotfload-multiscript.lua", "47e8a08c7271b9d660321631f3140a4c" }, - { "luaotfload-loaders.lua", "3acb9dc1e0f02d2ecee1ef144597caf6" }, - { "luaotfload-harf-plug.lua", "5274ff4eec2421572adbf4bf293fcd8c" }, - { "luaotfload-harf-define.lua", "0074c52e9baf538bfec8d4636552e466" }, - { "luaotfload-notdef.lua", "d1797bb1db42c691a1196a713c2e1936" }, - { "luaotfload-embolden.lua", "9b611178cd9acaa482f8be85f384d201" }, - { "luaotfload-letterspace.lua", "66348b58834d4cc954acd02bab149085" }, - { "luaotfload-features.lua", "23685ea0c4f4ba1adc4f9bdc467cfe34" }, - { "luaotfload-database.lua", "2c2ae0362806ef21ef2862326bc09c60" }, - { "luaotfload-configuration.lua", "34e76cd86a01213964c0f4d8b32c8858" }, - { "luaotfload-colors.lua", "1dadb911d3763a9517bc499d2652f431" }, - { "luaotfload-auxiliary.lua", "77787effc3f19842cd3df8641c1b1db5" }, - { "luaotfload-filelist.lua", "7a7aef4439461fa4b00231ac898abe82" }, - { "luaotfload-tool.lua", "6d582c12a960d475eeedf4dcd1ac5669" }, - { "luaotfload-diagnostics.lua", "4791249fede247e2c4346ab7f20d0d35" }, - { "luaotfload-log.lua", "dcd5da60663d042e45c60852b7edd23b" }, - { "luaotfload-init.lua", "2dc0709188f1ce7741f103949ebc9e67" }, + { "luaotfload-dvi.lua", "a88ce85492b935becf9de00d168b9fc6" }, + { "luaotfload-tounicode.lua", "834c7cb80bd7793c516187aa67a5dab8" }, + { "luaotfload-unicode.lua", "7559a279476f189206b248117d80f70d" }, + { "luaotfload-resolvers.lua", "aa07ed5021ce7bfb381ddd584910af6b" }, + { "luaotfload-parsers.lua", "eb862d8075e5e0b6130beed3f89f29be" }, + { "luaotfload-fallback.lua", "49bc7a9f026fd23e13cd1b4be30be43c" }, + { "luaotfload-szss.lua", "b174020a2eb6021e0b8838f0ad4f0fe4" }, + { "luaotfload-scripts.lua", "cf7669cbc2e1585e5e9f63b2ebef5a0f" }, + { "luaotfload-multiscript.lua", "478c8afcc416be47c861474a3b64096b" }, + { "luaotfload-loaders.lua", "178c47e50037b1455c29b10a826b8ebc" }, + { "luaotfload-harf-plug.lua", "eb202ef8123cf63e6d4820452391697f" }, + { "luaotfload-harf-define.lua", "5723873002793c7ea723c8f1abfc412d" }, + { "luaotfload-notdef.lua", "ffae44eac263adc9e7b6c5f6373637ed" }, + { "luaotfload-embolden.lua", "85ef9409937b25da3f3f4bbb0d72cebc" }, + { "luaotfload-letterspace.lua", "b608dac037f4b173833eac25d205ed91" }, + { "luaotfload-features.lua", "b43dedff88145a0626bdfcb77f8791ee" }, + { "luaotfload-database.lua", "d92cce26908694dbbb30232252e12f80" }, + { "luaotfload-configuration.lua", "84379ea613f7e55c07f17b55b9dfb67b" }, + { "luaotfload-colors.lua", "89386fcb44e2887b1be60b8acbe251b3" }, + { "luaotfload-auxiliary.lua", "a43134987a5cf7fc22bfd240745440fe" }, + { "luaotfload-filelist.lua", "e40105831b58e5f0fa4908a7a131da1f" }, + { "luaotfload-tool.lua", "89fc6f4c6e2630305a91dd6a29c1449d" }, + { "luaotfload-diagnostics.lua", "7e07c0b2d9470c016d72d36900904792" }, + { "luaotfload-log.lua", "e008c6135446dff77813079ce11a10e8" }, + { "luaotfload-init.lua", "9f354ea115993d9a9238d5f74c7d7e63" }, { "luaotfload-main.lua", "b19c9cc34cf1d676c39f872cfb41aef6" }, }, ["notes"]={ ["committer"]="Marcel Fabian Krüger <tex@2krueger.de>", - ["description"]="v3.26/2023-08-31", - ["loader"]="fontloader-2023-08-19.lua", - ["revision"]="dc84dc80eeefae198d20f414ce1a3547f721446e", - ["timestamp"]="2023-08-31 20:10:15 +0200", + ["description"]="v3.27/2024-02-14", + ["loader"]="fontloader-2023-12-28.lua", + ["revision"]="17a160cd9eacf04cb179e7405f2d616824314868", + ["timestamp"]="2024-02-14 22:31:40 +0100", }, }
\ No newline at end of file diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-suppress.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-suppress.lua index c9fcfc8c2e7..1df46db80b5 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-suppress.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-suppress.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-suppress", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / suppress", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-szss.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-szss.lua index 95ac6b4d086..c01d271d597 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-szss.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-szss.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-szss", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / Special feature handling", license = "GPL v2.0", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-tounicode.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-tounicode.lua index 00496d9ea85..c0d7046689c 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-tounicode.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-tounicode.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-tounicode", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / tounicode", 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-unicode.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-unicode.lua index 975813d4685..b83ac25461c 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-unicode.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-unicode.lua @@ -5,8 +5,8 @@ assert(luaotfload_module, "This is a part of luaotfload and should not be loaded independently") { name = "luaotfload-unicode", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "luaotfload submodule / Unicode helpers", license = "CC0 1.0 Universal", author = "Marcel Krüger" diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua index 798fa8d45f2..893309f9db7 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua @@ -20,8 +20,8 @@ local authors = "\z -- version number is used below! local ProvidesLuaModule = { name = "luaotfload", - version = "3.26", --TAGVERSION - date = "2023-08-31", --TAGDATE + version = "3.27", --TAGVERSION + date = "2024-02-14", --TAGDATE description = "Lua based OpenType font support", author = authors, copyright = authors, diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty index c68e171cbc1..262834e95c5 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty @@ -39,7 +39,7 @@ \fi \ifdefined\ProvidesPackage \ProvidesPackage{luaotfload}% - [2023/08/31 v3.26 OpenType layout system] + [2024/02/14 v3.27 OpenType layout system] \fi \directlua{ if xpcall(function ()% |