- fix: "float" in #include "float.h" is wrong syntax colored.

- enhancement: Unify syntax color for #include header name
This commit is contained in:
Roy Qu 2024-03-03 20:33:29 +08:00
parent c8cc88844a
commit 3f2a0b424a
2 changed files with 41 additions and 14 deletions

View File

@ -28,6 +28,8 @@ Red Panda C++ Version 2.27
- fix: Issue #230 Crash when input " in the txt files.
- enhancement: Unique look&feel for the underline shown while ctrl+mouse over #include line.
- enhancement: Better look&feel for the wave underline shown for syntax errors.
- fix: "float" in #include "float.h" is wrong syntax colored.
- enhancement: Unify syntax color for #include header name
Red Panda C++ Version 2.26
- enhancement: Code suggestion for embedded std::vectors.

View File

@ -1141,6 +1141,33 @@ void Editor::onGutterPaint(QPainter &painter, int aLine, int X, int Y)
}
}
bool trySetIncludeUnderline(const QString& lineText, const QChar& quoteStartChar,
const QChar& quoteEndChar,
QSynedit::PSyntaxer syntaxer,
QColor foreColor,
QSynedit::EditingAreaList &areaList
) {
int pos1=lineText.indexOf(quoteStartChar);
int pos2=lineText.lastIndexOf(quoteEndChar);
if (pos1>=0 && pos2>=0 && pos1 < pos2 ) {
QSynedit::PEditingArea p=std::make_shared<QSynedit::EditingArea>();
p->beginX = pos1+2;
p->endX = pos2+1;
p->type = QSynedit::EditingAreaType::eatUnderLine;
if (syntaxer) {
if (quoteStartChar=='\"')
p->color = syntaxer->stringAttribute()->foreground();
else
p->color = syntaxer->identifierAttribute()->foreground();
} else {
p->color = foreColor;
}
areaList.append(p);
return true;
}
return false;
}
void Editor::onGetEditingAreas(int line, QSynedit::EditingAreaList &areaList)
{
areaList.clear();
@ -1172,20 +1199,8 @@ void Editor::onGetEditingAreas(int line, QSynedit::EditingAreaList &areaList)
QString lineText = document()->getLine(line-1);
if (mParser && mParser->isIncludeLine(lineText)) {
if (line == mHoverModifiedLine) {
int pos1=std::max(lineText.indexOf("<"),lineText.indexOf("\""));
int pos2=std::max(lineText.lastIndexOf(">"),lineText.lastIndexOf("\""));
if (pos1>=0 && pos2>=0 && pos1 < pos2) {
QSynedit::PEditingArea p=std::make_shared<QSynedit::EditingArea>();
p->beginX = pos1+2;
p->endX = pos2+1;
p->type = QSynedit::EditingAreaType::eatUnderLine;
if (syntaxer()) {
p->color = syntaxer()->identifierAttribute()->foreground();
} else {
p->color = foregroundColor();
}
areaList.append(p);
}
if (!trySetIncludeUnderline(lineText,'<','>',syntaxer(), foregroundColor(), areaList))
trySetIncludeUnderline(lineText,'"','"',syntaxer(), foregroundColor(), areaList);
}
}
}
@ -1229,6 +1244,16 @@ void Editor::onPreparePaintHighlightToken(int line, int aChar, const QString &to
}
QString lineText = document()->getLine(line-1);
if (mParser->isIncludeLine(lineText)) {
int pos1=lineText.indexOf("<")+1;
int pos2=lineText.lastIndexOf(">")+1;
if (pos1>0 && pos2>0 && pos1<aChar && aChar<pos2) {
style = syntaxer()->identifierAttribute()->styles();
if (syntaxer()->identifierAttribute()->foreground().isValid())
foreground = syntaxer()->identifierAttribute()->foreground();
if (syntaxer()->identifierAttribute()->background().isValid())
background = syntaxer()->identifierAttribute()->background();
}
return;
} else if (mParser->enabled() && attr->tokenType() == QSynedit::TokenType::Identifier) {
QSynedit::BufferCoord p{aChar,line};
// BufferCoord pBeginPos,pEndPos;