From bb150cd0680f87de4522fbad6069b5dcc5db523b Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Sun, 5 May 2013 22:18:03 +0200 Subject: issue warning for incompletely supported Indic scripts --- luaotfload-features.lua | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'luaotfload-features.lua') diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 0665804..941373d 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -6,9 +6,9 @@ if not modules then modules = { } end modules ["features"] = { license = "see context related readme files" } -local format, insert = string.format, table.insert -local type, next = type, next -local lpegmatch = lpeg.match +local format, insert = string.format, table.insert +local type, next = type, next +local lpegmatch = lpeg.match ---[[ begin included font-ltx.lua ]] --- this appears to be based in part on luatex-fonts-def.lua @@ -97,6 +97,21 @@ defaults.tibt = defaults.khmr defaults.lao = defaults.thai +--[[doc-- + + As discussed, we will issue a warning because of incomplete support + when one of the scripts below is requested. + + Reference: https://github.com/lualatex/luaotfload/issues/31 + +--doc]]-- + +local support_incomplete = table.tohash({ + "deva", "beng", "guru", "gujr", + "orya", "taml", "telu", "knda", + "mlym", "sinh", +}, true) + --[[doc-- Which features are active by default depends on the script requested. --doc]]-- @@ -105,6 +120,11 @@ Which features are active by default depends on the script requested. local set_default_features = function (speclist) speclist = speclist or { } local script = speclist.script or "dflt" + if support_incomplete[script] then + report("log", 0, "load", + "support for the requested script: “%s” may be incomplete", + script) + end report("log", 0, "load", "auto-selecting default features for script: %s", -- cgit v1.2.3 From 241b75b723615faf6be374bfe32506211a01307e Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Mon, 6 May 2013 10:41:24 +0200 Subject: fix unsupported style modifiers --- luaotfload-features.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'luaotfload-features.lua') diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 941373d..cac6598 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -352,13 +352,14 @@ local handle_slashed = function (modifiers) local mod = modifiers[i] if type(mod) == "table" and mod[1] == "optsize" then --> optical size optsize = tonumber(mod[2]) - elseif supported[mod] then - style = supported[mod] - elseif stylename == false then + elseif mod == false then + --- ignore report("log", 0, "load", "unsupported font option: %s", v) - elseif not stringis_empty(v) then - style = stringgsub(v, "[^%a%d]", "") + elseif supported[mod] then + style = supported[mod] + elseif not stringis_empty(mod) then + style = stringgsub(mod, "[^%a%d]", "") end end return style, optsize -- cgit v1.2.3 From 1bd7bd84c9a73105fce7909f14628746328ed823 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Mon, 6 May 2013 11:48:23 +0200 Subject: reduce verbosity of most db related tasks --- luaotfload-features.lua | 91 +++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 56 deletions(-) (limited to 'luaotfload-features.lua') diff --git a/luaotfload-features.lua b/luaotfload-features.lua index cac6598..76ccc53 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -15,7 +15,7 @@ local lpegmatch = lpeg.match local fonts = fonts --- A bit of tuning for definitions. +--HH A bit of tuning for definitions. fonts.constructors.namemode = "specification" -- somehow latex needs this (changed name!) => will change into an overload @@ -36,11 +36,6 @@ local stringlower = string.lower local stringgsub = string.gsub local stringis_empty = string.is_empty ---- this parses the optional flags after the slash ---- the original behavior is that multiple slashes ---- are valid but they might cancel prior settings ---- example: {name:Antykwa Torunska/I/B} -> bold - --- TODO an option to dump the default features for a script would make --- a nice addition to luaotfload-tool @@ -113,7 +108,10 @@ local support_incomplete = table.tohash({ }, true) --[[doc-- -Which features are active by default depends on the script requested. + + Which features are active by default depends on the script + requested. + --doc]]-- --- (string, string) dict -> (string, string) dict @@ -187,31 +185,24 @@ end --- according to my reconstruction, the correct chaining --- of the lookups for each category is as follows: --- ---- | File -> ( db/filename lookup; ---- db/basename lookup; ---- kpse.find_file() ) ---- | Name -> ( names.resolve() ) ---- | Path -> ( db/filename lookup; ---- db/basename lookup; ---- kpse.find_file(); ---- fullpath lookup ) ---- | Anon -> ( names.resolve(); (* most general *) ---- db/filename lookup; ---- db/basename lookup; ---- kpse.find_file(); ---- fullpath lookup ) +--- | File -> ( db/filename lookup ) --- ---- the database should be generated only if the chain has ---- been completed, and then only once. +--- | Name -> ( db/name lookup, +--- db/filename lookup ) --- ---- caching of successful lookups is essential. we need ---- an additional subtable "cached" in the database. it ---- should be nil’able by issuing luaotfload-tool --flush or ---- something. if a cache miss is followed by a successful ---- lookup, then it will be counted as new addition to the ---- cache. we also need a config option to ignore caching. +--- | Path -> ( db/filename lookup, +--- fullpath lookup ) --- ---- also everything has to be finished by tomorrow at noon. +--- | Anon -> ( kpse.find_file(), // <- for tfm, ofm +--- db/name lookup, +--- db/filename lookup, +--- fullpath lookup ) +--- +--- caching of successful lookups is essential. we now +--- as of v2.2 have an experimental lookup cache that is +--- stored in a separate file. it pertains only to name: +--- lookups, and is described in more detail in +--- luaotfload-database.lua. --- ----------------------------------------------------------------------- @@ -251,7 +242,7 @@ local decimal = digit^1 * (dot * digit^0)^-1 The slash notation: called “modifiers” (Kew) or “font options” (Robertson, Goosens) we only support the shorthands for italic / bold / bold italic - shapes, the rest is ignored. + shapes, as well as setting optical size, the rest is ignored. --doc]]-- local style_modifier = (P"BI" + P"IB" + P"bi" + P"ib" + S"biBI") / stringlower @@ -314,15 +305,15 @@ local specification = (prefixed + unprefixed) local font_request = Ct(path_lookup * (colon^-1 * features)^-1 + specification * (colon * features)^-1) --- lpeg.print(font_request) ---- new parser: 632 rules + lpeg.print(font_request) +--- new parser: 657 rules --- old parser: 230 rules local import_values = { --- That’s what the 1.x parser did, not quite as graciously, --- with an array of branch expressions. -- "style", "optsize",--> from slashed notation; handled otherwise - "lookup", "sub" --[[‽]], "mode", + "lookup", "sub", "mode", } local lookup_types = { "anon", "file", "name", "path" } @@ -346,6 +337,7 @@ local supported = { gr = false, } +--- (string | (string * string) | bool) list -> (string * number) local handle_slashed = function (modifiers) local style, optsize for i=1, #modifiers do @@ -441,11 +433,15 @@ local otf = fonts.handlers.otf local registerotffeature = otf.features.register local setmetatableindex = table.setmetatableindex --- In the userdata interface we can not longer tweak the loaded font as --- conveniently as before. For instance, instead of pushing extra data in --- in the table using the original structure, we now have to operate on --- the mkiv representation. And as the fontloader interface is modelled --- after fontforge we cannot change that one too much either. +--[[HH-- + + In the userdata interface we can not longer tweak the loaded font as + conveniently as before. For instance, instead of pushing extra data in + in the table using the original structure, we now have to operate on + the mkiv representation. And as the fontloader interface is modelled + after fontforge we cannot change that one too much either. + +--HH]]-- local types = { substitution = "gsub_single", @@ -709,24 +705,7 @@ local anum_specification = { --- below the specifications as given in the removed font-otc.lua --- the rest was identical to what this file had from the beginning --- both make the “anum.tex” test pass anyways --- ---local anum_specification = { --- { --- type = "substitution", --- features = { arab = { urd = true, dflt = true } }, --- data = anum_arabic, --- flags = noflags, -- { }, --- valid = valid, --- }, --- { --- type = "substitution", --- features = { arab = { urd = true } }, --- data = anum_persian, --- flags = noflags, -- { }, --- valid = valid, --- }, ---} --- + otf.addfeature("anum",anum_specification) registerotffeature { -- cgit v1.2.3 From 8c013800865dbd0c3cdea6312d664fcf2bc61bed Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Mon, 6 May 2013 11:51:35 +0200 Subject: =?UTF-8?q?don=E2=80=99t=20print=20parser=20stats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luaotfload-features.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'luaotfload-features.lua') diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 76ccc53..f91aee7 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -305,7 +305,7 @@ local specification = (prefixed + unprefixed) local font_request = Ct(path_lookup * (colon^-1 * features)^-1 + specification * (colon * features)^-1) - lpeg.print(font_request) +-- lpeg.print(font_request) --- new parser: 657 rules --- old parser: 230 rules -- cgit v1.2.3