edbee - Qt Editor Library v0.11.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
textgrammar.h
Go to the documentation of this file.
1// edbee - Copyright (c) 2012-2025 by Rick Blommers and contributors
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
6#include "edbee/exports.h"
7
8#include <QHash>
9#include <QList>
10#include <QMap>
11#include <QString>
12#include <QStringList>
13
14class QFile;
15
16namespace edbee {
17
18class RegExp;
19class TextGrammar;
20class Edbee;
21
22
25public:
26
36
37
38 TextGrammarRule( TextGrammar* grammar, Instruction instruction );
40
41 static TextGrammarRule* createMainRule( TextGrammar* grammar, const QString& scopeName );
42 static TextGrammarRule* createRuleList( TextGrammar* grammar );
43 static TextGrammarRule* createSingleLineRegExp( TextGrammar* grammar, const QString& scopeName, const QString& regExp );
44 static TextGrammarRule* createMultiLineRegExp( TextGrammar* grammar, const QString& scopeName, const QString& contentScopeName, const QString& beginRegExp, const QString& endRegExp );
45 static TextGrammarRule* createIncludeRule( TextGrammar* grammar, const QString& includeName );
46
47 inline bool isMainRule() { return instruction_ == MainRule; }
48 inline bool isRuleList() { return instruction_ == RuleList; }
49 inline bool isMultiLineRegExp() { return instruction_ == MultiLineRegExp; }
50 inline bool isSingleLineRegExp() { return instruction_ == SingleLineRegExp; }
51 inline bool isIncludeCall() { return instruction_ == IncludeCall; }
52
53 int ruleCount() const { return ruleList_.size(); }
54 TextGrammarRule* rule( int idx ) const;
55 void giveRule( TextGrammarRule* rule );
56
57 void giveMatchRegExp( RegExp* regExp );
58 void setEndRegExpString( const QString& str );
59
60 Instruction instruction() const { return instruction_; }
61 void setInstruction( Instruction ins ) { instruction_ = ins; }
62 QString scopeName() const { return scopeName_; }
63 void setScopeName( const QString& scopeName ) { scopeName_ = scopeName; }
64 RegExp* matchRegExp() const { return matchRegExp_; }
65 QString endRegExpString() const { return endRegExpString_; }
66 const QMap<int,QString>& matchCaptures() { return matchCaptures_; }
67 const QMap<int,QString>& endCaptures() { return endCaptures_; }
68 QString contentScopeName() const { return contentScopeName_; }
69 void setContentScopeName( const QString& name) { contentScopeName_ = name; }
70
72 QString includeName() { return contentScopeName_; }
73 void setIncludeName( const QString& name ) { contentScopeName_ = name; }
74
75 void setCapture( int idx, const QString& name ) { matchCaptures_.insert(idx,name); }
76 void setEndCapture( int idx, const QString& name ) { endCaptures_.insert(idx,name); }
77
78 QString toString(bool includePatterns=true);
79
80
81 // An itetor class for iterating over the ruleset (todo template this)
83 {
84 public:
85 Iterator( const TextGrammarRule* rule ) : index_(0), ruleRef_(rule){}
86 bool hasNext() { return index_ < ruleRef_->ruleCount(); }
87 TextGrammarRule* next() { return ruleRef_->rule(index_++); }
88 private:
89 int index_;
90 const TextGrammarRule* ruleRef_;
91 };
92
93 Iterator* createIterator() { return new Iterator(this); }
94
95 TextGrammar* grammar() { return grammarRef_; }
96
97private:
98
99 static RegExp* createRegExp( const QString& regexp );
100
101
102private:
103 TextGrammar* grammarRef_;
104 Instruction instruction_;
105 QString scopeName_;
106
107 RegExp* matchRegExp_;
108 //RegExp* endRegExp_; ///< The end regular expression matcher
109 QString endRegExpString_;
110
111 QMap<int,QString> matchCaptures_;
112 QMap<int,QString> endCaptures_;
113
114 QString contentScopeName_;
115
116 QList<TextGrammarRule*> ruleList_;
117};
118
119
120//================================
121
122
125public:
126
127 TextGrammar( const QString& name, const QString& displayName );
128 ~TextGrammar();
129
131
132 QString name() const;
133 QString displayName() const;
134 TextGrammarRule* mainRule() const;
135 QStringList fileExtensions() const;
136
137 void giveToRepos( const QString& name, TextGrammarRule* rule);
138 TextGrammarRule* findFromRepos( const QString& name, TextGrammarRule* defValue = 0 );
139 void addFileExtension( const QString& ext );
140
141private:
142 QString name_;
143 QString displayName_;
144 TextGrammarRule *mainRule_;
145 QMap<QString, TextGrammarRule*> repository_;
146 QStringList fileExtensions_;
147};
148
149
150
151//================================
152
153
156protected:
158 virtual ~TextGrammarManager();
159
160public:
161 TextGrammar* readGrammarFile(const QString& file );
162 void readAllGrammarFilesInPath(const QString& path );
163
164 TextGrammar* get( const QString& name );
165 void giveGrammar( TextGrammar* grammar );
166
167 QList<QString> grammarNames();
168 QList<TextGrammar*> grammars();
169 QList<TextGrammar*> grammarsSortedByDisplayName();
170
171 TextGrammar* defaultGrammar() { return defaultGrammarRef_; }
172 TextGrammar* detectGrammarWithFilename( const QString& fileName );
173
174 QString lastErrorMessage() const;
175
176private:
177
178 TextGrammar* defaultGrammarRef_;
179 QMap<QString,TextGrammar*> grammarMap_;
180 QString lastErrorMessage_;
181
182 friend class Edbee;
183};
184
185} // edbee
The texteditor manager, It manages all singleton objects for the editor It performs the initializatio...
Definition edbee.h:27
A class for matching QStrings with the Oniguruma API We need this Regular Expression library to be ab...
Definition regexp.h:35
This class defines a single language grammar.
Definition textgrammar.h:124
TextGrammarRule * findFromRepos(const QString &name, TextGrammarRule *defValue=0)
Finds the grammar rule from the respos.
Definition textgrammar.cpp:250
void giveMainRule(TextGrammarRule *mainRule)
Gives the main rule the grammmar.
Definition textgrammar.cpp:203
void addFileExtension(const QString &ext)
Adds a file extension.
Definition textgrammar.cpp:258
QString name() const
return the name of the textgrammar
Definition textgrammar.cpp:211
QStringList fileExtensions() const
Returns all file extensions that are used by this grammar.
Definition textgrammar.cpp:233
TextGrammar(const QString &name, const QString &displayName)
The default texgrammar constructor.
Definition textgrammar.cpp:184
TextGrammarRule * mainRule() const
Returns the main grammar rule for this textgrammar.
Definition textgrammar.cpp:225
QString displayName() const
Returns the displayname of this grammar.
Definition textgrammar.cpp:218
void giveToRepos(const QString &name, TextGrammarRule *rule)
This method adds the given grammar rule to the repos.
Definition textgrammar.cpp:240
TextGrammar * get(const QString &name)
This method returns the given language grammar.
Definition textgrammar.cpp:326
void giveGrammar(TextGrammar *grammar)
This method gives a language grammar to the document.
Definition textgrammar.cpp:334
QList< TextGrammar * > grammarsSortedByDisplayName()
This utility function returns all grammars sorted on displayname Warning, this method sorts the gramm...
Definition textgrammar.cpp:380
TextGrammarManager()
The text grammar manager constructor.
Definition textgrammar.cpp:268
TextGrammar * readGrammarFile(const QString &file)
This method reads the given grammar file and adds it to the grammar manager. The grammar manager stay...
Definition textgrammar.cpp:292
QList< TextGrammar * > grammars()
This method returns the values.
Definition textgrammar.cpp:362
friend class Edbee
Definition textgrammar.h:182
TextGrammar * defaultGrammar()
Definition textgrammar.h:171
QList< QString > grammarNames()
This method returns all grammar names.
Definition textgrammar.cpp:355
void readAllGrammarFilesInPath(const QString &path)
reads all grammar files in the given path
Definition textgrammar.cpp:313
Definition textgrammar.h:83
Iterator(const TextGrammarRule *rule)
Definition textgrammar.h:85
bool hasNext()
Definition textgrammar.h:86
TextGrammarRule * next()
Definition textgrammar.h:87
defines a single grammar rule
Definition textgrammar.h:24
void setIncludeName(const QString &name)
Definition textgrammar.h:73
bool isIncludeCall()
Definition textgrammar.h:51
void setCapture(int idx, const QString &name)
Definition textgrammar.h:75
QString contentScopeName() const
Definition textgrammar.h:68
Instruction
the instructions
Definition textgrammar.h:28
@ RuleList
A list of rules (no regexp)
Definition textgrammar.h:30
@ Parser
A full parser (not yet supported, by added as idea for the future). But could be marked by multiple r...
Definition textgrammar.h:34
@ MainRule
The main rule has no regexp matches.
Definition textgrammar.h:29
@ MultiLineRegExp
A multi-line regexp (begin end)
Definition textgrammar.h:32
@ SingleLineRegExp
A single line regexp.
Definition textgrammar.h:31
@ IncludeCall
Includes another scope.
Definition textgrammar.h:33
Iterator * createIterator()
Definition textgrammar.h:93
const QMap< int, QString > & endCaptures()
Definition textgrammar.h:67
TextGrammarRule(TextGrammar *grammar, Instruction instruction)
The text grammar rule constructor.
Definition textgrammar.cpp:19
QString scopeName() const
Definition textgrammar.h:62
TextGrammarRule * rule(int idx) const
returns the child rule at the given index
Definition textgrammar.cpp:104
bool isRuleList()
Definition textgrammar.h:48
Instruction instruction() const
Definition textgrammar.h:60
void setContentScopeName(const QString &name)
Definition textgrammar.h:69
void setInstruction(Instruction ins)
Definition textgrammar.h:61
bool isMainRule()
Definition textgrammar.h:47
void setScopeName(const QString &scopeName)
Definition textgrammar.h:63
QString includeName()
the include name is stored in the content-scopename
Definition textgrammar.h:72
void setEndCapture(int idx, const QString &name)
Definition textgrammar.h:76
bool isSingleLineRegExp()
Definition textgrammar.h:50
const QMap< int, QString > & matchCaptures()
Definition textgrammar.h:66
QString endRegExpString() const
Definition textgrammar.h:65
TextGrammar * grammar()
Definition textgrammar.h:95
int ruleCount() const
Definition textgrammar.h:53
bool isMultiLineRegExp()
Definition textgrammar.h:49
RegExp * matchRegExp() const
Definition textgrammar.h:64
#define EDBEE_EXPORT
Definition exports.h:15
QT Acessibility has an issue with reporting blank lines between elements lines. defining 'WINDOWS_EMP...
Definition commentcommand.cpp:20