瀏覽代碼

PegMarkdownHighlighter: recognize code block among new blocks

Le Tan 7 年之前
父節點
當前提交
1fe975b1ad
共有 1 個文件被更改,包括 12 次插入0 次删除
  1. 12 0
      src/pegmarkdownhighlighter.cpp

+ 12 - 0
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<HLUnit> *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,