)]}'
{
  "commit": "bbbc72cba69445535dd035dfe1ee10d473655629",
  "tree": "f2bf6f27db1f75472057ecdc1eba1bca3d928e56",
  "parents": [
    "b9e1d4bbd4ce6a539999560c1cc863b645a080cd"
  ],
  "author": {
    "name": "Laslo Hunhold",
    "email": "dev@frign.de",
    "time": "Tue Nov 29 23:23:53 2022 +0100"
  },
  "committer": {
    "name": "Laslo Hunhold",
    "email": "dev@frign.de",
    "time": "Tue Nov 29 23:23:53 2022 +0100"
  },
  "message": "Implement bidirectional bracket support\n\nThe single rule N0 in the Unicode Bidirectional Algorithm may not\nsound like much, but it packs quite a punch and required some deep\nwork.\n\nIt wasn\u0027t exactly made simpler by the fact that the document is very\nconvoluted and not easy to follow. However, it helps to have experience\nfrom the other algorithms and the automatic tests allow very broad\nconfirmation of proper function.\n\nIn particular, the following changes needed to be made: The generator\nhad to be modified to\n\n\t- Implement a decompositon to match canonically equivalent\n\t  brackets. This requires us to have UnicodeData.txt present,\n\t  but what matters is that the end result is fast and small.\n\t- The LUT-printing automatically detects type, because it\u0027s just\n\t  too fragile otherwise.\n\nThe implementation of the algorithm itself had the following changes:\n\n\t- The last strong type property of an isolate runner has been\n\t  refactored to be stateless. Otherwise, you can end up with\n\t  subtle bugs where strong types are added beforehand, yielding\n\t  a TOCTOU-problem.\n\t- The bracket parsing makes use of a novel FIFO structure that\n\t  combines the best of both worlds between a stack and naive\n\t  implementation.\n\nAs an end result, we now pass all ~900k bidi tests from the Unicode\nstandard.\n\nSigned-off-by: Laslo Hunhold \u003cdev@frign.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a9b99f128d65d8f5eae55e6ce43a376cdb698c4a",
      "old_mode": 33188,
      "old_path": "Makefile",
      "new_id": "f0561a141f2bf91be5e31b750e35cc17fa04ef2f",
      "new_mode": 33188,
      "new_path": "Makefile"
    },
    {
      "type": "modify",
      "old_id": "03d9b510592d96a4964f40121b9e507a51d75180",
      "old_mode": 33188,
      "old_path": "gen/bidirectional-test.c",
      "new_id": "07d3cd7c4e0ecca819d1cea19ec9f2df4fec3020",
      "new_mode": 33188,
      "new_path": "gen/bidirectional-test.c"
    },
    {
      "type": "modify",
      "old_id": "88a05d103be0be09f2d45096f5b30bccb15e4d6e",
      "old_mode": 33188,
      "old_path": "gen/bidirectional.c",
      "new_id": "469b9cf09cf1da332bb84db4af925819a58c8803",
      "new_mode": 33188,
      "new_path": "gen/bidirectional.c"
    },
    {
      "type": "modify",
      "old_id": "cbae53c6b0445f2f86a3ed5896cf3cdc98c6bdb2",
      "old_mode": 33188,
      "old_path": "gen/case.c",
      "new_id": "c9f3501d6930f1c8dde07d60b89eabeb95f97dd4",
      "new_mode": 33188,
      "new_path": "gen/case.c"
    },
    {
      "type": "modify",
      "old_id": "321637136910234bdb4d5379ce37acb35eac0447",
      "old_mode": 33188,
      "old_path": "gen/util.c",
      "new_id": "9d076b2cc74ca0cf3da10556e9379c886846262d",
      "new_mode": 33188,
      "new_path": "gen/util.c"
    },
    {
      "type": "modify",
      "old_id": "fdee4fffaf4514c0df312c9ac3442cc50edb9082",
      "old_mode": 33188,
      "old_path": "gen/util.h",
      "new_id": "31542a46fce8dfe3d8e477ed73e6df50185447a1",
      "new_mode": 33188,
      "new_path": "gen/util.h"
    },
    {
      "type": "modify",
      "old_id": "b11974bb2384afb1da529293e7b96b9716ca7439",
      "old_mode": 33188,
      "old_path": "src/bidirectional.c",
      "new_id": "90aa423c7e829ef3c034acdd6b62fbfbf04a5b39",
      "new_mode": 33188,
      "new_path": "src/bidirectional.c"
    },
    {
      "type": "modify",
      "old_id": "f7c608127a0d7405946dda47b1eced5d54623b7d",
      "old_mode": 33188,
      "old_path": "test/bidirectional.c",
      "new_id": "0a91e62961982f7a1e7c6081e1b4c81856d75857",
      "new_mode": 33188,
      "new_path": "test/bidirectional.c"
    }
  ]
}
