Improve nested lists

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
jpirnay
2026-04-23 22:04:19 +02:00
co-authored by Copilot
parent e0c42278ad
commit e968a54e77
3 changed files with 46 additions and 5 deletions
+12 -3
View File
@@ -335,13 +335,18 @@ bool MdReaderActivity::wordWrapParsedLine(const MdParser::ParsedLine& parsed, in
const int availableWidth = viewportWidth - indent;
if (availableWidth <= 0) return true;
// Build a flat list of all spans, prepending the list prefix if present
// Build a flat list of all spans, prepending the list prefix if present.
std::vector<MdParser::Span> allSpans;
if (!parsed.listPrefix.empty()) {
allSpans.push_back({parsed.listPrefix, EpdFontFamily::REGULAR});
}
allSpans.insert(allSpans.end(), parsed.spans.begin(), parsed.spans.end());
const int listPrefixIndent =
!parsed.listPrefix.empty()
? renderer.getTextAdvanceX(cachedFontId, parsed.listPrefix.c_str(), EpdFontFamily::REGULAR)
: 0;
// Check if everything fits on one line
int totalWidth = measureSpans(allSpans);
if (totalWidth <= availableWidth) {
@@ -359,6 +364,7 @@ bool MdReaderActivity::wordWrapParsedLine(const MdParser::ParsedLine& parsed, in
currentLine.isCodeBlock = isCodeBlock;
int currentWidth = 0;
bool fullyConsumed = true;
bool firstLine = true;
for (size_t si = 0; si < allSpans.size(); si++) {
const auto& span = allSpans[si];
@@ -415,8 +421,10 @@ bool MdReaderActivity::wordWrapParsedLine(const MdParser::ParsedLine& parsed, in
}
} else {
outLines.push_back(std::move(currentLine));
firstLine = false;
currentLine = RenderedLine();
currentLine.indent = indent;
currentLine.indent = indent + (firstLine ? 0 : listPrefixIndent);
currentLine.isCodeBlock = isCodeBlock;
currentWidth = 0;
continue;
}
@@ -424,8 +432,9 @@ bool MdReaderActivity::wordWrapParsedLine(const MdParser::ParsedLine& parsed, in
currentLine.spans.push_back({remaining.substr(0, breakPos), style});
outLines.push_back(std::move(currentLine));
firstLine = false;
currentLine = RenderedLine();
currentLine.indent = indent;
currentLine.indent = indent + (firstLine ? 0 : listPrefixIndent);
currentLine.isCodeBlock = isCodeBlock;
currentWidth = 0;