diff --git a/NEWS.md b/NEWS.md index 0d0a05d5..353863b8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,6 +6,8 @@ Version 0.8.1 For Dev-C++ 7 Beta - enhancement: when problem from competitive companion received, show the problem and problem set views. - enhancement: set problem's answer source file - enhancement: open the problem's answer source file in editor + - fix: if the proceeding line is a comment, current line should not recalculate indent + - fix: if the proceeding line ends with ':' in comments, current line should not indent Version 0.8 For Dev-C++ 7 Beta - fix: find in the current file is not correcly saved in the search history diff --git a/RedPandaIDE/qsynedit/SynEdit.cpp b/RedPandaIDE/qsynedit/SynEdit.cpp index 44527579..1d5d2389 100644 --- a/RedPandaIDE/qsynedit/SynEdit.cpp +++ b/RedPandaIDE/qsynedit/SynEdit.cpp @@ -1416,9 +1416,11 @@ int SynEdit::calcIndentSpaces(int line, const QString& lineText, bool addIndent) int indentSpaces = 0; if (startLine>=1) { indentSpaces = leftSpaces(s); - if (addIndent) { - SynRangeState rangePreceeding = mLines->ranges(startLine-1); - mHighlighter->setState(rangePreceeding); + SynRangeState rangePreceeding = mLines->ranges(startLine-1); + mHighlighter->setState(rangePreceeding); + if (addIndent + && !mHighlighter->isLastLineCommentNotFinished(rangePreceeding.state) + && !mHighlighter->isLastLineStringNotFinished(rangePreceeding.state)) { mHighlighter->setLine(lineText.trimmed(),line-1); SynRangeState rangeAfterFirstToken = mHighlighter->getRangeState(); QString firstToken = mHighlighter->getToken(); @@ -1486,12 +1488,25 @@ int SynEdit::calcIndentSpaces(int line, const QString& lineText, bool addIndent) l--; } } - if (!dontAddIndent && - ( - (rangePreceeding.firstIndentThisLine < rangePreceeding.indents.length()) // there are indents added at this (preceeding) line - || s.trimmed().endsWith(':')) - ) { - indentSpaces += mTabWidth; + if (!dontAddIndent) { + if (rangePreceeding.firstIndentThisLine < rangePreceeding.indents.length()) { + indentSpaces += mTabWidth; + dontAddIndent = true; + } + } + + if (!dontAddIndent && !s.isEmpty()) { + BufferCoord coord; + QString token; + PSynHighlighterAttribute attr; + coord.Line = startLine; + coord.Char = lines()->getString(startLine-1).length(); + if (getHighlighterAttriAtRowCol(coord,token,attr) + && attr == mHighlighter->symbolAttribute() + && token == ":") { + indentSpaces += mTabWidth; + dontAddIndent = true; + } } } }