[PR #531] [MERGED] A handful of codegen improvements #1097

Open
opened 2026-01-29 14:49:42 +00:00 by claunia · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/xoofx/markdig/pull/531
Author: @MihaZupan
Created: 3/14/2021
Status: Merged
Merged: 3/15/2021
Merged by: @xoofx

Base: masterHead: random-perf-3


📝 Commits (9)

  • 07467d6 Add ICharIterator SkipChar and PeekChar
  • 6b1399b Use IsEmpty instead of Length == 0 or CurrentChar == '\0'
  • 4b7a4d2 Optimize NewLine.Length()
  • 54e2514 Avoid struct copies in StringLineGroup
  • bd1dcd9 Improve HtmlHelper
  • eabfe74 Avoid struct copy in Roundtrip CodeBlockRenderer
  • c964659 Optimize Globalization StartsWithRtlCharacter check
  • 63fddf4 Add quick range check in CharNormalizer
  • 6204095 Remove static ctor from CharNormalizer

📊 Changes

25 files changed (+1466 additions, -1442 deletions)

View changed files

📝 src/Markdig.Tests/TestHtmlHelper.cs (+2 -2)
📝 src/Markdig.Tests/TestStringSliceList.cs (+28 -0)
📝 src/Markdig/Extensions/Abbreviations/AbbreviationParser.cs (+1 -1)
📝 src/Markdig/Extensions/GenericAttributes/GenericAttributesParser.cs (+2 -2)
📝 src/Markdig/Extensions/Globalization/GlobalizationExtension.cs (+22 -5)
📝 src/Markdig/Extensions/SmartyPants/SmartyPantsInlineParser.cs (+1 -1)
📝 src/Markdig/Extensions/Tables/GridTableParser.cs (+7 -6)
📝 src/Markdig/Extensions/Tables/PipeTableParser.cs (+1 -1)
📝 src/Markdig/Extensions/Tables/TableHelper.cs (+2 -2)
📝 src/Markdig/Extensions/TaskLists/TaskListInlineParser.cs (+1 -1)
📝 src/Markdig/Helpers/CharHelper.cs (+0 -16)
📝 src/Markdig/Helpers/CharNormalizer.cs (+1273 -1278)
📝 src/Markdig/Helpers/HtmlHelper.cs (+41 -55)
📝 src/Markdig/Helpers/ICharIterator.cs (+12 -1)
📝 src/Markdig/Helpers/LinkHelper.cs (+16 -16)
📝 src/Markdig/Helpers/Newline.cs (+12 -27)
📝 src/Markdig/Helpers/StringLineGroup.cs (+17 -12)
📝 src/Markdig/Helpers/StringSlice.cs (+12 -1)
📝 src/Markdig/Parsers/BlockProcessor.cs (+1 -1)
📝 src/Markdig/Parsers/HtmlBlockParser.cs (+1 -1)

...and 5 more files

📄 Description

  • Added a PeekChar() overload of PeekChar(int) to ICharIterator. This method was already present on StringSlice, but since it was missing on the interface, callers were often binding to the slower overload
  • Added SkipChar to ICharIterator
  • Replaced CurrentCharacter == '\0' and Length == 0 with faster IsEmpty checks
  • Avoided a bunch of struct copies in StringLineGroup
  • Changed the NewLine.Length() to a bit operation
  • Simplified/optimized logic in HtmlHelper
  • Avoided the ToUtf32 iterator allocations in Globalization extension

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/xoofx/markdig/pull/531 **Author:** [@MihaZupan](https://github.com/MihaZupan) **Created:** 3/14/2021 **Status:** ✅ Merged **Merged:** 3/15/2021 **Merged by:** [@xoofx](https://github.com/xoofx) **Base:** `master` ← **Head:** `random-perf-3` --- ### 📝 Commits (9) - [`07467d6`](https://github.com/xoofx/markdig/commit/07467d6c302b2db7cc9f294217fade718d63046b) Add ICharIterator SkipChar and PeekChar - [`6b1399b`](https://github.com/xoofx/markdig/commit/6b1399ba231f0fa18f77cb235b3bed5528f9e246) Use IsEmpty instead of Length == 0 or CurrentChar == '\0' - [`4b7a4d2`](https://github.com/xoofx/markdig/commit/4b7a4d21de7a565761627efa8c01c57cbcf635c8) Optimize NewLine.Length() - [`54e2514`](https://github.com/xoofx/markdig/commit/54e25147780c647b0f29564ae3c87e4831f94607) Avoid struct copies in StringLineGroup - [`bd1dcd9`](https://github.com/xoofx/markdig/commit/bd1dcd952c85fa655245e66ffe6b7bac96156d6b) Improve HtmlHelper - [`eabfe74`](https://github.com/xoofx/markdig/commit/eabfe74e921946049b9640128c7ab687e78c99af) Avoid struct copy in Roundtrip CodeBlockRenderer - [`c964659`](https://github.com/xoofx/markdig/commit/c964659085ec53ce27e7044e105303e0fba8ee36) Optimize Globalization StartsWithRtlCharacter check - [`63fddf4`](https://github.com/xoofx/markdig/commit/63fddf45119a9abae9b7cda2a55abcea42aa3f12) Add quick range check in CharNormalizer - [`6204095`](https://github.com/xoofx/markdig/commit/62040952611b420262786840122ca8f2be7ceedb) Remove static ctor from CharNormalizer ### 📊 Changes **25 files changed** (+1466 additions, -1442 deletions) <details> <summary>View changed files</summary> 📝 `src/Markdig.Tests/TestHtmlHelper.cs` (+2 -2) 📝 `src/Markdig.Tests/TestStringSliceList.cs` (+28 -0) 📝 `src/Markdig/Extensions/Abbreviations/AbbreviationParser.cs` (+1 -1) 📝 `src/Markdig/Extensions/GenericAttributes/GenericAttributesParser.cs` (+2 -2) 📝 `src/Markdig/Extensions/Globalization/GlobalizationExtension.cs` (+22 -5) 📝 `src/Markdig/Extensions/SmartyPants/SmartyPantsInlineParser.cs` (+1 -1) 📝 `src/Markdig/Extensions/Tables/GridTableParser.cs` (+7 -6) 📝 `src/Markdig/Extensions/Tables/PipeTableParser.cs` (+1 -1) 📝 `src/Markdig/Extensions/Tables/TableHelper.cs` (+2 -2) 📝 `src/Markdig/Extensions/TaskLists/TaskListInlineParser.cs` (+1 -1) 📝 `src/Markdig/Helpers/CharHelper.cs` (+0 -16) 📝 `src/Markdig/Helpers/CharNormalizer.cs` (+1273 -1278) 📝 `src/Markdig/Helpers/HtmlHelper.cs` (+41 -55) 📝 `src/Markdig/Helpers/ICharIterator.cs` (+12 -1) 📝 `src/Markdig/Helpers/LinkHelper.cs` (+16 -16) 📝 `src/Markdig/Helpers/Newline.cs` (+12 -27) 📝 `src/Markdig/Helpers/StringLineGroup.cs` (+17 -12) 📝 `src/Markdig/Helpers/StringSlice.cs` (+12 -1) 📝 `src/Markdig/Parsers/BlockProcessor.cs` (+1 -1) 📝 `src/Markdig/Parsers/HtmlBlockParser.cs` (+1 -1) _...and 5 more files_ </details> ### 📄 Description - Added a `PeekChar()` overload of `PeekChar(int)` to `ICharIterator`. This method was already present on `StringSlice`, but since it was missing on the interface, callers were often binding to the slower overload - Added `SkipChar` to `ICharIterator` - Replaced `CurrentCharacter == '\0'` and `Length == 0` with faster `IsEmpty` checks - Avoided a bunch of struct copies in `StringLineGroup` - Changed the `NewLine.Length()` to a bit operation - Simplified/optimized logic in `HtmlHelper` - Avoided the `ToUtf32` iterator allocations in Globalization extension --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
claunia added the pull-request label 2026-01-29 14:49:42 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/markdig#1097