{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":16614401,"defaultBranch":"master","name":"crengine","ownerLogin":"koreader","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-02-07T12:47:11.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3957564?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716610769.0","currentOid":""},"activityList":{"items":[{"before":"1a9e79e25a5b4510d7aaff238d5239f2da70d8d0","after":"33d7fcc097aebd3b2fa10325814417619ba804bd","ref":"refs/heads/master","pushedAt":"2024-05-20T19:16:22.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"LvDocView header: allow overriding \"page/total %\"\n\nSo frontend can build this bit of text and propagate\nit to crengine for it to display in place of its own\ncomputed text.","shortMessageHtmlLink":"LvDocView header: allow overriding \"page/total %\""}},{"before":"5d2724b6c10dbcc97f0d243665b56ec5b88f8c28","after":"1a9e79e25a5b4510d7aaff238d5239f2da70d8d0","ref":"refs/heads/master","pushedAt":"2024-04-07T11:31:29.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvrend: fix positioning of bottom border on empty block elements\n\nFix some possible issues with empty block elements having\nsome bottom border (included in padding_bottom) when\nprevious vertical margins are collapsing.\n(Not 100% certain this is the right fix that won't\ncause side effects...)","shortMessageHtmlLink":"lvrend: fix positioning of bottom border on empty block elements"}},{"before":"e6a5cc97d706644fe01e0bcd826f0c1690525b9b","after":"5d2724b6c10dbcc97f0d243665b56ec5b88f8c28","ref":"refs/heads/master","pushedAt":"2024-04-06T18:29:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"EPUB: add \"identifiers\" to doc props (#560)\n\nie. \"isbn:9783462312317\", \"asin:b0ckwvvv4z\".","shortMessageHtmlLink":"EPUB: add \"identifiers\" to doc props (#560)"}},{"before":"55429c37868322408df15cfb0d26bc839b90cccf","after":"e6a5cc97d706644fe01e0bcd826f0c1690525b9b","ref":"refs/heads/master","pushedAt":"2024-04-06T18:28:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"Russian hyphenation: allow hyphens after Russian \"не\" prefix (#561)","shortMessageHtmlLink":"Russian hyphenation: allow hyphens after Russian \"не\" prefix (#561)"}},{"before":"e498c1e4455567cea70a3c2b9e89ee736d25de16","after":"55429c37868322408df15cfb0d26bc839b90cccf","ref":"refs/heads/master","pushedAt":"2024-03-20T19:55:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"TextLang: tweak comments in previous commit","shortMessageHtmlLink":"TextLang: tweak comments in previous commit"}},{"before":"8e055dd26636bf30e69d0706536bcffa8186d7d4","after":"e498c1e4455567cea70a3c2b9e89ee736d25de16","ref":"refs/heads/master","pushedAt":"2024-03-20T19:40:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"TextLang: fix missing bracket in previous commit","shortMessageHtmlLink":"TextLang: fix missing bracket in previous commit"}},{"before":"f4312ba14217fbef21ce9347555125debf5dabe1","after":"8e055dd26636bf30e69d0706536bcffa8186d7d4","ref":"refs/heads/master","pushedAt":"2024-03-20T18:54:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"TextLang: Russian: add typography rules (#557)\n\nAvoid having one-letter prepositions and conjunctions\r\nhanging at the end of the line.","shortMessageHtmlLink":"TextLang: Russian: add typography rules (#557)"}},{"before":"e4426ac5aefd28bb2adcfc25806701232361cbb2","after":"f4312ba14217fbef21ce9347555125debf5dabe1","ref":"refs/heads/master","pushedAt":"2024-03-20T18:50:34.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"EPUB: fallback to look for a cover in the first fragment\n\nIf no EPUB3 or EPUB2 cover found, look at the first\nXHTML fragment from the spine: if it contains a single\nimage and no text, assume that image can be used as\na cover.\nAlso relax these conditions if the image has alt\"=cover\":\nit must just be before any text and other images.","shortMessageHtmlLink":"EPUB: fallback to look for a cover in the first fragment"}},{"before":"f0ba598e1773bd41bdc7450fa7f0357b212cdb23","after":"e4426ac5aefd28bb2adcfc25806701232361cbb2","ref":"refs/heads/master","pushedAt":"2024-03-08T06:56:52.000Z","pushType":"pr_merge","commitsCount":19,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"fb2.css: fix CI stylelint warnings\n\nMake zero values unitless, and move a few things\naround to avoid \"descending specificity\".","shortMessageHtmlLink":"fb2.css: fix CI stylelint warnings"}},{"before":"119b873858fad097578cf4b43a453827a62da986","after":"f0ba598e1773bd41bdc7450fa7f0357b212cdb23","ref":"refs/heads/master","pushedAt":"2024-03-01T08:11:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Frenzie","name":"Frans de Jonge","path":"/Frenzie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/202757?s=80&v=4"},"commit":{"message":"[CI] Add stylelint to help prevent typos in CSS (#556)","shortMessageHtmlLink":"[CI] Add stylelint to help prevent typos in CSS (#556)"}},{"before":"dd5cf73712fa96214b59744401071d6ecf58762b","after":"119b873858fad097578cf4b43a453827a62da986","ref":"refs/heads/master","pushedAt":"2024-02-28T18:11:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"Hyphenation: update French.pattern (#553)\n\nFix a few specific cases (avoid \"churchil-l\",\r\nproperly handle \"neurosciences\").","shortMessageHtmlLink":"Hyphenation: update French.pattern (#553)"}},{"before":"b5f97c4560ddb9d1ddfad20c858c997045a89649","after":"dd5cf73712fa96214b59744401071d6ecf58762b","ref":"refs/heads/master","pushedAt":"2024-02-16T11:27:11.000Z","pushType":"pr_merge","commitsCount":11,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"In-page footnotes: allows for multiple id= inside them\n\nPreviously, when entering a block element tagged with\n\"-cr-hint: footnote-inpage\", we were associating it with\nthe first id= attribute found inside it.\nIt was then added to the page containing links with href=\nthis id.\nBut it may happen that some href= points to some inner id=\ninside the footnote section (ie. the container has an id= but\nthe href= points to a inside the container, with\nanother id), in which case no footnote was found for that href.\nWe now reference the same LVFootNote to all the ids met.\nThe LVFootNote stubs created when meeting the href need to\nbe kept, so we associate them with the \"actual footnote\" we\ncreate, so it can act as a proxy to it.","shortMessageHtmlLink":"In-page footnotes: allows for multiple id= inside them"}},{"before":"ffc7662f125281397a8c564734918af7cf101f17","after":"b5f97c4560ddb9d1ddfad20c858c997045a89649","ref":"refs/heads/master","pushedAt":"2024-01-14T10:04:50.000Z","pushType":"pr_merge","commitsCount":11,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"bump CACHE_FILE_FORMAT_VERSION\n\nNecessary with the previous commits.\nAlso add to the hardcoded element lists some tag names that\ncan be seen in HTML standard and Firefox stylesheets.","shortMessageHtmlLink":"bump CACHE_FILE_FORMAT_VERSION"}},{"before":"c89bd625b3e741fe66188d8e94d92b5396ee6761","after":"ffc7662f125281397a8c564734918af7cf101f17","ref":"refs/heads/master","pushedAt":"2023-12-17T19:23:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"LVStyleSheet: fix stylesheet possibly not applied (#550)\n\nFollowup fix to 55fa1043: if there's not a single '* {}'\r\nor '.cls {}' in a stylesheet, none of it would have been\r\nmatched and applied.","shortMessageHtmlLink":"LVStyleSheet: fix stylesheet possibly not applied (#550)"}},{"before":"306f62161c36f9607bd0e3f4e20336d424ffee72","after":"c89bd625b3e741fe66188d8e94d92b5396ee6761","ref":"refs/heads/master","pushedAt":"2023-12-17T19:22:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"Uplift German hyphenation patterns (#549)","shortMessageHtmlLink":"Uplift German hyphenation patterns (#549)"}},{"before":"f6abee69d5ea10660e0e76f76c3cb41ce1fa1fbe","after":"306f62161c36f9607bd0e3f4e20336d424ffee72","ref":"refs/heads/master","pushedAt":"2023-12-02T09:26:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"CJK: fix bad ruby drawing on last paragraph line (#548)\n\nActually, all inline boxes on the last line of a justified\r\nCJK paragraph.\r\nFollow up to c7c6bef9, where we didn't think about light formatting\r\nand not all lines going thru alignLine() on the initial opening\r\nof a book: these wrong positions would be saved in the cache, and\r\nnever corrected.","shortMessageHtmlLink":"CJK: fix bad ruby drawing on last paragraph line (#548)"}},{"before":"55fa1043532cfae6e318c23ec9f70097cdc8611c","after":"f6abee69d5ea10660e0e76f76c3cb41ce1fa1fbe","ref":"refs/heads/master","pushedAt":"2023-11-28T14:30:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"fb2.css: empty paragraphs should have some line height (#547)\n\nIn FB2, an empty P should not collapse (as they do in HTML)\r\nand should behave as an empty line, taking some line height.","shortMessageHtmlLink":"fb2.css: empty paragraphs should have some line height (#547)"}},{"before":"2a290ca34767caddbc76925f74e4a95c392c591e","after":"55fa1043532cfae6e318c23ec9f70097cdc8611c","ref":"refs/heads/master","pushedAt":"2023-11-19T15:24:56.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"css: speedup class matching\n\nClass name matching is slow. It's extremely slow when there are many\nclass selectors. Mitigate this problem by:\n\n1. when parsing css, store class name's hash value\n2. during css check, split class names and calculate their hashes\n3. for class selectors, compare integers first to avoid expensive\n class name matching for most rules","shortMessageHtmlLink":"css: speedup class matching"}},{"before":"a849c38ed4a6e1605827557753e0f6c6c123c05a","after":"2a290ca34767caddbc76925f74e4a95c392c591e","ref":"refs/heads/master","pushedAt":"2023-11-14T00:28:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvfntman: fix stupid mistake (#546)\n\nWhich would trigger a use after free.","shortMessageHtmlLink":"lvfntman: fix stupid mistake (#546)"}},{"before":"22191fda2f1d5c8f3c63fedb6e414bb74e0e9a36","after":"a849c38ed4a6e1605827557753e0f6c6c123c05a","ref":"refs/heads/master","pushedAt":"2023-11-04T20:08:52.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"Don't fillCharbuffer in Reset()\n\nLVHTMLParser::CheckFormat() calls Reset() twice, causing the char32\nbuffer being filled and discarded. Just set a flag and remove the\nBOM later.","shortMessageHtmlLink":"Don't fillCharbuffer in Reset()"}},{"before":"156d095847b608a2e516f1d84fbb9746b7ac791f","after":"22191fda2f1d5c8f3c63fedb6e414bb74e0e9a36","ref":"refs/heads/master","pushedAt":"2023-11-01T14:09:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"Avoid unnecessary string modifications (#543)\n\nDetails at https://github.com/koreader/crengine/pull/543:\r\n- lvstring: drop `& operator []` accessors\r\n As they end up always being used, even for read-only lookup,\r\n triggering unnecessary calls to `modify()` strings.\r\n- crengine: avoid unnecessary use of `lStringXX:at(…)`\r\n Which could trigger a `modify()`.\r\n- lvstring: fix `lastChar/firstChar` implementations\r\n Don't use `at()`, which could trigger a call to `modify()`.\r\n- lvstring: drop `at()` methods\r\n Not used anymore.","shortMessageHtmlLink":"Avoid unnecessary string modifications (#543)"}},{"before":"b39b72aee7f17db433809d49419019cce068b408","after":"156d095847b608a2e516f1d84fbb9746b7ac791f","ref":"refs/heads/master","pushedAt":"2023-10-26T22:24:08.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvdocview: don't compile (unused) `wolutil` related code","shortMessageHtmlLink":"lvdocview: don't compile (unused) wolutil related code"}},{"before":"2312401b09875e565e420079276bf9890f5ee3bd","after":"b39b72aee7f17db433809d49419019cce068b408","ref":"refs/heads/master","pushedAt":"2023-10-26T22:11:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvstring: fix `size` handling (#538)\n\nThe chunk size is the allocated size minus one (the terminating \\0).\r\nFix methods that don't have the same definition.\r\nDetails at https://github.com/koreader/crengine/pull/538:\r\n- lvstring: drop `size` method and fix `capacity`\r\n - `size` is unnecessary and confusing (same as `length`)\r\n - `capacity` return value was wrong (off by one)\r\n- lvstring: fix `assign` implementations\r\n The chunk `size` is the allocated size minus one (the terminating `\\0`).\r\n- lvstring: fix `resize` implementations\r\n The chunk `size` is the allocated size minus one (the terminating `\\0`).\r\n- lvstring: fix `pack` implementations","shortMessageHtmlLink":"lvstring: fix size handling (#538)"}},{"before":"fe2a8117cb8940699295a5b6cd34ed2ba3368af2","after":"2312401b09875e565e420079276bf9890f5ee3bd","ref":"refs/heads/master","pushedAt":"2023-10-26T19:33:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Frenzie","name":"Frans de Jonge","path":"/Frenzie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/202757?s=80&v=4"},"commit":{"message":"set thirdparty libraries symbol visibility (#544)\n\nHide everything since antiword and chmlib are compiled and linked\r\nstatically and none of their symbols are exported by the main library.","shortMessageHtmlLink":"set thirdparty libraries symbol visibility (#544)"}},{"before":"98ec5c026554e15470a10a951bffea2257525584","after":"fe2a8117cb8940699295a5b6cd34ed2ba3368af2","ref":"refs/heads/master","pushedAt":"2023-10-26T16:40:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvtinydom: minor cleanups / simplifications (#540)","shortMessageHtmlLink":"lvtinydom: minor cleanups / simplifications (#540)"}},{"before":"559ed82267417d744538885b111d88e248bed62c","after":"98ec5c026554e15470a10a951bffea2257525584","ref":"refs/heads/master","pushedAt":"2023-10-26T16:36:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Frenzie","name":"Frans de Jonge","path":"/Frenzie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/202757?s=80&v=4"},"commit":{"message":"lvstring: minor cleanups (#539)","shortMessageHtmlLink":"lvstring: minor cleanups (#539)"}},{"before":"ceb9603a0627c976b9d8525424c8edaccef998c9","after":"559ed82267417d744538885b111d88e248bed62c","ref":"refs/heads/master","pushedAt":"2023-10-26T16:35:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Frenzie","name":"Frans de Jonge","path":"/Frenzie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/202757?s=80&v=4"},"commit":{"message":"lvstsheet: minor cleanup (#541)","shortMessageHtmlLink":"lvstsheet: minor cleanup (#541)"}},{"before":"3cb87471747a4f1afacc1eaefd2e8150084954f1","after":"ceb9603a0627c976b9d8525424c8edaccef998c9","ref":"refs/heads/master","pushedAt":"2023-10-22T10:22:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"PreProcessXmlString(): refactor for speedup (#526)\n\nProvides observed 6% to 13% speedup.\r\nShould be equivalent to the previous code (confirmed by\r\nfuzzing tests).\r\nResult of a serie of 6 small commits (hopefully both easy\r\nto review and to reason about functional equivalence),\r\nsee https://github.com/koreader/crengine/pull/526 :\r\n- PreProcessXmlString(): replace indices with pointers\r\n- PreProcessXmlString(): reduce comparisons\r\n Do a quick check before comparing `ch` to '\\n', '\\r'\r\n and '\\t' in most cases.\r\n- PreProcessXmlString(): refactor the loop to its own function\r\n- PreProcessXmlString(): reduce writes\r\n Don't write to `lch` if it's not pre.\r\n- PreProcessXmlString(): move space check into '&' check\r\n- PreProcessXmlString(): reduce state checks","shortMessageHtmlLink":"PreProcessXmlString(): refactor for speedup (#526)"}},{"before":"a32b9ed3d133739797d9410a2d350ef3d1a6228f","after":"3cb87471747a4f1afacc1eaefd2e8150084954f1","ref":"refs/heads/master","pushedAt":"2023-10-22T10:10:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvtinydom: fix memory leaks (#533)\n\nAdds ->persist() to the locations reported by tools like libasan.\r\n(This could, and probably should, also be added to some others\r\nabox/rbox/tbox around here, and generallyto nodes created by\r\nboxWrapChildren() and insertChildElement().)","shortMessageHtmlLink":"lvtinydom: fix memory leaks (#533)"}},{"before":"32686857a50228d771e387780d2dd96cb987fe01","after":"a32b9ed3d133739797d9410a2d350ef3d1a6228f","ref":"refs/heads/master","pushedAt":"2023-10-22T09:58:01.000Z","pushType":"pr_merge","commitsCount":7,"pusher":{"login":"poire-z","name":null,"path":"/poire-z","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24273478?s=80&v=4"},"commit":{"message":"lvfntman: fix possible font leaks\n\nEnsure each font internal font references are cleared to avoid\ncircular reference loops that would prevent garbage collecting\nsome fonts and/or leaking others.","shortMessageHtmlLink":"lvfntman: fix possible font leaks"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAETx2lTgA","startCursor":null,"endCursor":null}},"title":"Activity · koreader/crengine"}