diff options
| author | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-05-15 09:02:32 -0700 | 
|---|---|---|
| committer | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-05-15 09:02:32 -0700 | 
| commit | 087a990dc8581be3a2980034e70f874d52f9577b (patch) | |
| tree | 5a7d38a8e5cf55cceb6dd51becf102950819beb4 /luaotfload-auxiliary.lua | |
| parent | 8a67b384a597b9af16ea915fe7e323d4328cdd3e (diff) | |
| parent | 52f6ea217175fd1a39e6f80ea7a0f98fbf1364f6 (diff) | |
| download | luaotfload-087a990dc8581be3a2980034e70f874d52f9577b.tar.gz | |
Merge pull request #75 from phi-gamma/master
address feature request #74
Diffstat (limited to 'luaotfload-auxiliary.lua')
| -rw-r--r-- | luaotfload-auxiliary.lua | 88 | 
1 files changed, 64 insertions, 24 deletions
| diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua index a41520c..dde5686 100644 --- a/luaotfload-auxiliary.lua +++ b/luaotfload-auxiliary.lua @@ -76,16 +76,18 @@ local add_fontdata_fallbacks = function (fontdata)          metadata  = { ascent = metadata.ascent },        }        --- for microtype and fontspec -      local fake_features = { } -- wrong: table.copy(resources.features) +      --local fake_features = { } +      local fake_features = table.copy(resources.features)        setmetatable(fake_features, { __index = function (tab, idx) -        warning("some package (probably fontspec) is outdated") -        warning( -          "attempt to index " .. -          "tfmdata.shared.otfdata.luatex.features (%s)", -          idx) -        --os.exit(1) -        return nil --- empty anyways -      end}) +          warning("some package (probably fontspec) is outdated") +          warning( +            "attempt to index " .. +            "tfmdata.shared.otfdata.luatex.features (%s)", +            idx) +          --os.exit(1) +          return tab[idx] +        end, +      })        fontdata.shared.otfdata.luatex = {          unicodes = resources.unicodes,          features = fake_features, @@ -479,27 +481,65 @@ aux.sprint_math_dimension = sprint_math_dimension  ---                    extra database functions  ----------------------------------------------------------------------- +local namesresolve      = fonts.names.resolve +local namesscan_dir     = fonts.names.scan_dir +  --- migrated from luaotfload-database.lua  --- https://github.com/lualatex/luaotfload/pull/61#issuecomment-17776975 ---- string -> (int, int) +--- string -> (int * int)  local scan_external_dir = function (dir) -    local old_names, new_names = names.data -    if not old_names then -        old_names = load_names() -    end -    new_names = tablecopy(old_names) -    local n_scanned, n_new = fonts.names.scan_dir(dir, old_names, -                                                  new_names) -    --- FIXME -    --- This doesn’t seem right. If a db update is triggered after this -    --- point, then the added fonts will be saved along with it -- -    --- which is not as “temporarily” as it should be. (This should be -    --- addressed during a refactoring of names_resolve().) -    names.data = new_names -    return n_scanned, n_new +  local old_names, new_names = names.data +  if not old_names then +    old_names = load_names() +  end +  new_names = tablecopy(old_names) +  local n_scanned, n_new = scan_dir(dir, old_names, new_names) +  --- FIXME +  --- This doesn’t seem right. If a db update is triggered after this +  --- point, then the added fonts will be saved along with it -- +  --- which is not as “temporarily” as it should be. (This should be +  --- addressed during a refactoring of names_resolve().) +  names.data = new_names +  return n_scanned, n_new  end  aux.scan_external_dir = scan_external_dir +--- https://github.com/lualatex/luaotfload/issues/74 +--- string -> (string * int) +local resolve_fontname = function (name) +  local foundname, subfont, success = namesresolve(nil, nil, { +          name          = name, +          lookup        = "name", +          optsize       = 0, +          specification = "name:" .. name, +  }) +  if success then +    return foundname, subfont +  end +  return false, false +end + +aux.resolve_fontname = resolve_fontname + +--- string list -> (string * int) +local resolve_fontlist +resolve_fontlist = function (names, n) +  if not n then +    return resolve_fontlist(names, 1) +  end +  local this = names[n] +  if this then +    local foundname, subfont = resolve_fontname(this) +    if foundname then +      return foundname, subfont +    end +    return resolve_fontlist(names, n+1) +  end +  return false, false +end + +aux.resolve_fontlist = resolve_fontlist +  -- vim:tw=71:sw=2:ts=2:expandtab | 
