summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2014-07-18 23:58:55 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2014-07-18 23:58:55 +0200
commit4482773d1e4bfc0105b478f7c0bfb8c5480af8a0 (patch)
treeab24ba765b87ffb6af7e7d8f1ed88d53e0703998 /src
parenta9a61c97b8e07294a2f362d1ac39a9ece15dc999 (diff)
parent120b557526db2a73cd3eab41c9eddf142778b684 (diff)
downloadluaotfload-4482773d1e4bfc0105b478f7c0bfb8c5480af8a0.tar.gz
Merge pull request #236 from phi-gamma/master
fixes & sync
Diffstat (limited to 'src')
-rw-r--r--src/luaotfload-fontloader.lua54
-rw-r--r--src/luaotfload-parsers.lua104
2 files changed, 89 insertions, 69 deletions
diff --git a/src/luaotfload-fontloader.lua b/src/luaotfload-fontloader.lua
index 09582f9..293a319 100644
--- a/src/luaotfload-fontloader.lua
+++ b/src/luaotfload-fontloader.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 07/14/14 19:25:59
+-- merge date : 07/18/14 14:12:32
do -- begin closure to overcome local limits and interference
@@ -1603,14 +1603,25 @@ local function identical(a,b)
end
table.identical=identical
table.are_equal=are_equal
-function table.compact(t)
- if t then
- for k,v in next,t do
- if not next(v) then
- t[k]=nil
+local function sparse(old,nest,keeptables)
+ local new={}
+ for k,v in next,old do
+ if not (v=="" or v==false) then
+ if nest and type(v)=="table" then
+ v=sparse(v,nest)
+ if keeptables or next(v) then
+ new[k]=v
+ end
+ else
+ new[k]=v
end
end
end
+ return new
+end
+table.sparse=sparse
+function table.compact(t)
+ return sparse(t,true,true)
end
function table.contains(t,v)
if t then
@@ -6681,7 +6692,7 @@ local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
otf.glists={ "gsub","gpos" }
-otf.version=2.758
+otf.version=2.759
otf.cache=containers.define("fonts","otf",otf.version,true)
local fontdata=fonts.hashes.identifiers
local chardata=characters and characters.data
@@ -7236,7 +7247,9 @@ end
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)
+ if trace_private then
+ report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+ end
unicode=-1
end
if not unicode or unicode==-1 then
@@ -7889,12 +7902,12 @@ actions["reorganize lookups"]=function(data,filename,raw)
local fore=glyphs.fore
if fore and fore~="" then
fore=s_uncover(splitter,s_u_cache,fore)
- rule.before=s_hashed(fore,s_h_cache)
+ rule.after=s_hashed(fore,s_h_cache)
end
local back=glyphs.back
if back then
back=s_uncover(splitter,s_u_cache,back)
- rule.after=s_hashed(back,s_h_cache)
+ rule.before=s_hashed(back,s_h_cache)
end
local names=glyphs.names
if names then
@@ -13052,27 +13065,6 @@ local function unpackdata(data)
rule.replacements=tv
end
end
- local fore=rule.fore
- if fore then
- local tv=tables[fore]
- if tv then
- rule.fore=tv
- end
- end
- local back=rule.back
- if back then
- local tv=tables[back]
- if tv then
- rule.back=tv
- end
- end
- local names=rule.names
- if names then
- local tv=tables[names]
- if tv then
- rule.names=tv
- end
- end
local lookups=rule.lookups
if lookups then
local tv=tables[lookups]
diff --git a/src/luaotfload-parsers.lua b/src/luaotfload-parsers.lua
index 3eeb614..0461e24 100644
--- a/src/luaotfload-parsers.lua
+++ b/src/luaotfload-parsers.lua
@@ -217,20 +217,35 @@ local conf_filter = function (path)
end
--[[doc--
- read_fonts_conf_indeed() is called with seven arguments; the
- latter three are tables that represent the state and are
- always returned.
+
+ read_fonts_conf_indeed() -- Scan paths included from fontconfig
+ configuration files recursively. Called with eight arguments.
The first four are
+
· the path to the file
· the expanded $HOME
· the expanded $XDG_CONFIG_HOME
· the expanded $XDG_DATA_HOME
+
+ determining the path to be checked. Another three arguments are
+ tables that represent the state of the current job as lists of
+ strings; these are always returned. Finally a reference to the
+ find_files function is passed.
+
--doc]]--
---- string -> string -> string -> tab -> tab -> (tab * tab * tab)
+
+--- string -> string -> string -> string
+--- -> string list -> string list -> string list
+--- -> (string -> fun option -> string list)
+--- -> tab * tab * tab
local read_fonts_conf_indeed
-read_fonts_conf_indeed = function (start, home, xdg_config_home,
+read_fonts_conf_indeed = function (start,
+ home,
+ xdg_config_home,
xdg_data_home,
- acc, done, dirs_done,
+ acc,
+ done,
+ dirs_done,
find_files)
local paths = fonts_conf_scanner(start)
@@ -267,40 +282,50 @@ read_fonts_conf_indeed = function (start, home, xdg_config_home,
path = filejoin(xdg_config_home, path)
end
--- here the path can be four things: a directory or a file,
- --- in absolute or relative path.
+ --- an absolute or relative path.
if stringsub(path, 1, 1) == "~" then
path = filejoin(home, stringsub(path, 2))
elseif --- if the path is relative, we make it absolute
not ( lfsisfile(path) or lfsisdir(path) )
- then
+ then
path = filejoin(filedirname(start), path)
- end
- if lfsisfile(path)
- and kpsereadable_file(path)
- and not done[path]
- then
- --- we exclude path with texmf in them, as they should
- --- be found otherwise
- acc = read_fonts_conf_indeed(
- path, home, xdg_config_home, xdg_data_home,
- acc, done, dirs_done)
- elseif lfsisdir(path) then --- arrow code ahead
- local config_files = find_files (path, conf_filter)
- for _, filename in next, config_files do
- if not done[filename] then
- acc = read_fonts_conf_indeed(
- filename, home, xdg_config_home, xdg_data_home,
- acc, done, dirs_done)
- end
- end
- end --- match “kind”
- end --- iterate paths
end
+ if lfsisfile(path)
+ and kpsereadable_file(path)
+ and not done[path]
+ then
+ --- we exclude path with texmf in them, as they should
+ --- be found otherwise
+ acc = read_fonts_conf_indeed(path,
+ home,
+ xdg_config_home,
+ xdg_data_home,
+ acc,
+ done,
+ dirs_done,
+ find_files)
+ elseif lfsisdir(path) then --- arrow code ahead
+ local config_files = find_files (path, conf_filter)
+ for _, filename in next, config_files do
+ if not done[filename] then
+ acc = read_fonts_conf_indeed(filename,
+ home,
+ xdg_config_home,
+ xdg_data_home,
+ acc,
+ done,
+ dirs_done,
+ find_files)
+ end
+ end
+ end --- match “kind”
+ end --- iterate paths
+ end
- --inspect(acc)
- --inspect(done)
- return acc, done, dirs_done
- end --- read_fonts_conf_indeed()
+ --inspect(acc)
+ --inspect(done)
+ return acc, done, dirs_done
+end --- read_fonts_conf_indeed()
--[[doc--
read_fonts_conf() sets up an accumulator and two sets
@@ -325,11 +350,14 @@ local read_fonts_conf = function (path_list, find_files)
local done = { } ---> set: files inspected
local dirs_done = { } ---> set: dirs in list
for i=1, #path_list do --- we keep the state between files
- acc, done, dirs_done = read_fonts_conf_indeed(
- path_list[i], home, xdg_config_home,
- xdg_data_home,
- acc, done, dirs_done,
- find_files)
+ acc, done, dirs_done = read_fonts_conf_indeed(path_list[i],
+ home,
+ xdg_config_home,
+ xdg_data_home,
+ acc,
+ done,
+ dirs_done,
+ find_files)
end
return acc
end