)]}'
{
  "commit": "7cf697fced41a741884d68d3635e7673e594db91",
  "tree": "581403242462af815fc44f1b2cb2cc3fe21ebc23",
  "parents": [
    "cff7522c7bee65defbc3f44efe5d7cd5d90548fc"
  ],
  "author": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Sat Sep 05 10:47:53 2026 +0200"
  },
  "committer": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Wed Sep 09 11:17:32 2026 +0200"
  },
  "message": "Parse KWIC snippets of any shape in collocation analysis\n\nAffects only servers that do not deliver tokenized matches, where the\nanalysis falls back to parsing KWIC markup. Against a current KorAP\nmatches2FreqTable() is used instead.\n\nThe reported crash comes from findExample(), not from the regular\nexpression: after a failed request collectedMatches has no snippet\ncolumn, so the example was character(0) and assigning it aborted.\n\nThe expression was wrong as well, in three ways: it required the match\nto be followed directly by the closing span, which a \u003cspan\nclass\u003d\"cutted\"\u003e breaks, it required a non-empty left context, and it did\nnot expect a \u003cspan class\u003d\"more\"\u003e in the right context. Counts stayed\ncorrect - a guard skipped those snippets - but about 15 in every 100\nhits of the query from the report were dropped silently. The two context\nspans are now read one by one and stripped of whatever markup they\ncontain.\n\nAlso fixes both frequency table functions for their own default of an\nempty stopword list, which used to leave the table without the column\nthe stopwords are joined on.\n\nResolves #14\n\nChange-Id: I1cec847480ddb44fbf688042661019b9c5702a24\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "af0ae77f22ac8a9685184bcd504b2c22d4c2ddd2",
      "old_mode": 33188,
      "old_path": "NEWS.md",
      "new_id": "e9318e8d49f074d0666ca705cbe07fe4c817977e",
      "new_mode": 33188,
      "new_path": "NEWS.md"
    },
    {
      "type": "modify",
      "old_id": "c54b46deaffe49f778dc1f5f27d3d324ad270860",
      "old_mode": 33188,
      "old_path": "R/collocationAnalysis.R",
      "new_id": "d3ea450de8a9d4973d3af675b6636a55e7a02a73",
      "new_mode": 33188,
      "new_path": "R/collocationAnalysis.R"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ee89883d69bce19fdb3cb4245a12717fc408d5b7",
      "new_mode": 33188,
      "new_path": "tests/testthat/test-snippet-parsing.R"
    }
  ]
}
