diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-08-25 12:00:17 +0200 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-08-25 12:00:17 +0200 |
commit | a08ab16564f8c4e4f1b95363fb35332308ee7176 (patch) | |
tree | 5a2a58df944281f638fe485fbfa6a2c82da1ecc7 | |
parent | cc18ba7390f931c0dca7df0d775871c7f375d8ba (diff) | |
download | luaotfload-a08ab16564f8c4e4f1b95363fb35332308ee7176.tar.gz |
[type1] restore earlier version of ``luaotfload-loaders.lua``
Hans kindly added AFM support to the merged package so we don’t need to
integrate it ourselves any longer. However, this concerns only support
for basic loading. For this reason we continue loading our imported
version of the font feature definitions
(``fonts.handlers.afm.helpdata``) in ``font-afk.lua``.
-rw-r--r-- | luaotfload-loaders.lua | 152 |
1 files changed, 13 insertions, 139 deletions
diff --git a/luaotfload-loaders.lua b/luaotfload-loaders.lua index 6d6f409..20eb277 100644 --- a/luaotfload-loaders.lua +++ b/luaotfload-loaders.lua @@ -11,158 +11,32 @@ local readers = fonts.readers local handlers = fonts.handlers local formats = fonts.formats -local lfsisfile = lfs.isfile -local fileaddsuffix = file.addsuffix -local filebasename = file.basename -local stringsub = string.sub -local stringlower = string.lower -local stringupper = string.upper -local findbinfile = resolvers.findbinfile - -local lpeg = require "lpeg" -local lpegmatch = lpeg.match -local P, S, Cp = lpeg.P, lpeg.S, lpeg.Cp - -resolvers.openbinfile = function (filename) - if filename and filename ~= "" then - local f = io.open(filename,"rb") - if f then - --logs.show_load(filename) - local s = f:read("*a") -- io.readall(f) is faster but we never have large files here - if checkgarbage then - checkgarbage(#s) - end - f:close() - if s then - return true, s, #s - end - end - end - return loaders.notfound() -end - -resolvers.loadbinfile = function (filename, filetype) - - local fname = kpse.find_file (filename, filetype) - - if fname and fname ~= "" then - return resolvers.openbinfile(fname) - else - return resolvers.loaders.notfound() - end - -end - ---- this function is required because AFM precedes TFM in the reader ---- chain (see definers.loadfont() in font-def.lua - -local check_tfm = function (specification, fullname) - - local foundname = findbinfile (fullname, "tfm") or "" - - if foundname == "" then - foundname = findbinfile (fullname, "ofm") or "" - end - - if foundname == "" then - foundname = fonts.names.getfilename (fullname,"tfm") or "" - end - - if foundname ~= "" then - specification.filename = foundname - specification.format = "ofm" - return font.read_tfm (specification.filename, - specification.size) - end -end - -readers.check_tfm = check_tfm - ---[[ <EXPERIMENTAL> ]] - --[[doc-- - Here we load extra AFM libraries from Context. - In fact, part of the AFM support is contained in font-ext.lua, for - which the font loader has a replacement: luatex-fonts-ext.lua. - However, this is only a stripped down version with everything AFM - removed. For example, it lacks definitions of several AFM features - like italic correction, protrusion, expansion and so on. In order to - achieve full-fledged AFM support we will either have to implement our - own version of these or consult with Hans whether he would consider - including the AFM code with the font loader. + As of 2013-08-25 AFM support has been included in the fontloader + package. - For the time being we stick with two AFM-specific libraries: - font-afm.lua and font-afk.lua. When combined, these already supply us - with basic features like kerning and ligatures. The rest can be added - in due time. + We still have to load the font feature definitions (font-afk.lua) to + achieve kerning and ligatures. --doc]]-- -require "luaotfload-font-afm.lua" require "luaotfload-font-afk.lua" ---[[ </EXPERIMENTAL> ]] - ---[[doc-- - - The PFB/PFA reader checks whether there is a corresponding AFM file - and hands the spec over to the AFM loader if appropriate. Context - uses string.gsub() to accomplish this but that can cause collateral - damage. - ---doc]]-- - -local mk_type1_reader = function (format) - - format = stringlower (format) - local first = stringsub (format, 1, 1) - local second = stringsub (format, 2, 2) - local third = stringsub (format, 3, 3) - - local p_format = P"." - * (P(first) + P(stringupper (first))) - * (P(second) + P(stringupper (second))) - * (P(third) + P(stringupper (third))) - --- we have to be careful here so we don’t affect - --- harmless substrings - * (P"(" --- subfont - + P":" --- feature list - + P(-1)) --- end of string - local no_format = 1 - p_format - local p_format_file = no_format^1 * Cp() * p_format * Cp() - - local reader = function (specification, method) - - local afmfile = fileaddsuffix (specification.name, "afm") - - if lfsisfile (afmfile) then - --- switch to afm reader - logs.names_report ("log", 0, "type1", - "Found corresponding AFM file %s, using that.", - filebasename (afmfile)) - local oldspec = specification.specification - local before, after = lpegmatch (p_format_file, oldspec) - specification.specification = stringsub (oldspec, 1, before) - .. "afm" - .. stringsub (oldspec, after - 1) - specification.forced = "afm" - return readers.afm (specification, method) - end - - --- else read pfb via opentype mechanism - return readers.opentype (specification, format, "type1") - end - - return reader +local pfb_reader = function (specification) + return readers.opentype (specification, "pfb", "type1") +end + +local pfa_reader = function (specification) + return readers.opentype (specification, "pfa", "type1") end formats.pfa = "type1" -readers.pfa = mk_type1_reader "pfa" +readers.pfa = pfa_reader handlers.pfa = { } formats.pfb = "type1" -readers.pfb = mk_type1_reader "pfb" -handlers.pfb = { } --- empty, as with tfm +readers.pfb = pfb_reader +handlers.pfb = { } -- vim:tw=71:sw=2:ts=2:expandtab |