diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e9fa4cb --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.14) + +project( + Geist + VERSION 0.1.0 + LANGUAGES CXX +) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) +list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(NO_CACHEGEN "NO_CACHEGEN") +endif() + +include(FeatureSummary) + +find_package( + QT NAMES Qt6 Qt5 + COMPONENTS Core + REQUIRED +) + +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets) + +include_directories(src) + +set(PROJECT_SOURCES + src/files.cpp + src/highlighter.cpp + src/files.h + src/highlighter.h + src/main.cpp + src/mainwindow.cpp + src/mainwindow.ui + src/mainwindow.h + src/search.cpp + src/utils/conversion.cpp + src/utils/templates.cpp + src/utils/conversion.h + src/utils/templates.h + src/widgets/geisttextedit.cpp + src/widgets/geisttextedit.h +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(${PROJECT_NAME} + MANUAL_FINALIZATION + ) +else() + add_executable(${PROJECT_NAME}) +endif() + +target_sources(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCES}) +target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets) +target_include_directories(${PROJECT_NAME} PUBLIC $) + +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/README.md b/README.md index 5bf4bbf..f15d22a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Try it online](https://img.shields.io/badge/Try%20it%20online!-informational)](https://wasm-apps.netlify.app/geist/) -Geist is an all purpose text/code editor written in C++ and using the Qt framework. +Geist is an all purpose text/code editor written in C++ and using the Qt6 framework. ## Screenshot ![Geist](https://github.com/jubal-R/Geist/blob/master/Screenshots/geist.png) @@ -20,26 +20,33 @@ Note: Font settings to be added in the future - Anonymous Pro - http://www.marksimonson.com/fonts/view/anonymous-pro ## Dependencies -qt5-default qt5-qmake + +- Qt5.15 or Qt6 +- CMake ## Building Geist -`git clone https://github.com/jubal-R/Geist.git` -`mkdir build` -`cd build` -`qmake ../Geist/Geist.pro` -`make` + +```bash +git clone https://github.com/jubal-R/Geist.git +cd Geist +cmake -B build -DCMAKE_BUILD_TYPE=RelMinSize +cmake --build build --config release --parallel +``` ## Features To Be Added + - Additional preference options - Auto-completion ## License + Geist - All purpose text/code editor Copyright (C) 2017 This program is free software: you can redistribute it and/or modify it under the terms of the GNU 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. ## Acknowledgements + highlighter.cpp and highlighter.h Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). Full copyright notice is maintained within these files. diff --git a/src/Geist.pro b/src/Geist.pro deleted file mode 100644 index 71dd31a..0000000 --- a/src/Geist.pro +++ /dev/null @@ -1,35 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2013-09-15T09:57:13 -# -#------------------------------------------------- - -QT += core gui - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = Geist -TEMPLATE = app - - -SOURCES += main.cpp\ - mainwindow.cpp \ - highlighter.cpp \ - files.cpp \ - search.cpp \ - widgets/geisttextedit.cpp \ - utils/conversion.cpp \ - utils/templates.cpp - -HEADERS += mainwindow.h \ - highlighter.h \ - search.h \ - files.h \ - search.h \ - widgets/geisttextedit.h \ - utils/conversion.h \ - utils/templates.h - -FORMS += mainwindow.ui - -OTHER_FILES += diff --git a/src/Geist.pro.user b/src/Geist.pro.user deleted file mode 100644 index ec52c61..0000000 --- a/src/Geist.pro.user +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - EnvironmentId - {d019c2b1-26a3-4039-b5bb-542bfb810e99} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - true - Builtin.Questionable - - true - Builtin.DefaultTidyAndClazy - 4 - - - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop Qt 5.9.9 GCC 64bit - Desktop Qt 5.9.9 GCC 64bit - qt.qt5.599.gcc_64_kit - 0 - 0 - 0 - - true - 0 - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Debug - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Debug - - - true - QtProjectManager.QMakeBuildStep - - false - - - - true - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - 2 - 2 - - - true - 2 - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Release - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Release - - - true - QtProjectManager.QMakeBuildStep - - false - - - - true - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 2 - 2 - - - true - 0 - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Profile - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Profile - - - true - QtProjectManager.QMakeBuildStep - - false - - - - true - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 2 - 0 - - 3 - - - 0 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F - true - 4096 - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - Qt4ProjectManager.Qt4RunConfiguration:/home/anubhav/Geist/src/Geist.pro - /home/anubhav/Geist/src/Geist.pro - - false - - false - true - true - false - false - true - - /home/anubhav/Geist/build-Geist-Desktop_Qt_5_9_9_GCC_64bit-Debug - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/src/Geist.pro.user.2cbb2e6.4.8-pre1 b/src/Geist.pro.user.2cbb2e6.4.8-pre1 deleted file mode 100644 index 90f1025..0000000 --- a/src/Geist.pro.user.2cbb2e6.4.8-pre1 +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - EnvironmentId - {2cbb2e64-9d6f-43af-829d-90f987f566d3} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop - {1ed882a3-2828-4120-9e67-9f49f81455d3} - 0 - 0 - 0 - - /home/jbl/qt/build-Geist-Desktop-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - /home/jbl/qt/build-Geist-Desktop-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 2 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - Geist - - Qt4ProjectManager.Qt4RunConfiguration:/home/jbl/qt/Geist/Geist.pro - - Geist.pro - false - false - - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - diff --git a/src/highlighter.cpp b/src/highlighter.cpp index 879d072..b2692ba 100644 --- a/src/highlighter.cpp +++ b/src/highlighter.cpp @@ -1,12 +1,11 @@ #include - #include "highlighter.h" Highlighter::Highlighter(QString filetype, QString theme, QTextDocument *parent) : QSyntaxHighlighter(parent) { - commentStartExpression = QRegExp(""); - commentEndExpression = QRegExp(""); + commentStartExpression = QRegularExpression(""); + commentEndExpression = QRegularExpression(""); setupHighlighter(filetype, theme); } @@ -54,7 +53,7 @@ void Highlighter::setCompiledLanguageRules(){ HighlightingRule rule; //Functions functionFormat.setForeground(functionsColor); - rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); + rule.pattern = QRegularExpression("\\b[A-Za-z0-9_]+(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); @@ -77,51 +76,51 @@ void Highlighter::setCompiledLanguageRules(){ << "\\btry\\b" << "\\bcatch\\b" << "\\bthrow\\b" << "\\bbreak\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } //Nums :D numberFormat.setForeground(numColor); - rule.pattern = QRegExp("\\b[0-9\\.]+\\b"); + rule.pattern = QRegularExpression("\\b[0-9\\.]+\\b"); rule.format = numberFormat; highlightingRules.append(rule); //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); //Format strings formatStringFormat.setForeground(formatStringColor); - rule.pattern = QRegExp("%[sdifFuoxXeEgGaAcpn]+\\b"); + rule.pattern = QRegularExpression("%[sdifFuoxXeEgGaAcpn]+\\b"); rule.format = formatStringFormat; highlightingRules.append(rule); //Comments singleLineCommentFormat.setFontItalic(true); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp("//[^\n]*"); + rule.pattern = QRegularExpression("//[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp("#[^\n]*"); + rule.pattern = QRegularExpression("#[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); multiLineCommentFormat.setFontItalic(true); multiLineCommentFormat.setForeground(commentColor); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegularExpression("/\\*"); + commentEndExpression = QRegularExpression("\\*/"); } void Highlighter::setScriptingLanguageRules(){ @@ -129,7 +128,7 @@ void Highlighter::setScriptingLanguageRules(){ //Functions functionFormat.setFontItalic(true); functionFormat.setForeground(functionsColor); - rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); + rule.pattern = QRegularExpression("\\b[A-Za-z0-9_]+(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); @@ -145,73 +144,73 @@ void Highlighter::setScriptingLanguageRules(){ << "\\bprint\\b" << "\\becho\\b" << "\\btry\\b" << "\\bexcept\\b" << "\\bend\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } //Operators :D operatorFormat.setForeground(operatorColor); - rule.pattern = QRegExp("\\b[+-*/=<>]+\\b"); + rule.pattern = QRegularExpression("\\b[+-*/=<>]+\\b"); rule.format = operatorFormat; highlightingRules.append(rule); operatorFormat.setForeground(operatorColor); - rule.pattern = QRegExp("\\s[+-*/=<>]+\\s"); + rule.pattern = QRegularExpression("\\s[+-*/=<>]+\\s"); rule.format = operatorFormat; highlightingRules.append(rule); //php pl vars phpVarFormat.setForeground(varColor); - rule.pattern = QRegExp("\\$\\w+\\b"); + rule.pattern = QRegularExpression("\\$\\w+\\b"); rule.format = phpVarFormat; highlightingRules.append(rule); //Ruby class/instance vars rubyVarFormat.setForeground(varColor); - rule.pattern = QRegExp("@\\b\\w+\\b"); + rule.pattern = QRegularExpression("@\\b\\w+\\b"); rule.format = rubyVarFormat; highlightingRules.append(rule); rubyVarFormat.setForeground(varColor); - rule.pattern = QRegExp("@@\\b\\w+\\b"); + rule.pattern = QRegularExpression("@@\\b\\w+\\b"); rule.format = rubyVarFormat; highlightingRules.append(rule); //Nums :D numberFormat.setForeground(numColor); - rule.pattern = QRegExp("\\b[0-9\\.]+\\b"); + rule.pattern = QRegularExpression("\\b[0-9\\.]+\\b"); rule.format = numberFormat; highlightingRules.append(rule); //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); //Comments singleLineCommentFormat.setFontItalic(true); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp("//[^\n]*"); + rule.pattern = QRegularExpression("//[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp("#[^\n]*"); + rule.pattern = QRegularExpression("#[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); multiLineCommentFormat.setFontItalic(true); multiLineCommentFormat.setForeground(commentColor); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegularExpression("/\\*"); + commentEndExpression = QRegularExpression("\\*/"); } void Highlighter::setMarkupLanguageRules(){ @@ -219,23 +218,23 @@ void Highlighter::setMarkupLanguageRules(){ //Functions functionFormat.setFontItalic(true); functionFormat.setForeground(functionsColor); - rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); + rule.pattern = QRegularExpression("\\b[A-Za-z0-9_]+(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); // Tags tagFormat.setForeground(tagColor); - rule.pattern = QRegExp("<\\w+\\s+[^>]*>"); + rule.pattern = QRegularExpression("<\\w+\\s+[^>]*>"); rule.format = tagFormat; highlightingRules.append(rule); tagFormat.setForeground(tagColor); - rule.pattern = QRegExp("<\\w+>"); + rule.pattern = QRegularExpression("<\\w+>"); rule.format = tagFormat; highlightingRules.append(rule); tagFormat.setForeground(tagColor); - rule.pattern = QRegExp(""); + rule.pattern = QRegularExpression(""); rule.format = tagFormat; highlightingRules.append(rule); @@ -245,24 +244,24 @@ void Highlighter::setMarkupLanguageRules(){ << "\\blang\\b" << "\\bcharset\\b" << "\\bname\\b" << "\\bcontent\\b" << "\\brel\\b" << "\\btype\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } // classFormat.setForeground(QColor(209, 84, 84)); -// rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b"); +// rule.pattern = QRegularExpression("\\bQ[A-Za-z]+\\b"); // rule.format = classFormat; // highlightingRules.append(rule); //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); @@ -270,21 +269,21 @@ void Highlighter::setMarkupLanguageRules(){ multiLineCommentFormat.setFontItalic(true); multiLineCommentFormat.setForeground(commentColor); - commentStartExpression = QRegExp(""); + commentStartExpression = QRegularExpression(""); } void Highlighter::setAsmRules(){ HighlightingRule rule; //Functions functionFormat.setForeground(functionsColor); - rule.pattern = QRegExp("\\b[A-Za-z0-9_<>-@]+:"); + rule.pattern = QRegularExpression("\\b[A-Za-z0-9_<>-@]+:"); rule.format = functionFormat; highlightingRules.append(rule); //Nums :D numberFormat.setForeground(numColor); - rule.pattern = QRegExp("\\b[0-9a-fx\\.]+\\b"); + rule.pattern = QRegularExpression("\\b[0-9a-fx\\.]+\\b"); rule.format = numberFormat; highlightingRules.append(rule); @@ -303,39 +302,39 @@ void Highlighter::setAsmRules(){ << "\\badd\\b" << "\\bsub\\b" << "\\bmul\\b" << "\\bdiv\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); //Comments singleLineCommentFormat.setFontItalic(true); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp("//[^\n]*"); + rule.pattern = QRegularExpression("//[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); singleLineCommentFormat.setForeground(commentColor); - rule.pattern = QRegExp(";[^\n]*"); + rule.pattern = QRegularExpression(";[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); multiLineCommentFormat.setFontItalic(true); multiLineCommentFormat.setForeground(commentColor); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegularExpression("/\\*"); + commentEndExpression = QRegularExpression("\\*/"); } void Highlighter::setCssRules(){ @@ -349,58 +348,58 @@ void Highlighter::setCssRules(){ << "\\bul\\b" << "\\bol\\b" << "\\bli\\b" << "\\bmain\\b" << "\\bnav\\b" << "\\bmenu\\b" << "\\bmenuitem\\b" << "\\bq\\b" << "\\btable\\b" << "\\btd\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } //Nums :D numberFormat.setForeground(numColor); - rule.pattern = QRegExp("\\b[0-9\\.]+\\b"); + rule.pattern = QRegularExpression("\\b[0-9\\.]+\\b"); rule.format = numberFormat; highlightingRules.append(rule); valueFormat.setForeground(valueColor); - rule.pattern = QRegExp("\\b[0-9\\.]+[pt|px]+\\b"); + rule.pattern = QRegularExpression("\\b[0-9\\.]+[pt|px]+\\b"); rule.format = valueFormat; highlightingRules.append(rule); // Attributes attributeFormat.setForeground(cssAttributesColor); - rule.pattern = QRegExp("\\w+:"); + rule.pattern = QRegularExpression("\\w+:"); rule.format = attributeFormat; highlightingRules.append(rule); attributeFormat.setForeground(cssAttributesColor); - rule.pattern = QRegExp("\\w+-\\w+:"); + rule.pattern = QRegularExpression("\\w+-\\w+:"); rule.format = attributeFormat; highlightingRules.append(rule); // IDs idFormat.setForeground(cssClassesIDsColor); - rule.pattern = QRegExp("#\\w+\\b"); + rule.pattern = QRegularExpression("#\\w+\\b"); rule.format = idFormat; highlightingRules.append(rule); // classes classFormat.setForeground(cssClassesIDsColor); - rule.pattern = QRegExp("\\.\\w+\\b"); + rule.pattern = QRegularExpression("\\.\\w+\\b"); rule.format = classFormat; highlightingRules.append(rule); //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegularExpression("/\\*"); + commentEndExpression = QRegularExpression("\\*/"); } void Highlighter::setSqlRules(){ @@ -415,24 +414,24 @@ void Highlighter::setSqlRules(){ << "\\bTABLE\\b" << "\\bAS\\b" << "\\bBY\\b" << "\\bFOR\\b" << "\\bIF\\b" << "\\bNOT\\b" << "\\bEXISTS\\b"; foreach (const QString &pattern, keywordPatterns) { - rule.pattern = QRegExp(pattern); + rule.pattern = QRegularExpression(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } //Quotes quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("\".*\""); + rule.pattern = QRegularExpression("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); quotationFormat.setForeground(valueColor); - rule.pattern = QRegExp("'.*'"); + rule.pattern = QRegularExpression("'.*'"); rule.format = quotationFormat; highlightingRules.append(rule); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegularExpression("/\\*"); + commentEndExpression = QRegularExpression("\\*/"); } void Highlighter::setColorValues(QString theme){ @@ -501,34 +500,30 @@ void Highlighter::setColorValues(QString theme){ void Highlighter::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); + for (const HighlightingRule &rule : std::as_const(highlightingRules)) { + QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text); + while (matchIterator.hasNext()) { + QRegularExpressionMatch match = matchIterator.next(); + setFormat(match.capturedStart(), match.capturedLength(), rule.format); } } setCurrentBlockState(0); - if (commentStartExpression != QRegExp("") && commentEndExpression != QRegExp("")) { - int startIndex = 0; - if (previousBlockState() != 1) - startIndex = commentStartExpression.indexIn(text); - - while (startIndex >= 0) { - int endIndex = commentEndExpression.indexIn(text, startIndex); - int commentLength; - if (endIndex == -1) { - setCurrentBlockState(1); - commentLength = text.length() - startIndex; - } else { - commentLength = endIndex - startIndex - + commentEndExpression.matchedLength(); - } - setFormat(startIndex, commentLength, multiLineCommentFormat); - startIndex = commentStartExpression.indexIn(text, startIndex + commentLength); + int startIndex = 0; + if (previousBlockState() != 1) + startIndex = text.indexOf(commentStartExpression); + + while (startIndex >= 0) { + QRegularExpressionMatch match = commentEndExpression.match(text, startIndex); + int endIndex = match.capturedStart(); + int commentLength = 0; + if (endIndex == -1) { + setCurrentBlockState(1); + commentLength = text.length() - startIndex; + } else { + commentLength = endIndex - startIndex + match.capturedLength(); } + setFormat(startIndex, commentLength, multiLineCommentFormat); + startIndex = text.indexOf(commentStartExpression, startIndex + commentLength); } } diff --git a/src/highlighter.h b/src/highlighter.h index ed1b6ec..63ae893 100644 --- a/src/highlighter.h +++ b/src/highlighter.h @@ -44,6 +44,7 @@ #include #include #include +#include class QTextDocument; @@ -70,13 +71,13 @@ class Highlighter : public QSyntaxHighlighter struct HighlightingRule { - QRegExp pattern; + QRegularExpression pattern; QTextCharFormat format; }; QVector highlightingRules; - QRegExp commentStartExpression; - QRegExp commentEndExpression; + QRegularExpression commentStartExpression; + QRegularExpression commentEndExpression; QTextCharFormat keywordFormat; QTextCharFormat numberFormat; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 18e7ddb..f160827 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1150,7 +1150,7 @@ void MainWindow::setTabWidth(int width){ for(int i = 0; i < ui->tabWidget->count(); i++){ ui->tabWidget->setCurrentIndex(i); - currentEditorWidget->setTabStopWidth(width * metrics.width(' ') ); + currentEditorWidget->setTabStopDistance(width * metrics.maxWidth() ); } ui->tabWidget->setCurrentIndex(current); diff --git a/src/mainwindow.h b/src/mainwindow.h index 3faec4c..ae4ad28 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -2,7 +2,7 @@ #define MAINWINDOW_H #include -#include +#include "highlighter.h" #include #include "QSettings" #include diff --git a/src/mainwindow.ui b/src/mainwindow.ui index c991d7c..68de713 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -180,7 +180,7 @@ border: 0px; true - + 4