)]}'
{
  "log": [
    {
      "commit": "040cc859f32f43ed506fd0f81b287302137b00ec",
      "tree": "32bab5239eae4e4ab0ab3717a75fe61f155ef480",
      "parents": [
        "6bbb2719f47b6302ee2b51f833740c142f1922ff"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Mar 13 13:35:22 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Mar 13 13:35:22 2026"
      },
      "message": "Tiny little phrasing change in the NEWS file\n\nBased on an way old email I gor from Lars\n"
    },
    {
      "commit": "6bbb2719f47b6302ee2b51f833740c142f1922ff",
      "tree": "4140cb7ef1779416aa833a8b4f4186ea67d808c7",
      "parents": [
        "f63ecf0079d16000792105f9a3d3b3f1b9f5518f",
        "e8f7d375c488c3d979f726e928bd87c6cc94d075"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Mar 12 15:43:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 15:43:41 2026"
      },
      "message": "Merge pull request #1960 from liblouis/issue/1959\n\nUpgrade to clang-format 18"
    },
    {
      "commit": "e8f7d375c488c3d979f726e928bd87c6cc94d075",
      "tree": "4140cb7ef1779416aa833a8b4f4186ea67d808c7",
      "parents": [
        "5885f99d3e7a1c955b7a546136efe27b15313b2f"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 10:41:19 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Mar 12 15:28:14 2026"
      },
      "message": "Format the code with clang-format 18\n"
    },
    {
      "commit": "5885f99d3e7a1c955b7a546136efe27b15313b2f",
      "tree": "7583dd157197df11e9ad36c45812a38816d9c0fa",
      "parents": [
        "3f1d5aa52c5f08211a0b7a57e3136107db4a2125"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 11:52:58 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Mar 12 15:28:14 2026"
      },
      "message": "Upgrade CI to clang-format 18\n"
    },
    {
      "commit": "3f1d5aa52c5f08211a0b7a57e3136107db4a2125",
      "tree": "60f32449a0f4c15e36576cf6e99fcfc2fb56c0d0",
      "parents": [
        "f63ecf0079d16000792105f9a3d3b3f1b9f5518f"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 10:40:49 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Mar 12 15:28:14 2026"
      },
      "message": "Use clang-format 18 by default\n"
    },
    {
      "commit": "f63ecf0079d16000792105f9a3d3b3f1b9f5518f",
      "tree": "a88616799f53ad2b44c673d42fb290a441692e36",
      "parents": [
        "c47471068e8e1f1062714c2d2f85504ab5e3f341",
        "38a4e8dd086f81e5864a9f67c5d9e769a11a0abb"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:48:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:48:13 2026"
      },
      "message": "Merge pull request #1914 from liblouis/dependabot/github_actions/actions/cache-5.0.3\n\nBump actions/cache from 4.3.0 to 5.0.3"
    },
    {
      "commit": "38a4e8dd086f81e5864a9f67c5d9e769a11a0abb",
      "tree": "a88616799f53ad2b44c673d42fb290a441692e36",
      "parents": [
        "c47471068e8e1f1062714c2d2f85504ab5e3f341"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 02 12:22:43 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:42:48 2026"
      },
      "message": "Bump actions/cache from 4.3.0 to 5.0.3\n\nBumps [actions/cache](https://github.com/actions/cache) from 4.3.0 to 5.0.3.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/0057852bfaa89a56745cba8c7296529d2fc39830...cdf6c1fa76f9f475f3d7449005a359c84ca0f306)\n\n---\nupdated-dependencies:\n- dependency-name: actions/cache\n  dependency-version: 5.0.3\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "c47471068e8e1f1062714c2d2f85504ab5e3f341",
      "tree": "1a09ff09fb91d1eb5f736900487114cfedc17176",
      "parents": [
        "0f85d56a65ab350a105a882cd64b282ea06c23b0",
        "ca5bc9459363a5f706bba35d638bb636674c51a2"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:41:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:41:57 2026"
      },
      "message": "Merge pull request #1942 from liblouis/dependabot/github_actions/github/codeql-action-4.32.4\n\nBump github/codeql-action from 4.31.10 to 4.32.4"
    },
    {
      "commit": "ca5bc9459363a5f706bba35d638bb636674c51a2",
      "tree": "1a09ff09fb91d1eb5f736900487114cfedc17176",
      "parents": [
        "0f85d56a65ab350a105a882cd64b282ea06c23b0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 12:28:13 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:33:15 2026"
      },
      "message": "Bump github/codeql-action from 4.31.10 to 4.32.4\n\nBumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.10 to 4.32.4.\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/cdefb33c0f6224e58673d9004f47f7cb3e328b89...89a39a4e59826350b863aa6b6252a07ad50cf83e)\n\n---\nupdated-dependencies:\n- dependency-name: github/codeql-action\n  dependency-version: 4.32.4\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "0f85d56a65ab350a105a882cd64b282ea06c23b0",
      "tree": "251ac25f528776d747b2a2d80f6bd8239ad0e9a5",
      "parents": [
        "b35087086d78f176ffe40b92137fb4f8c0d0dd55",
        "e37c365daf39843cb6043526ac057f4e22e51aa3"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:32:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:32:32 2026"
      },
      "message": "Merge pull request #1941 from liblouis/dependabot/github_actions/actions/checkout-6.0.2\n\nBump actions/checkout from 6.0.1 to 6.0.2"
    },
    {
      "commit": "e37c365daf39843cb6043526ac057f4e22e51aa3",
      "tree": "251ac25f528776d747b2a2d80f6bd8239ad0e9a5",
      "parents": [
        "b35087086d78f176ffe40b92137fb4f8c0d0dd55"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 12:13:55 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:27:36 2026"
      },
      "message": "Bump actions/checkout from 6.0.1 to 6.0.2\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 6.0.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "b35087086d78f176ffe40b92137fb4f8c0d0dd55",
      "tree": "2d08a649a6022990957334e5d16c6277c5bc5ee3",
      "parents": [
        "3ea15170eb5bdb0f7e64d163edbef919e2f30a66",
        "94ada1fe5fb04e5fe337388d911c278b20df67b4"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:26:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:26:52 2026"
      },
      "message": "Merge pull request #1953 from liblouis/dependabot/github_actions/step-security/harden-runner-2.15.0\n\nBump step-security/harden-runner from 2.14.0 to 2.15.0"
    },
    {
      "commit": "94ada1fe5fb04e5fe337388d911c278b20df67b4",
      "tree": "2d08a649a6022990957334e5d16c6277c5bc5ee3",
      "parents": [
        "3ea15170eb5bdb0f7e64d163edbef919e2f30a66"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 10:23:40 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:13:30 2026"
      },
      "message": "Bump step-security/harden-runner from 2.14.0 to 2.15.0\n\nBumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.14.0 to 2.15.0.\n- [Release notes](https://github.com/step-security/harden-runner/releases)\n- [Commits](https://github.com/step-security/harden-runner/compare/20cf305ff2072d973412fa9b1e3a4f227bda3c76...a90bcbc6539c36a85cdfeb73f7e2f433735f215b)\n\n---\nupdated-dependencies:\n- dependency-name: step-security/harden-runner\n  dependency-version: 2.15.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "3ea15170eb5bdb0f7e64d163edbef919e2f30a66",
      "tree": "15cc79aeb7d71232a06b7c54680ba93c236d5b11",
      "parents": [
        "2aa5f84b14de17bcfe8317862d11f6bd7d640e55",
        "7dd1aca2e5c9f181c5fd682169bf393babf5fb0a"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 12:12:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:12:46 2026"
      },
      "message": "Merge pull request #1954 from liblouis/dependabot/github_actions/actions/upload-artifact-7.0.0\n\nBump actions/upload-artifact from 6.0.0 to 7.0.0"
    },
    {
      "commit": "7dd1aca2e5c9f181c5fd682169bf393babf5fb0a",
      "tree": "15cc79aeb7d71232a06b7c54680ba93c236d5b11",
      "parents": [
        "2aa5f84b14de17bcfe8317862d11f6bd7d640e55"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 10:23:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 10:23:36 2026"
      },
      "message": "Bump actions/upload-artifact from 6.0.0 to 7.0.0\n\nBumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "2aa5f84b14de17bcfe8317862d11f6bd7d640e55",
      "tree": "b973a8eb7ce70d844fd2ef7e4c632ab9bd2b7e49",
      "parents": [
        "3b6923f3bd1309bac7034438be2f2eae1555bc3a"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:51:31 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:51:31 2026"
      },
      "message": "Set the windows version number\n"
    },
    {
      "commit": "3b6923f3bd1309bac7034438be2f2eae1555bc3a",
      "tree": "53d14e3bdfa9470b0ccdbebef42de7dde797a644",
      "parents": [
        "9522fe3b066889267b47c835aae268b4e62de381"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:49:37 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:49:37 2026"
      },
      "message": "Ignore a generated test file\n"
    },
    {
      "commit": "9522fe3b066889267b47c835aae268b4e62de381",
      "tree": "53e64c6f4557c00433e77d84de0650e0538a354b",
      "parents": [
        "67f526737f1de8e9cba40cd6b7f6c2d7938df041"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:46:26 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:46:26 2026"
      },
      "message": "Update announcement\n"
    },
    {
      "commit": "67f526737f1de8e9cba40cd6b7f6c2d7938df041",
      "tree": "0660ad56d43a852f6c22567cba235500681d511e",
      "parents": [
        "b939624b5254f0b2a43e782d7083da4c6618281c"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:40:17 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:40:17 2026"
      },
      "message": "Update fuzzing.yml\n"
    },
    {
      "commit": "b939624b5254f0b2a43e782d7083da4c6618281c",
      "tree": "7da5d1e729ffc9099d1db6a616f695d61d5e3fae",
      "parents": [
        "894c40345c456ec8088050bff9f0519165b954ba"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:39:30 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:39:30 2026"
      },
      "message": "Set the version number\n"
    },
    {
      "commit": "894c40345c456ec8088050bff9f0519165b954ba",
      "tree": "e42085e74589cc03f9a9ae2ca7657085173251b6",
      "parents": [
        "060866f312908a815d5cb9b08007bf770cacb436"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:20:53 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Mar 03 09:20:53 2026"
      },
      "message": "Update NEWS file\n"
    },
    {
      "commit": "060866f312908a815d5cb9b08007bf770cacb436",
      "tree": "9e1408555abef27e42f6cb52dfe08e308537a105",
      "parents": [
        "f2d70e3878d9b47f67eb0a7857bd3b8df1c2baad"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 16:03:33 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 16:03:33 2026"
      },
      "message": "Add copyright to Estonian yaml tests\n"
    },
    {
      "commit": "f2d70e3878d9b47f67eb0a7857bd3b8df1c2baad",
      "tree": "4cfce086cf91f2bd0055a2a124796570487af798",
      "parents": [
        "2be1d1d391bb28a3ec3414c8be8b2f8813e4b744",
        "e5ab28050e4b7a9b86b7d4c74f2b301e176ccb3a"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 16:01:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 16:01:53 2026"
      },
      "message": "Merge pull request #1933 from tibbsa/issue-1905-lou_translate_back_translation\n\nDocument input format considerations for back-translation when using lou_translate"
    },
    {
      "commit": "e5ab28050e4b7a9b86b7d4c74f2b301e176ccb3a",
      "tree": "4cfce086cf91f2bd0055a2a124796570487af798",
      "parents": [
        "1ec5f89ab1f50d6893b5e38de80ef23170af5d91"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 11:18:15 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:49:22 2026"
      },
      "message": "Make the help more brief, and make it clear that an explicit display-table is preferred\n\nAlso make it more clear that specifying table queries should be the\nstandard.\n"
    },
    {
      "commit": "1ec5f89ab1f50d6893b5e38de80ef23170af5d91",
      "tree": "292776fa2ed156325a8c99add4397a6654d28e54",
      "parents": [
        "2be1d1d391bb28a3ec3414c8be8b2f8813e4b744"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Mon Feb 16 16:40:41 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:49:22 2026"
      },
      "message": "Better document input formats for back-translation when using lou_translate\n\nUpdate the help text to explain that braille-ASCII back-translation input\nis table-specific (relying on NABCC-compatible character definitions) and\nadd an example showing Unicode braille input for non-English tables.\n\nAlso: Fixed `-d` short option which did not work as it was not included\nin the getopt_long() call (added in PR #1679)\n\nFixes #1905\n"
    },
    {
      "commit": "2be1d1d391bb28a3ec3414c8be8b2f8813e4b744",
      "tree": "d674df0f8489bc809d44538c0ebf1ad76dbf1c32",
      "parents": [
        "a3f37ca6b330778940756969533bd09d27e55c89",
        "bf7e506cd4c0d1bf7fadbbbccd9a4f6cbc1b4d64"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:18:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 15:18:14 2026"
      },
      "message": "Merge pull request #1935 from tibbsa/issue-1887-contraction-opcode-bugs\n\nFix contraction opcode bugs when using nocontractsign"
    },
    {
      "commit": "bf7e506cd4c0d1bf7fadbbbccd9a4f6cbc1b4d64",
      "tree": "d674df0f8489bc809d44538c0ebf1ad76dbf1c32",
      "parents": [
        "eefc3661f9c48dcd5b730365aa6accd2a41bc5c9"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 15:00:34 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:04:25 2026"
      },
      "message": "Explain intent of the NO_CONTRACT_LAPSED state in a comment\n"
    },
    {
      "commit": "eefc3661f9c48dcd5b730365aa6accd2a41bc5c9",
      "tree": "16acaa8ab9059a7a7cee916676e8496635afdca9",
      "parents": [
        "5a18ee3b3aff23b77d74523e93f8f8dafacb7091"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Mon Feb 16 18:48:43 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:04:25 2026"
      },
      "message": "Norwegian: fix translation of all uppercase words defined as contractions\n\ni.e. when both a nocontractsign and a begcapsword sign are needed.\n\nSee https://github.com/liblouis/liblouis/issues/1887.\n\nA pass2 rule in no-no-g0.utb used _!$sp (not preceded by space) to\nsuppress begcapsword, but this also fired when preceded by indicator\ndots like nocontractsign. Changed to _$l (preceded by letter) so\nbegcapsword is only suppressed mid-word, fixing \"NVV\" → ⠰⠠⠠⠝⠧⠧.\n"
    },
    {
      "commit": "5a18ee3b3aff23b77d74523e93f8f8dafacb7091",
      "tree": "193ecf543acb9abc201d1858f2d48aba1db2b1e9",
      "parents": [
        "c44f331259f07065093e29df1042fe8be5a6c225"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Sun Feb 22 16:27:08 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:04:25 2026"
      },
      "message": "Add UEB test cases to confirm no unintended side-effects\n\nto changes to nocontract handling in backtranslation.\n"
    },
    {
      "commit": "c44f331259f07065093e29df1042fe8be5a6c225",
      "tree": "77027c5c7475b1521346eca718336c6bbe1a5e68",
      "parents": [
        "a3f37ca6b330778940756969533bd09d27e55c89"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Mon Feb 16 18:48:43 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:04:25 2026"
      },
      "message": "Fix a backtranslation bug related to nocontractsign\n\nThe bug was discovered during Norwegian braille table work. See\nhttps://github.com/liblouis/liblouis/issues/1887.\n\nnocontractsign was ignored by begword rules, causing e.g. ⠰⠝⠧⠧ to\nback-translate as \"nødvendigv\" instead of the literal \"nvv\".\n\nThis changes the boolean `itsALetter` variable into a three-state\nnoContractMode flag to properly track `nocontractsign` scope:\n\n  - `NO_CONTRACT_OFF`: not in `nocontractsign` scope\n  - `NO_CONTRACT_ACTIVE`: directly after `nocontractsign`; suppresses\n    `CTO_WholeWord`, `CTO_Contraction`, and `CTO_BegWord` matching\n  - `NO_CONTRACT_LAPSED`: a non-letter character (hyphen, punctuation)\n    has been processed since the nocontractsign; only `CTO_WholeWord`\n    remains suppressed, allowing contractions to resume after\n    word-internal boundaries (e.g. \"c-forkortinger\")\n\nThe two-state distinction is needed because `nocontractsign` scope must\npersist through consecutive letters (\"nvv\") but lapse at non-letter\nboundaries (\"c-forkortinger\"), while still blocking whole-word matches\nthrough apostrophes (English UEB \"x\u0027s\").\n"
    },
    {
      "commit": "a3f37ca6b330778940756969533bd09d27e55c89",
      "tree": "fe221059194c6f004a8a706b9c799a719c5fe28b",
      "parents": [
        "404e05b8d14180a43c60bd5a63c97e3a3d34a691",
        "e3d213a957116221fab571cd840883de2bdcbda8"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 15:03:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 15:03:30 2026"
      },
      "message": "Merge pull request #1908 from Tnonis90/Italian_six_dots\n\nItalian six dots - PR Reopen"
    },
    {
      "commit": "e3d213a957116221fab571cd840883de2bdcbda8",
      "tree": "fe221059194c6f004a8a706b9c799a719c5fe28b",
      "parents": [
        "7ca46b651f435121346140973566c05dabc5e03d"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 14:23:02 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:57:13 2026"
      },
      "message": "Delete it.tbl\n"
    },
    {
      "commit": "7ca46b651f435121346140973566c05dabc5e03d",
      "tree": "65124eb81d4d3bebac1fd51e059e64f56b8fd65c",
      "parents": [
        "7de273b9922021baf61c836a6bf76f09a7f2d37a"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 17:12:40 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:57:13 2026"
      },
      "message": "Include digits6Dots.uti and litdigits6Dots.uti\n"
    },
    {
      "commit": "7de273b9922021baf61c836a6bf76f09a7f2d37a",
      "tree": "e7cb8db6d17cf5ec8f528fb472a375e39340feaa",
      "parents": [
        "fd4088ab80f72e3445280e773e8a67c5454966ba"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 17:07:50 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:57:13 2026"
      },
      "message": "Move tests from spaces.yaml to it.yaml\n"
    },
    {
      "commit": "fd4088ab80f72e3445280e773e8a67c5454966ba",
      "tree": "37b058e8ee61f053d05b199400de1d483f769116",
      "parents": [
        "20e938a593fd968b120af48e9be872f1f51aa90d"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:43:41 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:57:13 2026"
      },
      "message": "Clarify what system:monza means\n"
    },
    {
      "commit": "20e938a593fd968b120af48e9be872f1f51aa90d",
      "tree": "4ba257da197918a894ce3796e59add4da5a10312",
      "parents": [
        "404e05b8d14180a43c60bd5a63c97e3a3d34a691"
      ],
      "author": {
        "name": "Tnonis",
        "email": "tommaso@visiondept.it",
        "time": "Mon Jan 26 12:04:44 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:57:13 2026"
      },
      "message": "Vastly improved Italian 6 dots Braille table\n"
    },
    {
      "commit": "404e05b8d14180a43c60bd5a63c97e3a3d34a691",
      "tree": "5b8765cdab751f3a52c698c45b509ffb7ee77beb",
      "parents": [
        "2f1041d1c1c718056f2ff143038ea73a1cea435d",
        "f94d8b33c46c21831eabb2a7094c3ed4eccdfa12"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 14:56:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 14:56:05 2026"
      },
      "message": "Merge pull request #1923 from Ronan555/master\n\nINBAF Irish Braille Code October 2025 version"
    },
    {
      "commit": "f94d8b33c46c21831eabb2a7094c3ed4eccdfa12",
      "tree": "5b8765cdab751f3a52c698c45b509ffb7ee77beb",
      "parents": [
        "8a5e7b547aae330928f5117767fd94e80d2c4af2"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:59:39 2026"
      },
      "committer": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 14:50:41 2026"
      },
      "message": "Cleanup of table headers\n"
    },
    {
      "commit": "8a5e7b547aae330928f5117767fd94e80d2c4af2",
      "tree": "2297e507d7128a7c2d2e9e872ea797100af0041b",
      "parents": [
        "3968f8adbed6e249e0c4a8b91d343e1f937431bf"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 10:39:11 2026"
      },
      "committer": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:54:21 2026"
      },
      "message": "Fix the links to the braille specification\n"
    },
    {
      "commit": "3968f8adbed6e249e0c4a8b91d343e1f937431bf",
      "tree": "bd1ef53d49e4129ce66875f57b23ae57729a7112",
      "parents": [
        "2f1041d1c1c718056f2ff143038ea73a1cea435d"
      ],
      "author": {
        "name": "Ronan555",
        "email": "ronan.p.mcguirk@gmail.com",
        "time": "Tue Feb 10 15:19:08 2026"
      },
      "committer": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:54:09 2026"
      },
      "message": "INBAF Irish Braille Code October 2025 version\n\nThis update reflects the October 2025 revision of the Irish National\nBraille and Alternative Formats Authority (INBAF) Irish Braille code\nThere are some minor word changes - leathanaach and leathanaigh..\n"
    },
    {
      "commit": "2f1041d1c1c718056f2ff143038ea73a1cea435d",
      "tree": "12f873ca55a25a4f3e3f48e35875e3c1912935ad",
      "parents": [
        "fb99fec05778932a82d1b5c4f145047d905ad19f",
        "ba2b359fd43f6659bbb346a9393b450714f7b79d"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:31:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 13:31:17 2026"
      },
      "message": "Merge pull request #1893 from Benedict-Carling/feature/backtranslation-typeform-emphasis\n\nPopulate typeform buffer during backtranslation"
    },
    {
      "commit": "ba2b359fd43f6659bbb346a9393b450714f7b79d",
      "tree": "12f873ca55a25a4f3e3f48e35875e3c1912935ad",
      "parents": [
        "da382f528c891d9bc4f7855dc9f9d5e46edb7866"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Feb 27 12:50:17 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Add a real copyright\n"
    },
    {
      "commit": "da382f528c891d9bc4f7855dc9f9d5e46edb7866",
      "tree": "6eb439708996095135e398c5db5dcc27d5365666",
      "parents": [
        "85bd239304bc61dcdc454a9754ebbdb7afac3063"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Feb 27 12:49:53 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Add Benedict to AUTHORS file\n"
    },
    {
      "commit": "85bd239304bc61dcdc454a9754ebbdb7afac3063",
      "tree": "ec623cc074046c724f7a33b5c332bf5fd5c4be87",
      "parents": [
        "60103178bd877b87cde7f5c644a0798e873282f1"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:12:23 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Also add NEWS entry for the lou_checkyaml improvement\n"
    },
    {
      "commit": "60103178bd877b87cde7f5c644a0798e873282f1",
      "tree": "a956243f637ab53ba8d589dd4ea7e1b7e752ae8c",
      "parents": [
        "86b026c35f872663662582d4845408049eb88547"
      ],
      "author": {
        "name": "Benedict Carling",
        "email": "53439684+Benedict-Carling@users.noreply.github.com",
        "time": "Wed Dec 10 16:39:01 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Add NEWS entry\n"
    },
    {
      "commit": "86b026c35f872663662582d4845408049eb88547",
      "tree": "92c45ccc7952d8ccd0f8e10f6ed71677b5943920",
      "parents": [
        "4e6eeb9b8dc4959e9281092969f03e8a4ea3ba85"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:05:02 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Port most of the C tests to YAML\n"
    },
    {
      "commit": "4e6eeb9b8dc4959e9281092969f03e8a4ea3ba85",
      "tree": "c5b8dc2ea6ae6dbfa37d6c2dfcfee5d799fdadce",
      "parents": [
        "89bbdffa70d98b48ced33435a6c441a38a43b34b"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Mar 02 13:05:19 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Add back translation emphasis detection tests for UEB\n"
    },
    {
      "commit": "89bbdffa70d98b48ced33435a6c441a38a43b34b",
      "tree": "22fb588776d69e627eebfeebb6c52b0d88109035",
      "parents": [
        "7cdb5812d2052844a686864ebbf135257dc394e5"
      ],
      "author": {
        "name": "Benedict Carling",
        "email": "53439684+Benedict-Carling@users.noreply.github.com",
        "time": "Thu Dec 11 10:18:28 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Add \"expected_typeform\" support to lou_checkyaml\n\nThis integrates the backtranslation typeform functionality into the YAML\ntest infrastructure, allowing existing and new test data to verify that\nemphasis indicators in braille are correctly detected during backtranslation.\n\nChanges:\n- Add expected_typeform field to optional_test_params in brl_checks.h\n- Modify check_base() to allocate typeform buffer and verify output for\n  backward translation when expected_typeform is provided\n- Add expected_typeform option parsing to lou_checkyaml.c\n- Add comprehensive YAML test file with 14 tests covering letter, word,\n  phrase, nested, and combined emphasis scenarios\n\nUsage in YAML tests:\n  flags:\n    testmode: backward\n  tests:\n    - - \"braille input\"\n      - \"expected output\"\n      - expected_typeform:\n          italic: \u0027+   \u0027\n"
    },
    {
      "commit": "7cdb5812d2052844a686864ebbf135257dc394e5",
      "tree": "e4e505c560a15d11e22b52306848b663de4f187e",
      "parents": [
        "fb99fec05778932a82d1b5c4f145047d905ad19f"
      ],
      "author": {
        "name": "Benedict Carling",
        "email": "53439684+Benedict-Carling@users.noreply.github.com",
        "time": "Wed Dec 10 15:59:13 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:16:22 2026"
      },
      "message": "Populate typeform buffer during backtranslation\n\nImplement typeform/emphasis detection during backtranslation\n(lou_backTranslate). The typeform output parameter was previously\nunused and initialized to zeros. This change:\n\n- Add emphasis tracking state to TranslationContext (activeWordEmphasis,\n  activePhraseEmphasis, nextCharEmphasis)\n- Add findEmphasisClass() to identify which emphasis class a rule\n  belongs to by looking up its offset in emphRules table\n- Handle all emphasis indicator opcodes in back_selectRule and main\n  processing loop (CTO_EmphLetter, CTO_BegEmphWord, CTO_EndEmphWord,\n  CTO_BegEmph, CTO_EndEmph, CTO_BegEmphPhrase, CTO_EndEmphPhrase)\n- Populate typeform buffer with appropriate emphasis bits for each\n  output character\n- Clear word-level emphasis at word boundaries (space)\n- Fix typeform buffer initialization to use correct size\n\nFixes: #919\n"
    },
    {
      "commit": "fb99fec05778932a82d1b5c4f145047d905ad19f",
      "tree": "2388f182cd7e20bc33be2669204e6368b662c507",
      "parents": [
        "d3500d7d19735ce5cc9623f6c25fedc83062e8d8",
        "58ed4013b3f39a4c7a7df0a4dc59738e5584e62b"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 13:15:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 13:15:42 2026"
      },
      "message": "Merge pull request #1919 from seeing-hands/dev/uk_computer_standard\n\nAdd standard U.K. 8-dot computer Braille"
    },
    {
      "commit": "58ed4013b3f39a4c7a7df0a4dc59738e5584e62b",
      "tree": "2388f182cd7e20bc33be2669204e6368b662c507",
      "parents": [
        "f1a84b1a188a99c8275248104dedd2c80bf96206"
      ],
      "author": {
        "name": "Seeing Hands",
        "email": "ukcompbraille@seeinghands.org",
        "time": "Sun Mar 01 03:35:34 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:57:47 2026"
      },
      "message": "Patch to fix space tests\n"
    },
    {
      "commit": "f1a84b1a188a99c8275248104dedd2c80bf96206",
      "tree": "7dbc5c8187e1733c1632673f9d357f79ca758458",
      "parents": [
        "4521c4d5c2ba3be143bc3441901a10dcfb204809"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 13:04:09 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:57:47 2026"
      },
      "message": "Remove test cases from spaces.yaml and extend en-gb-comp8.yaml instead\n"
    },
    {
      "commit": "4521c4d5c2ba3be143bc3441901a10dcfb204809",
      "tree": "42d8d0f5dcfcd341b3636a97594bd3a5bb136d3d",
      "parents": [
        "0d0ce7e8cabc8f0952af32bb70ae953f3af8c9ba"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 12:52:47 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:57:47 2026"
      },
      "message": "Reformat test file\n"
    },
    {
      "commit": "0d0ce7e8cabc8f0952af32bb70ae953f3af8c9ba",
      "tree": "9f6e1e8f25c7a881c248393e20718f7e370fbca0",
      "parents": [
        "b9f9b0ac2cf1d27ce9693b013fd8a70c72b119c1"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Feb 23 15:32:21 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:57:47 2026"
      },
      "message": "Replace the old UK computer braille table\n"
    },
    {
      "commit": "b9f9b0ac2cf1d27ce9693b013fd8a70c72b119c1",
      "tree": "13381423af04860f459148a13ed0aba23df44e2c",
      "parents": [
        "d3500d7d19735ce5cc9623f6c25fedc83062e8d8"
      ],
      "author": {
        "name": "Seeing Hands",
        "email": "ukcompbraille@seeinghands.org",
        "time": "Sat Jan 17 03:49:40 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:57:47 2026"
      },
      "message": "Add table for full 8-dot standard from BAUK\n"
    },
    {
      "commit": "d3500d7d19735ce5cc9623f6c25fedc83062e8d8",
      "tree": "782dc91568af346a35e75fd9af00a8b6f833a239",
      "parents": [
        "958927198c75872a61d602cfda3b48cc7ae8c5f5",
        "6ef0aa95afc47c07867d5d8d01765da277a89e45"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:42:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:42:35 2026"
      },
      "message": "Merge pull request #1940 from JakeKyle/jkyle_tables_devanagari\n\nDevanagari table updated"
    },
    {
      "commit": "6ef0aa95afc47c07867d5d8d01765da277a89e45",
      "tree": "782dc91568af346a35e75fd9af00a8b6f833a239",
      "parents": [
        "958927198c75872a61d602cfda3b48cc7ae8c5f5"
      ],
      "author": {
        "name": "JakeKyle",
        "email": "jake@compassbraille.org",
        "time": "Tue Feb 17 14:14:31 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:36:50 2026"
      },
      "message": "New devanagari table - Bharti 2.1\n"
    },
    {
      "commit": "958927198c75872a61d602cfda3b48cc7ae8c5f5",
      "tree": "f6c85f7694208f4cc5a2dbc2da3b1880e1242f94",
      "parents": [
        "32de2e06875b88446c04a5d3bd3f2abbe1e8ee94",
        "61a107a1a207346f331968a52d1744d985ca8234"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:35:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:35:15 2026"
      },
      "message": "Merge pull request #1927 from BueVest/en-g3_2603\n\nImprovements to English grade 3"
    },
    {
      "commit": "61a107a1a207346f331968a52d1744d985ca8234",
      "tree": "f6c85f7694208f4cc5a2dbc2da3b1880e1242f94",
      "parents": [
        "32de2e06875b88446c04a5d3bd3f2abbe1e8ee94"
      ],
      "author": {
        "name": "BueVest",
        "email": "bue@vester-andersen.dk",
        "time": "Mon Feb 09 09:22:47 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:22:11 2026"
      },
      "message": "Corrected a lot of outlining and some compound initial contractions\n\nAlso limited the usage of some inline word contractions.\n"
    },
    {
      "commit": "32de2e06875b88446c04a5d3bd3f2abbe1e8ee94",
      "tree": "f8c245b3092f043c1abaf594560bf9477f22432c",
      "parents": [
        "b79f3a3f09b46b648b732708d1a261769f911132",
        "3af902c4492400166cf7cd5232cd12b83150914b"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:21:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:21:34 2026"
      },
      "message": "Merge pull request #1775 from tanielkirikal/add-estonian-table\n\nAdd Estonian 6-dot braille table (et-6dot.utb)"
    },
    {
      "commit": "3af902c4492400166cf7cd5232cd12b83150914b",
      "tree": "f8c245b3092f043c1abaf594560bf9477f22432c",
      "parents": [
        "b5652581ce1a7c32291e1ce494456883b47c69d2"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Wed Feb 25 13:52:45 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:15:41 2026"
      },
      "message": "Move the license up\n"
    },
    {
      "commit": "b5652581ce1a7c32291e1ce494456883b47c69d2",
      "tree": "9df5bce08e4305d7829f9d4a472cf6eb6bc751e4",
      "parents": [
        "b79f3a3f09b46b648b732708d1a261769f911132"
      ],
      "author": {
        "name": "root",
        "email": "root@alma-1.colleduc.ee",
        "time": "Tue Apr 22 14:01:59 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:15:41 2026"
      },
      "message": "New Estonian 6-dot braille table (et-6dot.utb)\n"
    },
    {
      "commit": "b79f3a3f09b46b648b732708d1a261769f911132",
      "tree": "fad518d9bc7696ffcfccba38051e28adb9705592",
      "parents": [
        "96e4c834c9f0abd795b8c8b34673fcebe39726bc",
        "4bbfdb7001c4770e16ee9f3e7f60fe9aeab40f88"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 12:14:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:14:30 2026"
      },
      "message": "Merge pull request #1922 from PGZXB/dev-fix-1859\n\nFix stack buffer overflow in _lou_getTablePath when LOUIS_TABLEPATH is too long"
    },
    {
      "commit": "4bbfdb7001c4770e16ee9f3e7f60fe9aeab40f88",
      "tree": "fad518d9bc7696ffcfccba38051e28adb9705592",
      "parents": [
        "5defbbe2203c81bc2a3c165b02bbbeac6a847e19"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:16:37 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:27:31 2026"
      },
      "message": "Improve variable naming\n"
    },
    {
      "commit": "5defbbe2203c81bc2a3c165b02bbbeac6a847e19",
      "tree": "8dceb6114050cfd7d52f10bdbe1ce99fba37931e",
      "parents": [
        "548f6a3b2355f880b1195face654736296703af2"
      ],
      "author": {
        "name": "PGZXB",
        "email": "pgzxb@qq.com",
        "time": "Tue Feb 10 16:11:34 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:27:31 2026"
      },
      "message": "Code format\n"
    },
    {
      "commit": "548f6a3b2355f880b1195face654736296703af2",
      "tree": "9cfe2727034b0c4516ec7eade86d13cd2aff3ec1",
      "parents": [
        "96e4c834c9f0abd795b8c8b34673fcebe39726bc"
      ],
      "author": {
        "name": "PGZXB",
        "email": "pgzxb@qq.com",
        "time": "Tue Feb 10 08:33:41 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:27:31 2026"
      },
      "message": "Fix stack buffer overflow in _lou_getTablePath when LOUIS_TABLEPATH is too long\n"
    },
    {
      "commit": "96e4c834c9f0abd795b8c8b34673fcebe39726bc",
      "tree": "c09942e41244090dc533e584911a405e3ff10039",
      "parents": [
        "387ee8d83a77f63c28326547d8afc73609dfc233",
        "df69e153647e27953e2ad54ec2ab51afee672fd0"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:27:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 11:27:10 2026"
      },
      "message": "Merge pull request #1946 from liblouis/various-fixes-and-cleanup\n\nVarious fixes and cleanup"
    },
    {
      "commit": "df69e153647e27953e2ad54ec2ab51afee672fd0",
      "tree": "c09942e41244090dc533e584911a405e3ff10039",
      "parents": [
        "7887764c5a0442314469778192c19b26c75d1f57"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Thu Nov 27 19:48:43 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Trace rules that weren\u0027t traced yet in backward translation\n"
    },
    {
      "commit": "7887764c5a0442314469778192c19b26c75d1f57",
      "tree": "fc1ce28b4b602b8985d975c63a98a1c45c146578",
      "parents": [
        "c622ed729af663c459ae35a36593072fe80856f7"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Nov 24 23:32:58 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Add const keyword to some function arguments\n"
    },
    {
      "commit": "c622ed729af663c459ae35a36593072fe80856f7",
      "tree": "b77e64d9d54ea4b0e0b8dfcad0ceba96790dfe53",
      "parents": [
        "cbb4f45699fd156420b347604f518478e5d5adb9"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Nov 25 21:11:19 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "CTO_Replace does not make sense in lou_backTranslateString\n"
    },
    {
      "commit": "cbb4f45699fd156420b347604f518478e5d5adb9",
      "tree": "5bc1470e4377c04b0d5de8f4bce922448a53b604",
      "parents": [
        "21937cbd4d0def53d7c12ce2c166381dbc1802ab"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Nov 25 21:35:40 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Deprecate the \"literal\" opcode\n\nsee https://github.com/liblouis/liblouis/issues/1096\n"
    },
    {
      "commit": "21937cbd4d0def53d7c12ce2c166381dbc1802ab",
      "tree": "e1b4851c519a914f5e1de87724ea604d10c4b30a",
      "parents": [
        "9d202e1a95a6a6985b1379d436c2c76a3e8f3274"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Mon Nov 24 22:04:04 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Delete some dead code\n"
    },
    {
      "commit": "9d202e1a95a6a6985b1379d436c2c76a3e8f3274",
      "tree": "b9cc488d3456310ceee8ce8a3dff52b8681790ec",
      "parents": [
        "c755f03359dc70653eae4704ad62c5b1f707c4fa"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Wed Nov 26 16:28:36 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Bugfix in lou_hyphenate()\n"
    },
    {
      "commit": "c755f03359dc70653eae4704ad62c5b1f707c4fa",
      "tree": "9bd87a2d2487ec0834555fd7b000c21008f96c4a",
      "parents": [
        "543125893acf0b82f66a7e2d34198a561852e65e"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Nov 25 17:53:54 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Bugfix for `nofor correct\u0027 rules\n"
    },
    {
      "commit": "543125893acf0b82f66a7e2d34198a561852e65e",
      "tree": "0fd9dd6c128174de382375d6cc1e4acb3d062447",
      "parents": [
        "0109bc05dfa89e39ba8627ca703aa1c8521b6210"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Nov 25 23:28:00 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Bugfix: wrong order of function arguments\n"
    },
    {
      "commit": "0109bc05dfa89e39ba8627ca703aa1c8521b6210",
      "tree": "62efc4a7527ddbca568803ff6749204bcd81f3e6",
      "parents": [
        "387ee8d83a77f63c28326547d8afc73609dfc233"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Nov 25 13:10:49 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 11:15:11 2026"
      },
      "message": "Code simplification: ruleOffset argument does not need a value when passed to function\n"
    },
    {
      "commit": "387ee8d83a77f63c28326547d8afc73609dfc233",
      "tree": "d4a55513843895ba06c38db68032a6640a320a57",
      "parents": [
        "33dcf77346615df698ff3f76b8ad846fdf8beeb3",
        "2c0eb52d04a789f6516424b278902522b28ae434"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:55:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 09:55:08 2026"
      },
      "message": "Merge pull request #1945 from hammera/extend_braille_input\n\ntables/hu-backtranslate-word-corrections.cti, tables/hu-exceptionwords.cti: added new Braille forward and backward translation exceptions"
    },
    {
      "commit": "2c0eb52d04a789f6516424b278902522b28ae434",
      "tree": "d4a55513843895ba06c38db68032a6640a320a57",
      "parents": [
        "7f478ace71e53003127b90ec7a877f5b413aee59"
      ],
      "author": {
        "name": "Attila Hammer",
        "email": "hammera@pickup.hu",
        "time": "Thu Dec 04 15:35:52 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:39:29 2026"
      },
      "message": "tests/braille-specs/hu-hu-g1_dictionary_special_consonants.yaml: Added new forward and backward exceptions related testcases\n\nSigned-off-by: Attila Hammer \u003chammera@pickup.hu\u003e\n"
    },
    {
      "commit": "7f478ace71e53003127b90ec7a877f5b413aee59",
      "tree": "0f47297b55415c502c7d4b95d0a7392f5f4ca6b9",
      "parents": [
        "33dcf77346615df698ff3f76b8ad846fdf8beeb3"
      ],
      "author": {
        "name": "Attila Hammer",
        "email": "hammera@pickup.hu",
        "time": "Thu Dec 04 15:35:14 2025"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:39:29 2026"
      },
      "message": "tables/hu-backtranslate-word-corrections.cti, tables/hu-exceptionwords.cti: Added new forward and backward translation exceptions\n\nSigned-off-by: Attila Hammer \u003chammera@pickup.hu\u003e\n"
    },
    {
      "commit": "33dcf77346615df698ff3f76b8ad846fdf8beeb3",
      "tree": "71ecb710111afe6be877665641f355940785964d",
      "parents": [
        "46252694753df2a49bcf2bdf251c9bdc6e8ddf34",
        "953776df5bb3235c7777408823fba1aeaaef5d87"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:38:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 09:38:50 2026"
      },
      "message": "Merge pull request #1950 from liblouis/issue/1904\n\nAdd a bounds check to srcSpacing access when handling JoinNum"
    },
    {
      "commit": "953776df5bb3235c7777408823fba1aeaaef5d87",
      "tree": "71ecb710111afe6be877665641f355940785964d",
      "parents": [
        "46252694753df2a49bcf2bdf251c9bdc6e8ddf34"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Feb 27 15:12:12 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:21:35 2026"
      },
      "message": "Add a bounds check to srcSpacing access when handling JoinNum\n\nFixes #1904\n"
    },
    {
      "commit": "46252694753df2a49bcf2bdf251c9bdc6e8ddf34",
      "tree": "b1394a4821af5661691c1a5a8b2762fc09f96f8e",
      "parents": [
        "d3f47a63605bb0205ce8c1554d12e0091129f8b4",
        "1b6f7debef7f31992df0e3b5448eaa44e6557d51"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 09:08:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 09:08:20 2026"
      },
      "message": "Merge pull request #1921 from PGZXB/dev-fix-1871\n\nFix stack buffer overflow triggered by a crafted translation table"
    },
    {
      "commit": "1b6f7debef7f31992df0e3b5448eaa44e6557d51",
      "tree": "b1394a4821af5661691c1a5a8b2762fc09f96f8e",
      "parents": [
        "d3f47a63605bb0205ce8c1554d12e0091129f8b4"
      ],
      "author": {
        "name": "PGZXB",
        "email": "pgzxb@qq.com",
        "time": "Sun Feb 08 20:32:56 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Mon Mar 02 08:49:31 2026"
      },
      "message": "Fix stack buffer overflow triggered by a crafted translation table\n"
    },
    {
      "commit": "d3f47a63605bb0205ce8c1554d12e0091129f8b4",
      "tree": "007bc7669b353fcecd8920b770373a0c66370534",
      "parents": [
        "6e95c589941af4fa69871ea21db0201f1725fbe0"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Feb 27 15:43:13 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Fri Feb 27 15:43:13 2026"
      },
      "message": "Add NEWS entries for merged PRs\n"
    },
    {
      "commit": "6e95c589941af4fa69871ea21db0201f1725fbe0",
      "tree": "728b85294fc7ec18ffacac6ed3e813a9e9fcd6ad",
      "parents": [
        "c8534bcf16c5497f85dc20452579130ead8f95e7",
        "2a442638e867c2685e8133f1ae69ca54d4530899"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Feb 26 13:52:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 13:52:36 2026"
      },
      "message": "Merge pull request #1948 from liblouis/fix/add-authors\n\nAdapt AUTHORS based on git log"
    },
    {
      "commit": "2a442638e867c2685e8133f1ae69ca54d4530899",
      "tree": "728b85294fc7ec18ffacac6ed3e813a9e9fcd6ad",
      "parents": [
        "c8534bcf16c5497f85dc20452579130ead8f95e7"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Feb 26 09:47:05 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Thu Feb 26 09:52:52 2026"
      },
      "message": "Adapt AUTHORS based on git log\n\nUse git shortlog -sne -- *.c *.h to see a list of authors with counts\nper author. Then use that to update the AUTHORS file.\n\nOnly authors with more than two commits are considered\n"
    },
    {
      "commit": "c8534bcf16c5497f85dc20452579130ead8f95e7",
      "tree": "525542fe673bd38e47d7c0dae4868807a293827f",
      "parents": [
        "b2aef2933c633f32499cb35431ac7b57104e54bb",
        "d82c4e8989d01a92f32c60e158c3b8c0e3461268"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Wed Feb 25 10:56:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 10:56:21 2026"
      },
      "message": "Merge pull request #1926 from BueVest/buevest_da-dk_2603\n\nCorrected a few g2 words."
    },
    {
      "commit": "d82c4e8989d01a92f32c60e158c3b8c0e3461268",
      "tree": "525542fe673bd38e47d7c0dae4868807a293827f",
      "parents": [
        "346de7c1c0f16f989e5148c43f1ef127737b24e2"
      ],
      "author": {
        "name": "BueVest",
        "email": "bue@vester-andersen.dk",
        "time": "Mon Feb 23 18:40:41 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Wed Feb 25 10:30:08 2026"
      },
      "message": "Hyphenated a couple of words, and added contractions dt and mt to test\n"
    },
    {
      "commit": "346de7c1c0f16f989e5148c43f1ef127737b24e2",
      "tree": "2cbfef90b2af27dfc808cd42e179ec10fec75816",
      "parents": [
        "b2aef2933c633f32499cb35431ac7b57104e54bb"
      ],
      "author": {
        "name": "BueVest",
        "email": "bue@vester-andersen.dk",
        "time": "Sun Jan 25 21:41:20 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Wed Feb 25 10:30:08 2026"
      },
      "message": "Danish: correct a few g2 words\n"
    },
    {
      "commit": "b2aef2933c633f32499cb35431ac7b57104e54bb",
      "tree": "e6058c879d7365402a5f18f83c9da051e633e836",
      "parents": [
        "21554f6e0fe710af8adca7518a6c828616fc218d",
        "fb23fb59ae5d5428bba1fe98b48aa19fff5cbc7c"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Wed Feb 25 07:25:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 07:25:15 2026"
      },
      "message": "Merge pull request #1932 from tibbsa/issue-1877-sufword-prfword-following-seqdelimiter\n\nFix sufword/prfword with seqdelimiter and nocontractsign"
    },
    {
      "commit": "fb23fb59ae5d5428bba1fe98b48aa19fff5cbc7c",
      "tree": "e6058c879d7365402a5f18f83c9da051e633e836",
      "parents": [
        "28a35226ead2aa18d2f45d1bcea58b0a009250cc"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Mon Feb 16 15:28:12 2026"
      },
      "committer": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 14:59:59 2026"
      },
      "message": "Make sufword and prfword respect nocontractsign during back-translation\n\nconsistent with how word already handles it.\n\nFixes https://github.com/liblouis/liblouis/issues/1878 (at least for\nthe reported use-case; there may still be issues with other opcodes,\nbut these are more difficult to resolve).\n"
    },
    {
      "commit": "28a35226ead2aa18d2f45d1bcea58b0a009250cc",
      "tree": "fe462f9b5e41c53b082760f694516cb475254252",
      "parents": [
        "21554f6e0fe710af8adca7518a6c828616fc218d"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Mon Feb 16 15:28:12 2026"
      },
      "committer": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 24 14:54:46 2026"
      },
      "message": "Make sufword and prfword recognize seqdelimiter characters as word boundaries\n\nduring forward translation, consistent with how word already handles\nthem.\n\nFixes https://github.com/liblouis/liblouis/issues/1877\n"
    },
    {
      "commit": "21554f6e0fe710af8adca7518a6c828616fc218d",
      "tree": "91df60e5e47f51add82c07270aba100ce69e399b",
      "parents": [
        "d14f5675f72834533e2003fd5a94e59c97fa6492"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 10:27:10 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 10:27:10 2026"
      },
      "message": "Put tables in Makefile.am in proper sort order\n"
    },
    {
      "commit": "d14f5675f72834533e2003fd5a94e59c97fa6492",
      "tree": "15e9d861083fc9c7d064cb0239fd9b29c866f7fd",
      "parents": [
        "f61ed50efb7e6e733888a828477aee2e69fdf0bf"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 10:26:24 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 10:26:24 2026"
      },
      "message": "Update the maketable script to generate an up-to-date Makefile.am\n\nalso ignore *.in files as they are in EXTRA_DIST\n"
    },
    {
      "commit": "f61ed50efb7e6e733888a828477aee2e69fdf0bf",
      "tree": "098c156e83efa7c5b40e287503df001d0ad2e6dd",
      "parents": [
        "c6ff3e24578d70601e41d543b743efc4ef1eeb8e",
        "34db841b35927ca6cdf945f29df4dfd5c3747d52"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 09:58:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 09:58:41 2026"
      },
      "message": "Merge pull request #1916 from liblouis/pr_template\n\nAdd pull request template"
    },
    {
      "commit": "34db841b35927ca6cdf945f29df4dfd5c3747d52",
      "tree": "098c156e83efa7c5b40e287503df001d0ad2e6dd",
      "parents": [
        "c6ff3e24578d70601e41d543b743efc4ef1eeb8e"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Tue Feb 03 11:47:42 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 09:58:21 2026"
      },
      "message": "Add pull request template\n"
    },
    {
      "commit": "c6ff3e24578d70601e41d543b743efc4ef1eeb8e",
      "tree": "8096b72e8aed21463d5d7a1049196ef7ed0a5e29",
      "parents": [
        "fa4de0f458d556d4a6f7c4d3fc9d5fb16e8f2d9a",
        "aa6a8b5b52076d2d7fcb0bd1a9c4fb093c33f632"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 09:41:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 09:41:12 2026"
      },
      "message": "Merge pull request #1937 from tibbsa/issue-1608-backtranslate_aas\n\nFix capsword translation with endword apostrophe\u0027d letters (e.g. AA\u0027s, FBI\u0027s)"
    },
    {
      "commit": "aa6a8b5b52076d2d7fcb0bd1a9c4fb093c33f632",
      "tree": "8096b72e8aed21463d5d7a1049196ef7ed0a5e29",
      "parents": [
        "a17a3e2a959cc52f0ac19c91fe5410a61bafc515"
      ],
      "author": {
        "name": "Bert Frees",
        "email": "bertfrees@gmail.com",
        "time": "Thu Feb 19 16:22:01 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 08:41:54 2026"
      },
      "message": "Drop mentioning of the specific UEB rule in the C code\n"
    },
    {
      "commit": "a17a3e2a959cc52f0ac19c91fe5410a61bafc515",
      "tree": "e486f5ce64180c2fb592f6f1460b8cd1a122b0a4",
      "parents": [
        "fa4de0f458d556d4a6f7c4d3fc9d5fb16e8f2d9a"
      ],
      "author": {
        "name": "Anthony Tibbs",
        "email": "anthony@tibbs.ca",
        "time": "Wed Feb 18 17:49:07 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 08:41:54 2026"
      },
      "message": "Fix capsword backtranslation with apostrophe contractions\n\nMulti-character endword rules (e.g. endword \u0027s 3-234) output the\napostrophe and following letter(s) in a single putchars() call,\nbypassing the main loop\u0027s per-iteration capsword termination check.\nThis caused letters after the apostrophe to be incorrectly uppercased\n(e.g. AA\u0027S instead of AA\u0027s).\n\nAdd a per-character attribute check inside putchars(): when in confirmed\ncapsword mode, if a non-letter non-capsmode character is encountered,\nterminate capsword and output remaining characters without uppercasing.\nCapsphrase mode is unaffected.\n\nAlso remove a conflicting context rule in en-us-g2.ctb that inserted a\nspurious capsletter indicator before apostrophes in capswords, causing\nforward translation failures for patterns like FBI\u0027s.\n\nFixes #1608\n"
    },
    {
      "commit": "fa4de0f458d556d4a6f7c4d3fc9d5fb16e8f2d9a",
      "tree": "b80d68925e97fa9ddc781babbbeb23c33a17b9ae",
      "parents": [
        "2e7b3c6ad0392b923c477d5d888443ecac3706b8"
      ],
      "author": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 08:10:12 2026"
      },
      "committer": {
        "name": "Christian Egli",
        "email": "christian.egli@sbs.ch",
        "time": "Tue Feb 24 08:10:12 2026"
      },
      "message": "Format code\n"
    }
  ],
  "next": "2e7b3c6ad0392b923c477d5d888443ecac3706b8"
}
