diff options
| -rw-r--r-- | tex/context/base/char-def.lua | 2 | ||||
| -rw-r--r-- | tex/context/base/char-ini.lua | 75 | ||||
| -rw-r--r-- | tex/context/base/cont-new.tex | 2 | ||||
| -rw-r--r-- | tex/context/base/context.tex | 2 | ||||
| -rw-r--r-- | tex/context/base/font-gds.lua | 23 | ||||
| -rw-r--r-- | tex/context/base/font-ini.lua | 4 | ||||
| -rw-r--r-- | tex/context/base/font-otf.lua | 2 | ||||
| -rw-r--r-- | tex/context/base/font-syn.lua | 96 | ||||
| -rw-r--r-- | tex/context/base/s-fnt-28.tex | 46 | ||||
| -rw-r--r-- | tex/context/base/sort-ini.lua | 110 | ||||
| -rw-r--r-- | tex/context/fonts/antykwapoltawskiego.lfg | 213 | ||||
| -rw-r--r-- | tex/generic/context/luatex-fonts-merged.lua | 8 | 
12 files changed, 526 insertions, 57 deletions
diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua index 38769404a..2a46080b3 100644 --- a/tex/context/base/char-def.lua +++ b/tex/context/base/char-def.lua @@ -2330,7 +2330,7 @@ characters.data={    description="LATIN SMALL LETTER AE",    direction="l",    linebreak="al", -  shcode={ 0x00E6, 0x00EA }, +  shcode={ 0x0061, 0x0065 },    uccode=0x00C6,    unicodeslot=0x00E6,   }, diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua index 28a11a1e9..a16178bf2 100644 --- a/tex/context/base/char-ini.lua +++ b/tex/context/base/char-ini.lua @@ -10,8 +10,8 @@ local tex = tex  local utf = unicode.utf8  local utfchar, utfbyte, utfvalues = utf.char, utf.byte, string.utfvalues -local concat = table.concat -local next, tonumber = next, tonumber +local concat, unpack = table.concat, table.unpack +local next, tonumber, type = next, tonumber, type  local texsprint, texprint = tex.sprint, tex.print  local format, lower, gsub, match, gmatch = string.format, string.lower, string.gsub, string.match, string.match, string.gmatch  local texsetlccode, texsetuccode, texsetsfcode, texsetcatcode  = tex.setlccode, tex.setuccode, tex.setsfcode, tex.setcatcode @@ -771,29 +771,64 @@ characters.activeoffset = 0x10000 -- there will be remapped in that byte range  -- some day we will make a table -characters.lccodes     = allocate()  local lccodes     = characters.lccodes     -- lazy table -characters.uccodes     = allocate()  local uccodes     = characters.uccodes     -- lazy table -characters.shcodes     = allocate()  local shcodes     = characters.shcodes     -- lazy table +local function utfstring(s) +    if type(s) == "table" then +        return concat { utfchar( unpack(s) ) } +    else +        return utfchar(s) +    end +end + +utf.string = utf.string or utfstring + +characters.lccodes = allocate()  local lccodes = characters.lccodes -- lazy table +characters.uccodes = allocate()  local uccodes = characters.uccodes -- lazy table +characters.shcodes = allocate()  local shcodes = characters.shcodes -- lazy table + +setmetatable(lccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.lccode or u t[u] = c return c end end } ) +setmetatable(uccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.uccode or u t[u] = c return c end end } ) +setmetatable(shcodes, { __index = function(t,u) if u then local c = data[u] c = c and c.shcode or u t[u] = c return c end end } ) -characters.lcchars     = allocate()  local lcchars     = characters.lcchars     -- lazy table -characters.ucchars     = allocate()  local ucchars     = characters.ucchars     -- lazy table -characters.shchars     = allocate()  local shchars     = characters.shchars     -- lazy table +characters.lcchars = allocate()  local lcchars = characters.lcchars -- lazy table +characters.ucchars = allocate()  local ucchars = characters.ucchars -- lazy table +characters.shchars = allocate()  local shchars = characters.shchars -- lazy table -characters.lccharcodes = allocate()  local lccharcodes = characters.lccharcodes -- lazy table -characters.uccharcodes = allocate()  local uccharcodes = characters.uccharcodes -- lazy table -characters.shcharcodes = allocate()  local shcharcodes = characters.shcharcodes -- lazy table +setmetatable(lcchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode c = c and utfchar  (c) or u t[u] = c return c end end } ) +setmetatable(ucchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode c = c and utfchar  (c) or u t[u] = c return c end end } ) +setmetatable(shchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode c = c and utfstring(c) or u t[u] = c return c end end } ) -setmetatable(lccodes,     { __index = function(t,u) if u then local c = data[u]          c = c and c.lccode                      or u t[u] = c return c end end } ) -setmetatable(uccodes,     { __index = function(t,u) if u then local c = data[u]          c = c and c.uccode                      or u t[u] = c return c end end } ) -setmetatable(shcodes,     { __index = function(t,u) if u then local c = data[u]          c = c and c.shcode                      or u t[u] = c return c end end } ) +--~ characters.lccharcodes = allocate()  local lccharcodes = characters.lccharcodes -- lazy table +--~ characters.uccharcodes = allocate()  local uccharcodes = characters.uccharcodes -- lazy table +--~ characters.shcharcodes = allocate()  local shcharcodes = characters.shcharcodes -- lazy table -setmetatable(lcchars,     { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode c = c and utfchar(c) or u t[u] = c return c end end } ) -setmetatable(ucchars,     { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode c = c and utfchar(c) or u t[u] = c return c end end } ) -setmetatable(shchars,     { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode c = c and utfchar(c) or u t[u] = c return c end end } ) +--~ setmetatable(lccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode or u t[u] = c return c end end } ) +--~ setmetatable(uccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode or u t[u] = c return c end end } ) +--~ setmetatable(shcharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode or u t[u] = c return c end end } ) + +characters.specialchars = allocate()  local specialchars = characters.specialchars -- lazy table + +setmetatable(specialchars, { __index = function(t,u) +    if u then +        local c = data[utfbyte(u)] +        local s = c and c.specials +        if s then +            local t = { } +            for i=2,#s do +                local c = data[s[i]] +                if is_letter[c.category] then +                    t[#t+1] = c +                end +            end +            c = concat(t) +            t[u] = c +            return c +        else +            t[u] = u +            return u +        end +    end +end } ) -setmetatable(lccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode                      or u t[u] = c return c end end } ) -setmetatable(uccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode                      or u t[u] = c return c end end } ) -setmetatable(shcharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode                      or u t[u] = c return c end end } )  function characters.lower(str)      local new = { } diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 7dd1c51a6..982c3a257 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@  %C therefore copyrighted by \PRAGMA. See mreadme.pdf for  %C details. -\newcontextversion{2010.09.22 12:33} +\newcontextversion{2010.09.23 01:03}  %D This file is loaded at runtime, thereby providing an  %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index 9c4988471..91806c685 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@  %D your styles an modules.  \edef\contextformat {\jobname} -\edef\contextversion{2010.09.22 12:33} +\edef\contextversion{2010.09.23 01:03}  %D For those who want to use this: diff --git a/tex/context/base/font-gds.lua b/tex/context/base/font-gds.lua index ce1184292..f515d2b33 100644 --- a/tex/context/base/font-gds.lua +++ b/tex/context/base/font-gds.lua @@ -297,6 +297,29 @@ end  fontgoodies.register("mathematics", initialize) +-- the following takes care of explicit file specifications +-- +-- files = { +--     name = "antykwapoltawskiego", +--     list = { +--         ["AntPoltLtCond-Regular.otf"] = { +--          -- name   = "antykwapoltawskiego", +--             style  = "regular", +--             weight = "light", +--             width  = "condensed", +--         }, +--     }, +-- } + +local function initialize(goodies) +    local files = goodies.files +    if files then +        fonts.names.register(files) +    end +end + +fonts.goodies.register("files", initialize) +  -- The following file (husayni.lfg) is the experimental setup that we used  -- for Idris font. For the moment we don't store this in the cache and quite  -- probably these files sit in one of the paths: diff --git a/tex/context/base/font-ini.lua b/tex/context/base/font-ini.lua index e068dae55..e74db9a0e 100644 --- a/tex/context/base/font-ini.lua +++ b/tex/context/base/font-ini.lua @@ -73,6 +73,10 @@ fonts.processors = fonts.processors or {  fonts.manipulators = fonts.manipulators or {  } +fonts.tracers = fonts.tracers or { +} + +  fonts.definers                     = fonts.definers                     or { }  fonts.definers.specifiers          = fonts.definers.specifiers          or { }  fonts.definers.specifiers.synonyms = fonts.definers.specifiers.synonyms or { } diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua index be05b8271..ba6e90c4d 100644 --- a/tex/context/base/font-otf.lua +++ b/tex/context/base/font-otf.lua @@ -329,7 +329,7 @@ end  function otf.load(filename,format,sub,featurefile)      local name = file.basename(file.removesuffix(filename))      local attr = lfs.attributes(filename) -    local size, time = attr.size or 0, attr.modification or 0 +    local size, time = attr and attr.size or 0, attr and attr.modification or 0      if featurefile then          name = name .. "@" .. file.removesuffix(file.basename(featurefile))      end diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua index ba3e90231..c9b9f3aee 100644 --- a/tex/context/base/font-syn.lua +++ b/tex/context/base/font-syn.lua @@ -19,8 +19,9 @@ local unpack = unpack or table.unpack  local allocate = utilities.storage.allocate -local trace_names    = false  trackers.register("fonts.names",    function(v) trace_names    = v end) -local trace_warnings = false  trackers.register("fonts.warnings", function(v) trace_warnings = v end) +local trace_names          = false  trackers.register("fonts.names",          function(v) trace_names          = v end) +local trace_warnings       = false  trackers.register("fonts.warnings",       function(v) trace_warnings       = v end) +local trace_specifications = false  trackers.register("fonts.specifications", function(v) trace_specifications = v end)  local report_names = logs.new("fontnames") @@ -1323,7 +1324,6 @@ end  function names.specification(askedname,weight,style,width,variant,reload,all)      if askedname and askedname ~= "" and names.enabled then ---~         askedname = lower(askedname) -- or cleanname          askedname = cleanname(askedname) -- or cleanname          names.load(reload)          local found = heuristic(askedname,weight,style,width,variant,all) @@ -1339,7 +1339,6 @@ end  function names.collect(askedname,weight,style,width,variant,reload,all)      if askedname and askedname ~= "" and names.enabled then ---~         askedname = lower(askedname) -- or cleanname          askedname = cleanname(askedname) -- or cleanname          names.load(reload)          local list = heuristic(askedname,weight,style,width,variant,true) @@ -1355,7 +1354,7 @@ function names.collectspec(askedname,reload,all)      return names.collect(name,weight,style,width,variant,reload,all)  end -function names.resolvespec(askedname,sub) +function names.resolvespec(askedname,sub) -- redefined later      local found = names.specification(names.splitspec(askedname))      if found then          return found.filename, found.subfont and found.rawname @@ -1375,6 +1374,7 @@ function names.collectfiles(askedname,reload) -- no all  --~             if find(lower(basename(s.filename)),askedname) then              if find(cleanname(basename(s.filename)),askedname) then                  list[#list+1] = s +              end          end          return list @@ -1514,3 +1514,89 @@ function names.getlookups(pattern,name,reload)      end      return lastlookups  end + +-- The following is new ... watch the overload! + +local specifications = allocate() +names.specifications = specifications + +-- files = { +--     name = "antykwapoltawskiego", +--     list = { +--         ["AntPoltLtCond-Regular.otf"] = { +--          -- name   = "antykwapoltawskiego", +--             style  = "regular", +--             weight = "light", +--             width  = "condensed", +--         }, +--     }, +-- } + +function names.register(files) +    if files then +        local list, commonname = files.list, files.name +        if list then +            local n, m = 0, 0 +            for filename, filespec in next, list do +                local name = lower(filespec.name or commonname) +                if name and name ~= "" then +                    local style    = lower(filespec.style   or "normal") +                    local width    = lower(filespec.width   or "normal") +                    local weight   = lower(filespec.weight  or "normal") +                    local variant  = lower(filespec.variant or "normal") +                    local weights  = specifications[name  ] if not weights  then weights  = { } specifications[name  ] = weights  end +                    local styles   = weights       [weight] if not styles   then styles   = { } weights       [weight] = styles   end +                    local widths   = styles        [style ] if not widths   then widths   = { } styles        [style ] = widths   end +                    local variants = widths        [width ] if not variants then variants = { } widths        [width ] = variants end +                    variants[variant] = filename +                    n = n + 1 +                else +                    m = m + 1 +                end +            end +            if trace_specifications then +                report_names("%s filenames registered, %s filenames rejected",n,m) +            end +        end +    end +end + +function names.registered(name,weight,style,width,variant) +    local ok = specifications[name] +    ok = ok and (ok[weight  and weight  ~= "" and weight  or "normal"] or ok[normal]) +    ok = ok and (ok[style   and style   ~= "" and style   or "normal"] or ok[normal]) +    ok = ok and (ok[width   and width   ~= "" and width   or "normal"] or ok[normal]) +    ok = ok and (ok[variant and variant ~= "" and variant or "normal"] or ok[normal]) +    -- +    -- todo: same fallbacks as with database +    -- +    if ok then +        return { +            filename = ok, +            subname  = "", +         -- rawname  = nil, +        } +    end +end + +function names.resolvespec(askedname,sub) -- overloads previous definition +    local name, weight, style, width, variant = names.splitspec(askedname) +    local found = names.registered(name,weight,style,width,variant) +    if found and found.filename then +        if trace_specifications then +            report_names("resolved by registered names: %s -> %s",askedname,found.filename) +        end +        return found.filename, found.subname, found.rawname +    else +        found = names.specification(name,weight,style,width,variant) +        if found and found.filename then +            if trace_specifications then +                report_names("resolved by font database: %s -> %s",askedname,found.filename) +            end +            return found.filename, found.subfont and found.rawname +        end +    end +    if trace_specifications then +        report_names("unresolved: %s",askedname) +    end +end diff --git a/tex/context/base/s-fnt-28.tex b/tex/context/base/s-fnt-28.tex new file mode 100644 index 000000000..839c7d4ae --- /dev/null +++ b/tex/context/base/s-fnt-28.tex @@ -0,0 +1,46 @@ +%D \module +%D   [      file=s-fnt-28, +%D        version=2010.09.22, +%D          title=\CONTEXT\ Style File, +%D       subtitle=Tracing Names, +%D         author=Hans Hagen, +%D           date=\currentdate, +%D      copyright=PRAGMA-ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\startluacode +    function fonts.tracers.files(goodyfile) +        local goodies = fonts.goodies.get(goodyfile) +        if goodies then +            local files = goodies.files +            if files and files.list then +                for filename, specification in table.sortedpairs(files.list) do +                    context.start() +                    context.dontleavehmode() +                    context.definedfont{ filename .. "*default" } +                    context("%s-%s-%s-%s-%s", +                        specification.name    or files.name, +                        specification.weight  or "normal", +                        specification.style   or "normal", +                        specification.width   or "normal", +                        specification.variant or "normal") +                    context.par() +                    context.stop() +                end +            end +        end +    end +\stopluacode + +\doifnotmode{demo}{\endinput} + +\starttext + +    \loadfontgoodies[antykwapoltawskiego] + +    \ctxlua{fonts.tracers.files("antykwapoltawskiego")} + +\stoptext diff --git a/tex/context/base/sort-ini.lua b/tex/context/base/sort-ini.lua index 386f1a45f..5cecafb6e 100644 --- a/tex/context/base/sort-ini.lua +++ b/tex/context/base/sort-ini.lua @@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['sort-ini'] = {  -- todo: cleanup splits (in other modules)  local utf = unicode.utf8 -local gsub, rep, sort, concat = string.gsub, string.rep, table.sort, table.concat +local gsub, rep, sub, sort, concat = string.gsub, string.rep, string.sub, table.sort, table.concat  local utfbyte, utfchar = utf.byte, utf.char  local utfcharacters, utfvalues, strcharacters = string.utfcharacters, string.utfvalues, string.characters  local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset @@ -32,12 +32,11 @@ local replacementoffset = 0x10000 -- frozen  local digitsoffset      = 0x20000 -- frozen  local digitsmaximum     = 0xFFFFF -- frozen -local lccodes     = characters.lccodes -local shcodes     = characters.shcodes -local lcchars     = characters.lcchars -local shchars     = characters.shchars +local lccodes           = characters.lccodes +local lcchars           = characters.lcchars +local shchars           = characters.shchars -local variables   = interfaces.variables +local variables         = interfaces.variables  sorters = {      comparers   = comparers, @@ -60,6 +59,8 @@ local constants = sorters.constants  local data, language, method  local replacements, mappings, entries, orders, lower, upper +--~ local shchars = characters.specialchars -- no specials for AE and ae +  local mte = {      __index = function(t,k)          local el @@ -70,6 +71,9 @@ local mte = {          if not el then              local l = shchars[k]              if l and l ~= k then +                if #l > 0 then +                    l = sub(l,1,1) +                end                  el = rawget(t,l)                  if not el then                      l = lower[k] or lcchars[l] @@ -89,42 +93,81 @@ local function preparetables(data)      local orders, lower, method, mappings = data.orders, data.lower, data.method, { }      for i=1,#orders do          local oi = orders[i] -        mappings[oi] = 2*i +        mappings[oi] = { 2*i }      end      local delta = (method == variables.before or method == variables.first or method == variables.last) and -1 or 1      local mtm = {          __index = function(t,k)              local n              if k then +                if trace_tests then +                    report_sorters("simplifing character 0x%04x %s",utfbyte(k),k) +                end                  local l = lower[k] or lcchars[k]                  if l then +                    if trace_tests then +                        report_sorters(" 1 lower: %s",l) +                    end                      local ml = rawget(t,l)                      if ml then -                        n = ml + delta -- first +                        n = { } +                        for i=1,#ml do +                            n[#n+1] = ml[i] + delta +                        end +                        if trace_tests then +                            report_sorters(" 2 order: %s",concat(n," ")) +                        end                      end                  end                  if not n then -                    l = shchars[k] -                    if l and l ~= k then -                        local ml = rawget(t,l) -                        if ml then -                            n = ml -- first or last -                        else -                            l = lower[l] or lcchars[l] -                            if l then -                                local ml = rawget(t,l) +                    local s = shchars[k] +                    if s and s ~= k then -- weird test +                        if trace_tests then +                            report_sorters(" 3 shape: %s",s) +                        end +                        n = { } +                        for l in utfcharacters(s) do +                            local ml = rawget(t,l) +                            if ml then +                                if trace_tests then +                                    report_sorters(" 4 keep: %s",l) +                                end                                  if ml then -                                    n = ml + delta +                                    for i=1,#ml do +                                        n[#n+1] = ml[i] +                                    end +                                end +                            else +                                l = lower[l] or lcchars[l] +                                if l then +                                    if trace_tests then +                                        report_sorters(" 5 lower: %s",l) +                                    end +                                    local ml = rawget(t,l) +                                    if ml then +                                        for i=1,#ml do +                                            n[#n+1] = ml[i] + delta +                                        end +                                    end                                  end                              end                          end +                        if trace_tests then +                            report_sorters(" 6 order: %s",concat(n," ")) +                        end +                    end +                    if not n then +                        n = { 0 } +                        if trace_tests then +                            report_sorters(" 7 order: 0") +                        end                      end -                end -                if not n then -                    n = 0                  end              else -                n = 0 +                n =  { 0 } +                if trace_tests then +                    report_sorters(" 8 order: 0") +                end              end              rawset(t,k,n)              return n @@ -317,7 +360,11 @@ function splitters.utf(str) -- we could append m and u but this is cleaner, s is              l = l and utfbyte(l) or lccodes[b]              if l ~= b then l = l - 1 end -- brrrr, can clash              n = n + 1 -            s[n], u[n], m[n], c[n] = sc, b, l, mappings[sc] +            s[n], u[n], m[n] = sc, b, l +            local msc = mappings[sc] +            for i=1,#msc do +                c[#c+1] = msc[i] +            end          end      elseif method == variables.first then          for sc in utfcharacters(str) do @@ -326,13 +373,21 @@ function splitters.utf(str) -- we could append m and u but this is cleaner, s is              l = l and utfbyte(l) or lccodes[b]              if l ~= b then l = l + 1 end -- brrrr, can clash              n = n + 1 -            s[n], u[n], m[n], c[n] = sc, b, l, mappings[sc] +            s[n], u[n], m[n] = sc, b, l +            local msc = mappings[sc] +            for i=1,#msc do +                c[#c+1] = msc[i] +            end          end      else          for sc in utfcharacters(str) do              local b = utfbyte(sc)              n = n + 1 -            s[n], u[n], m[n], c[n] = sc, b, mappings[sc], b +            s[n], u[n], c[n] = sc, b, b +            local msc = mappings[sc] +            for i=1,#msc do +                m[#m+1] = msc[i] +            end          end      end      local t = { s = s, m = m, u = u, c = c } @@ -373,9 +428,12 @@ end  function sorters.sort(entries,cmp)      if trace_tests then +        for i=1,#entries do +            report_sorters("entry %s",table.serialize(entries[i].split,i)) +        end          sort(entries,function(a,b)              local r = cmp(a,b) -            report_sorters("%s %s %s (%s)",pack(a),(not r and "?") or (r<0 and "<") or (r>0 and ">") or "=",pack(b),r) +            report_sorters("%s %s %s",pack(a),(not r and "?") or (r<0 and "<") or (r>0 and ">") or "=",pack(b))              return r == -1          end)          local s diff --git a/tex/context/fonts/antykwapoltawskiego.lfg b/tex/context/fonts/antykwapoltawskiego.lfg new file mode 100644 index 000000000..ee4ea6dcd --- /dev/null +++ b/tex/context/fonts/antykwapoltawskiego.lfg @@ -0,0 +1,213 @@ +return { +    name = "antykwapoltawskiego", +    version = "1.00", +    comment = "Goodies that complement Antykwa Poltawskiego, one of Mojca's favourites", +    author = "Hans & Mojca", +    copyright = "ConTeXt development team", +    files = { +        name = "antykwapoltawskiego", -- shared +        list = { +            ["AntPoltLtCond-Regular.otf"] = { +             -- name   = "antykwapoltawskiego", +                style  = "regular", +                weight = "light", +                width  = "condensed", +            }, +            ["AntPoltLtCond-Italic.otf"] = { +                style  = "italic", +                weight = "light", +                width  = "condensed", +            }, +            ["AntPoltCond-Regular.otf"] = { +                style  = "regular", +                weight = "normal", +                width  = "condensed", +            }, +            ["AntPoltCond-Italic.otf"] = { +                style  = "italic", +                weight = "normal", +                width  = "condensed", +            }, +            ["AntPoltLtCond-Bold.otf"] = { +                style  = "regular", +                weight = "medium", +                width  = "condensed", +            }, +            ["AntPoltLtCond-BoldItalic.otf"] = { +                style  = "italic", +                weight = "medium", +                width  = "condensed", +            }, +            ["AntPoltCond-Bold.otf"] = { +                style  = "regular", +                weight = "bold", +                width  = "condensed", +            }, +            ["AntPoltCond-BoldItalic.otf"] = { +                style  = "italic", +                weight = "bold", +                width  = "condensed", +            }, +            ["AntPoltLtSemiCond-Regular.otf"] = { +                style  = "regular", +                weight = "light", +                width  = "semicondensed", +            }, +            ["AntPoltLtSemiCond-Italic.otf"] = { +                style  = "italic", +                weight = "light", +                width  = "semicondensed", +            }, +            ["AntPoltSemiCond-Regular.otf"] = { +                style  = "regular", +                weight = "normal", +                width  = "semicondensed", +            }, +            ["AntPoltSemiCond-Italic.otf"] = { +                style  = "italic", +                weight = "normal", +                width  = "semicondensed", +            }, +            ["AntPoltLtSemiCond-Bold.otf"] = { +                style  = "regular", +                weight = "medium", +                width  = "semicondensed", +            }, +            ["AntPoltLtSemiCond-BoldItalic.otf"] = { +                style  = "italic", +                weight = "medium", +                width  = "semicondensed", +            }, +            ["AntPoltSemiCond-Bold.otf"] = { +                style  = "regular", +                weight = "bold", +                width  = "semicondensed", +            }, +            ["AntPoltSemiCond-BoldItalic.otf"] = { +                style  = "italic", +                weight = "bold", +                width  = "semicondensed", +            }, +            ["AntPoltLt-Regular.otf"] = { +                style  = "regular", +                weight = "light", +                width  = "normal", +            }, +            ["AntPoltLt-Italic.otf"] = { +                style  = "italic", +                weight = "light", +                width  = "normal", +            }, +            ["AntPolt-Regular.otf"] = { +                style  = "regular", +                weight = "normal", +                width  = "normal", +            }, +            ["AntPolt-Italic.otf"] = { +                style  = "italic", +                weight = "normal", +                width  = "normal", +            }, +            ["AntPoltLt-Bold.otf"] = { +                style  = "regular", +                weight = "medium", +                width  = "normal", +            }, +            ["AntPoltLt-BoldItalic.otf"] = { +                style  = "italic", +                weight = "medium", +                width  = "normal", +            }, +            ["AntPolt-Bold.otf"] = { +                style  = "regular", +                weight = "bold", +                width  = "normal", +            }, +            ["AntPolt-BoldItalic.otf"] = { +                style  = "italic", +                weight = "bold", +                width  = "normal", +            }, +            ["AntPoltLtSemiExpd-Regular.otf"] = { +                style  = "regular", +                weight = "light", +                width  = "semiexpanded", +            }, +            ["AntPoltLtSemiExpd-Italic.otf"] = { +                style  = "italic", +                weight = "light", +                width  = "semiexpanded", +            }, +            ["AntPoltSemiExpd-Regular.otf"] = { +                style  = "regular", +                weight = "normal", +                width  = "semiexpanded", +            }, +            ["AntPoltSemiExpd-Italic.otf"] = { +                style  = "italic", +                weight = "normal", +                width  = "semiexpanded", +            }, +            ["AntPoltLtSemiExpd-Bold.otf"] = { +                style  = "regular", +                weight = "medium", +                width  = "semiexpanded", +            }, +            ["AntPoltLtSemiExpd-BoldItalic.otf"] = { +                style  = "italic", +                weight = "medium", +                width  = "semiexpanded", +            }, +            ["AntPoltSemiExpd-Bold.otf"] = { +                style  = "regular", +                weight = "bold", +                width  = "semiexpanded", +            }, +            ["AntPoltSemiExpd-BoldItalic.otf"] = { +                style  = "italic", +                weight = "bold", +                width  = "semiexpanded", +            }, +            ["AntPoltLtExpd-Regular.otf"] = { +                style  = "regular", +                weight = "light", +                width  = "expanded", +            }, +            ["AntPoltLtExpd-Italic.otf"] = { +                style  = "italic", +                weight = "light", +                width  = "expanded", +            }, +            ["AntPoltExpd-Regular.otf"] = { +                style  = "regular", +                width  = "expanded", +                weight = "normal", +            }, +            ["AntPoltExpd-Italic.otf"] = { +                style  = "italic", +                width  = "expanded", +                weight = "normal", +            }, +            ["AntPoltLtExpd-Bold.otf"] = { +                style  = "regular", +                width  = "expanded", +                weight = "medium", +            }, +            ["AntPoltLtExpd-BoldItalic.otf"] = { +                style  = "italic", +                width  = "expanded", +                weight = "medium", +            }, +            ["AntPoltExpd-Bold.otf"] = { +                style  = "regular", +                weight = "bold", +                width  = "expanded", +            }, +            ["AntPoltExpd-BoldItalic.otf"] = { +                style  = "italic", +                weight = "bold", +                width  = "expanded", +            }, +        }, +    }, +} diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index 92ff5ac7e..d785622ec 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@  -- merged file : luatex-fonts-merged.lua  -- parent file : luatex-fonts.lua --- merge date  : 09/22/10 12:33:39 +-- merge date  : 09/23/10 01:03:41  do -- begin closure to overcome local limits and interference @@ -3155,6 +3155,10 @@ fonts.processors = fonts.processors or {  fonts.manipulators = fonts.manipulators or {  } +fonts.tracers = fonts.tracers or { +} + +  fonts.definers                     = fonts.definers                     or { }  fonts.definers.specifiers          = fonts.definers.specifiers          or { }  fonts.definers.specifiers.synonyms = fonts.definers.specifiers.synonyms or { } @@ -5775,7 +5779,7 @@ end  function otf.load(filename,format,sub,featurefile)      local name = file.basename(file.removesuffix(filename))      local attr = lfs.attributes(filename) -    local size, time = attr.size or 0, attr.modification or 0 +    local size, time = attr and attr.size or 0, attr and attr.modification or 0      if featurefile then          name = name .. "@" .. file.removesuffix(file.basename(featurefile))      end  | 
