diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-11-14 05:08:01 -0800 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-11-14 05:08:01 -0800 |
commit | 790b1a0def65cb6508f869ea08829b50544add99 (patch) | |
tree | 38311ec1b33483a1ca6b98b7b6a077664f276d79 | |
parent | a79b03d0331612c8914afb6284f34744a5a51941 (diff) | |
parent | 581b68bbbc02f8497df63dcf87f4b091f83890e1 (diff) | |
download | luaotfload-790b1a0def65cb6508f869ea08829b50544add99.tar.gz |
Merge pull request #150 from phi-gamma/master
tweak type1 classification; enable compression; sync
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | filegraph.dot | 2 | ||||
-rw-r--r-- | luaotfload-auxiliary.lua | 4 | ||||
-rw-r--r-- | luaotfload-colors.lua | 2 | ||||
-rw-r--r-- | luaotfload-database.lua | 92 | ||||
-rw-r--r-- | luaotfload-diagnostics.lua | 2 | ||||
-rw-r--r-- | luaotfload-extralibs.lua | 2 | ||||
-rw-r--r-- | luaotfload-features.lua | 2 | ||||
-rw-r--r-- | luaotfload-fontloader.lua | 14 | ||||
-rw-r--r-- | luaotfload-override.lua | 2 | ||||
-rwxr-xr-x | luaotfload-tool.lua | 20 | ||||
-rw-r--r-- | luaotfload-tool.rst | 25 | ||||
-rwxr-xr-x | mkcharacters | 2 | ||||
-rwxr-xr-x | mkglyphlist | 4 | ||||
-rwxr-xr-x | mktests | 24 |
15 files changed, 136 insertions, 66 deletions
@@ -9,8 +9,9 @@ Change History * Test runner (script mktests) * New luaotfload-tool option: ``--no-reload`` * ``luaotfload-tool --find`` now understands request syntax - * option ``--compress`` filters text (Lua script) version of the font - index through gzip + * text (Lua script) version of the font index is filtered through gzip by + default, the ``--no-compress`` option of luaotfload-tool will prevent + this * rename ``luaotfload-merged.lua`` (the fontloader package from Context) to ``luaotfload-fontloader.lua`` diff --git a/filegraph.dot b/filegraph.dot index f70ef87..0c64e58 100644 --- a/filegraph.dot +++ b/filegraph.dot @@ -182,7 +182,7 @@ strict digraph luaotfload_files { //looks weird with circo ... fillcolor = "#01012222", color = grey40, style = "filled,dotted,rounded", - label = "luaotfload-names.lua\nluaotfload-names.luc"] + label = "luaotfload-names.lua.gz\nluaotfload-names.luc"] status [style = "filled,dashed", shape = rect, diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua index 7daf367..d3de731 100644 --- a/luaotfload-auxiliary.lua +++ b/luaotfload-auxiliary.lua @@ -2,9 +2,9 @@ ----------------------------------------------------------------------- -- FILE: luaotfload-auxiliary.lua -- DESCRIPTION: part of luaotfload --- REQUIREMENTS: luaotfload 2.3 +-- REQUIREMENTS: luaotfload 2.4 -- AUTHOR: Khaled Hosny, Élie Roux, Philipp Gesang --- VERSION: 2.3a +-- VERSION: 2.4 -- CREATED: 2013-05-01 14:40:50+0200 ----------------------------------------------------------------------- -- diff --git a/luaotfload-colors.lua b/luaotfload-colors.lua index ac9291d..b5c1fb9 100644 --- a/luaotfload-colors.lua +++ b/luaotfload-colors.lua @@ -1,5 +1,5 @@ if not modules then modules = { } end modules ['luaotfload-colors'] = { - version = "2.3a", + version = "2.4", comment = "companion to luaotfload.lua (font color)", author = "Khaled Hosny, Elie Roux, Philipp Gesang", copyright = "Luaotfload Development Team", diff --git a/luaotfload-database.lua b/luaotfload-database.lua index 5198b16..fba01cc 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -1,15 +1,40 @@ if not modules then modules = { } end modules ['luaotfload-database'] = { - version = "2.3b", + version = "2.4", comment = "companion to luaotfload.lua", author = "Khaled Hosny, Elie Roux, Philipp Gesang", copyright = "Luaotfload Development Team", license = "GNU GPL v2" } ---- TODO: if the specification is an absolute filename with a font not in the ---- database, add the font to the database and load it. There is a small ---- difficulty with the filenames of the TEXMF tree that are referenced as ---- relative paths... +--[[doc-- + + Some statistics: + + a) TL 2012, mkluatexfontdb --force + b) v2.4, luaotfload-tool --update --force + c) v2.4, luaotfload-tool --update --force --formats=+afm,pfa,pfb + d) Context, mtxrun --script fonts --reload --force + + (Keep in mind that Context does index fewer fonts since it + considers only the contents of the minimals tree, not the + tex live one!) + + time (m:s) peak VmSize (kB) + a 1:19 386 018 + b 0:37 715 797 + c 2:27 1 017 674 + d 0:44 1 082 313 + + Most of the increase in memory consumption from version 1.x to 2.2+ + can be attributed to the move from single-pass to a multi-pass + approach to building the index: Information is first gathered from + all reachable fonts and only afterwards processed, classified and + discarded. Also, there is a good deal of additional stuff kept in + the database now: two extra tables for file names and font families + have been added, making font lookups more efficient while improving + maintainability of the code. + +--doc]]-- local lpeg = require "lpeg" @@ -99,11 +124,10 @@ luaotfloadconfig.resolver = luaotfloadconfig.resolver or "normal" luaotfloadconfig.formats = luaotfloadconfig.formats or "otf,ttf,ttc,dfont" luaotfloadconfig.strip = luaotfloadconfig.strip == true -if luaotfloadconfig.update_live ~= false then - --- this option allows for disabling updates - --- during a TeX run - luaotfloadconfig.update_live = true -end +--- this option allows for disabling updates +--- during a TeX run +luaotfloadconfig.update_live = luaotfloadconfig.update_live ~= false +luaotfloadconfig.compress = luaotfloadconfig.compress ~= false local names = fonts.names local name_index = nil --> upvalue for names.data @@ -509,6 +533,7 @@ local set_font_filter --- state of the database local fonts_reloaded = false +local fonts_read = 0 --- limit output when approximate font matching (luaotfload-tool -F) local fuzzy_limit = 1 --- display closest only @@ -1481,7 +1506,7 @@ ot_fullinfo = function (filename, english_names, info) - return { + local res = { file = { base = basename, full = filename, subfont = subfont, @@ -1491,6 +1516,10 @@ ot_fullinfo = function (filename, style = style, version = metadata.version, } + --- Closing the file manually is a tad faster and more memory + --- efficient than having it closed by the gc + fontloaderclose (metadata) + return res end --[[doc-- @@ -1507,13 +1536,14 @@ end t1_fullinfo = function (filename, _subfont, location, basename, format) local sanitized - local metadata = load_font_file (filename) - + local metadata = load_font_file (filename) local fontname = metadata.fontname local fullname = metadata.fullname local familyname = metadata.familyname local italicangle = metadata.italicangle - local weight = metadata.weight --- string identifier + local splitstyle = split_fontname (fontname) + local style = "" + local weight sanitized = sanitize_fontnames ({ fontname = fontname, @@ -1521,10 +1551,20 @@ t1_fullinfo = function (filename, _subfont, location, basename, format) pfullname = fullname, metafamily = family, familyname = familyname, - subfamily = weight, + weight = metadata.weight, --- string identifier prefmodifiers = style, }) + weight = sanitized.weight + + if weight == "bold" then + style = weight + end + + if italicangle ~= 0 then + style = style .. "italic" + end + return { basename = basename, fullpath = filename, @@ -1538,10 +1578,10 @@ t1_fullinfo = function (filename, _subfont, location, basename, format) psname = sanitized.fontname, version = metadata.version, size = false, - splitstyle = split_fontname (fontname), - fontstyle_name = sanitized.subfamily, + splitstyle = splitstyle, + fontstyle_name = style ~= "" and style or weight, weight = { metadata.pfminfo.weight, - sanitized.subfamily }, + weight }, italicangle = italicangle, } end @@ -2077,21 +2117,29 @@ local scan_dir = function (dirname, currentnames, targetnames, end report ("both", 4, "db", "Scanning directory %s", dirname) - local n_new = 0 --- total of fonts collected - local n_found = #found + local n_new = 0 --- total of fonts collected + local n_found = #found + local max_fonts = luaotfloadconfig.max_fonts + report ("both", 4, "db", "%d font files detected", n_found) for j=1, n_found do + if max_fonts and fonts_read >= max_fonts then + break + end + local fullname = found[j] fullname = path_normalize(fullname) local new + if dry_run == true then report_status ("both", "db", - "Would have been loading %q", fullname) + "Would have been loading %q", fullname) else report_status ("both", "db", "Loading font %q", fullname) local new = read_font_names (fullname, currentnames, - targetnames, texmf) + targetnames, texmf) if new == true then + fonts_read = fonts_read + 1 n_new = n_new + 1 end end diff --git a/luaotfload-diagnostics.lua b/luaotfload-diagnostics.lua index a11f9ea..f191913 100644 --- a/luaotfload-diagnostics.lua +++ b/luaotfload-diagnostics.lua @@ -4,7 +4,7 @@ -- DESCRIPTION: functionality accessible by the --diagnose option -- REQUIREMENTS: luaotfload-tool.lua -- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com> --- VERSION: 1.0 +-- VERSION: 2.4 -- CREATED: 2013-07-28 10:01:18+0200 ----------------------------------------------------------------------- -- diff --git a/luaotfload-extralibs.lua b/luaotfload-extralibs.lua index d04ba5b..6d486b2 100644 --- a/luaotfload-extralibs.lua +++ b/luaotfload-extralibs.lua @@ -1,5 +1,5 @@ if not modules then modules = { } end modules ["extralibs"] = { - version = "2.3a", + version = "2.4", comment = "companion to luaotfload.lua", author = "Hans Hagen, Philipp Gesang", copyright = "PRAGMA ADE / ConTeXt Development Team", diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 83f5a99..4b2f206 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -1,5 +1,5 @@ if not modules then modules = { } end modules ["features"] = { - version = "2.3a", + version = "2.4", comment = "companion to luaotfload.lua", author = "Hans Hagen, Khaled Hosny, Elie Roux, Philipp Gesang", copyright = "PRAGMA ADE / ConTeXt Development Team", diff --git a/luaotfload-fontloader.lua b/luaotfload-fontloader.lua index 2bfa775..e187979 100644 --- a/luaotfload-fontloader.lua +++ b/luaotfload-fontloader.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 11/09/13 20:21:53 +-- merge date : 11/14/13 13:48:28 do -- begin closure to overcome local limits and interference @@ -6354,7 +6354,7 @@ local utfbyte=utf.byte local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip local type,next,tonumber,tostring=type,next,tonumber,tostring local abs=math.abs -local getn=table.getn +local insert=table.insert local lpegmatch=lpeg.match local reversed,concat,remove=table.reversed,table.concat,table.remove local ioflush=io.flush @@ -6378,7 +6378,7 @@ local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf otf.glists={ "gsub","gpos" } -otf.version=2.747 +otf.version=2.748 otf.cache=containers.define("fonts","otf",otf.version,true) local fontdata=fonts.hashes.identifiers local chardata=characters and characters.data @@ -7032,20 +7032,20 @@ actions["check encoding"]=function(data,filename,raw) if parentdescription then local altuni=parentdescription.altuni if not altuni then - altuni={ { unicode=parent } } + altuni={ { unicode=unicode } } parentdescription.altuni=altuni duplicates[parent]={ unicode } else local done=false for i=1,#altuni do - if altuni[i].unicode==parent then + if altuni[i].unicode==unicode then done=true break end end if not done then - altuni[#altuni+1]={ unicode=parent } - table.insert(duplicates[parent],unicode) + insert(altuni,{ unicode=unicode }) + insert(duplicates[parent],unicode) end end if trace_loading then diff --git a/luaotfload-override.lua b/luaotfload-override.lua index ea6af9a..0e17f05 100644 --- a/luaotfload-override.lua +++ b/luaotfload-override.lua @@ -1,5 +1,5 @@ if not modules then modules = { } end modules ['luat-ovr'] = { - version = "2.3a", + version = "2.4", comment = "companion to luatex-*.tex", author = "Khaled Hosny, Elie Roux, Philipp Gesang", copyright = "Luaotfload Development Team", diff --git a/luaotfload-tool.lua b/luaotfload-tool.lua index 0cc26d2..a945ee2 100755 --- a/luaotfload-tool.lua +++ b/luaotfload-tool.lua @@ -183,6 +183,7 @@ local sanitize_fontname = names.sanitize_fontname local pathdata = names.path local names_plain = pathdata.index.lua +local names_gzip = names_plain .. ".gz" local names_bin = pathdata.index.luc local help_messages = { @@ -219,11 +220,12 @@ This tool is part of the luaotfload package. Valid options are: -n --no-reload suppress db update --no-strip keep redundant information in db -f --force force re-indexing all fonts - -c --compress gzip index file (text version only) + -c --no-compress do not gzip index file (text version only) -l --flush-lookups empty lookup cache of font requests -D --dry-run skip loading of fonts, just scan --formats=[+|-]EXTENSIONS set, add, or subtract formats to index -p --prefer-texmf prefer fonts in the TEXMF over system fonts + --max-fonts=N process at most N font files --find="font name" query the database for a font name -F --fuzzy look for approximate matches if --find fails @@ -293,7 +295,8 @@ local help_msg = function (version) local template = help_messages[version] iowrite(stringformat(template, luaotfloadconfig.self, - names_plain, +-- names_plain, + names_gzip, names_bin, caches.getwritablepath ( luaotfloadconfig.cache_dir))) @@ -1097,7 +1100,7 @@ local process_cmdline = function ( ) -- unit -> jobspec local long_options = { alias = 1, cache = 1, - compress = "c", + ["no-compress"] = "c", diagnose = 1, ["dry-run"] = "D", ["flush-lookups"] = "l", @@ -1112,6 +1115,7 @@ local process_cmdline = function ( ) -- unit -> jobspec limit = 1, list = 1, log = 1, + ["max-fonts"] = 1, ["no-reload"] = "n", ["no-strip"] = 0, ["skip-read"] = "R", @@ -1214,9 +1218,17 @@ local process_cmdline = function ( ) -- unit -> jobspec --- dev only, undocumented luaotfloadconfig.skip_read = true elseif v == "c" then - luaotfloadconfig.compress = true + luaotfloadconfig.compress = false elseif v == "no-strip" then luaotfloadconfig.strip = false + elseif v == "max-fonts" then + local n = optarg[n] + if n then + n = tonumber(n) + if n and n > 0 then + luaotfloadconfig.max_fonts = n + end + end end end diff --git a/luaotfload-tool.rst b/luaotfload-tool.rst index 37ef779..957ec85 100644 --- a/luaotfload-tool.rst +++ b/luaotfload-tool.rst @@ -20,7 +20,7 @@ SYNOPSIS **luaotfload-tool** --update [ --force ] [ --quiet ] [ --verbose ] [ --prefer-texmf ] [ --dry-run ] [ --formats=[+|-]EXTENSIONS ] - [ --compress ] [ --no-strip ] + [ --no-compress ] [ --no-strip ] **luaotfload-tool** --find=FONTNAME [ --fuzzy ] [ --info ] [ --inspect ] [ --no-reload ] @@ -67,12 +67,15 @@ update mode building the database. Warning: this will inflate the index to about two to three times the normal size. ---compress Filter plain text version of font index through - gzip. +--no-compress, -c Do not filter the plain text version of the + font index through gzip. Useful for debugging + if your editor is built without zlib. --prefer-texmf, -p Organize the file name database in a way so that it prefer fonts in the *TEXMF* tree over system fonts if they are installed in both. +--max-fonts=N Process at most *N* font files, including fonts + already indexed in the count. --formats=EXTENSIONS Extensions of the font files to index. Where *EXTENSIONS* is a comma-separated list of supported file extensions (otf, ttf, ttc, @@ -220,11 +223,17 @@ FILES The font name database is usually located in the directory ``texmf-var/luatex-cache/generic/names/`` (``$TEXMFCACHE`` as set in -``texmf.cnf``) of your *TeX Live* distribution as -``luaotfload-names.lua``. The experimental lookup cache will be -created as ``luaotfload-lookup-cache.lua`` in the same directory. -Both files are safe to delete, at the cost of regenerating them with -the next run of *LuaTeX*. +``texmf.cnf``) of your *TeX Live* distribution as a zlib-compressed +file ``luaotfload-names.lua.gz``. +The experimental lookup cache will be created as +``luaotfload-lookup-cache.lua`` in the same directory. +These Lua tables are not used directly by Luaotfload, though. +Instead, they are compiled to Lua bytecode which is written to +corresponding files with the extension ``.luc`` in the same directory. +When modifying the files by hand keep in mind that only if the bytecode +files are missing will Luaotfload use the plain version instead. +Both kinds of files are safe to delete, at the cost of regenerating +them with the next run of *LuaTeX*. SEE ALSO ======================================================================= diff --git a/mkcharacters b/mkcharacters index 69201fb..5d4a2f4 100755 --- a/mkcharacters +++ b/mkcharacters @@ -5,7 +5,7 @@ -- DESCRIPTION: import parts of char-def.lua -- REQUIREMENTS: lua, ConTeXt, the lualibs package -- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com> --- VERSION: 1.1 +-- VERSION: 2.4 -- CREATED: 2013-05-17 12:41:39+0200 ----------------------------------------------------------------------- -- we create a stripped-down version of char-def.lua diff --git a/mkglyphlist b/mkglyphlist index e476eca..f7a1cb9 100755 --- a/mkglyphlist +++ b/mkglyphlist @@ -5,7 +5,7 @@ -- DESCRIPTION: part of the luaotfload package -- REQUIREMENTS: lua, lpeg, luasocket, the lualibs package -- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com> --- VERSION: 1.0 +-- VERSION: 2.4 -- CREATED: 04/23/2013 12:42:17 PM CEST ----------------------------------------------------------------------- -- interesting thread on the Context list: @@ -96,7 +96,7 @@ end local file_header = [==[ if not modules then modules = { } end modules ["font-age"] = { - version = 2.300, + version = 2.400, comment = "part of the luaotfload package", author = "luaotfload team / mkglyphlist", copyright = "derived from %s", @@ -119,18 +119,18 @@ local choose_style = { --- this needs a database built with --formats=+pfa,pfb,afm local resolve_t1_font = { - { { name = "URW Gothic L", style = "regular" }, "uagk8a.pfb" }, - { { name = "URW Gothic L", style = "italic" }, "uagko8a.pfb" }, - { { name = "URW Gothic L", style = "bold" }, "uagd8a.pfb" }, - { { name = "URW Gothic L", style = "bolditalic" }, "uagdo8a.pfb" }, - { { name = "Century Schoolbook L", style = "regular" }, "uncr8a.pfb" }, - { { name = "Century Schoolbook L", style = "italic" }, "uncri8a.pfb" }, - { { name = "Century Schoolbook L", style = "bold" }, "uncb8a.pfb" }, - { { name = "Century Schoolbook L", style = "bolditalic" }, "uncbi8a.pfb" }, - { { name = "Nimbus Roman No9 L", style = "regular" }, "utmr8a.pfb" }, - { { name = "Nimbus Roman No9 L", style = "italic" }, "utmri8a.pfb" }, - { { name = "Nimbus Roman No9 L", style = "bold" }, "utmb8a.pfb" }, --- medium, actually - { { name = "Nimbus Roman No9 L", style = "bolditalic" }, "utmbi8a.pfb" }, + { { name = "URW Gothic L", style = "regular" }, "a010013l.pfb" }, --> “book” +-- { { name = "URW Gothic L", style = "italic" }, "a010033l.pfb" }, --> “book oblique” +-- { { name = "URW Gothic L", style = "bold" }, "a010015l.pfb" }, --> “demi” +-- { { name = "URW Gothic L", style = "bolditalic" }, "a010035l.pfb" }, --> “demi oblique” + { { name = "Century Schoolbook L", style = "regular" }, "c059013l.pfb" }, + { { name = "Century Schoolbook L", style = "italic" }, "c059033l.pfb" }, + { { name = "Century Schoolbook L", style = "bold" }, "c059016l.pfb" }, + { { name = "Century Schoolbook L", style = "bolditalic" }, "c059036l.pfb" }, + { { name = "Nimbus Roman No9 L", style = "regular" }, "n021003l.pfb" }, + { { name = "Nimbus Roman No9 L", style = "italic" }, "n021023l.pfb" }, + { { name = "Nimbus Roman No9 L", style = "bold" }, "n021004l.pfb" }, --- medium, actually + { { name = "Nimbus Roman No9 L", style = "bolditalic" }, "n021024l.pfb" }, } local translate_style = { |