From 67de007ca8a495a935865f960bd5e44d57b090ec Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Thu, 23 Sep 2010 10:11:20 +0300
Subject: beta 2010.09.23 01:03

---
 tex/context/base/char-def.lua               |   2 +-
 tex/context/base/char-ini.lua               |  75 +++++++---
 tex/context/base/cont-new.tex               |   2 +-
 tex/context/base/context.tex                |   2 +-
 tex/context/base/font-gds.lua               |  23 +++
 tex/context/base/font-ini.lua               |   4 +
 tex/context/base/font-otf.lua               |   2 +-
 tex/context/base/font-syn.lua               |  96 ++++++++++++-
 tex/context/base/s-fnt-28.tex               |  46 ++++++
 tex/context/base/sort-ini.lua               | 110 ++++++++++----
 tex/context/fonts/antykwapoltawskiego.lfg   | 213 ++++++++++++++++++++++++++++
 tex/generic/context/luatex-fonts-merged.lua |   8 +-
 12 files changed, 526 insertions(+), 57 deletions(-)
 create mode 100644 tex/context/base/s-fnt-28.tex
 create mode 100644 tex/context/fonts/antykwapoltawskiego.lfg

(limited to 'tex')

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
-- 
cgit v1.2.3