fix: 修复代码格式化撤销崩溃的问题;优化代码格式化保存显示;

This commit is contained in:
寂静的羽夏 2025-02-04 22:53:46 +08:00
parent 435056a2af
commit 1e3b24bca0
11 changed files with 426 additions and 271 deletions

View File

@ -222,7 +222,13 @@ void QConsoleWidget::keyPressEvent(QKeyEvent *e) {
cut();
else {
// cursor must be in edit zone
if (textCursor.selectionStart() <= inpos_)
QDocumentCursor pos;
if (textCursor.hasSelection()) {
pos = textCursor.selectionStart();
} else {
pos = textCursor;
}
if (pos <= inpos_)
QApplication::beep();
else
QEditor::keyPressEvent(e);

View File

@ -192,6 +192,69 @@ QDocument::QDocument(QObject *p)
*/
QDocument::~QDocument() { delete m_impl; }
QStringList QDocument::textLines(int mode) const {
QStringList s;
if (!m_impl || m_impl->m_lines.isEmpty())
return s;
int line = 0;
int prevIndent = 0, curIndent = 0,
nextIndent = m_impl->m_lines.at(0)->nextNonSpaceChar(0);
if (nextIndent < 0)
nextIndent = 0;
foreach (QDocumentLineHandle *l, m_impl->m_lines) {
prevIndent = curIndent;
curIndent = nextIndent;
nextIndent = ++line < m_impl->m_lines.count()
? m_impl->m_lines.at(line)->nextNonSpaceChar(0)
: 0;
if (nextIndent < 0)
nextIndent = 0;
QString buf = l->text();
int avgIndent = qMax(prevIndent, nextIndent);
if ((mode & RestoreTrailingIndent) && buf.isEmpty() && avgIndent) {
buf = QString(avgIndent, '\t');
} else if (mode & RemoveTrailingWS) {
int len = 0, idx = buf.length();
while (--idx >= 0) {
if (!buf.at(idx).isSpace())
break;
++len;
}
++idx;
if (len && (idx || !(mode & PreserveIndent)))
buf.remove(idx, len);
}
s.append(buf);
}
return s;
}
QStringList QDocument::textLines(bool removeTrailing,
bool preserveIndent) const {
int mode = 0;
if (removeTrailing)
mode |= RemoveTrailingWS;
if (preserveIndent)
mode |= PreserveIndent;
return textLines(mode);
}
/*!
\brief Clear the content of the document
*/
@ -236,55 +299,7 @@ void QDocument::redo() {
\param mode extra processing to perform on text
*/
QString QDocument::text(int mode) const {
QString s;
if (!m_impl || m_impl->m_lines.isEmpty())
return s;
int line = 0;
int prevIndent = 0, curIndent = 0,
nextIndent = m_impl->m_lines.at(0)->nextNonSpaceChar(0);
if (nextIndent < 0)
nextIndent = 0;
foreach (QDocumentLineHandle *l, m_impl->m_lines) {
prevIndent = curIndent;
curIndent = nextIndent;
nextIndent = ++line < m_impl->m_lines.count()
? m_impl->m_lines.at(line)->nextNonSpaceChar(0)
: 0;
if (nextIndent < 0)
nextIndent = 0;
QString buf = l->text();
int avgIndent = qMax(prevIndent, nextIndent);
if ((mode & RestoreTrailingIndent) && buf.isEmpty() && avgIndent) {
buf = QString(avgIndent, '\t');
} else if (mode & RemoveTrailingWS) {
int len = 0, idx = buf.length();
while (--idx >= 0) {
if (!buf.at(idx).isSpace())
break;
++len;
}
++idx;
if (len && (idx || !(mode & PreserveIndent)))
buf.remove(idx, len);
}
s += buf + m_impl->m_lineEndingString;
}
// s.chop(m_impl->m_lineEndingString.count());
return s;
return textLines(mode).join(m_impl->m_lineEndingString);
}
/*!

View File

@ -106,6 +106,9 @@ public:
explicit QDocument(QObject *p = nullptr);
virtual ~QDocument();
QStringList textLines(int mode) const;
QStringList textLines(bool removeTrailing = false,
bool preserveIndent = true) const;
QString text(int mode) const;
QString text(bool removeTrailing = false, bool preserveIndent = true) const;
void setText(const QString &s);

View File

@ -2876,17 +2876,17 @@ Do you wish to keep up to date by reloading the file?</source>
<context>
<name>QHexView</name>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="249"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="270"/>
<source>Foreground:</source>
<translation></translation>
</message>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="260"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="281"/>
<source>Background:</source>
<translation></translation>
</message>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="267"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="288"/>
<source>Comment:</source>
<translation></translation>
</message>
@ -4904,431 +4904,431 @@ Do you wish to keep up to date by reloading the file?</source>
<context>
<name>ScriptingDialog</name>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="96"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="98"/>
<source>ScriptEditor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="193"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="195"/>
<source>ScriptPermissionDenied</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="295"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="297"/>
<source>File</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="296"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="298"/>
<source>Edit</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="298"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="300"/>
<source>Debugger</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="300"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="302"/>
<source>Setting</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="301"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="303"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="317"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="319"/>
<source>InvalidSourceFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="326"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="328"/>
<source>Basic</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="327"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="329"/>
<source>New</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="330"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="332"/>
<source>OpenF</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="333"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="335"/>
<source>RecentFiles</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="337"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="339"/>
<source>Reload</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="342"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="344"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="346"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="349"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="351"/>
<source>SaveAs</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="361"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="363"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="363"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="365"/>
<source>Undo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="368"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="370"/>
<source>Redo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="374"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="376"/>
<source>Cut</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="378"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="380"/>
<source>Copy</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="383"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="385"/>
<source>Paste</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="387"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="389"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="393"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="395"/>
<source>Lookup</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="394"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="396"/>
<source>Find</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="398"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="400"/>
<source>Replace</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="403"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="405"/>
<source>Goto</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="410"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="579"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="412"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="581"/>
<source>Format</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="411"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="413"/>
<source>CodeFormat</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="421"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="423"/>
<source>Display</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="448"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="450"/>
<source>Scale</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="450"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="452"/>
<source>ResetScale</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="456"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="458"/>
<source>Window</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="459"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="574"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="461"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="576"/>
<source>Editor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="463"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="465"/>
<source>Tools</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="468"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="470"/>
<source>Layout</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="469"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="471"/>
<source>Fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="471"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="473"/>
<source>RestoreLayout</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="536"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="538"/>
<source>BreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="538"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="540"/>
<source>ToggleBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="541"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="543"/>
<source>AddBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="572"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="574"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="577"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="579"/>
<source>ClangFormat</source>
<translation>Clang Format</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="612"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="614"/>
<source>Local</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="618"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="620"/>
<source>Global</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="621"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="623"/>
<source>Variables</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="634"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="636"/>
<source>BreakPoints</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="645"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="647"/>
<source>ConsoleOutput</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="659"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="661"/>
<source>StackTrace</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="671"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="673"/>
<source>Symbol</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="758"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1006"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1186"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="760"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1008"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1188"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1224"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1244"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1272"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="759"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="761"/>
<source>Too much opened files</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="783"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="785"/>
<source>ConfirmSave</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="812"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="814"/>
<source>ScriptSaveFailedClose</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="959"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="961"/>
<source>Debuging...</source>
<translation>...</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="962"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="964"/>
<source>Running...</source>
<translation>...</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1161"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1201"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1163"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1203"/>
<source>ChooseFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1006"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1186"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1008"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1188"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1244"/>
<source>FilePermission</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1220"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<source>ReloadSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1224"/>
<source>ReloadUnSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1259"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1261"/>
<source>ChooseSaveFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1240"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1268"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<source>SaveSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1272"/>
<source>SaveUnSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1346"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1348"/>
<source>FormatCodeFailed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1396"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1413"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1398"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1415"/>
<source>CannotSave2RunScript</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="798"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1473"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="800"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1475"/>
<source>ScriptStillRunning</source>
<translation>退</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="268"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="270"/>
<source>ConfirmScriptSave</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="297"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="299"/>
<source>View</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="482"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="484"/>
<source>Debug</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="484"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="486"/>
<source>Run</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="490"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="492"/>
<source>RunWithDbg</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="497"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="499"/>
<source>Pause</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="501"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="503"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="508"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="510"/>
<source>Stop</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="513"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="515"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="517"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="519"/>
<source>StepInto</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="522"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="524"/>
<source>StepOver</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="527"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="529"/>
<source>StepOut</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="544"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="546"/>
<source>RemoveBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="585"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="587"/>
<source>Info</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="587"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="589"/>
<source>Software</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="590"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="592"/>
<source>Sponsor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="593"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="595"/>
<source>Wiki</source>
<translation> Wiki</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="596"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="598"/>
<source>AboutQT</source>
<translation> QT</translation>
</message>

View File

@ -2876,17 +2876,17 @@ Do you wish to keep up to date by reloading the file?</source>
<context>
<name>QHexView</name>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="249"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="270"/>
<source>Foreground:</source>
<translation></translation>
</message>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="260"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="281"/>
<source>Background:</source>
<translation></translation>
</message>
<message>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="267"/>
<location filename="../../3rdparty/QHexView/qhexview.cpp" line="288"/>
<source>Comment:</source>
<translation></translation>
</message>
@ -4904,431 +4904,431 @@ Do you wish to keep up to date by reloading the file?</source>
<context>
<name>ScriptingDialog</name>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="96"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="98"/>
<source>ScriptEditor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="193"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="195"/>
<source>ScriptPermissionDenied</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="295"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="297"/>
<source>File</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="296"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="298"/>
<source>Edit</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="298"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="300"/>
<source>Debugger</source>
<translation>調</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="300"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="302"/>
<source>Setting</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="301"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="303"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="317"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="319"/>
<source>InvalidSourceFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="326"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="328"/>
<source>Basic</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="327"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="329"/>
<source>New</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="330"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="332"/>
<source>OpenF</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="333"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="335"/>
<source>RecentFiles</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="337"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="339"/>
<source>Reload</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="342"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="344"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="346"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="349"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="351"/>
<source>SaveAs</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="361"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="363"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="363"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="365"/>
<source>Undo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="368"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="370"/>
<source>Redo</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="374"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="376"/>
<source>Cut</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="378"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="380"/>
<source>Copy</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="383"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="385"/>
<source>Paste</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="387"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="389"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="393"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="395"/>
<source>Lookup</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="394"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="396"/>
<source>Find</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="398"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="400"/>
<source>Replace</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="403"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="405"/>
<source>Goto</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="410"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="579"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="412"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="581"/>
<source>Format</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="411"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="413"/>
<source>CodeFormat</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="421"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="423"/>
<source>Display</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="448"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="450"/>
<source>Scale</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="450"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="452"/>
<source>ResetScale</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="456"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="458"/>
<source>Window</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="459"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="574"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="461"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="576"/>
<source>Editor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="463"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="465"/>
<source>Tools</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="468"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="470"/>
<source>Layout</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="469"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="471"/>
<source>Fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="471"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="473"/>
<source>RestoreLayout</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="536"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="538"/>
<source>BreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="538"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="540"/>
<source>ToggleBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="541"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="543"/>
<source>AddBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="572"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="574"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="577"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="579"/>
<source>ClangFormat</source>
<translation>Clang Format</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="612"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="614"/>
<source>Local</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="618"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="620"/>
<source>Global</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="621"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="623"/>
<source>Variables</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="634"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="636"/>
<source>BreakPoints</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="645"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="647"/>
<source>ConsoleOutput</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="659"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="661"/>
<source>StackTrace</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="671"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="673"/>
<source>Symbol</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="758"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1006"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1186"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="760"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1008"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1188"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1224"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1244"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1272"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="759"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="761"/>
<source>Too much opened files</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="783"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="785"/>
<source>ConfirmSave</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="812"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="814"/>
<source>ScriptSaveFailedClose</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="959"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="961"/>
<source>Debuging...</source>
<translation>調...</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="962"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="964"/>
<source>Running...</source>
<translation>...</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1161"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1201"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1163"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1203"/>
<source>ChooseFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1006"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1186"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1008"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1188"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1244"/>
<source>FilePermission</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1220"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<source>ReloadSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1222"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1224"/>
<source>ReloadUnSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1259"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1261"/>
<source>ChooseSaveFile</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1240"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1268"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1242"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<source>SaveSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1270"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1272"/>
<source>SaveUnSuccessfully</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1346"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1348"/>
<source>FormatCodeFailed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1396"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1413"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1398"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1415"/>
<source>CannotSave2RunScript</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="798"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1473"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="800"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="1475"/>
<source>ScriptStillRunning</source>
<translation>退</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="268"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="270"/>
<source>ConfirmScriptSave</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="297"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="299"/>
<source>View</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="482"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="484"/>
<source>Debug</source>
<translation>調</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="484"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="486"/>
<source>Run</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="490"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="492"/>
<source>RunWithDbg</source>
<translation>調</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="497"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="499"/>
<source>Pause</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="501"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="503"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="508"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="510"/>
<source>Stop</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="513"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="515"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="517"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="519"/>
<source>StepInto</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="522"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="524"/>
<source>StepOver</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="527"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="529"/>
<source>StepOut</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="544"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="546"/>
<source>RemoveBreakPoint</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="585"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="587"/>
<source>Info</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="587"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="589"/>
<source>Software</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="590"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="592"/>
<source>Sponsor</source>
<translation></translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="593"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="595"/>
<source>Wiki</source>
<translation> Wiki</translation>
</message>
<message>
<location filename="../../src/dialog/scriptingdialog.cpp" line="596"/>
<location filename="../../src/dialog/scriptingdialog.cpp" line="598"/>
<source>AboutQT</source>
<translation> QT</translation>
</message>

View File

@ -17,4 +17,61 @@
#include "diffutil.h"
DiffUtil::DiffUtil() {}
QVector<DiffUtil::DiffEntry> DiffUtil::compareFiles(const QStringList &lines1,
const QStringList &lines2) {
return generateOrderedDiff(lines1, lines2);
}
QVector<QVector<int>> DiffUtil::computeLCSMatrix(const QStringList &A,
const QStringList &B) {
auto m = A.size();
auto n = B.size();
QVector<QVector<int>> lcs(m + 1, QVector<int>(n + 1, 0));
for (qsizetype i = 1; i <= m; ++i) {
for (qsizetype j = 1; j <= n; ++j) {
if (A[i - 1] == B[j - 1]) {
lcs[i][j] = lcs[i - 1][j - 1] + 1;
} else {
lcs[i][j] = qMax(lcs[i - 1][j], lcs[i][j - 1]);
}
}
}
return lcs;
}
QVector<DiffUtil::DiffEntry>
DiffUtil::generateOrderedDiff(const QStringList &A, const QStringList &B) {
auto lcs = computeLCSMatrix(A, B);
auto i = A.size();
auto j = B.size();
QVector<DiffEntry> diffEntries;
while (i > 0 && j > 0) {
if (A[i - 1] == B[j - 1]) {
diffEntries.prepend({B[j - 1], DiffEntry::UNCHANGED, i, j});
--i;
--j;
} else if (lcs[i - 1][j] >= lcs[i][j - 1]) {
diffEntries.prepend({A[i - 1], DiffEntry::REMOVED, i, -1});
--i;
} else {
diffEntries.prepend({B[j - 1], DiffEntry::ADDED, -1, j});
--j;
}
}
// Remaining lines in A (deleted lines)
while (i > 0) {
diffEntries.prepend({A[i - 1], DiffEntry::REMOVED, i, -1});
--i;
}
// Remaining lines in B (added lines)
while (j > 0) {
diffEntries.prepend({B[j - 1], DiffEntry::ADDED, -1, j});
--j;
}
return diffEntries;
}

View File

@ -18,9 +18,30 @@
#ifndef DIFFUTIL_H
#define DIFFUTIL_H
#include <QString>
#include <QStringList>
#include <QVector>
class DiffUtil {
public:
DiffUtil();
struct DiffEntry {
QString lineContent;
enum ChangeType { UNCHANGED, ADDED, REMOVED } changeType;
qsizetype lineNumberA; // Line number in file1 (original)
qsizetype lineNumberB; // Line number in file2 (new)
};
public:
static QVector<DiffEntry> compareFiles(const QStringList &lines1,
const QStringList &lines2);
private:
// LCS algorithm to find longest common subsequence of lines
static QVector<QVector<int>> computeLCSMatrix(const QStringList &A,
const QStringList &B);
static QVector<DiffEntry> generateOrderedDiff(const QStringList &A,
const QStringList &B);
};
#endif // DIFFUTIL_H

View File

@ -74,8 +74,10 @@ ScriptingDialog::ScriptingDialog(QWidget *parent)
_defaultLayout = m_dock->saveState();
layout->addWidget(m_dock, 1);
m_status = new QStatusBar(this);
layout->addWidget(m_status);
auto status = new QStatusBar(this);
m_status = new QLabel(this);
status->addWidget(m_status);
layout->addWidget(status);
buildUpContent(cw);
buildUpSettingDialog();
@ -103,7 +105,7 @@ ScriptingDialog::ScriptingDialog(QWidget *parent)
_savedLayout = set.scriptDockLayout();
connect(&LangService::instance(), &LangService::onScriptEditorTip, m_status,
[this](const QString &message) { m_status->showMessage(message); });
[this](const QString &message) { m_status->setText(message); });
this->setUpdatesEnabled(true);
}
@ -955,14 +957,14 @@ void ScriptingDialog::updateRunDebugMode(bool disable) {
if (isRun) {
if (isDbg) {
m_status->setStyleSheet(QStringLiteral("color:gold"));
m_status->showMessage(tr("Debuging..."));
m_status->setText(QStringLiteral("<font color=\"gold\">") +
tr("Debuging...") + QStringLiteral("</font>"));
} else {
m_status->setStyleSheet(QStringLiteral("color:green"));
m_status->showMessage(tr("Running..."));
m_status->setText(QStringLiteral("<font color=\"green\">") +
tr("Running...") + QStringLiteral("</font>"));
}
} else {
m_status->clearMessage();
m_status->setText({});
}
}

View File

@ -312,7 +312,7 @@ private:
QString _DebugingScript;
QStatusBar *m_status = nullptr;
QLabel *m_status = nullptr;
};
#endif // SCRIPTINGDIALOG_H

View File

@ -22,21 +22,67 @@
QDocumentSwapTextCommand::QDocumentSwapTextCommand(const QString &text,
QDocument *doc,
QDocumentCommand *p)
: QDocumentCommand(Command::Custom, doc, p), oldtext(m_doc->text()),
newtext(text) {}
: QDocumentCommand(Command::Custom, doc, p) {
auto textl = text.split('\n');
diffs = DiffUtil::compareFiles(doc->textLines(), textl);
auto r = std::find_if(
diffs.begin(), diffs.end(), [](const DiffUtil::DiffEntry &diff) {
return diff.changeType != DiffUtil::DiffEntry::UNCHANGED;
});
if (r == diffs.end()) {
setObsolete(true);
return;
}
header = textl.takeFirst();
oldheader = doc->line(0).text();
for (auto &s : textl) {
auto lh = new QDocumentLineHandle(s, m_doc);
_handles.append(lh);
}
for (auto p = std::next(doc->begin()); p != doc->end(); ++p) {
_oldhandles.append(*p);
}
auto cursor = doc->editCursor();
_line = cursor->lineNumber();
_column = cursor->columnNumber();
setTargetCursor(cursor->handle());
}
void QDocumentSwapTextCommand::undo() {
m_doc->setText(oldtext);
for (int i = 0; i < m_doc->lineCount(); ++i) {
auto line = m_doc->line(i);
markUndone(line.handle());
removeLines(0, m_doc->lineCount() - 1);
removeText(0, 0, header.length());
insertText(0, 0, oldheader);
insertLines(0, _oldhandles);
m_doc->impl()->emitContentsChange(0, _oldhandles.count() + 1);
for (auto &item : diffs) {
if (item.changeType == DiffUtil::DiffEntry::REMOVED) {
auto line = m_doc->line(item.lineNumberA - 1);
markUndone(line.handle());
} else if (item.changeType == DiffUtil::DiffEntry::ADDED) {
auto line = m_doc->line(item.lineNumberB - 1);
markUndone(line.handle());
}
}
}
void QDocumentSwapTextCommand::redo() {
m_doc->setText(newtext);
for (int i = 0; i < m_doc->lineCount(); ++i) {
auto line = m_doc->line(i);
markRedone(line.handle(), m_first);
removeLines(0, m_doc->lineCount() - 1);
removeText(0, 0, oldheader.length());
insertText(0, 0, header);
insertLines(0, _handles);
m_doc->impl()->emitContentsChange(0, _handles.count() + 1);
for (auto &item : diffs) {
if (item.changeType == DiffUtil::DiffEntry::REMOVED) {
auto line = m_doc->line(item.lineNumberA - 1);
markRedone(line.handle(), m_first);
} else if (item.changeType == DiffUtil::DiffEntry::ADDED) {
auto line = m_doc->line(item.lineNumberB - 1);
markRedone(line.handle(), m_first);
}
}
}

View File

@ -18,6 +18,7 @@
#ifndef QDOCUMENTSWAPTEXTCOMMAND_H
#define QDOCUMENTSWAPTEXTCOMMAND_H
#include "class/diffutil.h"
#include "qdocumentcommand.h"
class QDocumentSwapTextCommand : public QDocumentCommand {
@ -31,8 +32,12 @@ public:
void redo();
private:
QString oldtext;
QString newtext;
QString header, oldheader;
QList<QDocumentLineHandle *> _handles;
QList<QDocumentLineHandle *> _oldhandles;
QVector<DiffUtil::DiffEntry> diffs;
int _line, _column;
};
#endif // QDOCUMENTSWAPTEXTCOMMAND_H