[latex3-commits] [git/LaTeX3-latex3-luaotfload] dev: [WIP] Add feature to suppress ligatures in harf (66e54bf)

Marcel Fabian Krüger tex at 2krueger.de
Thu Feb 20 01:56:41 CET 2020


Repository : https://github.com/latex3/luaotfload
On branch  : dev
Link       : https://github.com/latex3/luaotfload/commit/66e54bfcd8b6bee219959412c013ca6126d44245

>---------------------------------------------------------------

commit 66e54bfcd8b6bee219959412c013ca6126d44245
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date:   Thu Feb 20 01:56:41 2020 +0100

    [WIP] Add feature to suppress ligatures in harf


>---------------------------------------------------------------

66e54bfcd8b6bee219959412c013ca6126d44245
 src/luaotfload-main.lua     |  1 +
 src/luaotfload-suppress.lua | 89 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)

diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua
index 8866009..edd5d20 100644
--- a/src/luaotfload-main.lua
+++ b/src/luaotfload-main.lua
@@ -327,6 +327,7 @@ luaotfload.main = function ()
     loadmodule "letterspace"  --- extra character kerning
     loadmodule "embolden"     --- fake bold
     loadmodule "notdef"       --- missing glyph handling
+    loadmodule "suppress"     --- suppress ligatures by adding ZWNJ
     loadmodule "szss"       --- missing glyph handling
     if harfstatus then
         loadmodule "harf-define"
diff --git a/src/luaotfload-suppress.lua b/src/luaotfload-suppress.lua
new file mode 100644
index 0000000..a528a60
--- /dev/null
+++ b/src/luaotfload-suppress.lua
@@ -0,0 +1,89 @@
+-----------------------------------------------------------------------
+--         FILE:  luaotfload-suppress.lua
+--  DESCRIPTION:  part of luaotfload / suppress
+-----------------------------------------------------------------------
+
+local ProvidesLuaModule = { 
+    name          = "luaotfload-suppress",
+    version       = "3.1301-dev",       --TAGVERSION
+    date          = "2020-02-02", --TAGDATE
+    description   = "luaotfload submodule / suppress",
+    license       = "GPL v2.0",
+    author        = "Marcel Krüger"
+}
+
+if luatexbase and luatexbase.provides_module then
+  luatexbase.provides_module (ProvidesLuaModule)
+end  
+
+local direct       = node.direct
+local otfregister  = fonts.constructors.features.otf.register
+
+local copy         = direct.copy
+local getdisc      = direct.getdisc
+local getnext      = direct.getnext
+local insert_after = direct.insert_after
+local is_char      = direct.is_char
+local setchar      = direct.setchar
+local setdisc      = direct.setdisc
+local getfont      = font.getfont
+
+local disc_t       = node.id'disc'
+
+local empty        = {}
+
+local lpeg = lpeg or require'lpeg'
+local valueparser do
+  local digits = lpeg.R'09'^1/tonumber
+  local hexdigits = (lpeg.P'u+' + '"' + '0x') * (lpeg.R('09', 'AF', 'af')^1/function(s) return tonumber(s, 16) end)
+  local entry = lpeg.Cg((hexdigits + digits) * lpeg.Cc(true))
+  local sep = lpeg.P' '^0 * lpeg.S'/|,;' * lpeg.P' '^0
+  valueparser = lpeg.Cf(lpeg.Ct'' * entry * (sep * entry)^0, rawset) * -1
+end
+
+local function initializer(tfmdata, value, features)
+  local properties = tfmdata.properties
+  properties.suppress_liga = valueparser:match(value)
+  if not properties.suppress_liga then
+    error[[Invalid suppress value]]
+  end
+end
+
+local function processor(head,font) -- ,attr,direction)
+  local supp = getfont(font).properties.suppress_liga
+  if not supp then return head end
+  local n = head
+  while n do
+    local c, id = is_char(n, font)
+    if supp[c] then
+      local nn = copy(n)
+      setchar(nn, 0x200C)
+      head, n = insert_after(head, n, nn)
+    elseif id == disc_t then
+      local pre, post, replace = getdisc(n)
+      pre = processor(pre, font)
+      post = processor(post, font)
+      replace = processor(replace, font)
+      setdisc(n, pre, post, replace)
+    end
+    n = getnext(n)
+  end
+  return head
+end
+
+otfregister {
+  name = 'suppress',
+  description = 'Insert ZWNJ to suppress ligatures',
+  default = false,
+  initializers = {
+    -- node = initializer,
+    plug = initializer,
+  },
+  processors = {
+    position = 1,
+    -- node = processor,
+    plug = processor,
+  },
+}
+
+--- vim:sw=2:ts=2:expandtab:tw=71





More information about the latex3-commits mailing list.