Mercurial > hg > octave-thorsten
view gui/octave-gui/src/TerminalHighlighter.cpp @ 14240:a9992bc3c3f7 gui
GUI: Added qtermwidget snapshot as a subproject to build as a library that links with Octave GUI.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Sat, 21 Jan 2012 11:26:36 +0100 |
parents | gui/src/TerminalHighlighter.cpp@c0e66d6e3dc8 |
children |
line wrap: on
line source
/* OctaveGUI - A graphical user interface for Octave * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "ResourceManager.h" #include "TerminalHighlighter.h" TerminalHighlighter::TerminalHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { HighlightingRule rule; keywordFormat.setForeground(Qt::darkBlue); QStringList keywordPatterns = QString(ResourceManager::instance ()->octaveKeywords ()).split(" ", QString::SkipEmptyParts); keywordPatterns << "GNU" << "Octave" << "OctaveGUI"; for (int i = 0; i < keywordPatterns.size (); i++) keywordPatterns.replace(i, QString("\\b%1\\b").arg(keywordPatterns.at (i))); foreach (const QString &pattern, keywordPatterns) { rule.pattern = QRegExp(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } numberFormat.setForeground(Qt::darkRed); rule.pattern = QRegExp("\\b[0-9\\.\\+\\-\\^]+\\b"); rule.format = numberFormat; highlightingRules.append(rule); doubleQouteFormat.setForeground(Qt::darkGreen); rule.pattern = QRegExp("\"[^\"]*\""); rule.format = doubleQouteFormat; highlightingRules.append(rule); functionFormat.setFontItalic(true); functionFormat.setForeground(Qt::blue); rule.pattern = QRegExp("\\b[A-Za-z0-9_]+\\s*(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); urlFormat.setForeground(Qt::darkYellow); rule.pattern = QRegExp("((?:https?|ftp)://\\S+)"); rule.format = urlFormat; highlightingRules.append(rule); subCaptionFormat.setForeground (Qt::black); subCaptionFormat.setFontItalic (true); rule.pattern = QRegExp("^\\s+\\*.+$"); rule.format = subCaptionFormat; highlightingRules.append(rule); captionFormat.setForeground(Qt::black); captionFormat.setFontWeight(QFont::Bold); rule.pattern = QRegExp("^\\s+\\*\\*.+$"); rule.format = captionFormat; highlightingRules.append(rule); } void TerminalHighlighter::highlightBlock(const QString &text) { foreach (const HighlightingRule &rule, highlightingRules) { QRegExp expression(rule.pattern); int index = expression.indexIn(text); while (index >= 0) { int length = expression.matchedLength(); setFormat(index, length, rule.format); index = expression.indexIn(text, index + length); } } }