File indexing completed on 2024-04-28 11:20:35

0001 /*
0002     SPDX-License-Identifier: GPL-2.0-or-later
0003     SPDX-FileCopyrightText: 2018 Sirgienko Nikita <warquark@gmail.com>
0004 */
0005 
0006 #include "octavekeywords.h"
0007 
0008 #include <KSyntaxHighlighting/Repository>
0009 #include <KSyntaxHighlighting/Definition>
0010 
0011 OctaveKeywords::OctaveKeywords()
0012 {
0013     KSyntaxHighlighting::Repository m_repository;
0014     KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Octave"));
0015 
0016     //TODO: KSyntaxHighlighting provides "keywords", "functions", "forge", "builtin" and "commands".
0017     //we use "keywords" and "functions" at the moment. decide what to do with "forge", "builtin" and "commands".
0018     m_keywords = definition.keywordList(QLatin1String("keywords"));
0019 
0020     //KSyntaxHighlighting store this keywords separatly of keywords list, so we add them manually
0021     m_keywords
0022         << QLatin1String("function") << QLatin1String("endfunction")
0023         << QLatin1String("for") << QLatin1String("endfor")
0024         << QLatin1String("while") << QLatin1String("endwhile")
0025         << QLatin1String("if") << QLatin1String("endif") << QLatin1String("else")
0026         << QLatin1String("elseif") << QLatin1String("endswitch")
0027         << QLatin1String("switch") << QLatin1String("case")
0028         << QLatin1String("end") << QLatin1String("otherwise");
0029 
0030     m_functions = definition.keywordList(QLatin1String("functions"));
0031     // https://phabricator.kde.org/D18734
0032     // OUTOFDATE: Remove after 5.56 KSyntaxHighlighting version
0033     m_functions
0034         << QLatin1String("plot") << QLatin1String("semilogx") << QLatin1String("semilogy")
0035         << QLatin1String("loglog") << QLatin1String("polar") << QLatin1String("contour")
0036         << QLatin1String("stairs") << QLatin1String("errorbar")  << QLatin1String("sombrero")
0037         << QLatin1String("hist") << QLatin1String("fplot") << QLatin1String("imshow")
0038         << QLatin1String("stem") << QLatin1String("stem3") << QLatin1String("scatter")
0039         << QLatin1String("pie") << QLatin1String("quiver") << QLatin1String("compass")
0040         << QLatin1String("pareto") << QLatin1String("rose") << QLatin1String("feather")
0041         << QLatin1String("pcolor") << QLatin1String("area") << QLatin1String("fill")
0042         << QLatin1String("plotmatrix") << QLatin1String("bar") << QLatin1String("comet")
0043         /* 3d-plots */
0044         << QLatin1String("plot3") << QLatin1String("isocaps") << QLatin1String("isonormals")
0045         << QLatin1String("mesh") << QLatin1String("meshc") << QLatin1String("meshz")
0046         << QLatin1String("surf") << QLatin1String("surfc") << QLatin1String("surfl")
0047         << QLatin1String("surfnorm") << QLatin1String("isosurface")
0048         /* 3d-plots defined by a function */
0049         << QLatin1String("ezplot3") << QLatin1String("ezmesh") << QLatin1String("ezmeshc")
0050         << QLatin1String("ezsurf") << QLatin1String("ezsurfc");
0051 }
0052 
0053 OctaveKeywords* OctaveKeywords::instance()
0054 {
0055     static OctaveKeywords* inst = nullptr;
0056 
0057     if(inst == nullptr){
0058         inst = new OctaveKeywords();
0059         std::sort(inst->m_functions.begin(), inst->m_functions.end());
0060         std::sort(inst->m_keywords.begin(), inst->m_keywords.end());
0061     }
0062 
0063     return inst;
0064 }
0065 
0066 const QStringList& OctaveKeywords::functions() const
0067 {
0068     return m_functions;
0069 }
0070 
0071 const QStringList& OctaveKeywords::keywords() const
0072 {
0073     return m_keywords;
0074 }