[latex3-commits] [git/LaTeX3-latex3-luaotfload] dev: Import new fontloader (651f1e5)

Marcel Fabian Krüger tex at 2krueger.de
Thu May 20 11:51:41 CEST 2021


Repository : https://github.com/latex3/luaotfload
On branch  : dev
Link       : https://github.com/latex3/luaotfload/commit/651f1e554d90b6ad3dcb77da0489bd15d91f9db5

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

commit 651f1e554d90b6ad3dcb77da0489bd15d91f9db5
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date:   Thu May 20 11:51:41 2021 +0200

    Import new fontloader


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

651f1e554d90b6ad3dcb77da0489bd15d91f9db5
 build.lua                                          |   2 +-
 ...er-2021-05-16.lua => fontloader-2021-05-20.lua} | 241 ++++++++++++---------
 src/auto/luaotfload-status.lua                     |  20 +-
 src/fontloader/misc/fontloader-font-ocl.lua        |   3 +-
 src/fontloader/misc/fontloader-font-otl.lua        |   2 +-
 src/fontloader/misc/fontloader-font-oup.lua        |  93 ++++++--
 src/fontloader/misc/fontloader-font-shp.lua        |   2 +-
 src/fontloader/runtime/fontloader-reference.lua    |  81 ++++---
 testfiles/aaaaa-luakern.tlg                        |   2 +-
 9 files changed, 278 insertions(+), 168 deletions(-)

diff --git a/build.lua b/build.lua
index 99d9890..727930c 100644
--- a/build.lua
+++ b/build.lua
@@ -1,7 +1,7 @@
 
 packageversion= "3.18-dev"
 packagedate   = "2021-01-08"
-fontloaderdate= "2021-05-16"
+fontloaderdate= "2021-05-20"
 packagedesc   = ""
 
 module   = "luaotfload"
diff --git a/src/auto/fontloader-2021-05-16.lua b/src/auto/fontloader-2021-05-20.lua
similarity index 99%
rename from src/auto/fontloader-2021-05-16.lua
rename to src/auto/fontloader-2021-05-20.lua
index a08081d..d74f1c9 100644
--- a/src/auto/fontloader-2021-05-16.lua
+++ b/src/auto/fontloader-2021-05-20.lua
@@ -1,6 +1,6 @@
 --[[info-----------------------------------------------------------------------
   Luaotfload fontloader package
-  build 2021-05-16 16:55:49
+  build 2021-05-20 11:42:54
 -------------------------------------------------------------------------------
 
   © 2021 PRAGMA ADE / ConTeXt Development Team
@@ -63,7 +63,7 @@
 --info]]-----------------------------------------------------------------------
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “data-con” 23a0f5386d46a1c157ae82a373e35fa0] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “data-con” 23a0f5386d46a1c157ae82a373e35fa0] ---
 
 if not modules then modules={} end modules ['data-con']={
  version=1.100,
@@ -184,10 +184,10 @@ function containers.cleanname(name)
  return (gsub(lower(name),"[^%w\128-\255]+","-")) 
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “data-con”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “data-con”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “basics-nod” b2e0a0e5e1e27349aed464fa738b8db1] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “basics-nod” b2e0a0e5e1e27349aed464fa738b8db1] ---
 
 if not modules then modules={} end modules ['luatex-fonts-nod']={
  version=1.001,
@@ -454,10 +454,10 @@ do
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “basics-nod”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “basics-nod”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “basics-chr” 64fafe4eaf55d64aead6513c1e74a024] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “basics-chr” 64fafe4eaf55d64aead6513c1e74a024] ---
 
 
 characters=characters or {}
@@ -4067,10 +4067,10 @@ characters.indicgroups={
  },
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “basics-chr”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “basics-chr”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ini” 5343de60613adb24cdd7a8d2ee1d153c] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ini” 5343de60613adb24cdd7a8d2ee1d153c] ---
 
 if not modules then modules={} end modules ['font-ini']={
  version=1.001,
@@ -4111,10 +4111,10 @@ if node and not tex.getfontoffamily then
  tex.getfontoffamily=node.family_font 
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ini”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ini”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-mis” 17e967c9ec4d001deefd43ddf25e98f7] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-mis” 17e967c9ec4d001deefd43ddf25e98f7] ---
 
 if not modules then modules={} end modules ['luatex-font-mis']={
  version=1.001,
@@ -4146,10 +4146,10 @@ function font.each()
  return table.sortedhash(fonts.hashes.identifiers)
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-mis”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-mis”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-con” 724e5dd14aec2d4d189f8619898004cf] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-con” 724e5dd14aec2d4d189f8619898004cf] ---
 
 if not modules then modules={} end modules ['font-con']={
  version=1.001,
@@ -5517,10 +5517,10 @@ function constructors.addcoreunicodes(unicodes)
  return unicodes
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-con”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-con”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-enc” 5ff4ca50493d7c4ecea0e15c203099f0] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-enc” 5ff4ca50493d7c4ecea0e15c203099f0] ---
 
 if not modules then modules={} end modules ['luatex-font-enc']={
  version=1.001,
@@ -5589,10 +5589,10 @@ function encodings.load(filename)
  return containers.write(encodings.cache,name,data)
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-enc”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-enc”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] ---
 
 if not modules then modules={} end modules ['font-cid']={
  version=1.001,
@@ -5743,10 +5743,10 @@ function cid.getmap(specification)
  return found
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-cid”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-cid”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-map” c4a39db5ad822b348aa61bca5f4a599a] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-map” c4a39db5ad822b348aa61bca5f4a599a] ---
 
 if not modules then modules={} end modules ['font-map']={
  version=1.001,
@@ -6154,10 +6154,10 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-map”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-map”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-vfc” a81c29eda98cd62cbebdb6c93544b50d] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-vfc” a81c29eda98cd62cbebdb6c93544b50d] ---
 
 if not modules then modules={} end modules ['font-vfc']={
  version=1.001,
@@ -6254,10 +6254,10 @@ helpers.commands=utilities.storage.allocate {
  dummy=dummy,
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-vfc”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-vfc”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otr” ad238624c9ebd488d4bbe9af3b620189] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otr” ad238624c9ebd488d4bbe9af3b620189] ---
 
 if not modules then modules={} end modules ['font-otr']={
  version=1.001,
@@ -8099,10 +8099,10 @@ function readers.extend(fontdata)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otr”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otr”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] ---
 
 if not modules then modules={} end modules ['font-oti']={
  version=1.001,
@@ -8245,10 +8245,10 @@ function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oti”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oti”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ott” 3f67b1b1d40bbc222681d8db4aff0f42] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ott” 3f67b1b1d40bbc222681d8db4aff0f42] ---
 
 if not modules then modules={} end modules ["font-ott"]={
  version=1.001,
@@ -9364,10 +9364,10 @@ function otffeatures.normalize(features,wrap)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ott”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ott”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-cff” 01e7c6fbc8961a566f4e4f8cbedb7004] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-cff” 01e7c6fbc8961a566f4e4f8cbedb7004] ---
 
 if not modules then modules={} end modules ['font-cff']={
  version=1.001,
@@ -11592,10 +11592,10 @@ function readers.cffcheck(filename)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-cff”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-cff”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ttf” ffffc827e1bcddc33a2b615340ecff7f] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ttf” ffffc827e1bcddc33a2b615340ecff7f] ---
 
 if not modules then modules={} end modules ['font-ttf']={
  version=1.001,
@@ -12766,10 +12766,10 @@ function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ttf”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ttf”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-dsp” 174ce11f3ba0bddf270f48d8d2addd56] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-dsp” 174ce11f3ba0bddf270f48d8d2addd56] ---
 
 if not modules then modules={} end modules ['font-dsp']={
  version=1.001,
@@ -16045,10 +16045,10 @@ function readers.mvar(f,fontdata,specification)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-dsp”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-dsp”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oup” 6f46aa00ae1c20c43f8ffaf329dc8695] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oup” 59894b3fc1629c7ca71d2ab94c8befef] ---
 
 if not modules then modules={} end modules ['font-oup']={
  version=1.001,
@@ -18292,6 +18292,28 @@ local function checkkerns(lookup)
  end
  return kerned
 end
+local strip_pairs=true
+local compact_pairs=true
+local compact_singles=true
+local merge_pairs=true
+local merge_singles=true
+local merge_substitutions=true
+local merge_alternates=true
+local merge_multiples=true
+local merge_ligatures=true
+local merge_cursives=true
+local merge_marks=true
+directives.register("otf.strip.pairs",function(v) strip_pairs=v end)
+directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
+directives.register("otf.compact.singles",function(v) compact_singles=v end)
+directives.register("otf.merge.pairs",function(v) merge_pairs=v end)
+directives.register("otf.merge.singles",function(v) merge_singles=v end)
+directives.register("otf.merge.substitutions",function(v) merge_substitutions=v end)
+directives.register("otf.merge.alternates",function(v) merge_alternates=v end)
+directives.register("otf.merge.multiples",function(v) merge_multiples=v end)
+directives.register("otf.merge.ligatures",function(v) merge_ligatures=v end)
+directives.register("otf.merge.cursives",function(v) merge_cursives=v end)
+directives.register("otf.merge.marks",function(v) merge_marks=v end)
 local function checkpairs(lookup)
  local steps=lookup.steps
  local nofsteps=lookup.nofsteps
@@ -18305,7 +18327,7 @@ local function checkpairs(lookup)
     else
      local v=d2[1]
      if v==true then
-     elseif v and (v[1]~=0 or v[2]~=0 or v[4]~=0) then
+     elseif v and (v[1]~=0 or v[2]~=0 or v[3]~=0 or v[4]~=0) then 
       return false
      end
     end
@@ -18339,26 +18361,27 @@ local function checkpairs(lookup)
  end
  return kerned
 end
-local compact_pairs=true
-local compact_singles=true
-local merge_pairs=true
-local merge_singles=true
-local merge_substitutions=true
-local merge_alternates=true
-local merge_multiples=true
-local merge_ligatures=true
-local merge_cursives=true
-local merge_marks=true
-directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
-directives.register("otf.compact.singles",function(v) compact_singles=v end)
-directives.register("otf.merge.pairs",function(v) merge_pairs=v end)
-directives.register("otf.merge.singles",function(v) merge_singles=v end)
-directives.register("otf.merge.substitutions",function(v) merge_substitutions=v end)
-directives.register("otf.merge.alternates",function(v) merge_alternates=v end)
-directives.register("otf.merge.multiples",function(v) merge_multiples=v end)
-directives.register("otf.merge.ligatures",function(v) merge_ligatures=v end)
-directives.register("otf.merge.cursives",function(v) merge_cursives=v end)
-directives.register("otf.merge.marks",function(v) merge_marks=v end)
+local function strippairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local stripped=0
+ for i=1,nofsteps do
+  local step=steps[i]
+  if step.format=="pair" then
+   local coverage=step.coverage
+   for g1,d1 in next,coverage do
+    for g2,d2 in next,d1 do
+     if d2[2] then
+     elseif d2[1]==true then
+      d1[g2]=nil
+      stripped=stripped+1
+     end
+    end
+   end
+  end
+ end
+ return stripped
+end
 function readers.compact(data)
  if not data or data.compacted then
   return
@@ -18366,6 +18389,7 @@ function readers.compact(data)
   data.compacted=true
  end
  local resources=data.resources
+ local stripped=0
  local merged=0
  local kerned=0
  local allsteps=0
@@ -18403,6 +18427,9 @@ function readers.compact(data)
        kerned=kerned+checkkerns(lookup)
       end
      elseif kind=="gpos_pair" then
+      if strip_pairs then
+       stripped=stripped+strippairs(lookup) 
+      end
       if merge_pairs then
        merged=merged+mergesteps_2(lookup)
       end
@@ -18443,6 +18470,9 @@ function readers.compact(data)
  compact("sequences")
  compact("sublookups")
  if trace_optimizations then
+  if stripped>0 then
+   report_optimizations("%i zero positions stripped before merging",stripped)
+  end
   if merged>0 then
    report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
   end
@@ -18689,10 +18719,10 @@ function readers.expand(data)
  expandlookups(sublookups)
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oup”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oup”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otl” 112f9952bca2645e0f1d1a376fbe6c25] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otl” a7580a47d0c1655255d5ddbf531ffd38] ---
 
 if not modules then modules={} end modules ['font-otl']={
  version=1.001,
@@ -18720,7 +18750,7 @@ local trace_defining=false  registertracker("fonts.defining",function(v) trace_d
 local report_otf=logs.reporter("fonts","otf loading")
 local fonts=fonts
 local otf=fonts.handlers.otf
-otf.version=3.114 
+otf.version=3.115 
 otf.cache=containers.define("fonts","otl",otf.version,true)
 otf.svgcache=containers.define("fonts","svg",otf.version,true)
 otf.pngcache=containers.define("fonts","png",otf.version,true)
@@ -19399,10 +19429,10 @@ otf.coverup={
  end
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otl”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otl”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oto” 2b1d6bc63b2ebf8f2655a15e1cda6541] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oto” 2b1d6bc63b2ebf8f2655a15e1cda6541] ---
 
 if not modules then modules={} end modules ['font-oto']={ 
  version=1.001,
@@ -19860,10 +19890,10 @@ registerotffeature {
 }
 otf.basemodeinitializer=featuresinitializer
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-oto”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-oto”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otj” e77357c4ad5f7fab278be57db0b51012] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otj” e77357c4ad5f7fab278be57db0b51012] ---
 
 if not modules then modules={} end modules ['font-otj']={
  version=1.001,
@@ -21358,10 +21388,10 @@ function injections.handler(head,where)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otj”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otj”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ota” 2bb12d708e35bc05443eba791e2554e7] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ota” 2bb12d708e35bc05443eba791e2554e7] ---
 
 if not modules then modules={} end modules ['font-ota']={
  version=1.001,
@@ -21855,10 +21885,10 @@ directives.register("otf.analyze.useunicodemarks",function(v)
  analyzers.useunicodemarks=v
 end)
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ota”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ota”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ots” cb106ae882e8548051f00aac8b7fa862] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ots” cb106ae882e8548051f00aac8b7fa862] ---
 
 if not modules then modules={} end modules ['font-ots']={ 
  version=1.001,
@@ -25485,10 +25515,10 @@ registerotffeature {
  },
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ots”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ots”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-osd” 0e051ca0d3b1a8e0604ced27e753fde8] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-osd” 0e051ca0d3b1a8e0604ced27e753fde8] ---
 
 if not modules then modules={} end modules ['font-osd']={ 
  version=1.001,
@@ -27921,10 +27951,10 @@ for i=1,nofscripts do
  methods[scripts_two[i]]=method_two
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-osd”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-osd”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ocl” 6f3882e6c4c50e8a15a54a3230917a5b] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ocl” 2a377351ae23c339764ec8ce2e8e9164] ---
 
 if not modules then modules={} end modules ['font-ocl']={
  version=1.001,
@@ -28250,6 +28280,7 @@ end
   if inkscape then
    local descriptions=tfmdata.descriptions
    local nofshapes=#svgshapes
+   local s_format=inkscapeformat("pdf") 
    local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
    local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
    local f_convert=formatters[new and "file-open:%s; export-%s:%s; export-do\n" or "%s --export-%s=%s\n"]
@@ -28266,7 +28297,7 @@ end
       local svgfile=f_svgfile(index)
       local pdffile=f_pdffile(index)
       savedata(svgfile,data)
-      inkscape:write(f_convert(svgfile,inkscapeformat("pdf"),pdffile))
+      inkscape:write(f_convert(svgfile,s_format,pdffile))
       processed[index]=true
       nofdone=nofdone+1
       if nofdone%25==0 then
@@ -28471,10 +28502,10 @@ if context then
  }
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-ocl”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-ocl”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otc” 0f12230ea07b5151f75d52726977e91f] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otc” 0f12230ea07b5151f75d52726977e91f] ---
 
 if not modules then modules={} end modules ['font-otc']={
  version=1.001,
@@ -29231,10 +29262,10 @@ end
 otf.enhancers.enhance=enhance
 otf.enhancers.register("check extra features",enhance)
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-otc”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-otc”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-onr” 6d161533f3437435e12a0ad64866df44] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-onr” 6d161533f3437435e12a0ad64866df44] ---
 
 if not modules then modules={} end modules ['font-onr']={
  version=1.001,
@@ -29607,10 +29638,10 @@ function readers.getinfo(filename)
  end
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-onr”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-onr”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-one” bd39d42055a44ca2002f8ddbbbbf27c3] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-one” bd39d42055a44ca2002f8ddbbbbf27c3] ---
 
 if not modules then modules={} end modules ['font-one']={
  version=1.001,
@@ -30325,10 +30356,10 @@ registerafmenhancer("normalize features",enhance_normalize_features)
 registerafmenhancer("check extra features",otfenhancers.enhance)
 registerafmenhancer("fix names",enhance_fix_names)
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-one”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-one”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-afk” 9da14e0fb22129c053acc599d1312544] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-afk” 9da14e0fb22129c053acc599d1312544] ---
 
 if not modules then modules={} end modules ['font-afk']={
  version=1.001,
@@ -30495,10 +30526,10 @@ fonts.handlers.afm.helpdata={
  }
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-afk”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-afk”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-tfm” f0eb5e2a8068b17ad401bb7efdba1630] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-tfm” f0eb5e2a8068b17ad401bb7efdba1630] ---
 
 if not modules then modules={} end modules ['luatex-fonts-tfm']={
  version=1.001,
@@ -31013,10 +31044,10 @@ registertfmfeature {
  }
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-tfm”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-tfm”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] ---
 
 if not modules then modules={} end modules ['font-lua']={
  version=1.001,
@@ -31056,10 +31087,10 @@ function readers.lua(specification)
  return check_lua(specification,fullname)
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-lua”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-lua”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-def” b9d908c2338b7dc443ce9d1e9fcb7139] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-def” b9d908c2338b7dc443ce9d1e9fcb7139] ---
 
 if not modules then modules={} end modules ['font-def']={
  version=1.001,
@@ -31459,10 +31490,10 @@ if not context then
  callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-def”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-def”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-shp” 5ff497c993112d4fef4c148348d964eb] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-shp” 2bb36adb4b264a895a2c4d97e1ac1d1e] ---
 
 if not modules then modules={} end modules ['font-shp']={
  version=1.001,
@@ -31479,7 +31510,7 @@ local afm=fonts.handlers.afm
 local pfb=fonts.handlers.pfb
 local hashes=fonts.hashes
 local identifiers=hashes.identifiers
-local version=0.009
+local version=0.010
 local shapescache=containers.define("fonts","shapes",version,true)
 local streamscache=containers.define("fonts","streams",version,true)
 local compact_streams=false
@@ -31827,10 +31858,10 @@ callback.register("glyph_stream_provider",function(id,index,mode)
  return ""
 end)
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-shp”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-shp”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] ---
 
 if not modules then modules={} end modules ['luatex-fonts-def']={
  version=1.001,
@@ -31911,10 +31942,10 @@ function fonts.definers.applypostprocessors(tfmdata)
  return tfmdata
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-def”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-def”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] ---
 
 if not modules then modules={} end modules ['luatex-fonts-ext']={
  version=1.001,
@@ -32100,10 +32131,10 @@ registerotffeature {
  }
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-ext”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-ext”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-tex” ceb087ef6fa2f89aed7179f60ddf8f35] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-tex” ceb087ef6fa2f89aed7179f60ddf8f35] ---
 
 if not modules then modules={} end modules ['font-imp-tex']={
  version=1.001,
@@ -32202,10 +32233,10 @@ registerotffeature {
  description="arabic digits",
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-tex”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-tex”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-ligatures” 26ffcf089391445f7af59536c8814364] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-ligatures” 26ffcf089391445f7af59536c8814364] ---
 
 if not modules then modules={} end modules ['font-imp-ligatures']={
  version=1.001,
@@ -32319,10 +32350,10 @@ if context then
  }
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-ligatures”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-ligatures”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-italics” defcb415bc1e0a0999b27773902adc18] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-italics” defcb415bc1e0a0999b27773902adc18] ---
 
 if not modules then modules={} end modules ['font-imp-italics']={
  version=1.001,
@@ -32426,10 +32457,10 @@ if context then
  registerafmfeature(dimensions_specification)
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-italics”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-italics”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-effects” d05997c1826355548ec9aec1346f9f23] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-effects” d05997c1826355548ec9aec1346f9f23] ---
 
 if not modules then modules={} end modules ['font-imp-effects']={
  version=1.001,
@@ -32786,10 +32817,10 @@ local specification={
 registerotffeature(specification)
 registerafmfeature(specification)
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “font-imp-effects”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “font-imp-effects”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] ---
 
 
 fonts.handlers.otf.addfeature {
@@ -34858,10 +34889,10 @@ fonts.handlers.otf.addfeature {
  ["type"]="ligature",
 }
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-lig”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-lig”] ---
 
 
-do  --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-gbn” 34e4543a02f6fbc8c2ade896cb6dc7df] ---
+do  --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-gbn” 34e4543a02f6fbc8c2ade896cb6dc7df] ---
 
 if not modules then modules={} end modules ['luatex-fonts-gbn']={
  version=1.001,
@@ -35126,7 +35157,7 @@ function nodes.simple_font_handler(head,groupcode,size,packtype,direction)
  return head
 end
 
-end --- [luaotfload, fontloader-2021-05-16.lua scope for “fonts-gbn”] ---
+end --- [luaotfload, fontloader-2021-05-20.lua scope for “fonts-gbn”] ---
 
 
 --- vim:ft=lua:sw=2:ts=8:et:tw=79
diff --git a/src/auto/luaotfload-status.lua b/src/auto/luaotfload-status.lua
index 9a8aed8..df46ff1 100644
--- a/src/auto/luaotfload-status.lua
+++ b/src/auto/luaotfload-status.lua
@@ -1,6 +1,6 @@
 return {
  ["hashes"]={
-  { "fontloader-2021-05-16.lua", "74787d786612d21048ee00c1c922b94c" },
+  { "fontloader-2021-05-20.lua", "639fe83c53a69d78cd9c5b1ec5a97c62" },
   { "fontloader-util-fil.lua", "aae2a2add764144bb58dd8216fd59260" },
   { "fontloader-util-str.lua", "f3480da8f9a6f34fe320900f7224719b" },
   { "fontloader-l-unicode.lua", "f368874f11f3c525de5864fd413e4b24" },
@@ -26,21 +26,21 @@ return {
   { "fontloader-font-imp-italics.lua", "defcb415bc1e0a0999b27773902adc18" },
   { "fontloader-font-imp-ligatures.lua", "26ffcf089391445f7af59536c8814364" },
   { "fontloader-font-imp-tex.lua", "ceb087ef6fa2f89aed7179f60ddf8f35" },
-  { "fontloader-font-shp.lua", "5ff497c993112d4fef4c148348d964eb" },
+  { "fontloader-font-shp.lua", "2bb36adb4b264a895a2c4d97e1ac1d1e" },
   { "fontloader-font-def.lua", "b9d908c2338b7dc443ce9d1e9fcb7139" },
   { "fontloader-font-lua.lua", "1fbfdf7b689b2bdfd0e3bb9bf74ce136" },
   { "fontloader-font-afk.lua", "9da14e0fb22129c053acc599d1312544" },
   { "fontloader-font-one.lua", "bd39d42055a44ca2002f8ddbbbbf27c3" },
   { "fontloader-font-onr.lua", "6d161533f3437435e12a0ad64866df44" },
-  { "fontloader-font-ocl.lua", "6f3882e6c4c50e8a15a54a3230917a5b" },
+  { "fontloader-font-ocl.lua", "2a377351ae23c339764ec8ce2e8e9164" },
   { "fontloader-font-osd.lua", "0e051ca0d3b1a8e0604ced27e753fde8" },
   { "fontloader-font-otc.lua", "0f12230ea07b5151f75d52726977e91f" },
   { "fontloader-font-ots.lua", "cb106ae882e8548051f00aac8b7fa862" },
   { "fontloader-font-ota.lua", "2bb12d708e35bc05443eba791e2554e7" },
-  { "fontloader-font-oup.lua", "6f46aa00ae1c20c43f8ffaf329dc8695" },
+  { "fontloader-font-oup.lua", "59894b3fc1629c7ca71d2ab94c8befef" },
   { "fontloader-font-otj.lua", "e77357c4ad5f7fab278be57db0b51012" },
   { "fontloader-font-oto.lua", "2b1d6bc63b2ebf8f2655a15e1cda6541" },
-  { "fontloader-font-otl.lua", "112f9952bca2645e0f1d1a376fbe6c25" },
+  { "fontloader-font-otl.lua", "a7580a47d0c1655255d5ddbf531ffd38" },
   { "fontloader-font-ott.lua", "3f67b1b1d40bbc222681d8db4aff0f42" },
   { "fontloader-font-oti.lua", "309a75f9c14b77d87e94eba827dc4e71" },
   { "fontloader-font-dsp.lua", "174ce11f3ba0bddf270f48d8d2addd56" },
@@ -53,8 +53,8 @@ return {
   { "fontloader-font-con.lua", "724e5dd14aec2d4d189f8619898004cf" },
   { "fontloader-font-ini.lua", "5343de60613adb24cdd7a8d2ee1d153c" },
   { "fontloader-data-con.lua", "23a0f5386d46a1c157ae82a373e35fa0" },
-  { "fontloader-reference.lua", "7f81aefde8dbb7741b30128bfe3dbe9a" },
-  { "fontloader-basics-gen.lua", "e470c13b1ed41e38932e93518219ad74" },
+  { "fontloader-reference.lua", "00d4e6ccada15f40fd8112dc2ab2a760" },
+  { "fontloader-basics-gen.lua", "4bc43036e9796fccb0b8869f4b05bf2e" },
   { "mktests", "918cb50be9ee8bd645ac1a27dc501e8c" },
   { "mkstatus", "b4815eec1b616a4a7877d2b3b32a8f57" },
   { "mkcharacters", "bfca0e96e1e351afe7077502f9595af9" },
@@ -92,8 +92,8 @@ return {
  ["notes"]={
   ["committer"]="Marcel Fabian Krüger <tex at 2krueger.de>",
   ["description"]="v3.18-dev/2021-01-08",
-  ["loader"]="fontloader-2021-05-16.lua",
-  ["revision"]="25c8416264477abbec96d0b88ee426a0e0dcce6c",
-  ["timestamp"]="2021-05-13 12:37:54 +0200",
+  ["loader"]="fontloader-2021-05-20.lua",
+  ["revision"]="4e176e66dd0c23ead6b1e20b72dc64948f12330f",
+  ["timestamp"]="2021-05-16 18:55:18 +0200",
  },
 }
\ No newline at end of file
diff --git a/src/fontloader/misc/fontloader-font-ocl.lua b/src/fontloader/misc/fontloader-font-ocl.lua
index 9e1f494..7d96092 100644
--- a/src/fontloader/misc/fontloader-font-ocl.lua
+++ b/src/fontloader/misc/fontloader-font-ocl.lua
@@ -444,6 +444,7 @@ end
          -- local indices      = fonts.getindices(tfmdata)
             local descriptions = tfmdata.descriptions
             local nofshapes    = #svgshapes
+            local s_format     = inkscapeformat("pdf") -- hack, this will go away when is >= 0 is everywhere
             local f_svgfile    = formatters["temp-otf-svg-shape-%i.svg"]
             local f_pdffile    = formatters["temp-otf-svg-shape-%i.pdf"]
             local f_convert    = formatters[new and "file-open:%s; export-%s:%s; export-do\n" or "%s --export-%s=%s\n"]
@@ -460,7 +461,7 @@ end
                         local svgfile = f_svgfile(index)
                         local pdffile = f_pdffile(index)
                         savedata(svgfile,data)
-                        inkscape:write(f_convert(svgfile,inkscapeformat("pdf"),pdffile))
+                        inkscape:write(f_convert(svgfile,s_format,pdffile))
                         processed[index] = true
                         nofdone = nofdone + 1
                         if nofdone % 25 == 0 then
diff --git a/src/fontloader/misc/fontloader-font-otl.lua b/src/fontloader/misc/fontloader-font-otl.lua
index 51111fa..c13011f 100644
--- a/src/fontloader/misc/fontloader-font-otl.lua
+++ b/src/fontloader/misc/fontloader-font-otl.lua
@@ -52,7 +52,7 @@ local report_otf          = logs.reporter("fonts","otf loading")
 local fonts               = fonts
 local otf                 = fonts.handlers.otf
 
-otf.version               = 3.114 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.version               = 3.115 -- beware: also sync font-mis.lua and in mtx-fonts
 otf.cache                 = containers.define("fonts", "otl", otf.version, true)
 otf.svgcache              = containers.define("fonts", "svg", otf.version, true)
 otf.pngcache              = containers.define("fonts", "png", otf.version, true)
diff --git a/src/fontloader/misc/fontloader-font-oup.lua b/src/fontloader/misc/fontloader-font-oup.lua
index 2c49bc9..93a1d52 100644
--- a/src/fontloader/misc/fontloader-font-oup.lua
+++ b/src/fontloader/misc/fontloader-font-oup.lua
@@ -2564,6 +2564,34 @@ end
 -- Because we pack we cannot mix tables and numbers so we can only turn a whole set in
 -- format kern instead of pair.
 
+local strip_pairs         = true
+
+local compact_pairs       = true
+local compact_singles     = true
+
+local merge_pairs         = true
+local merge_singles       = true
+local merge_substitutions = true
+local merge_alternates    = true
+local merge_multiples     = true
+local merge_ligatures     = true
+local merge_cursives      = true
+local merge_marks         = true
+
+directives.register("otf.strip.pairs",         function(v) strip_pairs     = v end)
+
+directives.register("otf.compact.pairs",       function(v) compact_pairs   = v end)
+directives.register("otf.compact.singles",     function(v) compact_singles = v end)
+
+directives.register("otf.merge.pairs",         function(v) merge_pairs         = v end)
+directives.register("otf.merge.singles",       function(v) merge_singles       = v end)
+directives.register("otf.merge.substitutions", function(v) merge_substitutions = v end)
+directives.register("otf.merge.alternates",    function(v) merge_alternates    = v end)
+directives.register("otf.merge.multiples",     function(v) merge_multiples     = v end)
+directives.register("otf.merge.ligatures",     function(v) merge_ligatures     = v end)
+directives.register("otf.merge.cursives",      function(v) merge_cursives      = v end)
+directives.register("otf.merge.marks",         function(v) merge_marks         = v end)
+
 local function checkpairs(lookup)
     local steps    = lookup.steps
     local nofsteps = lookup.nofsteps
@@ -2580,7 +2608,8 @@ local function checkpairs(lookup)
                     local v = d2[1]
                     if v == true then
                         -- all zero
-                    elseif v and (v[1] ~= 0 or v[2] ~= 0 or v[4] ~= 0) then
+                 -- elseif v and (v[1] ~= 0 or v[2] ~= 0 or v[4] ~= 0) then
+                    elseif v and (v[1] ~= 0 or v[2] ~= 0 or v[3] ~= 0 or v[4] ~= 0) then -- vkrn has v[3] ~= 0
                         return false
                     end
                 end
@@ -2617,29 +2646,39 @@ local function checkpairs(lookup)
     return kerned
 end
 
-local compact_pairs       = true
-local compact_singles     = true
-
-local merge_pairs         = true
-local merge_singles       = true
-local merge_substitutions = true
-local merge_alternates    = true
-local merge_multiples     = true
-local merge_ligatures     = true
-local merge_cursives      = true
-local merge_marks         = true
-
-directives.register("otf.compact.pairs",       function(v) compact_pairs   = v end)
-directives.register("otf.compact.singles",     function(v) compact_singles = v end)
+local function strippairs(lookup)
+    local steps    = lookup.steps
+    local nofsteps = lookup.nofsteps
+    local stripped = 0
 
-directives.register("otf.merge.pairs",         function(v) merge_pairs         = v end)
-directives.register("otf.merge.singles",       function(v) merge_singles       = v end)
-directives.register("otf.merge.substitutions", function(v) merge_substitutions = v end)
-directives.register("otf.merge.alternates",    function(v) merge_alternates    = v end)
-directives.register("otf.merge.multiples",     function(v) merge_multiples     = v end)
-directives.register("otf.merge.ligatures",     function(v) merge_ligatures     = v end)
-directives.register("otf.merge.cursives",      function(v) merge_cursives      = v end)
-directives.register("otf.merge.marks",         function(v) merge_marks         = v end)
+    for i=1,nofsteps do
+        local step = steps[i]
+        if step.format == "pair" then
+            local coverage = step.coverage
+            for g1, d1 in next, coverage do
+                for g2, d2 in next, d1 do
+                    if d2[2] then
+                        --- true or { a, b, c, d }
+                 -- else
+                 --     local v = d2[1]
+                 --     if v == true then
+                 --         d1[g2] = nil
+                 --         stripped = stripped + 1
+                 --     elseif v and (v[1] == 0 and v[2] == 0 and v[4] == 0) then -- vkrn can have v[3] ~= 0
+                 --         d1[g2] = nil
+                 --         stripped = stripped + 1
+                 --     end
+                 -- end
+                    elseif d2[1] == true then
+                        d1[g2] = nil
+                        stripped = stripped + 1
+                    end
+                end
+            end
+        end
+    end
+    return stripped
+end
 
 function readers.compact(data)
     if not data or data.compacted then
@@ -2648,6 +2687,7 @@ function readers.compact(data)
         data.compacted = true
     end
     local resources = data.resources
+    local stripped  = 0
     local merged    = 0
     local kerned    = 0
     local allsteps  = 0
@@ -2678,6 +2718,7 @@ function readers.compact(data)
                             merged = merged + mergesteps_4(lookup)
                         end
                     elseif kind == "gpos_single" then
+                        -- maybe also strip zeros here
                         if merge_singles then
                             merged = merged + mergesteps_1(lookup,true)
                         end
@@ -2685,6 +2726,9 @@ function readers.compact(data)
                             kerned = kerned + checkkerns(lookup)
                         end
                     elseif kind == "gpos_pair" then
+                        if strip_pairs then
+                            stripped = stripped + strippairs(lookup) -- noto cjk from 24M -> 8 M
+                        end
                         if merge_pairs then
                             merged = merged + mergesteps_2(lookup)
                         end
@@ -2726,6 +2770,9 @@ function readers.compact(data)
     compact("sequences")
     compact("sublookups")
     if trace_optimizations then
+        if stripped > 0 then
+            report_optimizations("%i zero positions stripped before merging",stripped)
+        end
         if merged > 0 then
             report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
         end
diff --git a/src/fontloader/misc/fontloader-font-shp.lua b/src/fontloader/misc/fontloader-font-shp.lua
index 78e8597..ecf0c94 100644
--- a/src/fontloader/misc/fontloader-font-shp.lua
+++ b/src/fontloader/misc/fontloader-font-shp.lua
@@ -17,7 +17,7 @@ local pfb          = fonts.handlers.pfb
 local hashes       = fonts.hashes
 local identifiers  = hashes.identifiers
 
-local version      = 0.009
+local version      = 0.010
 local shapescache  = containers.define("fonts", "shapes",  version, true)
 local streamscache = containers.define("fonts", "streams", version, true)
 
diff --git a/src/fontloader/runtime/fontloader-reference.lua b/src/fontloader/runtime/fontloader-reference.lua
index 267c836..f3af378 100644
--- a/src/fontloader/runtime/fontloader-reference.lua
+++ b/src/fontloader/runtime/fontloader-reference.lua
@@ -1,6 +1,6 @@
 -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
 -- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date  : 2021-05-15 22:41
+-- merge date  : 2021-05-19 18:18
 
 do -- begin closure to overcome local limits and interference
 
@@ -20858,7 +20858,7 @@ local trace_defining=false  registertracker("fonts.defining",function(v) trace_d
 local report_otf=logs.reporter("fonts","otf loading")
 local fonts=fonts
 local otf=fonts.handlers.otf
-otf.version=3.114 
+otf.version=3.115 
 otf.cache=containers.define("fonts","otl",otf.version,true)
 otf.svgcache=containers.define("fonts","svg",otf.version,true)
 otf.pngcache=containers.define("fonts","png",otf.version,true)
@@ -25733,6 +25733,28 @@ local function checkkerns(lookup)
  end
  return kerned
 end
+local strip_pairs=true
+local compact_pairs=true
+local compact_singles=true
+local merge_pairs=true
+local merge_singles=true
+local merge_substitutions=true
+local merge_alternates=true
+local merge_multiples=true
+local merge_ligatures=true
+local merge_cursives=true
+local merge_marks=true
+directives.register("otf.strip.pairs",function(v) strip_pairs=v end)
+directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
+directives.register("otf.compact.singles",function(v) compact_singles=v end)
+directives.register("otf.merge.pairs",function(v) merge_pairs=v end)
+directives.register("otf.merge.singles",function(v) merge_singles=v end)
+directives.register("otf.merge.substitutions",function(v) merge_substitutions=v end)
+directives.register("otf.merge.alternates",function(v) merge_alternates=v end)
+directives.register("otf.merge.multiples",function(v) merge_multiples=v end)
+directives.register("otf.merge.ligatures",function(v) merge_ligatures=v end)
+directives.register("otf.merge.cursives",function(v) merge_cursives=v end)
+directives.register("otf.merge.marks",function(v) merge_marks=v end)
 local function checkpairs(lookup)
  local steps=lookup.steps
  local nofsteps=lookup.nofsteps
@@ -25746,7 +25768,7 @@ local function checkpairs(lookup)
     else
      local v=d2[1]
      if v==true then
-     elseif v and (v[1]~=0 or v[2]~=0 or v[4]~=0) then
+     elseif v and (v[1]~=0 or v[2]~=0 or v[3]~=0 or v[4]~=0) then 
       return false
      end
     end
@@ -25780,26 +25802,27 @@ local function checkpairs(lookup)
  end
  return kerned
 end
-local compact_pairs=true
-local compact_singles=true
-local merge_pairs=true
-local merge_singles=true
-local merge_substitutions=true
-local merge_alternates=true
-local merge_multiples=true
-local merge_ligatures=true
-local merge_cursives=true
-local merge_marks=true
-directives.register("otf.compact.pairs",function(v) compact_pairs=v end)
-directives.register("otf.compact.singles",function(v) compact_singles=v end)
-directives.register("otf.merge.pairs",function(v) merge_pairs=v end)
-directives.register("otf.merge.singles",function(v) merge_singles=v end)
-directives.register("otf.merge.substitutions",function(v) merge_substitutions=v end)
-directives.register("otf.merge.alternates",function(v) merge_alternates=v end)
-directives.register("otf.merge.multiples",function(v) merge_multiples=v end)
-directives.register("otf.merge.ligatures",function(v) merge_ligatures=v end)
-directives.register("otf.merge.cursives",function(v) merge_cursives=v end)
-directives.register("otf.merge.marks",function(v) merge_marks=v end)
+local function strippairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local stripped=0
+ for i=1,nofsteps do
+  local step=steps[i]
+  if step.format=="pair" then
+   local coverage=step.coverage
+   for g1,d1 in next,coverage do
+    for g2,d2 in next,d1 do
+     if d2[2] then
+     elseif d2[1]==true then
+      d1[g2]=nil
+      stripped=stripped+1
+     end
+    end
+   end
+  end
+ end
+ return stripped
+end
 function readers.compact(data)
  if not data or data.compacted then
   return
@@ -25807,6 +25830,7 @@ function readers.compact(data)
   data.compacted=true
  end
  local resources=data.resources
+ local stripped=0
  local merged=0
  local kerned=0
  local allsteps=0
@@ -25844,6 +25868,9 @@ function readers.compact(data)
        kerned=kerned+checkkerns(lookup)
       end
      elseif kind=="gpos_pair" then
+      if strip_pairs then
+       stripped=stripped+strippairs(lookup) 
+      end
       if merge_pairs then
        merged=merged+mergesteps_2(lookup)
       end
@@ -25884,6 +25911,9 @@ function readers.compact(data)
  compact("sequences")
  compact("sublookups")
  if trace_optimizations then
+  if stripped>0 then
+   report_optimizations("%i zero positions stripped before merging",stripped)
+  end
   if merged>0 then
    report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
   end
@@ -33728,6 +33758,7 @@ end
   if inkscape then
    local descriptions=tfmdata.descriptions
    local nofshapes=#svgshapes
+   local s_format=inkscapeformat("pdf") 
    local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
    local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
    local f_convert=formatters[new and "file-open:%s; export-%s:%s; export-do\n" or "%s --export-%s=%s\n"]
@@ -33744,7 +33775,7 @@ end
       local svgfile=f_svgfile(index)
       local pdffile=f_pdffile(index)
       savedata(svgfile,data)
-      inkscape:write(f_convert(svgfile,inkscapeformat("pdf"),pdffile))
+      inkscape:write(f_convert(svgfile,s_format,pdffile))
       processed[index]=true
       nofdone=nofdone+1
       if nofdone%25==0 then
@@ -36132,7 +36163,7 @@ local afm=fonts.handlers.afm
 local pfb=fonts.handlers.pfb
 local hashes=fonts.hashes
 local identifiers=hashes.identifiers
-local version=0.009
+local version=0.010
 local shapescache=containers.define("fonts","shapes",version,true)
 local streamscache=containers.define("fonts","streams",version,true)
 local compact_streams=false
diff --git a/testfiles/aaaaa-luakern.tlg b/testfiles/aaaaa-luakern.tlg
index 448f72b..9a0c669 100644
--- a/testfiles/aaaaa-luakern.tlg
+++ b/testfiles/aaaaa-luakern.tlg
@@ -1,6 +1,6 @@
 This is a generated file for the l3build validation system.
 Don't change this file in any respect.
-3.18-dev with fontloaderxxx2021xxx05xxx16.lua
+3.18-dev with fontloaderxxx2021xxx05xxx20.lua
 Completed box being shipped out [1]
 \vbox(633.0+0.0)x407.0, direction TLT
 .\glue 16.0





More information about the latex3-commits mailing list.