File indexing completed on 2023-10-01 07:35:55
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2009 Alexander Rieder <alexanderrieder@gmail.com> 0004 SPDX-FileCopyrightText: 2010 Oleksiy Protas <elfy.ua@gmail.com> 0005 */ 0006 0007 #include "rhighlighter.h" 0008 #include "rkeywords.h" 0009 #include "rsession.h" 0010 #include "rvariablemodel.h" 0011 0012 #include <QTextEdit> 0013 #include <QDebug> 0014 0015 const QStringList RHighlighter::operators_list=QStringList() 0016 << QLatin1String("(\\+|\\-|\\*{1,2}|/|<=?|>=?|={1,2}|\\!=?|\\|{1,2}|&{1,2}|:{1,3}|\\^|@|\\$|~)") 0017 << QLatin1String("%[^%]*%"); // Taken in r.xml syntax file from KSyntaxHighlighter 0018 0019 const QStringList RHighlighter::specials_list=QStringList() 0020 << QLatin1String("BUG") << QLatin1String("TODO") << QLatin1String("FIXME") << QLatin1String("NB") << QLatin1String("WARNING") << QLatin1String("ERROR"); 0021 0022 RHighlighter::RHighlighter(QObject* parent, RSession* session) : Cantor::DefaultHighlighter(parent, session) 0023 { 0024 Cantor::DefaultVariableModel* model = session->variableModel(); 0025 if (model) 0026 { 0027 RVariableModel* RModel = static_cast<RVariableModel*>(model); 0028 connect(RModel, &RVariableModel::constantsAdded, this, &RHighlighter::addVariables); 0029 connect(RModel, &RVariableModel::constantsRemoved, this, &RHighlighter::removeRules); 0030 } 0031 0032 addKeywords(RKeywords::instance()->keywords()); 0033 0034 foreach (const QString& s, operators_list) 0035 addRule(QRegularExpression(s), operatorFormat()); 0036 foreach (const QString& s, specials_list) 0037 addRule(QRegularExpression(QLatin1String("\\b")+s+QLatin1String("\\b")), commentFormat()); 0038 0039 addRule(QRegularExpression(QStringLiteral("\"[^\"]*\"")), stringFormat()); 0040 addRule(QRegularExpression(QStringLiteral("'[^']*'")), stringFormat()); 0041 0042 addRule(QRegularExpression(QStringLiteral("#[^\n]*")), commentFormat()); 0043 } 0044 0045 QStringList RHighlighter::parseBlockTextToWords(const QString& originalText) 0046 { 0047 QString text = originalText; 0048 0049 static const QString replacer1 = QLatin1String("___CANTOR_R_REPLACER_1___"); 0050 static const QString replacer2 = QLatin1String("___CANTOR_R_REPLACER_2___"); 0051 0052 text.replace(QLatin1String("-"), replacer1); 0053 text.replace(QLatin1String("."), replacer2); 0054 0055 QStringList words = text.split(QRegularExpression(QStringLiteral("\\b")), QString::SkipEmptyParts); 0056 0057 for (int i = 0; i < words.size(); i++) 0058 { 0059 words[i].replace(replacer1, QLatin1String("-")); 0060 words[i].replace(replacer2, QLatin1String(".")); 0061 } 0062 0063 return words; 0064 }