diff --git a/src/pegmarkdownhighlighter.cpp b/src/pegmarkdownhighlighter.cpp index 723fb580..aa8f5234 100644 --- a/src/pegmarkdownhighlighter.cpp +++ b/src/pegmarkdownhighlighter.cpp @@ -115,9 +115,21 @@ void PegMarkdownHighlighter::highlightBlock(const QString &p_text) int blockNum = block.blockNumber(); bool isCodeBlock = currentBlockState() == HighlightBlockState::CodeBlock; + bool isNewBlock = block.userData() == NULL; VTextBlockData *blockData = VTextBlockData::blockData(block); QVector *cache = &blockData->getBlockHighlightCache(); + // Fast parse can not cross multiple empty lines in code block, which + // cause the wrong parse results. + if (isNewBlock) { + int pstate = previousBlockState(); + if (pstate == HighlightBlockState::CodeBlock + || pstate == HighlightBlockState::CodeBlockStart) { + setCurrentBlockState(HighlightBlockState::CodeBlock); + isCodeBlock = true; + } + } + bool cacheValid = true; if (result->matched(m_timeStamp)) { if (preHighlightSingleFormatBlock(result->m_blocksHighlights,