summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--luaotfload-auxiliary.lua12
-rw-r--r--luaotfload-features.lua11
-rw-r--r--luaotfload-merged.lua95
-rw-r--r--luaotfload.dtx6
4 files changed, 85 insertions, 39 deletions
diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua
index c08f775..be380e3 100644
--- a/luaotfload-auxiliary.lua
+++ b/luaotfload-auxiliary.lua
@@ -31,6 +31,7 @@ local stringlower = string.lower
local stringformat = string.format
local stringgsub = string.gsub
local stringbyte = string.byte
+local stringfind = string.find
-----------------------------------------------------------------------
--- font patches
@@ -64,18 +65,17 @@ local add_fontdata_fallbacks = function (fontdata)
else --- otf
metadata = fontdata.shared.rawdata.metadata
+ fontdata.name = fontdata.name
+ or fontdata.fullname
+ or fontdata.psname
fontdata.units = fontdata.units_per_em
+ fontdata.size = fontdata.size or fontparameters.size
local resources = fontdata.resources
- --- the next line is a hack that fixes scaling of fonts with
- --- non-standard em-sizes (most ms fonts have 2048, others
- --- come with 256)
- --fontdata.size = fontparameters.size * fontdata.units / 1000
--- for legacy fontspec.lua and unicode-math.lua
fontdata.shared.otfdata = {
pfminfo = { os2_capheight = metadata.pfminfo.os2_capheight },
metadata = { ascent = metadata.ascent },
}
- --fontdata.shared.otfdata.metadata = metadata --- brr, that’s meta indeed
--- for microtype and fontspec
local fake_features = { } -- wrong: table.copy(resources.features)
setmetatable(fake_features, { __index = function (tab, idx)
@@ -98,8 +98,6 @@ end
--if config.luaotfload.compatibility == true then
if true then
- --- this will cause the output pdf to be garbled
- --- in pdf.js
luatexbase.add_to_callback(
"luaotfload.patch_font",
add_fontdata_fallbacks,
diff --git a/luaotfload-features.lua b/luaotfload-features.lua
index 8852596..220b362 100644
--- a/luaotfload-features.lua
+++ b/luaotfload-features.lua
@@ -337,7 +337,9 @@ local import_values = {
--- That’s what the 1.x parser did, not quite as graciously,
--- with an array of branch expressions.
-- "style", "optsize",--> from slashed notation; handled otherwise
- "lookup", "sub", "mode",
+ { "lookup", false },
+ { "sub", false },
+ { "mode", true },
}
local lookup_types = { "anon", "file", "name", "path" }
@@ -411,11 +413,14 @@ local handle_request = function (specification)
end
for n=1, #import_values do
- local feat = import_values[n]
+ local feat = import_values[n][1]
+ local keep = import_values[n][2]
local newvalue = request.features[feat]
if newvalue then
specification[feat] = request.features[feat]
- --request.features[feat] = nil
+ if not keep then
+ request.features[feat] = nil
+ end
end
end
diff --git a/luaotfload-merged.lua b/luaotfload-merged.lua
index a0a58cc..008b02a 100644
--- a/luaotfload-merged.lua
+++ b/luaotfload-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 05/09/13 15:23:31
+-- merge date : 05/10/13 15:05:28
do -- begin closure to overcome local limits and interference
@@ -5046,7 +5046,7 @@ local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
otf.glists={ "gsub","gpos" }
-otf.version=2.742
+otf.version=2.743
otf.cache=containers.define("fonts","otf",otf.version,true)
local fontdata=fonts.hashes.identifiers
local chardata=characters and characters.data
@@ -5065,6 +5065,7 @@ local usemetatables=false
local packdata=true
local syncspace=true
local forcenotdef=false
+local includesubfonts=false
local wildcard="*"
local default="dflt"
local fontloaderfields=fontloader.fields
@@ -5191,8 +5192,8 @@ local ordered_enhancers={
"check glyphs",
"check metadata",
"check extra features",
- "add duplicates",
"check encoding",
+ "add duplicates",
"cleanup tables",
}
local actions=allocate()
@@ -5536,7 +5537,7 @@ actions["prepare glyphs"]=function(data,filename,raw)
local duplicates=resources.duplicates
local variants=resources.variants
if rawsubfonts then
- metadata.subfonts={}
+ metadata.subfonts=includesubfonts and {}
properties.cidinfo=rawcidinfo
if rawcidinfo.registry then
local cidmap=fonts.cid.getmap(rawcidinfo)
@@ -5547,7 +5548,9 @@ actions["prepare glyphs"]=function(data,filename,raw)
for cidindex=1,#rawsubfonts do
local subfont=rawsubfonts[cidindex]
local cidglyphs=subfont.glyphs
- metadata.subfonts[cidindex]=somecopy(subfont)
+ if includesubfonts then
+ metadata.subfonts[cidindex]=somecopy(subfont)
+ end
for index=0,subfont.glyphcnt-1 do
local glyph=cidglyphs[index]
if glyph then
@@ -5556,6 +5559,10 @@ actions["prepare glyphs"]=function(data,filename,raw)
if not unicode or unicode==-1 or unicode>=criterium then
unicode=cidunicodes[index]
end
+ if unicode and descriptions[unicode] then
+ report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+ unicode=-1
+ end
if not unicode or unicode==-1 or unicode>=criterium then
if not name then
name=format("u%06X",private)
@@ -5659,7 +5666,8 @@ actions["check encoding"]=function(data,filename,raw)
local resources=data.resources
local properties=data.properties
local unicodes=resources.unicodes
- local indices=resources.indices
+ local indices=resources.indices
+ local duplicates=resources.duplicates
local mapdata=raw.map or {}
local unicodetoindex=mapdata and mapdata.map or {}
local encname=lower(data.enc_name or mapdata.enc_name or "")
@@ -5671,10 +5679,35 @@ actions["check encoding"]=function(data,filename,raw)
for unicode,index in next,unicodetoindex do
if unicode<=criterium and not descriptions[unicode] then
local parent=indices[index]
- if parent then
- report_otf("weird, unicode %U points to %U with index %H",unicode,parent,index)
- else
+ if not parent then
report_otf("weird, unicode %U points to nowhere with index %H",unicode,index)
+ else
+ local parentdescription=descriptions[parent]
+ if parentdescription then
+ local altuni=parentdescription.altuni
+ if not altuni then
+ altuni={ { unicode=parent } }
+ parentdescription.altuni=altuni
+ duplicates[parent]={ unicode }
+ else
+ local done=false
+ for i=1,#altuni do
+ if altuni[i].unicode==parent then
+ done=true
+ break
+ end
+ end
+ if not done then
+ altuni[#altuni+1]={ unicode=parent }
+ table.insert(duplicates[parent],unicode)
+ end
+ end
+ if trace_loading then
+ report_otf("weird, unicode %U points to nowhere with index %H",unicode,index)
+ end
+ else
+ report_otf("weird, unicode %U points to %U with index %H",unicode,index)
+ end
end
end
end
@@ -8468,29 +8501,18 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
end
head,current=insert_node_after(head,current,copy_node(start))
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char))
end
start=start.next
end
- local start=components
- while start and start.id==glyph_code do
- local char=start.char
- if marks[char] then
- start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex)
- if trace_marks then
- logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
- end
- else
- break
- end
- start=start.next
- end
- local start=base.next
- while start and start.id==glyph_code do
+ local start=current.next
+ while start and start.id==glyph_code do
local char=start.char
if marks[char] then
start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex)
if trace_marks then
- logwarning("%s: find mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
+ logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])
end
else
break
@@ -10702,6 +10724,12 @@ local function packdata(data)
end
end
end
+ local altuni=description.altuni
+ if altuni then
+ for i=1,#altuni do
+ altuni[i]=pack_flat(altuni[i])
+ end
+ end
end
local lookups=data.lookups
if lookups then
@@ -10806,6 +10834,10 @@ local function packdata(data)
mlookups[tag]=pack_normal(mlookup)
end
end
+ local altuni=description.altuni
+ if altuni then
+ description.altuni=pack_normal(altuni)
+ end
end
local lookups=data.lookups
if lookups then
@@ -10997,6 +11029,19 @@ local function unpackdata(data)
end
end
end
+ local altuni=description.altuni
+ if altuni then
+ local altuni=tables[altuni]
+ if altuni then
+ description.altuni=altuni
+ for i=1,#altuni do
+ local tv=tables[altuni[i]]
+ if tv then
+ altuni[i]=tv
+ end
+ end
+ end
+ end
end
local lookups=data.lookups
if lookups then
diff --git a/luaotfload.dtx b/luaotfload.dtx
index 0d062a6..75d1221 100644
--- a/luaotfload.dtx
+++ b/luaotfload.dtx
@@ -133,7 +133,7 @@ and the derived files
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont[
- Numbers = OldStyle,
+% Numbers = OldStyle, %% buggy with font cache
Ligatures = TeX,
BoldFont = {Linux Libertine O Bold},
ItalicFont = {Linux Libertine O Italic},
@@ -407,7 +407,7 @@ and the derived files
% \fileent{GFSBodoni.otf}, and
% \fileent{PTZ56F.ttf}.
%
-% \subsection{\hologo{XeTeX} Compatibility Layer}
+% \subsection{Compatibility Layer}
%
% In addition to the regular prefixed requests, \identifier{luaotfload}
% accepts loading fonts the \XETEX way.
@@ -1720,8 +1720,6 @@ local patch_defined_font = function (specification, size, id)
return tfmdata
end
-caches.compilemethod = "both"
-
reset_callback("define_font")
% \end{macrocode}