diff --git a/development/scons/scons_manifest.py b/development/scons/scons_manifest.py index 6ed4e79a42..e80974d754 100644 --- a/development/scons/scons_manifest.py +++ b/development/scons/scons_manifest.py @@ -701,6 +701,7 @@ src_frontends_qt4_moc_files = Split(''' QIncludeDialog.C QIndexDialog.C Action.C + QLog.C QLogDialog.C QViewSourceDialog.C QViewSource.C diff --git a/src/frontends/qt4/QLog.C b/src/frontends/qt4/QLog.C index c8f04e45b7..6d6cc8556a 100644 --- a/src/frontends/qt4/QLog.C +++ b/src/frontends/qt4/QLog.C @@ -14,6 +14,8 @@ #include "QLogDialog.h" #include "qt_helpers.h" +#include "frontends/Application.h" + #include "controllers/ControlLog.h" #include @@ -31,9 +33,56 @@ QLog::QLog(Dialog & parent) {} +logHighlighter::logHighlighter(QTextDocument * parent) : + QSyntaxHighlighter(parent) +{ + infoFormat.setForeground(Qt::gray); + warningFormat.setForeground(Qt::darkBlue); + errorFormat.setForeground(Qt::red); +} + + +void logHighlighter::highlightBlock(QString const & text) +{ + // Info + QRegExp exprInfo("^(Document Class:|LaTeX Font Info:|File:|Package:|Language:|Underfull|Overfull|\\(|\\\\).*$"); + int index = text.indexOf(exprInfo); + while (index >= 0) { + int length = exprInfo.matchedLength(); + setFormat(index, length, infoFormat); + index = text.indexOf(exprInfo, index + length); + } + // LaTeX Warning: + QRegExp exprWarning("^LaTeX Warning.*$"); + index = text.indexOf(exprWarning); + while (index >= 0) { + int length = exprWarning.matchedLength(); + setFormat(index, length, warningFormat); + index = text.indexOf(exprWarning, index + length); + } + // ! error + QRegExp exprError("^!.*$"); + index = text.indexOf(exprError); + while (index >= 0) { + int length = exprError.matchedLength(); + setFormat(index, length, errorFormat); + index = text.indexOf(exprError, index + length); + } +} + + void QLog::build_dialog() { dialog_.reset(new QLogDialog(this)); + // set syntax highlighting + highlighter = new logHighlighter(dialog_->logTB->document()); + // + dialog_->logTB->setReadOnly(true); + QFont font(toqstr(theApp()->typewriterFontName())); + font.setKerning(false); + font.setFixedPitch(true); + font.setStyleHint(QFont::TypeWriter); + dialog_->logTB->setFont(font); } @@ -49,3 +98,5 @@ void QLog::update_contents() } // namespace frontend } // namespace lyx + +#include "QLog_moc.cpp" diff --git a/src/frontends/qt4/QLog.h b/src/frontends/qt4/QLog.h index 0ef101c433..0ed6170a0a 100644 --- a/src/frontends/qt4/QLog.h +++ b/src/frontends/qt4/QLog.h @@ -15,10 +15,13 @@ #include "QDialogView.h" #include "QLogDialog.h" +#include + namespace lyx { namespace frontend { class ControlLog; +class logHighlighter; /// class QLog @@ -36,8 +39,30 @@ private: virtual void update_contents(); /// build the dialog virtual void build_dialog(); + /// log syntax highlighter + logHighlighter * highlighter; + }; + +/// +class logHighlighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + logHighlighter(QTextDocument * parent); + +protected: + void highlightBlock(QString const & text); + +private: + QTextCharFormat infoFormat; + QTextCharFormat warningFormat; + QTextCharFormat errorFormat; +}; + + } // namespace frontend } // namespace lyx