diff options
-rw-r--r-- | luaotfload-basics-gen.lua | 6 | ||||
-rw-r--r-- | luaotfload-basics-nod.lua | 13 | ||||
-rw-r--r-- | luaotfload-database.lua | 6 | ||||
-rw-r--r-- | luaotfload-features.lua | 11 | ||||
-rw-r--r-- | luaotfload-merged.lua | 18 | ||||
-rw-r--r-- | luaotfload.dtx | 82 |
6 files changed, 109 insertions, 27 deletions
diff --git a/luaotfload-basics-gen.lua b/luaotfload-basics-gen.lua index 0561778..4a46fbb 100644 --- a/luaotfload-basics-gen.lua +++ b/luaotfload-basics-gen.lua @@ -147,18 +147,18 @@ do -- standard context tree setup - local cachepaths = kpse.expand_path('$TEXMFCACHE') or "" + local cachepaths = kpse.expand_var('$TEXMFCACHE') or "" -- quite like tex live or so if cachepaths == "" then - cachepaths = kpse.expand_path('$TEXMFVAR') + cachepaths = kpse.expand_var('$TEXMFVAR') or "" end -- this also happened to be used if cachepaths == "" then - cachepaths = kpse.expand_path('$VARTEXMF') + cachepaths = kpse.expand_var('$VARTEXMF') or "" end -- and this is a last resort diff --git a/luaotfload-basics-nod.lua b/luaotfload-basics-nod.lua index 151d98a..5ab9df7 100644 --- a/luaotfload-basics-nod.lua +++ b/luaotfload-basics-nod.lua @@ -28,12 +28,12 @@ if tex.attribute[0] ~= 0 then end -attributes = { } +attributes = attributes or { } attributes.unsetvalue = -0x7FFFFFFF local numbers, last = { }, 127 -function attributes.private(name) +attributes.private = attributes.private or function(name) local number = numbers[name] if not number then if last < 255 then @@ -63,6 +63,9 @@ nodes.glyphcodes = glyphcodes local free_node = node.free local remove_node = node.remove local new_node = node.new +local traverse_id = node.traverse_id + +local math_code = nodecodes.math nodes.handlers.protectglyphs = node.protect_glyphs nodes.handlers.unprotectglyphs = node.unprotect_glyphs @@ -93,3 +96,9 @@ function nodes.pool.kern(k) n.kern = k return n end + +function nodes.endofmath(n) + for n in traverse_id(math_code,n.next) do + return n + end +end diff --git a/luaotfload-database.lua b/luaotfload-database.lua index 0e46874..ee7701d 100644 --- a/luaotfload-database.lua +++ b/luaotfload-database.lua @@ -568,9 +568,11 @@ resolve = function (_,_,specification) -- the 1st two parameters are used by Con subfamily = facenames.subfamily fullname = facenames.fullname psname = facenames.psname + fontname = facenames.fontname + pfullname = facenames.pfullname end - fontname = facenames.fontname or sanitize_string(face.fontname) - pfullname = facenames.pfullname or sanitize_string(face.fullname) + fontname = fontname or sanitize_string(face.fontname) + pfullname = pfullname or sanitize_string(face.fullname) local optsize, dsnsize, maxsize, minsize if #face.size > 0 then diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 9713f95..a4d495e 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -1015,18 +1015,15 @@ local field = field_char^1 --- switches are “+key” | “-key” local normal_option = C(field) * ws * equals * ws * C(field) * ws local xetex_option = P"+" * ws * normal_option +local ignore_option = (1 - equals)^1 * equals * (1 - featuresep)^1 local assignment = xetex_option / handle_xetex_option + normal_option / handle_normal_option ------ assignment = (field / strip_leading_sign) * ws ------ * equals * ws ------ * (field / toboolean) + + ignore_option / handle_invalid_option local switch = P"+" * ws * C(field) * Cc(true) + P"-" * ws * C(field) * Cc(false) --- + C(field) * Cc(true) -- catch crap -local ignore = (1 - featuresep)^1 --- ignores one option - / handle_invalid_option + + C(field) * Cc(true) --- default local feature_expr = ws * Cg(assignment + switch) * ws -local option = feature_expr + ignore +local option = feature_expr local feature_list = Cf(Ct"" * option * (featuresep * option)^0 diff --git a/luaotfload-merged.lua b/luaotfload-merged.lua index 82ea91f..310febe 100644 --- a/luaotfload-merged.lua +++ b/luaotfload-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 05/18/13 02:06:59 +-- merge date : 05/21/13 16:14:48 do -- begin closure to overcome local limits and interference @@ -2017,11 +2017,21 @@ local pattern=(noslashes^0*slashes)^0*(noperiod^1*period)^1*C(noperiod^1)*-1 local function suffixonly(name) return name and lpegmatch(pattern,name) or "" end +local pattern=(noslashes^0*slashes)^0*noperiod^1*((period*C(noperiod^1))^1)*-1+Cc("") +local function suffixesonly(name) + if name then + return lpegmatch(pattern,name) + else + return "" + end +end file.pathpart=pathpart file.basename=basename file.nameonly=nameonly file.suffixonly=suffixonly file.suffix=suffixonly +file.suffixesonly=suffixesonly +file.suffixes=suffixesonly file.dirname=pathpart file.extname=suffixonly local drive=C(R("az","AZ"))*colon @@ -3007,12 +3017,12 @@ if not caches.namespace or caches.namespace=="" or caches.namespace=="context" t caches.namespace='generic' end do - local cachepaths=kpse.expand_path('$TEXMFCACHE') or "" + local cachepaths=kpse.expand_var('$TEXMFCACHE') or "" if cachepaths=="" then - cachepaths=kpse.expand_path('$TEXMFVAR') + cachepaths=kpse.expand_var('$TEXMFVAR') or "" end if cachepaths=="" then - cachepaths=kpse.expand_path('$VARTEXMF') + cachepaths=kpse.expand_var('$VARTEXMF') or "" end if cachepaths=="" then cachepaths="." diff --git a/luaotfload.dtx b/luaotfload.dtx index eabc240..8042a6f 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -1451,15 +1451,22 @@ luaotfload.module = { license = "GPL v2.0" } -local luatexbase = luatexbase +local luatexbase = luatexbase -local type, next = type, next +local getmetatable = getmetatable +local rawset = rawset local setmetatable = setmetatable -local find_file = kpse.find_file +local type, next = type, next + + +local kpseexpand_path = kpse.expand_path +local kpseexpand_var = kpse.expand_var +local kpsefind_file = kpse.find_file +local lfsisdir = lfs.isdir local lfsisfile = lfs.isfile -local stringfind = string.find -local stringformat = string.format -local stringmatch = string.match +local lfsmkdir = lfs.mkdir +local stringexplode = string.explode +local stringgmatch = string.gmatch local stringsub = string.sub local add_to_callback, create_callback = @@ -1509,6 +1516,53 @@ if tex.luatexversion < luatex_version then end % \end{macrocode} +% Create \verb+$TEXMFCACHE+ if not present. This is necessary due to a bug +% in Luatex-Fonts that surfaces if none of the possible cache +% directories exists. We add a fixed version of \luafunction{lfs.mkdirs} first +% that will be installed as soon as \fileent{l-file.lua} tries to insert its +% buggy version. +% +% \begin{macrocode} + +local ostype = os.type +local mkdirs = function (path) + local full + if ostype ~= "windows" and stringsub(path, 1, 1) == "/" then + --- absolute path, force initial backslash + full = "" + end + for sub in stringgmatch(path,"([^\\/]+)") do + if full then + full = full .. "/" .. sub + else + full = sub + end + if not lfsisdir(full) then + lfsmkdir(full) + end + end +end + +--- <hack version="2"> + +local backup_mkdirs -- just in case + +local lfs_mt = getmetatable(lfs) or { } --- should be empty + +lfs_mt.__newindex = function (t, k, v) + if k == "mkdirs" then + backup_mkdirs = v --> backup + rawset(t, "mkdirs", mkdirs) --> ours + else -- insert normally + t[k] = v + end +end + +setmetatable(lfs, lfs_mt) + +--- </hack> + +% \end{macrocode} % \subsection{Module loading} % We load the files imported from \CONTEXT with this function. % It automatically prepends the prefix \fileent{luaotfload-} to its @@ -1537,10 +1591,10 @@ local p_suffix = (p_dot * (1 - p_dot - p_slash)^1 * P(-1)) / "" local p_removesuffix = Cs((p_suffix + 1)^1) local find_vf_file = function (name) - local fullname = find_file(name, "ovf") + local fullname = kpsefind_file(name, "ovf") if not fullname then - --fullname = find_file(file.removesuffix(name), "ovf") - fullname = find_file(lpegmatch(p_removesuffix, name), "ovf") + --fullname = kpsefind_file(file.removesuffix(name), "ovf") + fullname = kpsefind_file(lpegmatch(p_removesuffix, name), "ovf") end if fullname then log("loading virtual font file %s.", fullname) @@ -1746,6 +1800,16 @@ pop_namespaces(our_environment, false)-- true) log("fontloader loaded in %0.3f seconds", os.gettimeofday()-starttime) % \end{macrocode} +% Restore original \luafunction{kpse.expand_path} function. +% +% \begin{macrocode} + +if normal_expand_path ~= nil then + kpse.expand_path = normal_expand_path + phantom_kpse = nil +end + +% \end{macrocode} % \subsection{Callbacks} % After the fontloader is ready we can restore the callback trap from % \identifier{luatexbase}. |