mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
PegHighlighter: brush code block indentation
This commit is contained in:
parent
f5bbc1ccd7
commit
926e053d37
@ -7,6 +7,7 @@
|
||||
#include "pegparser.h"
|
||||
#include "vconfigmanager.h"
|
||||
#include "utils/vutils.h"
|
||||
#include "utils/veditutils.h"
|
||||
|
||||
extern VConfigManager *g_config;
|
||||
|
||||
@ -110,7 +111,7 @@ void PegMarkdownHighlighter::highlightBlock(const QString &p_text)
|
||||
updateCodeBlockState(result, blockNum, p_text);
|
||||
|
||||
if (currentBlockState() == HighlightBlockState::CodeBlock) {
|
||||
highlightCodeBlock(result, blockNum);
|
||||
highlightCodeBlock(result, blockNum, p_text);
|
||||
|
||||
highlightCodeBlockColorColumn(p_text);
|
||||
}
|
||||
@ -339,8 +340,17 @@ void PegMarkdownHighlighter::updateCodeBlockState(const QSharedPointer<PegHighli
|
||||
}
|
||||
|
||||
void PegMarkdownHighlighter::highlightCodeBlock(const QSharedPointer<PegHighlighterResult> &p_result,
|
||||
int p_blockNum)
|
||||
int p_blockNum,
|
||||
const QString &p_text)
|
||||
{
|
||||
// Brush the indentation spaces.
|
||||
if (currentBlockState() == HighlightBlockState::CodeBlock) {
|
||||
int spaces = VEditUtils::fetchIndentation(p_text);
|
||||
if (spaces > 0) {
|
||||
setFormat(0, spaces, m_codeBlockFormat);
|
||||
}
|
||||
}
|
||||
|
||||
if (p_result->m_codeBlocksHighlights.size() > p_blockNum) {
|
||||
const QVector<HLUnitStyle> &units = p_result->m_codeBlocksHighlights[p_blockNum];
|
||||
if (!units.isEmpty()) {
|
||||
|
@ -85,7 +85,8 @@ private:
|
||||
|
||||
// Highlight fenced code block according to VCodeBlockHighlightHelper result.
|
||||
void highlightCodeBlock(const QSharedPointer<PegHighlighterResult> &p_result,
|
||||
int p_blockNum);
|
||||
int p_blockNum,
|
||||
const QString &p_text);
|
||||
|
||||
// Highlight color column in code block.
|
||||
void highlightCodeBlockColorColumn(const QString &p_text);
|
||||
|
@ -944,6 +944,18 @@ QString VEditUtils::fetchIndentSpaces(const QTextBlock &p_block)
|
||||
return regExp.capturedTexts()[1];
|
||||
}
|
||||
|
||||
int VEditUtils::fetchIndentation(const QString &p_text)
|
||||
{
|
||||
int idx = 0;
|
||||
for (; idx < p_text.size(); ++idx) {
|
||||
if (!p_text[idx].isSpace()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
void VEditUtils::insertBlock(QTextCursor &p_cursor,
|
||||
bool p_above)
|
||||
{
|
||||
|
@ -184,6 +184,8 @@ public:
|
||||
// Return the leading spaces of @p_block.
|
||||
static QString fetchIndentSpaces(const QTextBlock &p_block);
|
||||
|
||||
static int fetchIndentation(const QString &p_text);
|
||||
|
||||
// Insert a block above/below current block. Move the cursor to the start of
|
||||
// the new block after insertion.
|
||||
static void insertBlock(QTextCursor &p_cursor,
|
||||
|
Loading…
x
Reference in New Issue
Block a user