diff options
| -rw-r--r-- | luaotfload-letterspace.lua | 45 | 
1 files changed, 27 insertions, 18 deletions
| diff --git a/luaotfload-letterspace.lua b/luaotfload-letterspace.lua index aa89651..da78864 100644 --- a/luaotfload-letterspace.lua +++ b/luaotfload-letterspace.lua @@ -62,14 +62,11 @@ kernfont.keeptogether    = false  --- node-ini  ----------------------------------------------------------------------- -nodes              = nodes or { } --- should be present with luaotfload -local bothways     = function (t) return table.swapped (t, t) end - -local kerncodes = bothways({ -  [0] = "fontkern", -  [1] = "userkern", -  [2] = "accentkern", -}) +local bothways  = function (t) return table.swapped (t, t) end +local kerncodes = bothways { [0] = "fontkern" +                           , [1] = "userkern" +                           , [2] = "accentkern" +                           }  kerncodes.kerning    = kerncodes.fontkern --- idiosyncrasy  local kerning_code   = kerncodes.kerning @@ -144,7 +141,7 @@ if not parameters then        return parameters      end    end) -  fonthashes.parameters = parameters +  --fonthashes.parameters = parameters  end  if not chardata then @@ -179,7 +176,7 @@ if not quaddata then        return quad      end    end) -  fonthashes.quads = quaddata +  --fonthashes.quads = quaddata  end  ---=================================================================--- @@ -408,14 +405,12 @@ kerncharacters = function (head)    return head, done  end -kernfont.handler = kerncharacters -  ---=================================================================---  ---                         integration  ---=================================================================---  --- kernfont_callback : fontwise ---- · callback:     kernfont.handler +--- · callback:     kerncharacters  --- · enabler:      enablefontkerning  --- · disabler:     disablefontkerning @@ -447,7 +442,7 @@ end  --- now for the simplistic variant  --- unit -> bool  local enablefontkerning = function ( ) -  return add_processor( kernfont.handler +  return add_processor( kerncharacters                        , "typesetters.kernfont"                        , "pre_linebreak_filter"                        , "hpack_filter") @@ -458,15 +453,29 @@ local disablefontkerning = function ( )    return remove_processor "typesetters.kernfont"  end ---- fontwise kerning uses a font property for passing along the ---- letterspacing factor +--[[doc-- + +  Fontwise kerning is enabled via the “kernfactor” option at font +  definition time. Unlike the Context implementation which relies on +  Luatex attributes, it uses a font property for passing along the +  letterspacing factor of a node. + +  The callback is activated the first time a letterspaced font is +  requested and stays active until the end of the run. Since the font +  is a property of individual glyphs, every glyph in the entire +  document must be checked for the kern property. This is quite +  inefficient compared to Context’s attribute based approach, but Xetex +  compatibility reduces our options significantly. + +--doc]]-- +  local fontkerning_enabled = false --- callback state  --- fontobj -> float -> unit  local initializefontkerning = function (tfmdata, factor)    if factor ~= "max" then -    factor = tonumber(factor) or 0 +    factor = tonumber (factor) or 0    end    if factor == "max" or factor ~= 0 then      local fontproperties = tfmdata.properties @@ -475,7 +484,7 @@ local initializefontkerning = function (tfmdata, factor)        fontproperties.kerncharacters = factor      end      if not fontkerning_enabled then -      fontkerning_enabled = enablefontkerning() +      fontkerning_enabled = enablefontkerning ()      end    end  end | 
