#include "fb2code.hpp" #include "fb2dlgs.hpp" #ifdef FB2_USE_SCINTILLA ///////////////////////////////////////////////////////////////////////////// // // http://qtcoder.blogspot.com/2010/10/qscintills.html // http://www.riverbankcomputing.co.uk/static/Docs/QScintilla2/classQsciScintilla.html // ///////////////////////////////////////////////////////////////////////////// #include #include Fb2CodeEdit::Fb2CodeEdit(QWidget *parent) : QsciScintilla(parent) { zoomTo(1); setUtf8(true); setCaretLineVisible(true); setCaretLineBackgroundColor(QColor("gainsboro")); setWrapMode(QsciScintilla::WrapWord); /* //setup autocompletion setAutoCompletionSource(QsciScintilla::AcsAll); setAutoCompletionCaseSensitivity(true); setAutoCompletionReplaceWord(true); setAutoCompletionShowSingle(true); setAutoCompletionThreshold(2); */ //setup margins setMarginsBackgroundColor(QColor("gainsboro")); setMarginLineNumbers(0, true); setFolding(QsciScintilla::BoxedFoldStyle, 1); //setup brace matching setBraceMatching(QsciScintilla::SloppyBraceMatch); setMatchedBraceBackgroundColor(Qt::yellow); setUnmatchedBraceForegroundColor(Qt::blue); //setup end-of-line mode #if defined Q_WS_X11 setEolMode(QsciScintilla::EolUnix); #elif defined Q_WS_WIN setEolMode(QsciScintilla::EolWindows); #elif defined Q_WS_MAC setEolMode(QsciScintilla::EolMac); #endif //setup auto-indentation setAutoIndent(true); setIndentationGuides(true); setIndentationsUseTabs(false); setIndentationWidth(2); QsciLexerXML * lexer = new QsciLexerXML; lexer->setFoldPreprocessor(true); #ifdef Q_WS_WIN lexer->setFont(QFont("Courier New", 8)); #else lexer->setFont(QFont("Monospace", 8)); #endif setLexer(lexer); connect(this, SIGNAL(linesChanged()), SLOT(linesChanged())); } void Fb2CodeEdit::linesChanged() { QString width = QString().setNum(lines() * 10); setMarginWidth(0, width); } void Fb2CodeEdit::load(const QByteArray &array, const QList &folds) { SendScintilla(SCI_SETTEXT, array.constData()); SendScintilla(SCI_EMPTYUNDOBUFFER); foldAll(false); foldLine(1); for (QList::const_iterator it = folds.constBegin(); it != folds.constEnd(); it++) { foldLine(*it); } } void Fb2CodeEdit::zoomReset() { zoomTo(1); } #endif // FB2_USE_SCINTILLA #ifdef FB2_USE_PLAINTEXT #include #include static const QColor DEFAULT_SYNTAX_CHAR = Qt::blue; static const QColor DEFAULT_ELEMENT_NAME = Qt::darkRed; static const QColor DEFAULT_COMMENT = Qt::darkGray; static const QColor DEFAULT_ATTRIBUTE_NAME = Qt::red; static const QColor DEFAULT_ATTRIBUTE_VALUE = Qt::darkGreen; static const QColor DEFAULT_ERROR = Qt::darkMagenta; static const QColor DEFAULT_OTHER = Qt::black; // Regular expressions for parsing XML borrowed from: // http://www.cs.sfu.ca/~cameron/REX.html static const QString EXPR_COMMENT = "