Skip to content
This repository has been archived by the owner on Sep 27, 2019. It is now read-only.

Commit

Permalink
Merge pull request #352 from phi-gamma/master
Browse files Browse the repository at this point in the history
fixes
  • Loading branch information
phi-gamma committed May 2, 2016
2 parents f502d52 + 687430a commit c038e21
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 37 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Change History
* Adapt packaging to changed upstream file layout.
* Remove support for builtin Fontforge libraries (this includes the PFA,
PFB, DFONT, and feature file readers).
* Allow configuration of anonymous lookups.

2015/12/09, luaotfload v2.6
* Add ``sign`` target to makefile for automated package signing.
Expand Down
16 changes: 12 additions & 4 deletions src/fontloader/misc/fontloader-font-afm.lua
Original file line number Diff line number Diff line change
Expand Up @@ -228,15 +228,16 @@ do

-- old font loader

local fontloader = fontloader
local fontloader = fontloader
local get_indexes_old = false

if fontloader then

local font_to_table = fontloader.to_table
local open_font = fontloader.open
local close_font = fontloader.close

local function get_indexes_old(data,pfbname)
get_indexes_old = function(data,pfbname)
local pfbblob = open_font(pfbname)
if pfbblob then
local characters = data.characters
Expand Down Expand Up @@ -394,7 +395,7 @@ do
end
end

if fontloader then
if get_indexes_old then

afm.use_new_indexer = true
get_indexes_new = get_indexes
Expand Down Expand Up @@ -598,7 +599,15 @@ unify = function(data, filename)
resources.private = private
end

local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
local noflags = { false, false, false, false }

afm.experimental_normalize = false

normalize = function(data)
if type(afm.experimental_normalize) == "function" then
afm.experimental_normalize(data)
end
end

fixnames = function(data)
Expand All @@ -616,7 +625,6 @@ fixnames = function(data)
end
end


--[[ldx--
<p>These helpers extend the basic table with extra ligatures, texligatures
and extra kerns. This saves quite some lookups later.</p>
Expand Down
4 changes: 2 additions & 2 deletions src/fontloader/misc/fontloader-font-dsp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1144,8 +1144,8 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
end
for i=1,nofbaserecords do
local components = baserecords[i]
local b = basecoverage[i]
if components then
local b = basecoverage[i]
for c=1,#components do
local classes = components[c]
if classes then
Expand All @@ -1160,7 +1160,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
end
end
end
components[i] = classes
-- components[i] = classes
end
end
end
Expand Down
8 changes: 5 additions & 3 deletions src/fontloader/misc/fontloader-font-otj.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1202,9 +1202,11 @@ local function inject_everything(head,where)
else
-- local i = rawget(p,"emptyinjections")
local i = p.emptyinjections
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
if i then
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
end
end
end
if done then
Expand Down
2 changes: 1 addition & 1 deletion src/fontloader/misc/fontloader-font-otl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ local report_otf = logs.reporter("fonts","otf loading")
local fonts = fonts
local otf = fonts.handlers.otf

otf.version = 3.018 -- beware: also sync font-mis.lua and in mtx-fonts
otf.version = 3.019 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otl", otf.version, true)

local otfreaders = otf.readers
Expand Down
2 changes: 1 addition & 1 deletion src/fontloader/misc/fontloader-font-ots.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3347,7 +3347,7 @@ local function txtdirstate(start,stack,top,rlparmode)
new = rlparmode
end
if trace_directions then
report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),topstack)
report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),top)
end
return getnext(start), top, new
end
Expand Down
2 changes: 1 addition & 1 deletion src/fontloader/misc/fontloader-l-file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ local deslasher = lpeg.replacer(S("\\/")^1,"/")

function file.join(one, two, three, ...)
if not two then
return one == "" and one or lpegmatch(stripper,one)
return one == "" and one or lpegmatch(reslasher,one)
end
if one == "" then
return lpegmatch(stripper,three and concat({ two, three, ... },"/") or two)
Expand Down
30 changes: 19 additions & 11 deletions src/fontloader/runtime/fontloader-reference.lua
Original file line number Diff line number Diff line change
@@ -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 : 04/27/16 10:18:10
-- merge date : 05/01/16 09:52:32

do -- begin closure to overcome local limits and interference

Expand Down Expand Up @@ -2545,7 +2545,7 @@ local reslasher=lpeg.replacer(S("\\/"),"/")
local deslasher=lpeg.replacer(S("\\/")^1,"/")
function file.join(one,two,three,...)
if not two then
return one=="" and one or lpegmatch(stripper,one)
return one=="" and one or lpegmatch(reslasher,one)
end
if one=="" then
return lpegmatch(stripper,three and concat({ two,three,... },"/") or two)
Expand Down Expand Up @@ -7114,11 +7114,12 @@ end
local get_indexes
do
local fontloader=fontloader
local get_indexes_old=false
if fontloader then
local font_to_table=fontloader.to_table
local open_font=fontloader.open
local close_font=fontloader.close
local function get_indexes_old(data,pfbname)
get_indexes_old=function(data,pfbname)
local pfbblob=open_font(pfbname)
if pfbblob then
local characters=data.characters
Expand Down Expand Up @@ -7235,7 +7236,7 @@ do
end
end
end
if fontloader then
if get_indexes_old then
afm.use_new_indexer=true
get_indexes_new=get_indexes
get_indexes=function(data,pfbname)
Expand Down Expand Up @@ -7415,7 +7416,13 @@ unify=function(data,filename)
resources.marks={}
resources.private=private
end
local everywhere={ ["*"]={ ["*"]=true } }
local noflags={ false,false,false,false }
afm.experimental_normalize=false
normalize=function(data)
if type(afm.experimental_normalize)=="function" then
afm.experimental_normalize(data)
end
end
fixnames=function(data)
for k,v in next,data.descriptions do
Expand Down Expand Up @@ -12678,8 +12685,8 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
end
for i=1,nofbaserecords do
local components=baserecords[i]
local b=basecoverage[i]
if components then
local b=basecoverage[i]
for c=1,#components do
local classes=components[c]
if classes then
Expand All @@ -12694,7 +12701,6 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
end
end
end
components[i]=classes
end
end
end
Expand Down Expand Up @@ -15639,7 +15645,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_de
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
otf.version=3.018
otf.version=3.019
otf.cache=containers.define("fonts","otl",otf.version,true)
local otfreaders=otf.readers
local hashes=fonts.hashes
Expand Down Expand Up @@ -17657,9 +17663,11 @@ local function inject_everything(head,where)
end
else
local i=p.emptyinjections
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
setfield(prev,"replace",newkern(leftkern))
if i then
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
setfield(prev,"replace",newkern(leftkern))
end
end
end
if done then
Expand Down Expand Up @@ -21029,7 +21037,7 @@ local function txtdirstate(start,stack,top,rlparmode)
new=rlparmode
end
if trace_directions then
report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),topstack)
report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),top)
end
return getnext(start),top,new
end
Expand Down
41 changes: 27 additions & 14 deletions src/luaotfload-letterspace.lua
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ local kernfactors = { } --- fontid -> factor

local kerncharacters
kerncharacters = function (head)
local start, done = head, false
local start = head
local lastfont = nil
local keepligature = letterspace.keepligature --- function
local keeptogether = letterspace.keeptogether --- function
Expand Down Expand Up @@ -352,7 +352,6 @@ kerncharacters = function (head)
start = c
setfield(s, "components", nil)
free_node(s)
done = true
c = getfield (start, "components")
end
end
Expand All @@ -378,7 +377,6 @@ kerncharacters = function (head)
local shrunk = (getfield(spec,"shrink") * newwd) / wd
setfield(prev, "spec",
spec_injector(fillup, newwd, stretched, shrunk))
done = true
end

elseif pid == kern_code then
Expand All @@ -400,7 +398,6 @@ kerncharacters = function (head)
local prev_kern = getfield(prev, "kern")
prev_kern = prev_kern + quaddata[lastfont] * krn
setfield (prev, "kern", prev_kern)
done = true
end
end

Expand All @@ -411,16 +408,23 @@ kerncharacters = function (head)
if keeptogether and keeptogether(prev, start) then
-- keep 'm
elseif identifiers[lastfont] then
local kerns = chardata[lastfont] and chardata[lastfont][prevchar].kerns
local kern = kerns and kerns[lastchar] or 0
krn = kern + quaddata[lastfont]*krn -- here
insert_node_before(head,start,kern_injector(fillup,krn))
done = true
local lastfontchars = chardata[lastfont]
if lastfontchars then
local prevchardata = lastfontchars[prevchar]
if not prevchardata then
--- font doesn’t contain the glyph
else
local kern = 0
local kerns = prevchardata.kerns
if kerns then kern = kerns[lastchar] end
krn = kern + quaddata[lastfont]*krn -- here
insert_node_before(head,start,kern_injector(fillup,krn))
end
end
end
else
krn = quaddata[lastfont]*krn -- here
insert_node_before(head,start,kern_injector(fillup,krn))
done = true
end

elseif pid == disc_code then
Expand Down Expand Up @@ -477,10 +481,19 @@ kerncharacters = function (head)
and getid(prv) == glyph_code
and getfont(prv) == lastfont
then
local kern = 0
local prevchar = getchar(prv)
local lastchar = getchar(start)
local kerns = chardata[lastfont] and chardata[lastfont][prevchar].kerns
local kern = kerns and kerns[lastchar] or 0
local lastfontchars = chardata[lastfont]
if lastfontchars then
local prevchardata = lastfontchars[prevchar]
if not prevchardata then
--- font doesn’t contain the glyph
else
local kerns = prevchardata.kerns
if kerns then kern = kerns[lastchar] end
end
end
krn = kern + quaddata[lastfont]*krn -- here
else
krn = quaddata[lastfont]*krn -- here
Expand All @@ -496,7 +509,7 @@ kerncharacters = function (head)
start = getnext(start)
end
end
return head, done
return head
end

---=================================================================---
Expand Down Expand Up @@ -548,7 +561,7 @@ local enablefontkerning = function ( )
logreport ("term", 5, "letterspace",
"kerncharacters() invoked with node.direct interface \z
(``%s`` -> ``%s``)", tostring (hd), tostring (direct_hd))
local direct_hd, _done = kerncharacters (direct_hd)
local direct_hd = kerncharacters (direct_hd)
if not direct_hd then --- bad
logreport ("both", 0, "letterspace",
"kerncharacters() failed to return a valid new head")
Expand Down

0 comments on commit c038e21

Please sign in to comment.