📄 editor.cpp
字号:
// FILE: editor.cpp// DESCRIPTION: Implementation for the HideEditor object.// AUTHOR: James Martin (boolean_machine@yahoo.com)#include "editor.h"#include <qstylesheet.h>#include <qstringlist.h>#include <qfileinfo.h>#include <qmessagebox.h>#include <cstring>#include <new>// Constructor.HideEditor::HideEditor(QWidget *parent, const char *name) : QTextEdit(parent, name){ m_bColorize = false; m_keywords = NULL; m_slc = m_smlc = m_emlc = ""; m_SyntaxMgr = NULL; m_SyntaxMgr = new SyntaxMgr; if (!m_SyntaxMgr->load()) { QMessageBox::warning(this, "Error", "Failed to intialize language keywords."); }}HideEditor::~HideEditor(){ if (m_SyntaxMgr) delete m_SyntaxMgr;}void HideEditor::setFontSize(int fs){ setFont(QFont("Courier", fs));}void HideEditor::moveToLine(unsigned line){ setCursorPosition(line-1, 0);}void HideEditor::moveToLine(QString tok){}void HideEditor::render(HideDoc &doc){/* if (initHighlightState(doc.getName())) { QString html = (QString) "<tt><pre>" + QStyleSheet::escape(doc.getData()) + "</pre></tt><br>"; setTextFormat(Qt::RichText); setText(*colorize(&html)); setTextFormat(Qt::PlainText); } else*/ setText(doc.getData());}QString *HideEditor::colorize(QString *data){ QString kw = ""; int i = 0, kwlen = 0; for (unsigned kwi=0; kwi < m_keywords->count(); kwi++) { kw = (*m_keywords)[kwi]; kwlen = kw.length(); i = data->find(kw); while (i != -1) { data->insert(i, "<font color=\"#bb0000\">"); i += strlen("<font color=\"#bb0000\">") + kwlen; data->insert(i, "</font>"); i += 7; i = data->find(kw, i); } } i = data->find(m_slc); while (i != -1) { data->insert(i, "<font color=\"#00aa00\"><i>"); i += strlen("<font color=\"#00aa00\"><i>") + m_slc.length(); i = data->find('\n', i); data->insert(i, "</i></font>"); i += 11; i = data->find(m_slc, i); } return data;}void HideEditor::colorize(int line){ QStringList words; QString kw = "", slc = "//"; register int i=0, kwlen=0, start=0, end=0; setTextFormat(Qt::RichText); QString html = QStyleSheet::escape(text()); if (!m_bColorize) return; words += "int"; words += "inline"; words += "return"; words += "#include"; words += "#include"; words += "if"; words += "else"; words += "#define"; words += "for"; for (; i < line; i++) start = html.find('\n', i)+1; end = html.find('\n', i); for (unsigned kwi=0; kwi<words.count(); kwi++) { kw = words[kwi]; kwlen = kw.length(); i = html.find(kw, start); while ((i != -1) && (i < end)) { html.insert(i, "<font color=\"#bb0000\">"); i += strlen("<font color=\"#bb0000\">") + kwlen; html.insert(i, "</font>"); i += 7; i = html.find(kw, i); } } i = html.find(slc, start); while ((i != -1) && (i < end)) { html.insert(i, "<font color=\"#00aa00\"><i>"); i += strlen("<font color=\"#00aa00\"><i>") + slc.length(); i = html.find('\n', i); html.insert(i, "</i></font>"); i += 11; i = html.find(slc, i); } setTextFormat(Qt::PlainText); setText(html);}bool HideEditor::initHighlightState(QString fn){ QFileInfo fi(fn); QString x = fi.extension(0); m_keywords = m_SyntaxMgr->keywords(x); if (!m_keywords) { m_bColorize = false; return false; } m_slc = m_SyntaxMgr->slc(x); m_smlc = m_SyntaxMgr->smlc(x); m_emlc = m_SyntaxMgr->emlc(x); m_bColorize = true; return true;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -