)]}'
{
  "commit": "091fb72c5e9cd1f06f4d3df1315ed7011a201084",
  "tree": "f941600df4a6355aa3b77f047bfcd0f4b280e49e",
  "parents": [
    "40755a4125280326b133f0d5f092207c74c39e09"
  ],
  "author": {
    "name": "Hyeseong Kim",
    "email": "hey@hyeseong.kim",
    "time": "Fri Jul 31 14:08:04 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 31 14:08:04 2026"
  },
  "message": "replace `InCB_Extend_table` search with simple predicates (#178)\n\nAccording to [UCD](https://www.unicode.org/reports/tr44/),\nthe property `InCB\u003dExtend` is defined as:\n```\n\\p{InCB \u003d Extend} ≔ [\n\\p{gcb\u003dExtend}\n\\p{gcb\u003dZWJ}\n- \\p{InCB\u003dLinker}\n- \\p{InCB\u003dConsonant}\n- [\\u200C]\n]\n```\n\nAnd no `InCB\u003dConsonant` is `gcb\u003dExtend` or `gcb\u003dZWJ`.\nSo in can be determined with the grapheme category the caller already has and two equality.\n\n`scripts/unicode.py` now checks that derivation against the UCD.\nA future Unicode version that breaks either fact fails the generator\ninstead of silently mis-segmenting Indic text.\n\nAlso one fact that is `InCB\u003dLinker` and `InCB\u003dExtend` are subset of\n`gcb\u003dExtend`, any other category rules out both without inspecting the codepoint.\n\nThis change improves the overall performance of the grapheme APIs\nby skipping unnecessary category checks and table searches in the hot loop.\nOn my machine, it measures approximately -15 to -20%.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d253dcd1a20a70ca597862370fbaf557cc345e8d",
      "old_mode": 33261,
      "old_path": "scripts/unicode.py",
      "new_id": "404b242a51daffa0c37e5c99b04111077b0d726f",
      "new_mode": 33261,
      "new_path": "scripts/unicode.py"
    },
    {
      "type": "modify",
      "old_id": "d33a351d39860d18c5260816b3bd557a80663f48",
      "old_mode": 33188,
      "old_path": "src/grapheme.rs",
      "new_id": "0b39f0c816a9440eafaf508bd466d8072a429a5f",
      "new_mode": 33188,
      "new_path": "src/grapheme.rs"
    },
    {
      "type": "modify",
      "old_id": "efa2a41560dba3a41ecd4bd4efa752f0f3be73cf",
      "old_mode": 33188,
      "old_path": "src/tables.rs",
      "new_id": "645642bfa5b0e678c3714ebced5041c7e1568d50",
      "new_mode": 33188,
      "new_path": "src/tables.rs"
    }
  ]
}
