)]}'
{
  "commit": "b4fc593c3c34c45521c684cb6d0d24079d553e3a",
  "tree": "21aa96ea883a009b04e684aadfe90376aa97a4e8",
  "parents": [
    "5f4c321d4aae659f83178143d5a4df0d2d6b4d02"
  ],
  "author": {
    "name": "Qunxin Liu",
    "email": "qxliu@google.com",
    "time": "Wed Dec 09 10:44:18 2020 -0800"
  },
  "committer": {
    "name": "Garret Rieger",
    "email": "grieger@google.com",
    "time": "Wed Mar 17 15:22:07 2021 -0600"
  },
  "message": "[subset] optimize glyph closure method: step1\n\nPrevious GSUB glyph closure is done by recursively visiting\nall reachable lookup tables that apply to any glyphs in the\ncurrent/input glyph set, but actually only the glyphs that\nthe parent lookup can apply the recursion to can participate\nin recursing the lookup. This is step 1 for glyph closure\noptimization:\n1. Add stack of currently active glyph set pointers into hb_closure_context_t\n2. Update closure() method in simple GSUB tables to use\nthis stack in order not to change current glyph set at different stages\nof recursion\n3. Add function may_have_non_1to1() to GSUB tables\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5f10ecb7eefe2670a92b4ff2079086d369970584",
      "old_mode": 33188,
      "old_path": "src/hb-ot-layout-gsub-table.hh",
      "new_id": "178ba654668e1833842dd49a8e99cc7d4aa5bd61",
      "new_mode": 33188,
      "new_path": "src/hb-ot-layout-gsub-table.hh"
    },
    {
      "type": "modify",
      "old_id": "36a95ead15f8d279fb81cd0534af7e3ae62f216d",
      "old_mode": 33188,
      "old_path": "src/hb-ot-layout-gsubgpos.hh",
      "new_id": "c8f0ff10749338f174ca66c38bc009e98816a25c",
      "new_mode": 33188,
      "new_path": "src/hb-ot-layout-gsubgpos.hh"
    }
  ]
}
