- ehhancement: Show selected char counts in status bar.
- enhancement: Differentiate /* and /** when calculate auto indents.
This commit is contained in:
parent
c2421054a2
commit
38a55dcdb4
2
NEWS.md
2
NEWS.md
|
@ -15,6 +15,8 @@ Red Panda C++ Version 2.25
|
||||||
- fix: Icon position not correct under hiPDI devices.
|
- fix: Icon position not correct under hiPDI devices.
|
||||||
- change: Add Mesa3D for windows opengl driver to the integrated mingw-gcc for windows 32 version.
|
- change: Add Mesa3D for windows opengl driver to the integrated mingw-gcc for windows 32 version.
|
||||||
- enhancement: After compiler settings changed, run/debug current file will auto recompile.
|
- enhancement: After compiler settings changed, run/debug current file will auto recompile.
|
||||||
|
- ehhancement: Show selected char counts in status bar.
|
||||||
|
- enhancement: Differentiate /* and /** when calculate auto indents.
|
||||||
|
|
||||||
Red Panda C++ Version 2.24
|
Red Panda C++ Version 2.24
|
||||||
|
|
||||||
|
|
|
@ -1418,10 +1418,19 @@ void MainWindow::updateStatusbarForLineCol(const Editor* e, bool clear)
|
||||||
{
|
{
|
||||||
if (!clear && e!=nullptr) {
|
if (!clear && e!=nullptr) {
|
||||||
int col = e->charToColumn(e->caretY(),e->caretX());
|
int col = e->charToColumn(e->caretY(),e->caretX());
|
||||||
QString msg = tr("Line: %1 Col: %2 Lines: %3")
|
QString msg;
|
||||||
|
if (e->selAvail()) {
|
||||||
|
msg = tr("Line: %1 Col: %2 (%3 chars) Lines: %4")
|
||||||
|
.arg(e->caretY())
|
||||||
|
.arg(col)
|
||||||
|
.arg(e->selText().length())
|
||||||
|
.arg(e->document()->count());
|
||||||
|
} else {
|
||||||
|
msg = tr("Line: %1 Col: %2 Lines: %3")
|
||||||
.arg(e->caretY())
|
.arg(e->caretY())
|
||||||
.arg(col)
|
.arg(col)
|
||||||
.arg(e->document()->count());
|
.arg(e->document()->count());
|
||||||
|
}
|
||||||
mFileInfoStatus->setText(msg);
|
mFileInfoStatus->setText(msg);
|
||||||
} else {
|
} else {
|
||||||
mFileInfoStatus->setText("");
|
mFileInfoStatus->setText("");
|
||||||
|
|
|
@ -5387,6 +5387,10 @@
|
||||||
<source>Do you want to proceed?</source>
|
<source>Do you want to proceed?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Line: %1 Col: %2 (%3 chars) Lines: %4</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MemoryModel</name>
|
<name>MemoryModel</name>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5108,6 +5108,10 @@
|
||||||
<source>Do you want to proceed?</source>
|
<source>Do you want to proceed?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Line: %1 Col: %2 (%3 chars) Lines: %4</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MemoryModel</name>
|
<name>MemoryModel</name>
|
||||||
|
|
|
@ -78,7 +78,7 @@ namespace QSynedit {
|
||||||
if (trimmedLineText.startsWith('#')
|
if (trimmedLineText.startsWith('#')
|
||||||
&& attr == ((CppSyntaxer *)editor->syntaxer().get())->preprocessorAttribute()) {
|
&& attr == ((CppSyntaxer *)editor->syntaxer().get())->preprocessorAttribute()) {
|
||||||
indentSpaces=0;
|
indentSpaces=0;
|
||||||
} else if (editor->syntaxer()->isLastLineCommentNotFinished(rangePreceeding.state)
|
} else if (editor->syntaxer()->isDocstringNotFinished(rangePreceeding.state)
|
||||||
) {
|
) {
|
||||||
// last line is a not finished comment,
|
// last line is a not finished comment,
|
||||||
if (trimmedLineText.startsWith("*")) {
|
if (trimmedLineText.startsWith("*")) {
|
||||||
|
|
|
@ -304,6 +304,35 @@ void CppSyntaxer::procCppStyleComment()
|
||||||
mRange.state = RangeState::rsUnknown;
|
mRange.state = RangeState::rsUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CppSyntaxer::procDocstring()
|
||||||
|
{
|
||||||
|
bool finishProcess = false;
|
||||||
|
mTokenId = TokenId::Comment;
|
||||||
|
if (mRun>=mLineSize) {
|
||||||
|
procNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (mRun<mLineSize) {
|
||||||
|
switch(mLine[mRun].unicode()) {
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
return;
|
||||||
|
case '*':
|
||||||
|
if (mRun+1<mLineSize && mLine[mRun+1] == '/') {
|
||||||
|
mRun += 2;
|
||||||
|
mRange.state = RangeState::rsUnknown;
|
||||||
|
finishProcess = true;
|
||||||
|
} else
|
||||||
|
mRun+=1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mRun+=1;
|
||||||
|
}
|
||||||
|
if (finishProcess)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CppSyntaxer::procAnsiCStyleComment()
|
void CppSyntaxer::procAnsiCStyleComment()
|
||||||
{
|
{
|
||||||
bool finishProcess = false;
|
bool finishProcess = false;
|
||||||
|
@ -1006,8 +1035,13 @@ void CppSyntaxer::procSlash()
|
||||||
mRange.state = RangeState::rsAnsiC;
|
mRange.state = RangeState::rsAnsiC;
|
||||||
}
|
}
|
||||||
mRun += 2;
|
mRun += 2;
|
||||||
if (mRun < mLineSize)
|
if (mRun < mLineSize) {
|
||||||
procAnsiCStyleComment();
|
if (mRange.state == RangeState::rsAnsiC && mLine[mRun] == '*' ) {
|
||||||
|
mRange.state = RangeState::rsDocstring;
|
||||||
|
procDocstring();
|
||||||
|
} else
|
||||||
|
procAnsiCStyleComment();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case '=':
|
case '=':
|
||||||
mRun+=2;
|
mRun+=2;
|
||||||
|
@ -1463,6 +1497,7 @@ bool CppSyntaxer::isLastLineCommentNotFinished(int state) const
|
||||||
{
|
{
|
||||||
return (state == RangeState::rsAnsiC ||
|
return (state == RangeState::rsAnsiC ||
|
||||||
state == RangeState::rsDirectiveComment||
|
state == RangeState::rsDirectiveComment||
|
||||||
|
state == RangeState::rsDocstring ||
|
||||||
state == RangeState::rsCppComment);
|
state == RangeState::rsCppComment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1471,6 +1506,11 @@ bool CppSyntaxer::isLastLineStringNotFinished(int state) const
|
||||||
return state == RangeState::rsString;
|
return state == RangeState::rsString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CppSyntaxer::isDocstringNotFinished(int state) const
|
||||||
|
{
|
||||||
|
return state == RangeState::rsDocstring;
|
||||||
|
}
|
||||||
|
|
||||||
bool CppSyntaxer::eol() const
|
bool CppSyntaxer::eol() const
|
||||||
{
|
{
|
||||||
return mTokenId == TokenId::Null;
|
return mTokenId == TokenId::Null;
|
||||||
|
@ -1547,6 +1587,9 @@ void CppSyntaxer::next()
|
||||||
//qDebug()<<"*0-0-0*";
|
//qDebug()<<"*0-0-0*";
|
||||||
procAnsiCStyleComment();
|
procAnsiCStyleComment();
|
||||||
break;
|
break;
|
||||||
|
case RangeState::rsDocstring:
|
||||||
|
procDocstring();
|
||||||
|
break;
|
||||||
case RangeState::rsString:
|
case RangeState::rsString:
|
||||||
//qDebug()<<"*1-0-0*";
|
//qDebug()<<"*1-0-0*";
|
||||||
procString();
|
procString();
|
||||||
|
|
|
@ -47,6 +47,7 @@ class CppSyntaxer: public Syntaxer
|
||||||
enum RangeState {
|
enum RangeState {
|
||||||
rsUnknown, rsAnsiC, rsDirective, rsDirectiveComment, rsString,
|
rsUnknown, rsAnsiC, rsDirective, rsDirectiveComment, rsString,
|
||||||
rsMultiLineString, rsMultiLineDirective, rsCppComment,
|
rsMultiLineString, rsMultiLineDirective, rsCppComment,
|
||||||
|
rsDocstring,
|
||||||
rsStringEscapeSeq,
|
rsStringEscapeSeq,
|
||||||
rsRawString, rsSpace,rsRawStringNotEscaping,rsRawStringEnd,rsChar,
|
rsRawString, rsSpace,rsRawStringNotEscaping,rsRawStringEnd,rsChar,
|
||||||
rsDefineIdentifier, rsDefineRemaining
|
rsDefineIdentifier, rsDefineRemaining
|
||||||
|
@ -91,6 +92,7 @@ public:
|
||||||
private:
|
private:
|
||||||
void procAndSymbol();
|
void procAndSymbol();
|
||||||
void procCppStyleComment();
|
void procCppStyleComment();
|
||||||
|
void procDocstring();
|
||||||
void procAnsiCStyleComment();
|
void procAnsiCStyleComment();
|
||||||
void procAsciiChar();
|
void procAsciiChar();
|
||||||
void procBraceClose();
|
void procBraceClose();
|
||||||
|
@ -178,6 +180,7 @@ public:
|
||||||
bool getTokenFinished() const override;
|
bool getTokenFinished() const override;
|
||||||
bool isLastLineCommentNotFinished(int state) const override;
|
bool isLastLineCommentNotFinished(int state) const override;
|
||||||
bool isLastLineStringNotFinished(int state) const override;
|
bool isLastLineStringNotFinished(int state) const override;
|
||||||
|
bool isDocstringNotFinished(int state) const override;
|
||||||
bool eol() const override;
|
bool eol() const override;
|
||||||
QString getToken() const override;
|
QString getToken() const override;
|
||||||
const PTokenAttribute &getTokenAttribute() const override;
|
const PTokenAttribute &getTokenAttribute() const override;
|
||||||
|
|
|
@ -148,6 +148,7 @@ public:
|
||||||
virtual bool getTokenFinished() const = 0;
|
virtual bool getTokenFinished() const = 0;
|
||||||
virtual bool isLastLineCommentNotFinished(int state) const = 0;
|
virtual bool isLastLineCommentNotFinished(int state) const = 0;
|
||||||
virtual bool isLastLineStringNotFinished(int state) const = 0;
|
virtual bool isLastLineStringNotFinished(int state) const = 0;
|
||||||
|
virtual bool isDocstringNotFinished(int state) const { return false; }
|
||||||
virtual bool eol() const = 0;
|
virtual bool eol() const = 0;
|
||||||
virtual SyntaxState getState() const = 0;
|
virtual SyntaxState getState() const = 0;
|
||||||
virtual QString getToken() const=0;
|
virtual QString getToken() const=0;
|
||||||
|
|
Loading…
Reference in New Issue