diff options
-rw-r--r-- | Master/texmf-dist/doc/luatex/luaotfload/NEWS | 15 | ||||
-rw-r--r-- | Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf | bin | 313337 -> 318005 bytes | |||
-rwxr-xr-x | Master/texmf-dist/scripts/luaotfload/mkluatexfontdb.lua | 40 | ||||
-rw-r--r-- | Master/texmf-dist/source/luatex/luaotfload/Makefile | 18 | ||||
-rw-r--r-- | Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx | 83 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua | 27 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/otfl-font-clr.lua | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua | 204 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/otfl-font-xtx.lua | 16 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/luaotfload/otfl-luat-ovr.lua | 1 |
11 files changed, 244 insertions, 164 deletions
diff --git a/Master/texmf-dist/doc/luatex/luaotfload/NEWS b/Master/texmf-dist/doc/luatex/luaotfload/NEWS index fc39edc44b7..cdebd817372 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/NEWS +++ b/Master/texmf-dist/doc/luatex/luaotfload/NEWS @@ -1,6 +1,21 @@ Change History -------------- +2010/06/07, luaotfload v1.10: + * provide a fonts.names.scan(dir) function that temporally loads fonts + from the specified dir into the names database + * Log loaded font file before attempting to open it + * fix XeTeX's square brackets syntax so that it doesn't trigger database + update + * fix loading fonts with absolute path + * add \fontdimen8 support, for XeTeX compatibility + * be more verbose when updating the font database + * improve fonts.conf parsing + * make sure when a TFM font is requested we don't end up loading a non-TFM + font with a similar name instead + * Remove --fc-cache option from mkluatexfontdb.lua, since we no longer use + fontconfig tools + 2010/05/30, luaotfload v1.09: * the last release didn't even load * fix passing --destdir to mkluatexfontdb diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf Binary files differindex 17d6bc63f7f..606246b52d5 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf diff --git a/Master/texmf-dist/scripts/luaotfload/mkluatexfontdb.lua b/Master/texmf-dist/scripts/luaotfload/mkluatexfontdb.lua index 5eac9ae06af..a72478bda7f 100755 --- a/Master/texmf-dist/scripts/luaotfload/mkluatexfontdb.lua +++ b/Master/texmf-dist/scripts/luaotfload/mkluatexfontdb.lua @@ -36,13 +36,13 @@ Valid options: -v --verbose=LEVEL be more verbose (print the searched directories) -vv print the loaded fonts -vvv print all steps of directory searching - --fc-cache run fc-cache before updating database --sys install the database system-wide (default is only for the current user) -V --version print version and exit -h --help print this message -Fonts are found on Windows or Linux with fontconfig (i.e., using fc-list). +Fonts are searched in directories on Windows or Linux that have been +searched with fontconfig. On Mac OS X, only fonts located in the following standard font locations are included in the font database: @@ -51,12 +51,12 @@ included in the font database: In particular, fonts installed in other locations with "Font Book" will not be available. -Rather than using fontconfig or, in Mac OS X, searching the default font -locations, you may specify where fonts are located by setting the OSFONTDIR -environment variable. Doing so will override the use of fontconfig or -scanning the system font locations. If you wish to continue to include them -while also including other font locations, simply include them in the list. -For example (using a bash shell), +Rather than using the fontconfig locations or, in Mac OS X, searching the +default system font locations, you may specify where fonts are located by +setting the OSFONTDIR environment variable. Doing so will override the use of +fontconfig or scanning the system font locations. If you wish to continue to +include them while also including other font locations, simply include them in +the list. For example (using a bash shell), export OSFONTDIR='/path/to/other/fonts:/Users/will/Library/Fonts:...' @@ -80,7 +80,6 @@ local long_opts = { force = "f", quiet = "q", help = "h", - ['fc-cache'] = 0 , sys = 0 , verbose = 1 , version = "V", @@ -88,26 +87,6 @@ local long_opts = { local short_opts = "d:fqpvVh" -local function do_run_fc_cache(c) - --[[ - Function running fc-cache if needed. - The argument is nil for default, 0 for no fc-cache and 1 for fc-cache. - Default behaviour is to run fc-cache if available. - --]] - if c == 0 then return end - if not c then - -- TODO: detect if fc-cache is available - end - local toexec = 'fc-cache' - if os.type == 'windows' then - toexec = 'fc-cache.exe' -- TODO: to test on a non-cygwin Windows - end - log('executing %s...\n', toexec) - os.execute(toexec) -end - --- a temporary variable, containing the command line option concerning fc-cache -local run_fc_cache = 0 local force_reload = nil local function process_cmdline() @@ -132,8 +111,6 @@ local function process_cmdline() output_directory = optarg [i] elseif v == "f" then force_reload = 1 - elseif v == "fc-cache" then - run_fc_cache = 1 elseif v == "sys" then output_directory = names.path.systemdir end @@ -146,7 +123,6 @@ local function process_cmdline() end process_cmdline() -do_run_fc_cache(run_fc_cache) local function generate(force) log("generating font names database.") diff --git a/Master/texmf-dist/source/luatex/luaotfload/Makefile b/Master/texmf-dist/source/luatex/luaotfload/Makefile index 2f38501ec9c..0dbcb178512 100644 --- a/Master/texmf-dist/source/luatex/luaotfload/Makefile +++ b/Master/texmf-dist/source/luatex/luaotfload/Makefile @@ -15,6 +15,8 @@ SOURCE = $(DTX) $(OTFL) README Makefile NEWS $(SCRIPT) # test files TESTDIR = tests TESTFILES = $(wildcard $(TESTDIR)/*.tex) +TESTFILE_SYS = $(TESTDIR)/systemfonts.tex $(TESTDIR)/fontconfig_conf_reading.tex +TESTFILES_TL = $(filter-out $(TESTFILE_SYS), $(TESTFILES)) # Files grouped by installation location SCRIPTFILES = $(SCRIPT) @@ -84,12 +86,18 @@ install: $(ALL_FILES) @echo "Installing in '$(TEXMFROOT)'." $(run-install) -check: $(RUNFILES) $(TESTFILES) - @for f in $(TESTFILES); do \ +check: $(RUNFILES) $(TESTFILES_TL) + @for f in $(TESTFILES_TL); do \ echo "check: luatex $$f"; \ - luatex --interaction=batchmode $$f > /dev/null || exit $$?; \ + luatex --interaction=batchmode --output-directory $(TESTDIR) $$f \ + > /dev/null || exit $$?; \ done +check-all: $(TESTFILE_SYS) check + @echo "check: luatex $<" + @luatex --interaction=batchmode --output-directory $(TESTDIR) $< \ + >/dev/null + manifest: @echo "Source files:" @for f in $(SOURCE); do echo $$f; done @@ -98,8 +106,8 @@ manifest: @for f in $(GENERATED); do echo $$f; done clean: - @$(RM) -- *.log *.aux *.toc *.idx *.ind *.ilg *.out + @$(RM) -- *.log *.aux *.toc *.idx *.ind *.ilg *.out $(TESTDIR)/*.log mrproper: clean - @$(RM) -- $(GENERATED) $(ZIPS) + @$(RM) -- $(GENERATED) $(ZIPS) $(TESTDIR)/*.pdf diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx index 975680b8612..874843b62fc 100644 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx +++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx @@ -35,7 +35,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: luaotfload 2010/05/30 v1.09 ConTeXt font loading system} +\Msg{* Package: luaotfload 2010/06/07 v1.10 ConTeXt font loading system} \Msg{************************************************************************} \keepsilent @@ -102,7 +102,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luaotfload.drv}% - [2010/05/30 v1.09 ConTeXt font loading system]% + [2010/06/07 v1.10 ConTeXt font loading system]% \documentclass{ltxdoc} \usepackage{metalogo,multicol,mdwlist,fancyvrb} \usepackage[colorlinks=true]{hyperref} @@ -140,7 +140,7 @@ and the derived files % \GetFileInfo{luaotfload.drv} % % \title{The \textsf{luaotfload} package} -% \date{2010/05/30 v1.09} +% \date{2010/06/07 v1.10} % \author{ Elie Roux\footnote{\texttt{elie.roux@telecom-bretagne.eu}} % \and Khaled Hosny\footnote{\texttt{khaledhosny@eglug.org}}} % @@ -311,25 +311,23 @@ and the derived files % to keep track of fonts available to \LuaTeX. Using this database, fonts can % be loaded by font name as well as filename. % -% This font database must be maintained as you add (and remove) fonts to your -% system. To update the database, run the script |mkluatexfontdb.lua| that is -% included with this package. If you have not run it before, it may take quite -% some time to process every font on your computer. Subsequent runs to update -% the database will be quite fast, however. -% -% In \TeX~Live~2010, there will be a button in the \TeX~Live package manager -% to run |mkluatexfontdb.lua|. +% This font database is maintained automatically as you add and remove fonts +% to/from your system. To update the database manually, run the script +% |mkluatexfontdb| that is included with this package. If you have not run it +% before, it may take quite some time to process every font on your computer. +% This is particularly noticeable if it occurs during a typesetting run. +% Subsequent runs to update the database will be quite fast, however. % % The script will parse standard places for fonts in your system to build the -% font database. On Windows and Linus, it will use |fc-list| to find the -% fonts; on Mac~OS~X, it will search in the standard font locations -% |~/Library/Fonts|, |/Library/Fonts|, |/System/Library/Fonts|, and -% |/Network/Library/Fonts|, +% font database. Linux, it will use |fontconfig| to find the font locations; +% on Windows and Mac~OS~X, it will search in the standard font locations, +% |%WINDIR%\Fonts| in Windows and |~/Library/Fonts|, |/Library/Fonts|, +% |/System/Library/Fonts|, and |/Network/Library/Fonts| in Mac~OS~X. % -% If you do not wish the script to locate fonts automatically but would rather -% specify the exact locations in which to find your fonts, set the |OSFONTDIR| -% environment variable instead. When this variable is set, the script will -% only search in those directories. +% If you do not wish the script to search the standard font locations by +% default but would rather specify the exact locations in which to find your +% fonts, set the |OSFONTDIR| environment variable instead. When this variable +% is set, the script will only search in those directories. % % |mkluatexfontdb.lua --help| provides a brief summary of the functionality of % the script and includes some advanced options that we have not mentioned @@ -413,8 +411,8 @@ module('luaotfload', package.seeall) luaotfload.module = { name = "luaotfload", - version = 1.09, - date = "2010/05/30", + version = 1.10, + date = "2010/06/07", description = "ConTeXt font loading system.", author = "Elie Roux & Hans Hagen", copyright = "Elie Roux", @@ -459,6 +457,8 @@ end % \end{macrocode} % +% \subsection{Module loading} +% % We load the \ConTeXt\ files with this function. It automatically adds the % \texttt{otfl-} prefix to it, so that we call it with the actual \ConTeXt\ % name. @@ -556,6 +556,42 @@ luaotfload.loadmodule('font-clr.lua') % \end{macrocode} % +% \subsection{Emulating font dimensions} +% +% And here add some code to emulate \XeTeX's \cs{fontdimen8}, +% which stores the caps-height of the font. (Cf.\ \cs{fontdimen5} which +% stores the x-height.) +% +% Falls back to measuring the glyph if the font doesn't contain the +% necessary information. +% This needs to be extended for fonts that don't contain an `X'. +% +% \begin{macrocode} +local function def_font(...) + local fontdata = fonts.define.read(...) + if type(fontdata) == "table" and fontdata.shared then + local capheight + local units = fontdata.units + local size = fontdata.size + local otfdata = fontdata.shared.otfdata + + if otfdata.pfminfo.os2_capheight > 0 then + capheight = otfdata.pfminfo.os2_capheight/units*size + else + if fontdata.characters[string.byte("X")] then + capheight = fontdata.characters[string.byte("X")].height + else + capheight = otfdata.metadata.ascent/units*size + end + end + fontdata.parameters[8] = capheight + end + return fontdata +end +% \end{macrocode} +% +% \subsection{\ConTeXt\ override} +% % Here we override some defaults set in \ConTeXt\ code. % % \begin{macrocode} @@ -577,7 +613,7 @@ function luaotfload.register_callbacks() 'luaotfload.hpack_filter') luatexbase.reset_callback('define_font') luatexbase.add_to_callback('define_font', - fonts.define.read, + def_font, 'luaotfload.define_font', 1) luatexbase.add_to_callback('find_vf_file', fonts.vf.find, @@ -595,6 +631,7 @@ function luaotfload.unregister_callbacks() 'luaotfload.find_vf_file') end % \end{macrocode} +% % \iffalse %</lua> % \fi @@ -616,7 +653,7 @@ end \else \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luaotfload}% - [2010/05/30 v1.09 ConTeXt font loading system] + [2010/06/07 v1.10 ConTeXt font loading system] \RequirePackage{luatextra} \fi diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua index bcf831d10f9..7396218ca4d 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.lua @@ -20,8 +20,8 @@ module('luaotfload', package.seeall) luaotfload.module = { name = "luaotfload", - version = 1.09, - date = "2010/05/30", + version = 1.10, + date = "2010/06/07", description = "ConTeXt font loading system.", author = "Elie Roux & Hans Hagen", copyright = "Elie Roux", @@ -111,6 +111,27 @@ luaotfload.loadmodule('font-dum.lua') luaotfload.loadmodule('font-nms.lua') luaotfload.loadmodule('font-clr.lua') +local function def_font(...) + local fontdata = fonts.define.read(...) + if type(fontdata) == "table" and fontdata.shared then + local capheight + local units = fontdata.units + local size = fontdata.size + local otfdata = fontdata.shared.otfdata + + if otfdata.pfminfo.os2_capheight > 0 then + capheight = otfdata.pfminfo.os2_capheight/units*size + else + if fontdata.characters[string.byte("X")] then + capheight = fontdata.characters[string.byte("X")].height + else + capheight = otfdata.metadata.ascent/units*size + end + end + fontdata.parameters[8] = capheight + end + return fontdata +end fonts.mode = "node" @@ -124,7 +145,7 @@ function luaotfload.register_callbacks() 'luaotfload.hpack_filter') luatexbase.reset_callback('define_font') luatexbase.add_to_callback('define_font', - fonts.define.read, + def_font, 'luaotfload.define_font', 1) luatexbase.add_to_callback('find_vf_file', fonts.vf.find, diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty index 4a1aa9d4559..c2bccfdcb51 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty +++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty @@ -24,7 +24,7 @@ \else \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luaotfload}% - [2010/05/30 v1.09 ConTeXt font loading system] + [2010/06/07 v1.10 ConTeXt font loading system] \RequirePackage{luatextra} \fi diff --git a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-clr.lua b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-clr.lua index e1f0faa4184..a6cf63ffc9f 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-clr.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-clr.lua @@ -16,7 +16,7 @@ table.insert(fonts.triggers,"color") function initializers.common.color(tfmdata,value) if value then - tfmdata.color = value + tfmdata.color = tostring(value) add_color_callback() end end diff --git a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua index 4050f266096..73a45c9dbf0 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-nms.lua @@ -38,7 +38,7 @@ local splitpath, expandpath = file.split_path, kpse.expand_path local glob, basename = dir.glob, file.basename local upper, lower, format = string.upper, string.lower, string.format local gsub, match, rpadd = string.gsub, string.match, string.rpadd -local gmatch, sub = string.gmatch, string.sub +local gmatch, sub, find = string.gmatch, string.sub, string.find local utfgsub = unicode.utf8.gsub local trace_short = false --tracing adapted to rebuilding of the database inside a document @@ -93,11 +93,10 @@ function names.load() foundname = systempath end if data then - logs.report("load font", - "loaded font names database: %s", foundname) + logs.info("Font names database loaded: " .. foundname) else - logs.report("load font", - "no font names database found, generating new one") + logs.info([[Font names database not found, generating new one. + This can take several minutes; please be patient.]]) data = names.update() names.save(data) end @@ -128,24 +127,6 @@ local loaded = false local reloaded = false function names.resolve(specification) - local tfm = resolvers.find_file(specification.name, "tfm") - local ext = lower(file.extname(specification.name)) - - if tfm then - -- is a tfm font, skip names database - if ext == 'tfm' then - return specification.name, false - else - return specification.name..'.tfm', false - end - elseif resolvers.find_file(specification.name, "ofm") then - if ext == 'ofm' then - return specification.name, false - else - return specification.name..'.ofm', false - end - end - local name = sanitize(specification.name) local style = sanitize(specification.style) or "regular" @@ -165,28 +146,6 @@ function names.resolve(specification) local data = names.data if type(data) == "table" and data.version == names.version then if data.mappings then - -- if the specified name ends like a font file, we first look for - -- it through kpse, and if we don't find it, we look for it in - -- the database. - if table.contains(font_extensions_lc, ext) then - local fname = specification.name - -- for absolute and relative path, kpse will find them, so - -- there shouldn't be any problem - local path = resolvers.find_file(fname, "opentype fonts") - if not path then - path = resolvers.find_file(fname, "truetype fonts") - end - if path then - return path -- or fname ? - else - for _,face in ipairs(data.mappings) do - if basename(face.filename[1]) == fname then - return face.filename[1], face.filename[2] - end - end - end - return specification.name - end local found = { } for _,face in ipairs(data.mappings) do local family = sanitize(face.names.family) @@ -230,8 +189,6 @@ function names.resolve(specification) found[1] = face break end - else - found[1] = face end else if name == fullname @@ -437,9 +394,6 @@ local function load_font(filename, fontnames, newfontnames, texmf) end return end - if trace_loading then - logs.report("loading font: %s", basefile) - end local info = fontloader.info(filename) if info then if type(info) == "table" and #info > 1 then @@ -508,15 +462,9 @@ fonts.path_normalize = path_normalize if os.name == "macosx" then -- While Mac OS X 10.6 has a problem with TTC files, ignore them globally: - font_extensions = { - "otf", "ttf", "dfont", "OTF", "TTF", "DFONT" - } - font_extensions_lc = { "otf", "ttf", "dfont" } + font_extensions = { "otf", "ttf", "dfont" } else - font_extensions = { - "otf", "ttf", "ttc", "dfont", "OTF", "TTF", "TTC", "DFONT" - } - font_extensions_lc = { "otf", "ttf", "ttc", "dfont" } + font_extensions = { "otf", "ttf", "ttc", "dfont" } end local function scan_dir(dirname, fontnames, newfontnames, texmf) @@ -532,23 +480,28 @@ local function scan_dir(dirname, fontnames, newfontnames, texmf) if trace_search then logs.report("scanning '%s'", dirname) end - for _,ext in ipairs(font_extensions) do - found = glob(dirname .. "/**." .. ext) - -- note that glob fails silently on broken symlinks, which happens - -- sometimes in TeX Live. - if trace_search then - logs.report("%s '%s' fonts found", #found, ext) + for _,i in next, font_extensions do + for _,ext in next, { i, upper(i) } do + found = glob(format("%s/**.%s$", dirname, ext)) + -- note that glob fails silently on broken symlinks, which happens + -- sometimes in TeX Live. + if trace_search then + logs.report("%s '%s' fonts found", #found, ext) + end + nbfound = nbfound + #found + table.append(list, found) end - nbfound = nbfound + #found - table.append(list, found) end if trace_search then logs.report("%d fonts found in '%s'", nbfound, dirname) end list = remove_ignore_fonts(list) -- fixme: general solution required - for _,fnt in ipairs(list) do - fnt = path_normalize(fnt) - load_font(fnt, fontnames, newfontnames, texmf) + for _,file in next, list do + file = path_normalize(file) + if trace_loading then + logs.report("loading font: %s", file) + end + load_font(file, fontnames, newfontnames, texmf) end end @@ -583,15 +536,15 @@ local function scan_texmf_fonts(fontnames, newfontnames) --]] if trace_progress then if expandpath("$OSFONTDIR"):is_empty() then - logs.report("scanning TEXMF fonts:") + logs.report("Scanning TEXMF fonts:") else - logs.report("scanning TEXMF and OS fonts:") + logs.report("Scanning TEXMF and OS fonts:") end elseif trace_short then if expandpath("$OSFONTDIR"):is_empty() then - logs.info("scanning TEXMF fonts...") + logs.info("Scanning TEXMF fonts...") else - logs.info("scanning TEXMF and OS fonts...") + logs.info("Scanning TEXMF and OS fonts...") end end local fontdirs = expandpath("$OPENTYPEFONTS"):gsub("^\.", "") @@ -625,26 +578,73 @@ end The code is minimal, please report any error it may generate. ]] -local function read_fonts_conf() - local f = io.open("/etc/fonts/fonts.conf") +local function read_fonts_conf(path, results) + local f = io.open(path) if not f then - error("Cannot open the file /etc/fonts/fonts.conf") + error("Cannot open the file "..path) end - local results = {} local incomments = false for line in f:lines() do - -- spaghetti code... hmmm... - if incomments and sub(line, 1, 3) == '-->' then - incomments = false - elseif sub(line, 1, 4) == '<!--' then - incomments = true - else - for dir in gmatch(line, '<dir>([^<]+)</dir>') do - -- now we need to replace ~ by kpse.expand_path('~') - if sub(dir, 1, 1) == '~' then - dir = kpse.expand_path('~') .. sub(dir, 2) + while line and line ~= "" do + -- spaghetti code... hmmm... + if incomments then + local tmp = find(line, '-->') + if tmp then + incomments = false + line = sub(line, tmp+3) + else + line = nil + end + else + local tmp = find(line, '<!--') + local newline = line + if tmp then + -- for the analysis, we take everything that is before the + -- comment sign + newline = sub(line, 1, tmp-1) + -- and we loop again with the comment + incomments = true + line = sub(line, tmp+4) + else + -- if there is no comment start, the block after that will + -- end the analysis, we exit the while loop + line = nil + end + for dir in gmatch(newline, '<dir>([^<]+)</dir>') do + -- now we need to replace ~ by kpse.expand_path('~') + if sub(dir, 1, 1) == '~' then + dir = kpse.expand_path('~') .. sub(dir, 2) + end + -- we exclude paths with texmf in them, as they should be + -- found anyway + if not find(dir, 'texmf') then + results[#results+1] = dir + end + end + for include in gmatch(newline, '<include[^<]*>([^<]+)</include>') do + -- include here can be four things: a directory or a file, + -- in absolute or relative path. + if sub(include, 1, 1) == '~' then + include = kpse.expand_path('~') .. sub(include, 2) + -- First if the path is relative, we make it absolute: + elseif not lfs.isfile(include) and not lfs.isdir(include) then + include = file.join(file.dirname(path), include) + end + if lfs.isfile(include) then + -- maybe we should prevent loops here? + -- we exclude path with texmf in them, as they should + -- be found otherwise + read_fonts_conf(include, results) + elseif lfs.isdir(include) then + if sub(include, -1, 0) ~= "/" then + include = include.."/" + end + found = glob(include.."*.conf") + for _, f in ipairs(found) do + read_fonts_conf(f, results) + end + end end - results[#results+1] = dir end end end @@ -652,6 +652,9 @@ local function read_fonts_conf() return results end +-- for testing purpose +names.read_fonts_conf = read_fonts_conf + local function get_os_dirs() if os.name == 'macosx' then return { @@ -664,7 +667,7 @@ local function get_os_dirs() local windir = os.getenv("WINDIR") return {windir..'\\Fonts',} else - return read_fonts_conf() + return read_fonts_conf("/etc/fonts/fonts.conf", {}) end end @@ -675,12 +678,12 @@ local function scan_os_fonts(fontnames, newfontnames) - a static set of directories for Windows and MacOSX --]] if trace_progress then - logs.report("scanning OS fonts:") + logs.report("Scanning OS fonts:") elseif trace_short then - logs.info("scanning OS fonts...") + logs.info("Scanning OS fonts...") end if trace_search then - logs.info("searching in static system directories...") + logs.info("Searching in static system directories...") end count = 0 local os_dirs = get_os_dirs() @@ -708,7 +711,7 @@ local function update_names(fontnames, force) or fontnames.version ~= names.version then fontnames = fontnames_init() if trace_search then - logs.report("no font names database or old one found, " + logs.report("No font names database or old one found; " .."generating new one") end end @@ -730,6 +733,19 @@ local function save_names(fontnames) table.serialize(fontnames, true)) end -names.scan = scan_dir +local function scan_external_dir(dir) + local old_names, new_names + if loaded then + old_names = names.data + else + old_names = names.load() + loaded = true + end + new_names = table.copy(old_names) + scan_dir("zapfino", old_names, new_names) + names.data = new_names +end + +names.scan = scan_external_dir names.update = update_names names.save = save_names diff --git a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-xtx.lua b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-xtx.lua index 10062deed95..c8bcd2214e6 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-xtx.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/otfl-font-xtx.lua @@ -90,7 +90,6 @@ otf.tables = otf.tables or { } otf.tables.defaults = { dflt = { - "calt", "ccmp", "locl", "rlig", "liga", "clig", "kern", "mark", "mkmk", }, @@ -174,11 +173,10 @@ local function istrue (s) list[s] = true end local function isfalse(s) list[s] = false end local spaces = lpeg.P(" ")^0 --- ER: now accepting names like C:/program files/texlive/2009/... -local namespec = (lpeg.R("az", "AZ") * lpeg.P(":"))^-1 * (1-lpeg.S("/:("))^1 -- was: (1-lpeg.S("/: ("))^0 +local namespec = (1-lpeg.S("/:("))^0 -- was: (1-lpeg.S("/: ("))^0 +local filespec = (lpeg.R("az", "AZ") * lpeg.P(":"))^-1 * (1-lpeg.S(":("))^1 local crapspec = spaces * lpeg.P("/") * (((1-lpeg.P(":"))^0)/isstyle) * spaces --- ER: can't understand why the 'file:' thing doesn't work with fontnames starting by c:... -local filename = (lpeg.P("file:")/isfile * (namespec/thename)) + (lpeg.P("[") * lpeg.P(true)/isname * (((1-lpeg.P("]"))^0)/thename) * lpeg.P("]")) +local filename = (lpeg.P("file:")/isfile * (filespec/thename)) + (lpeg.P("[") * lpeg.P(true)/isfile * (((1-lpeg.P("]"))^0)/thename) * lpeg.P("]")) local fontname = (lpeg.P("name:")/isname * (namespec/thename)) + lpeg.P(true)/issome * (namespec/thename) local sometext = (lpeg.R("az","AZ","09") + lpeg.S("+-."))^1 local truevalue = lpeg.P("+") * spaces * (sometext/istrue) @@ -204,6 +202,14 @@ function fonts.define.specify.colonized(specification) -- xetex mode list.optsize = nil end if list.name then + if resolvers.find_file(list.name, "tfm") then + list.lookup = "file" + list.name = list.name .. ".tfm" + elseif resolvers.find_file(list.name, "ofm") then + list.lookup = "file" + list.name = list.name .. ".ofm" + end + specification.name = list.name list.name = nil end diff --git a/Master/texmf-dist/tex/luatex/luaotfload/otfl-luat-ovr.lua b/Master/texmf-dist/tex/luatex/luaotfload/otfl-luat-ovr.lua index 20d2b73dafc..7bac97d0f7c 100644 --- a/Master/texmf-dist/tex/luatex/luaotfload/otfl-luat-ovr.lua +++ b/Master/texmf-dist/tex/luatex/luaotfload/otfl-luat-ovr.lua @@ -32,6 +32,7 @@ function logs.info(category,fmt,...) else write_nl(format("%s |",name)) end + io.flush() end function logs.simple(fmt,...) |