diff --git a/src/peghighlighterresult.cpp b/src/peghighlighterresult.cpp index d7da5a5a..51594f3a 100644 --- a/src/peghighlighterresult.cpp +++ b/src/peghighlighterresult.cpp @@ -119,7 +119,7 @@ void PegHighlighterResult::parseBlocksHighlightOne(QVector> &p_b QTextBlock block = p_doc->findBlock(p_pos); int startBlockNum = block.blockNumber(); - int endBlockNum = p_doc->findBlock(p_end).blockNumber(); + int endBlockNum = p_doc->findBlock(p_end - 1).blockNumber(); if (endBlockNum >= p_blocksHighlights.size()) { endBlockNum = p_blocksHighlights.size() - 1; } @@ -144,9 +144,14 @@ void PegHighlighterResult::parseBlocksHighlightOne(QVector> &p_b unit.start = 0; unit.length = block.length(); } + unit.styleIndex = p_styleIndex; - p_blocksHighlights[blockNum].append(unit); + Q_ASSERT(unit.length > 0); + + if (unit.length > 0) { + p_blocksHighlights[blockNum].append(unit); + } block = block.next(); } @@ -167,7 +172,11 @@ void PegHighlighterResult::parseBlocksElementRegionOne(QHashfindBlock(p_pos); int startBlockNum = block.blockNumber(); - int endBlockNum = p_doc->findBlock(p_end).blockNumber(); + int endBlockNum = p_doc->findBlock(p_end - 1).blockNumber(); + if (endBlockNum >= p_regs.size()) { + endBlockNum = p_regs.size() - 1; + } + while (block.isValid()) { int blockNum = block.blockNumber(); diff --git a/src/pegmarkdownhighlighter.cpp b/src/pegmarkdownhighlighter.cpp index c53667d4..8be19255 100644 --- a/src/pegmarkdownhighlighter.cpp +++ b/src/pegmarkdownhighlighter.cpp @@ -92,9 +92,9 @@ void PegMarkdownHighlighter::highlightBlock(const QString &p_text) int blockNum = block.blockNumber(); if (result->matched(m_timeStamp)) { - preHighlightMonospaceBlock(result->m_blocksHighlights, blockNum, p_text); + preHighlightSingleFormatBlock(result->m_blocksHighlights, blockNum, p_text); } else { - preHighlightMonospaceBlock(m_fastResult->m_blocksHighlights, blockNum, p_text); + preHighlightSingleFormatBlock(m_fastResult->m_blocksHighlights, blockNum, p_text); } highlightBlockOne(result->m_blocksHighlights, blockNum); @@ -116,9 +116,9 @@ void PegMarkdownHighlighter::highlightBlock(const QString &p_text) } } -void PegMarkdownHighlighter::preHighlightMonospaceBlock(const QVector> &p_highlights, - int p_blockNum, - const QString &p_text) +void PegMarkdownHighlighter::preHighlightSingleFormatBlock(const QVector> &p_highlights, + int p_blockNum, + const QString &p_text) { int sz = p_text.size(); if (sz == 0) { @@ -210,7 +210,7 @@ void PegMarkdownHighlighter::startFastParse(int p_position, int p_charsRemoved, int firstBlockNum, lastBlockNum; getFastParseBlockRange(p_position, p_charsRemoved, p_charsAdded, firstBlockNum, lastBlockNum); if (firstBlockNum == -1) { - m_fastResult.reset(); + // We could not let m_fastResult NULL here. return; } @@ -378,7 +378,7 @@ void PegMarkdownHighlighter::updateSingleFormatBlocks(const QVector 0) { QTextBlock block = m_doc->findBlockByNumber(i); - if (block.length() - 1 == (int)unit.length) { + if (block.length() - 1 <= (int)unit.length) { m_singleFormatBlocks.insert(i); } } diff --git a/src/pegmarkdownhighlighter.h b/src/pegmarkdownhighlighter.h index 3ec1e6cf..d2461a99 100644 --- a/src/pegmarkdownhighlighter.h +++ b/src/pegmarkdownhighlighter.h @@ -113,9 +113,9 @@ private: int p_blockNum); // To avoid line height jitter. - void preHighlightMonospaceBlock(const QVector> &p_highlights, - int p_blockNum, - const QString &p_text); + void preHighlightSingleFormatBlock(const QVector> &p_highlights, + int p_blockNum, + const QString &p_text); void updateSingleFormatBlocks(const QVector> &p_highlights);