diff options
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | NEWS | 17 | ||||
-rw-r--r-- | luaotfload.dtx | 95 | ||||
-rw-r--r-- | luaotfload.sty | 34 | ||||
-rw-r--r-- | otfl-basics-gen.lua | 297 | ||||
-rw-r--r-- | otfl-font-nms.lua | 45 | ||||
-rw-r--r-- | otfl-fonts-merged.lua | 4 | ||||
-rw-r--r-- | otfl-fonts.lua | 10 | ||||
-rw-r--r-- | tests/color.tex | 6 | ||||
-rw-r--r-- | tests/fontspec_lookup.ltx | 41 | ||||
-rw-r--r-- | tests/fullname.tex | 6 | ||||
-rw-r--r-- | tests/marks.tex | 3 | ||||
-rw-r--r-- | tests/math.tex | 1 | ||||
-rw-r--r-- | tests/microtypography.tex | 31 | ||||
-rw-r--r-- | tests/opbd.tex | 30 | ||||
-rw-r--r-- | tests/zero_width_marks_lig.tex | 16 |
16 files changed, 244 insertions, 399 deletions
@@ -19,10 +19,9 @@ SOURCE = $(DTX) $(OTFL) README Makefile NEWS $(SCRIPT) # test files TESTDIR = tests -TESTFILES = $(wildcard $(TESTDIR)/*.tex) +TESTFILES = $(wildcard $(TESTDIR)/*.tex $(TESTDIR)/*.ltx) TESTFILES_SYS = $(TESTDIR)/systemfonts.tex $(TESTDIR)/fontconfig_conf_reading.tex TESTFILES_TL = $(filter-out $(TESTFILES_SYS), $(TESTFILES)) -TESTENV = env TEXINPUTS='.;..;$$TEXMF/tex/{luatex,plain,generic,}//' TEXMFVAR='../var' # Files grouped by installation location SCRIPTFILES = $(SCRIPT) @@ -95,9 +94,9 @@ install: $(ALL_FILES) check: $(RUNFILES) $(TESTFILES_TL) @rm -rf var - @cd $(TESTDIR); for f in $(TESTFILES_TL); do \ + @for f in $(TESTFILES_TL); do \ echo "check: luatex $$f"; \ - $(TESTENV) luatex --interaction=batchmode ../$$f \ + luatex --interaction=batchmode $$f \ > /dev/null || exit $$?; \ done @@ -1,6 +1,23 @@ Change History -------------- +2013/04/xx, luaotfload v2.2: + * Synchronisation with ConTeXt from TeXLive 2013, inducing + backward-incompatible changes in the font structure (fontspec and + unicode-math must be updated) + * Synchronisation with ConTeXt is now easier and can be done by just + updating otfl-fonts-merged.lua (available in ConTeXt) + * Improve documentation + * renaming mkluatexfontdb into fontdbutil, with more search functionalities + +2013/04/11, luaotfload v1.28: + * Adapting to LuaTeX 0.75, keeping backward-compatibility + * Fix small documentation issues in mkluatexfontdb + * Fix possibility of infite loop with fontconfig config files references + * Adding semibold synonym for bold + * file:xxx syntax now uses the same search function as name: which + make more fonts recognized + 2011/04/21, luaotfload v1.25: * Fix bug loading *.dfont fonts * Misc. documentation fixes diff --git a/luaotfload.dtx b/luaotfload.dtx index d59e18a..3685083 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -990,7 +990,7 @@ and the derived files %<*lua> % \fi % \begin{macrocode} -module("luaotfload", package.seeall) +luaotfload = luaotfload or {} luaotfload.module = { name = "luaotfload", @@ -1073,22 +1073,17 @@ end local fl_prefix = "otfl" -- “luatex” for luatex-plain local loadmodule = function (name) - local tofind = fl_prefix .."-"..name - local found = find_file(tofind,"tex") - if found then - log("loading file %s.", found) - dofile(found) - else - error("file %s not found.", tofind) - end + require(fl_prefix .."-"..name) end % \end{macrocode} % -% Virtual fonts are resolved via a callback. -% \luafunction{find_vf_file} derives the name of the virtual font file -% from the filename. -% (NB: \CONTEXT handles this likewise in \fileent{font-vf.lua}.) +% Before \TeX Live 2013 version, \LUATEX had a bug that made ofm fonts fail +% when called with their extension. There was a side-effect making ofm +% totally unloadable when luaotfload was present. The following lines are +% a patch for this bug. The utility of these lines is questionable as they +% are not necessary since \TeX Live 2013. They should be removed in the next +% version. % % \begin{macrocode} local Cs, P, lpegmatch = lpeg.Cs, lpeg.P, lpeg.match @@ -1192,15 +1187,9 @@ end % \identifier{luatexbase}-style callback handling here. % % \begin{macrocode} -if not _G. generic_context then _G. generic_context = { } end -if not _G.non_generic_context then _G.non_generic_context = { } end - -local generic_context = generic_context -local non_generic_context =non_generic_context +generic_context = {no_callbacks_yet = true} -generic_context.no_callbacks_yet = true - -_G.non_generic_context = { luatex_fonts = { +non_generic_context = { luatex_fonts = { load_before = "otfl-fonts-merged.lua", -- load_after = nil, --- TODO, this is meant for callbacks skip_loading = true, @@ -1220,6 +1209,23 @@ callback.register = dummy_function % \end{macrocode} % +% In order to have an output with normal verbosity, we need to pre-override +% some \CONTEXT log function: +% +% \begin{macrocode} + +local dummylogfunction=function() end +local dummylogreporter=function(c) return function(...) log(string.formatters(...)) end end + +logs={ + new=dummylogreporter, + reporter=dummylogreporter, + messenger=dummylogreporter, + report=dummylogfunction, +} + +% \end{macrocode} +% % Now that things are sorted out we can finally load the fontloader. % % \begin{macrocode} @@ -1247,9 +1253,9 @@ do local new_attribute = luatexbase.new_attribute local the_attributes = luatexbase.attributes - _G.attributes = _G.attributes or { } + attributes = attributes or { } - _G.attributes.private = function (name) + attributes.private = function (name) local attr = "otfl@" .. name local number = the_attributes[attr] if not number then @@ -1295,22 +1301,19 @@ loadmodule"font-otc.lua" -- TODO check what we can drop from otfl-features loadmodule"lib-dir.lua" -- required by font-nms loadmodule"luat-ovr.lua" -if fonts and fonts.readers.tfm then - -------------------------------------------------------------------- - --- OFM; read this first - -------------------------------------------------------------------- - --- I can’t quite make out whether this is still relevant - --- as those ofm fonts always fail, even in the 2011 version - --- (mktexpk: don't know how to create bitmap font for omarabb.ofm) - --- the font loader appears to read ofm like tfm so if this - --- hack was supposed achieve that, we should excise it anyways - fonts.readers.ofm = fonts.readers.tfm - fonts.handlers.ofm = fonts.handlers.tfm --- empty anyways - fonts.formats.ofm = fonts.formats.tfm --- “type1” - --- fonts.readers.sequence[#fonts.readers.sequence+1] = "ofm" - -------------------------------------------------------------------- -end - +% \end{macrocode} +% +% +% \CONTEXT does not support ofm, these lines were added in order to make it +% work. However they do not seem necessary so they are commented for now. +% +% \begin{macrocode} +-- if fonts and fonts.readers.tfm then +-- fonts.readers.ofm = fonts.readers.tfm +-- fonts.handlers.ofm = fonts.handlers.tfm --- empty anyways +-- fonts.formats.ofm = fonts.formats.tfm --- “type1” +-- --- fonts.readers.sequence[#fonts.readers.sequence+1] = "ofm" +--end % \end{macrocode} % % @@ -1325,6 +1328,20 @@ loadmodule"font-ltx.lua" --- new in 2.0, added 2011 % \end{macrocode} % % +% This hack makes fonts called with file method found by fonts.names.resove +% instead of just trying to find them with kpse. It is necessary in case +% of fonts that are not accessible by kpse but present in the database, a +% quite common case under Linux. +% +% \begin{macrocode} + +fonts.definers.resolvers.file = function (specification) + specification.name = fonts.names.resolve('', '', specification) +end + +% \end{macrocode} +% +% % We create a callback for patching fonts on the fly, to be used by other % packages. % It initially contains the empty function that we are going to override diff --git a/luaotfload.sty b/luaotfload.sty deleted file mode 100644 index 4d566af..0000000 --- a/luaotfload.sty +++ /dev/null @@ -1,34 +0,0 @@ -%% -%% This is file `luaotfload.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% luaotfload.dtx (with options: `package') -%% This is a generated file. -%% -%% Copyright (C) 2009-2011 by by Elie Roux <elie.roux@telecom-bretagne.eu> -%% and Khaled Hosny <khaledhosny@eglug.org> -%% (Support: <lualatex-dev@tug.org>.) -%% -%% This work is under the CC0 license. -%% -%% This work consists of the main source file luaotfload.dtx -%% and the derived files -%% luaotfload.sty, luaotfload.lua -%% -\csname ifluaotfloadloaded\endcsname -\let\ifluaotfloadloaded\endinput -\bgroup\expandafter\expandafter\expandafter\egroup -\expandafter\ifx\csname ProvidesPackage\endcsname\relax - \input luatexbase.sty -\else - \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luaotfload}% - [2011/10/06 v2.0 OpenType layout system] - \RequirePackage{luatexbase} -\fi -\RequireLuaModule{luaotfload} -\endinput -%% -%% End of file `luaotfload.sty'. diff --git a/otfl-basics-gen.lua b/otfl-basics-gen.lua deleted file mode 100644 index 288cfa2..0000000 --- a/otfl-basics-gen.lua +++ /dev/null @@ -1,297 +0,0 @@ -if not modules then modules = { } end modules ['luat-basics-gen'] = { - version = 1.100, - comment = "companion to luatex-*.tex", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -if context then - texio.write_nl("fatal error: this module is not for context") - os.exit() -end - -local dummyfunction = function() end ------ dummyreporter = function(c) return function(...) texio.write_nl(c .. " : " .. string.format(...)) end end -local dummyreporter = function(c) return function(...) texio.write_nl(c .. " : " .. string.formatters(...)) end end - -statistics = { - register = dummyfunction, - starttiming = dummyfunction, - stoptiming = dummyfunction, - elapsedtime = nil, -} - -directives = { - register = dummyfunction, - enable = dummyfunction, - disable = dummyfunction, -} - -trackers = { - register = dummyfunction, - enable = dummyfunction, - disable = dummyfunction, -} - -experiments = { - register = dummyfunction, - enable = dummyfunction, - disable = dummyfunction, -} - -storage = { -- probably no longer needed - register = dummyfunction, - shared = { }, -} - -logs = { - new = dummyreporter, - reporter = dummyreporter, - messenger = dummyreporter, - report = dummyfunction, -} - -callbacks = { - register = function(n,f) return callback.register(n,f) end, - -} - -utilities = { - storage = { - allocate = function(t) return t or { } end, - mark = function(t) return t or { } end, - }, -} - -characters = characters or { - data = { } -} - --- we need to cheat a bit here - -texconfig.kpse_init = true - -resolvers = resolvers or { } -- no fancy file helpers used - -local remapper = { - otf = "opentype fonts", - ttf = "truetype fonts", - ttc = "truetype fonts", - dfont = "truetype fonts", -- "truetype dictionary", - cid = "cid maps", - cidmap = "cid maps", - fea = "font feature files", - pfa = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this! - pfb = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this! -} - -function resolvers.findfile(name,fileformat) - name = string.gsub(name,"\\","/") - if not fileformat or fileformat == "" then - fileformat = file.suffix(name) - if fileformat == "" then - fileformat = "tex" - end - end - fileformat = string.lower(fileformat) - fileformat = remapper[fileformat] or fileformat - local found = kpse.find_file(name,fileformat) - if not found or found == "" then - found = kpse.find_file(name,"other text files") - end - return found -end - --- function resolvers.findbinfile(name,fileformat) --- if not fileformat or fileformat == "" then --- fileformat = file.suffix(name) --- end --- return resolvers.findfile(name,(fileformat and remapper[fileformat]) or fileformat) --- end - -resolvers.findbinfile = resolvers.findfile - -function resolvers.resolve(s) - return s -end - -function resolvers.unresolve(s) - return s -end - --- Caches ... I will make a real stupid version some day when I'm in the --- mood. After all, the generic code does not need the more advanced --- ConTeXt features. Cached data is not shared between ConTeXt and other --- usage as I don't want any dependency at all. Also, ConTeXt might have --- different needs and tricks added. - ---~ containers.usecache = true - -caches = { } - -local writable, readables = nil, { } - -if not caches.namespace or caches.namespace == "" or caches.namespace == "context" then - caches.namespace = 'generic' -end - -do - - local cachepaths = kpse.expand_path('$TEXMFCACHE') or "" - - if cachepaths == "" then - cachepaths = kpse.expand_path('$TEXMFVAR') - end - - if cachepaths == "" then - cachepaths = kpse.expand_path('$VARTEXMF') - end - - if cachepaths == "" then - cachepaths = "." - end - - cachepaths = string.split(cachepaths,os.type == "windows" and ";" or ":") - - for i=1,#cachepaths do - if file.is_writable(cachepaths[i]) then - writable = file.join(cachepaths[i],"luatex-cache") - lfs.mkdir(writable) - writable = file.join(writable,caches.namespace) - lfs.mkdir(writable) - break - end - end - - for i=1,#cachepaths do - if file.is_readable(cachepaths[i]) then - readables[#readables+1] = file.join(cachepaths[i],"luatex-cache",caches.namespace) - end - end - - if not writable then - texio.write_nl("quiting: fix your writable cache path") - os.exit() - elseif #readables == 0 then - texio.write_nl("quiting: fix your readable cache path") - os.exit() - elseif #readables == 1 and readables[1] == writable then - texio.write(string.format("(using cache: %s)",writable)) - else - texio.write(string.format("(using write cache: %s)",writable)) - texio.write(string.format("(using read cache: %s)",table.concat(readables, " "))) - end - -end - -function caches.getwritablepath(category,subcategory) - local path = file.join(writable,category) - lfs.mkdir(path) - path = file.join(path,subcategory) - lfs.mkdir(path) - return path -end - -function caches.getreadablepaths(category,subcategory) - local t = { } - for i=1,#readables do - t[i] = file.join(readables[i],category,subcategory) - end - return t -end - -local function makefullname(path,name) - if path and path ~= "" then - name = "temp-" .. name -- clash prevention - return file.addsuffix(file.join(path,name),"lua"), file.addsuffix(file.join(path,name),"luc") - end -end - -function caches.is_writable(path,name) - local fullname = makefullname(path,name) - return fullname and file.is_writable(fullname) -end - -function caches.loaddata(paths,name) - for i=1,#paths do - local data = false - local luaname, lucname = makefullname(paths[i],name) - if lucname and lfs.isfile(lucname) then -- maybe also check for size - texio.write(string.format("(load luc: %s)",lucname)) - data = loadfile(lucname) - if data then - data = data() - end - if data then - return data - else - texio.write(string.format("(loading failed: %s)",lucname)) - end - end - if luaname and lfs.isfile(luaname) then - texio.write(string.format("(load lua: %s)",luaname)) - data = loadfile(luaname) - if data then - data = data() - end - if data then - return data - end - end - end -end - -function caches.savedata(path,name,data) - local luaname, lucname = makefullname(path,name) - if luaname then - texio.write(string.format("(save: %s)",luaname)) - table.tofile(luaname,data,true,{ reduce = true }) - if lucname and type(caches.compile) == "function" then - os.remove(lucname) -- better be safe - texio.write(string.format("(save: %s)",lucname)) - caches.compile(data,luaname,lucname) - end - end -end - --- According to KH os.execute is not permitted in plain/latex so there is --- no reason to use the normal context way. So the method here is slightly --- different from the one we have in context. We also use different suffixes --- as we don't want any clashes (sharing cache files is not that handy as --- context moves on faster.) --- --- Beware: serialization might fail on large files (so maybe we should pcall --- this) in which case one should limit the method to luac and enable support --- for execution. - -caches.compilemethod = "both" - -function caches.compile(data,luaname,lucname) - local done = false - if caches.compilemethod == "luac" or caches.compilemethod == "both" then - done = os.spawn("texluac -o " .. string.quoted(lucname) .. " -s " .. string.quoted(luaname)) == 0 - end - if not done and (caches.compilemethod == "dump" or caches.compilemethod == "both") then - local d = io.loaddata(luaname) - if not d or d == "" then - d = table.serialize(data,true) -- slow - end - if d and d ~= "" then - local f = io.open(lucname,'w') - if f then - local s = loadstring(d) - if s then - f:write(string.dump(s,true)) - end - f:close() - end - end - end -end - --- - -function table.setmetatableindex(t,f) - setmetatable(t,{ __index = f }) -end diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua index 048a90a..cec2a54 100644 --- a/otfl-font-nms.lua +++ b/otfl-font-nms.lua @@ -6,6 +6,11 @@ if not modules then modules = { } end modules ['font-nms'] = { 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... + --- Luatex builtins local load = load local next = next @@ -57,14 +62,25 @@ fonts = fonts or { } fonts.names = fonts.names or { } local names = fonts.names -local names_dir = "luatex-cache/generic/names" + names.version = 2.2 names.data = nil names.path = { basename = "otfl-names.lua", - dir = filejoin(kpseexpand_var("$TEXMFVAR"), names_dir), + dir = "", + path = "", } +-- We use the cache.* of ConTeXt (see luat-basics-gen), we can +-- use it safely (all checks and directory creations are already done). It +-- uses TEXMFCACHE or TEXMFVAR as starting points. +local writable_path = caches.getwritablepath("names","") +if not writable_path then + error("Impossible to find a suitable writeable cache...") +end +names.path.dir = writable_path +names.path.path = filejoin(writable_path, names.path.basename) + ---- <FIXME> --- @@ -165,8 +181,7 @@ local scan_external_dir local update_names load_names = function ( ) - local path = filejoin(names.path.dir, names.path.basename) - local foundname, data = load_lua_file(path) + local foundname, data = load_lua_file(names.path.path) if data then report("info", 1, "db", @@ -240,13 +255,14 @@ font database created by the mkluatexfontdb script. --- --- the return value of “resolve” is the file name of the requested --- font - +--- --- 'a -> 'a -> table -> (string * string | bool * bool) --- --- note by phg: I added a third return value that indicates a --- successful lookup as this cannot be inferred from the other --- values. --- +--- resolve = function (_,_,specification) -- the 1st two parameters are used by ConTeXt local name = sanitize_string(specification.name) local style = sanitize_string(specification.style) or "regular" @@ -383,12 +399,12 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con return reload_db(resolve, nil, nil, specification) else --- else, fallback to requested name - --- XXX: specification.name is empty with absolute paths, looks - --- like a bug in the specification parser + --- specification.name is empty with absolute paths, looks + --- like a bug in the specification parser <TODO< is it still + --- relevant? looks not... return specification.name, false, false end end - else --- no db or outdated; reload names and retry if not fonts_reloaded then return reload_db(resolve, nil, nil, specification) @@ -895,7 +911,9 @@ read_fonts_conf = function (path, results, passed_paths) read_fonts_conf(include, results, passed_paths) elseif lfs.isdir(include) then for _,f in next, dirglob(filejoin(include, "*.conf")) do - read_fonts_conf(f, results, passed_paths) + if not passed_paths_set[f] then + read_fonts_conf(f, results, passed_paths) + end end end end @@ -921,12 +939,17 @@ local function get_os_dirs() elseif os.type == "windows" or os.type == "msdos" or os.name == "cygwin" then local windir = os.getenv("WINDIR") return { filejoin(windir, 'Fonts') } - else --- TODO what about ~/config/fontconfig/fonts.conf etc? + else + local passed_paths = {} + local os_dirs = {} + -- what about ~/config/fontconfig/fonts.conf etc? + -- Answer: they should be included by the others, please report if it's not for _,p in next, {"/usr/local/etc/fonts/fonts.conf", "/etc/fonts/fonts.conf"} do if lfs.isfile(p) then - return read_fonts_conf("/etc/fonts/fonts.conf", {}, {}) + read_fonts_conf(p, os_dirs, passed_paths) end end + return os_dirs end return {} end diff --git a/otfl-fonts-merged.lua b/otfl-fonts-merged.lua index 44f42ed..e095153 100644 --- a/otfl-fonts-merged.lua +++ b/otfl-fonts-merged.lua @@ -2926,7 +2926,7 @@ storage={ register=dummyfunction, shared={}, } -logs={ +logs=logs or { new=dummyreporter, reporter=dummyreporter, messenger=dummyreporter, @@ -2988,7 +2988,7 @@ end do local cachepaths=kpse.expand_path('$TEXMFCACHE') or "" if cachepaths=="" then - cachepaths=kpse.expand_path('$TEXMFVAR') + cachepaths=kpse.expand_path('$TEXMFVAR') or "" end if cachepaths=="" then cachepaths=kpse.expand_path('$VARTEXMF') diff --git a/otfl-fonts.lua b/otfl-fonts.lua index 75bd079..7e32465 100644 --- a/otfl-fonts.lua +++ b/otfl-fonts.lua @@ -37,10 +37,12 @@ if not generic_context then generic_context = { } end +local printinfo = function(s) texio.write_nl("log", s) end + if not generic_context.push_namespaces then function generic_context.push_namespaces() - texio.write(" <push namespace>") + printinfo(" <push namespace>") local normalglobal = { } for k, v in next, _G do normalglobal[k] = v @@ -50,7 +52,7 @@ if not generic_context.push_namespaces then function generic_context.pop_namespaces(normalglobal,isolate) if normalglobal then - texio.write(" <pop namespace>") + printinfo(" <pop namespace>") for k, v in next, _G do if not normalglobal[k] then generic_context[k] = v @@ -110,7 +112,7 @@ local function loadmodule(name,continue) end else if verbose then - texio.write(string.format(" <%s>",foundname)) -- no file.basename yet + printinfo(string.format(" <%s>",foundname)) -- no file.basename yet end dofile(foundname) end @@ -252,6 +254,6 @@ end -- We're done. -texio.write(string.format(" <luatex-fonts.lua loaded in %0.3f seconds>", os.gettimeofday()-starttime)) +--texio.write(string.format(" <luatex-fonts.lua loaded in %0.3f seconds>", os.gettimeofday()-starttime)) generic_context.pop_namespaces(whatever) diff --git a/tests/color.tex b/tests/color.tex index 1be8896..188889c 100644 --- a/tests/color.tex +++ b/tests/color.tex @@ -4,7 +4,7 @@ \font\testb=file:lmroman10-regular.otf:color=FFFF0099;+trep at 10pt \font\testc=file:lmroman10-regular.otf:color=559922;+trep at 12pt -\testa \input knuth \par -\testb \input knuth \par -\testc \input knuth \par +\testa FF0000BB \par +\testb FFFF0099 \par +\testc 559922 \par \bye diff --git a/tests/fontspec_lookup.ltx b/tests/fontspec_lookup.ltx new file mode 100644 index 0000000..6645427 --- /dev/null +++ b/tests/fontspec_lookup.ltx @@ -0,0 +1,41 @@ +\documentclass[a5paper,12pt]{scrartcl} +\usepackage{fontspec} +%% -------------------------------------------------------------------- +%% weirdness ahead +%% -------------------------------------------------------------------- +\setmainfont + [Numbers=Lining, + BoldFont={TeX Gyre Pagella Bold}, + BoldItalicFont={TeX Gyre Termes BoldItalic}] + {EB Garamond} +%% -------------------------------------------------------------------- + +%% -------------------------------------------------------------------- +%% excerpt from samples/knuth.tex +%% -------------------------------------------------------------------- +\def\knuth{% + Thus, I came to the conclusion that the designer of a new + system must not only be the implementer and first + large--scale user; the designer should also write the first + user manual. + + The separation of any of these four components would have + hurt \TeX\ significantly. If I had not participated fully in + all these activities, literally hundreds of improvements + would never have been made, because I would never have + thought of them or perceived why they were important. + +} + +%% -------------------------------------------------------------------- +%% main +%% -------------------------------------------------------------------- +\begin{document} + + \section{regular} {\rmfamily\upshape\knuth} + \section{bold face} {\rmfamily\bfseries\knuth} + \section{italic} {\rmfamily\itshape\knuth} + \section{slanted} {\rmfamily\slshape\knuth} + \section{bold italic} {\rmfamily\bfseries\itshape\knuth} + +\end{document} diff --git a/tests/fullname.tex b/tests/fullname.tex index 0209c98..78cf4d0 100644 --- a/tests/fullname.tex +++ b/tests/fullname.tex @@ -3,7 +3,13 @@ \font\testa={LM Roman Slanted 10 Regular} at 10pt \font\testb={LM Roman 9 Italic} at 10pt \font\testc={TeX Gyre Termes Bold} at 25pt +% Also testing with absolute filename, please change the path according to your +% system +\font\testd=file:/usr/share/texmf/fonts/opentype/public/lm/lmmono10-italic.otf + \testa abcd ABCD\par \testb abcd ABCD\par \testc abcd ABCD\par +\testd abcd ABCD\par + \bye diff --git a/tests/marks.tex b/tests/marks.tex index d33c82a..3af264e 100644 --- a/tests/marks.tex +++ b/tests/marks.tex @@ -1,6 +1,9 @@ \input luaotfload.sty \font\test={file:GenBasR.ttf:script=latn} +\test ä\quad Ä + \test a\char"0308 \quad A\char"0308 \quad j\char"0323 + \bye diff --git a/tests/math.tex b/tests/math.tex index 55bb2aa..a2615f1 100644 --- a/tests/math.tex +++ b/tests/math.tex @@ -35,7 +35,6 @@ $$ $$ \Umathaccent "0 "4 "23DE {a+b} -+ \Umathbotaccent "0 "4 "23DF {a+b} = C $$ $$ diff --git a/tests/microtypography.tex b/tests/microtypography.tex index 7d032e3..99deb5f 100644 --- a/tests/microtypography.tex +++ b/tests/microtypography.tex @@ -4,6 +4,33 @@ \font\testa=file:texgyretermes-regular:script=latn at 12pt \font\testb=file:texgyretermes-regular:script=latn;protrusion=default at 12pt -\testa \input tufte \par -\testb \input tufte \par + +\testa We thrive in information thick worlds because of our +marvelous and everyday capacity to select, edit, +single out, structure, highlight, group, pair, merge, +harmonize, synthesize, focus, organize, condense, +reduce, boil down, choose, categorize, catalog, classify, +list, abstract, scan, look into, idealize, isolate, +discriminate, distinguish, screen, pigeonhole, pick over, +sort, integrate, blend, inspect, filter, lump, skip, +smooth, chunk, average, approximate, cluster, aggregate, +outline, summarize, itemize, review, dip into, +flip through, browse, glance into, leaf through, skim, +refine, enumerate, glean, synopsize, winnow the wheat +from the chaff and separate the sheep from the goats.\par + +\testb We thrive in information thick worlds because of our +marvelous and everyday capacity to select, edit, +single out, structure, highlight, group, pair, merge, +harmonize, synthesize, focus, organize, condense, +reduce, boil down, choose, categorize, catalog, classify, +list, abstract, scan, look into, idealize, isolate, +discriminate, distinguish, screen, pigeonhole, pick over, +sort, integrate, blend, inspect, filter, lump, skip, +smooth, chunk, average, approximate, cluster, aggregate, +outline, summarize, itemize, review, dip into, +flip through, browse, glance into, leaf through, skim, +refine, enumerate, glean, synopsize, winnow the wheat +from the chaff and separate the sheep from the goats.\par + \bye diff --git a/tests/opbd.tex b/tests/opbd.tex index 50c4dfd..1a838cd 100644 --- a/tests/opbd.tex +++ b/tests/opbd.tex @@ -4,6 +4,32 @@ \font\testa=file:texgyrepagella-regular:script=latn at 12pt \font\testb=file:texgyrepagella-regular:mode=node;script=latn;protrusion=yes;featurefile=opbd.fea;+opbd at 12pt -\testa \input tufte \par -\testb \input tufte \par + +\testa We thrive in information thick worlds because of our +marvelous and everyday capacity to select, edit, +single out, structure, highlight, group, pair, merge, +harmonize, synthesize, focus, organize, condense, +reduce, boil down, choose, categorize, catalog, classify, +list, abstract, scan, look into, idealize, isolate, +discriminate, distinguish, screen, pigeonhole, pick over, +sort, integrate, blend, inspect, filter, lump, skip, +smooth, chunk, average, approximate, cluster, aggregate, +outline, summarize, itemize, review, dip into, +flip through, browse, glance into, leaf through, skim, +refine, enumerate, glean, synopsize, winnow the wheat +from the chaff and separate the sheep from the goats.\par + +\testb We thrive in information thick worlds because of our +marvelous and everyday capacity to select, edit, +single out, structure, highlight, group, pair, merge, +harmonize, synthesize, focus, organize, condense, +reduce, boil down, choose, categorize, catalog, classify, +list, abstract, scan, look into, idealize, isolate, +discriminate, distinguish, screen, pigeonhole, pick over, +sort, integrate, blend, inspect, filter, lump, skip, +smooth, chunk, average, approximate, cluster, aggregate, +outline, summarize, itemize, review, dip into, +flip through, browse, glance into, leaf through, skim, +refine, enumerate, glean, synopsize, winnow the wheat +from the chaff and separate the sheep from the goats.\par \bye diff --git a/tests/zero_width_marks_lig.tex b/tests/zero_width_marks_lig.tex new file mode 100644 index 0000000..2c6dba9 --- /dev/null +++ b/tests/zero_width_marks_lig.tex @@ -0,0 +1,16 @@ +\input luaotfload.sty + +% https://bugs.freedesktop.org/attachment.cgi?id=72363 +\font\testa=file:TestLig.ttf:script=tibt;+ccmp+abvs+blws+kern at 10pt + +\testa གཚོའི་ཁིའུ་ཨཱཿཀ + +% good result for the first part: +% https://bugs.freedesktop.org/attachment.cgi?id=72365 +% for the second part, the two circles shoud appear clearlybefore the last +% letter, not mixed with it + +% see http://lists.freedesktop.org/archives/harfbuzz/2013-April/003101.html +% for some technical details. + +\bye |