diff options
| author | Philipp Gesang <phg42.2a@gmail.com> | 2014-07-18 23:58:55 +0200 | 
|---|---|---|
| committer | Philipp Gesang <phg42.2a@gmail.com> | 2014-07-18 23:58:55 +0200 | 
| commit | 4482773d1e4bfc0105b478f7c0bfb8c5480af8a0 (patch) | |
| tree | ab24ba765b87ffb6af7e7d8f1ed88d53e0703998 | |
| parent | a9a61c97b8e07294a2f362d1ac39a9ece15dc999 (diff) | |
| parent | 120b557526db2a73cd3eab41c9eddf142778b684 (diff) | |
| download | luaotfload-4482773d1e4bfc0105b478f7c0bfb8c5480af8a0.tar.gz | |
Merge pull request #236 from phi-gamma/master
fixes & sync
| -rw-r--r-- | src/luaotfload-fontloader.lua | 54 | ||||
| -rw-r--r-- | src/luaotfload-parsers.lua | 104 | 
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 | 
