comparison libgui/languages/build_ts/octave-qsci/Qsci/qscilexer.h @ 31537:5ceb4bfcdb0f stable

add tools and files for updating the gui's language files for translation * libgui/languages/build_ts/README.md: readme for updating language files * libgui/languages/build_ts/octave-qsci: QScintilla source files for languages without translation provided by QScintilla * libgui/languages/build_ts/octave-qt: Qt source files for languages without translation provided by Qt
author Torsten Lilge <ttl-octave@mailbox.org>
date Thu, 24 Nov 2022 06:48:25 +0100
parents
children dd5ece3664ed
comparison
equal deleted inserted replaced
31535:4b80982e0af8 31537:5ceb4bfcdb0f
1 // This defines the interface to the QsciLexer class.
2 //
3 // Copyright (c) 2019 Riverbank Computing Limited <info@riverbankcomputing.com>
4 //
5 // This file is part of QScintilla.
6 //
7 // This file may be used under the terms of the GNU General Public License
8 // version 3.0 as published by the Free Software Foundation and appearing in
9 // the file LICENSE included in the packaging of this file. Please review the
10 // following information to ensure the GNU General Public License version 3.0
11 // requirements will be met: http://www.gnu.org/copyleft/gpl.html.
12 //
13 // If you do not wish to use this file under the terms of the GPL version 3.0
14 // then you may purchase a commercial license. For more information contact
15 // info@riverbankcomputing.com.
16 //
17 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19
20
21 #ifndef QSCILEXER_H
22 #define QSCILEXER_H
23
24 #include <QColor>
25 #include <QFont>
26 #include <QMap>
27 #include <QObject>
28 #include <QString>
29
30 #include <Qsci/qsciglobal.h>
31
32
33 QT_BEGIN_NAMESPACE
34 class QSettings;
35 QT_END_NAMESPACE
36
37 class QsciAbstractAPIs;
38 class QsciScintilla;
39
40
41 //! \brief The QsciLexer class is an abstract class used as a base for language
42 //! lexers.
43 //!
44 //! A lexer scans the text breaking it up into separate language objects, e.g.
45 //! keywords, strings, operators. The lexer then uses a different style to
46 //! draw each object. A style is identified by a style number and has a number
47 //! of attributes, including colour and font. A specific language lexer will
48 //! implement appropriate default styles which can be overriden by an
49 //! application by further sub-classing the specific language lexer.
50 //!
51 //! A lexer may provide one or more sets of words to be recognised as keywords.
52 //! Most lexers only provide one set, but some may support languages embedded
53 //! in other languages and provide several sets.
54 //!
55 //! QsciLexer provides convenience methods for saving and restoring user
56 //! preferences for fonts and colours.
57 //!
58 //! If you want to write a lexer for a new language then you can add it to the
59 //! underlying Scintilla code and implement a corresponding QsciLexer sub-class
60 //! to manage the different styles used. Alternatively you can implement a
61 //! sub-class of QsciLexerCustom.
62 class QSCINTILLA_EXPORT QsciLexer : public QObject
63 {
64 Q_OBJECT
65
66 public:
67 //! Construct a QsciLexer with parent \a parent. \a parent is typically
68 //! the QsciScintilla instance.
69 QsciLexer(QObject *parent = 0);
70
71 //! Destroy the QSciLexer.
72 virtual ~QsciLexer();
73
74 //! Returns the name of the language. It must be re-implemented by a
75 //! sub-class.
76 virtual const char *language() const = 0;
77
78 //! Returns the name of the lexer. If 0 is returned then the lexer's
79 //! numeric identifier is used. The default implementation returns 0.
80 //!
81 //! \sa lexerId()
82 virtual const char *lexer() const;
83
84 //! Returns the identifier (i.e. a QsciScintillaBase::SCLEX_* value) of the
85 //! lexer. This is only used if lexer() returns 0. The default
86 //! implementation returns QsciScintillaBase::SCLEX_CONTAINER.
87 //!
88 //! \sa lexer()
89 virtual int lexerId() const;
90
91 //! Returns the current API set or 0 if there isn't one.
92 //!
93 //! \sa setAPIs()
94 QsciAbstractAPIs *apis() const;
95
96 //! Returns the characters that can fill up auto-completion.
97 virtual const char *autoCompletionFillups() const;
98
99 //! Returns the list of character sequences that can separate
100 //! auto-completion words. The first in the list is assumed to be the
101 //! sequence used to separate words in the lexer's API files.
102 virtual QStringList autoCompletionWordSeparators() const;
103
104 //! Returns the auto-indentation style. The default is 0 if the
105 //! language is block structured, or QsciScintilla::AiMaintain if not.
106 //!
107 //! \sa setAutoIndentStyle(), QsciScintilla::AiMaintain,
108 //! QsciScintilla::AiOpening, QsciScintilla::AiClosing
109 int autoIndentStyle();
110
111 //! Returns a space separated list of words or characters in a particular
112 //! style that define the end of a block for auto-indentation. The style
113 //! is returned via \a style.
114 virtual const char *blockEnd(int *style = 0) const;
115
116 //! Returns the number of lines prior to the current one when determining
117 //! the scope of a block when auto-indenting.
118 virtual int blockLookback() const;
119
120 //! Returns a space separated list of words or characters in a particular
121 //! style that define the start of a block for auto-indentation. The style
122 //! is returned via \a style.
123 virtual const char *blockStart(int *style = 0) const;
124
125 //! Returns a space separated list of keywords in a particular style that
126 //! define the start of a block for auto-indentation. The style is
127 //! returned via \a style.
128 virtual const char *blockStartKeyword(int *style = 0) const;
129
130 //! Returns the style used for braces for brace matching.
131 virtual int braceStyle() const;
132
133 //! Returns true if the language is case sensitive. The default is true.
134 virtual bool caseSensitive() const;
135
136 //! Returns the foreground colour of the text for style number \a style.
137 //! The default colour is that returned by defaultColor().
138 //!
139 //! \sa defaultColor(), paper()
140 virtual QColor color(int style) const;
141
142 //! Returns the end-of-line for style number \a style. The default is
143 //! false.
144 virtual bool eolFill(int style) const;
145
146 //! Returns the font for style number \a style. The default font is
147 //! that returned by defaultFont().
148 //!
149 //! \sa defaultFont()
150 virtual QFont font(int style) const;
151
152 //! Returns the view used for indentation guides.
153 virtual int indentationGuideView() const;
154
155 //! Returns the set of keywords for the keyword set \a set recognised
156 //! by the lexer as a space separated string. Keyword sets are numbered
157 //! from 1. 0 is returned if there is no such set.
158 virtual const char *keywords(int set) const;
159
160 //! Returns the number of the style used for whitespace. The default
161 //! implementation returns 0 which is the convention adopted by most
162 //! lexers.
163 virtual int defaultStyle() const;
164
165 //! Returns the descriptive name for style number \a style. For a valid
166 //! style number for this language a non-empty QString must be returned.
167 //! If the style number is invalid then an empty QString must be returned.
168 //! This is intended to be used in user preference dialogs.
169 virtual QString description(int style) const = 0;
170
171 //! Returns the background colour of the text for style number
172 //! \a style.
173 //!
174 //! \sa defaultPaper(), color()
175 virtual QColor paper(int style) const;
176
177 //! Returns the default text colour.
178 //!
179 //! \sa setDefaultColor()
180 QColor defaultColor() const;
181
182 //! Returns the default text colour for style number \a style.
183 virtual QColor defaultColor(int style) const;
184
185 //! Returns the default end-of-line for style number \a style. The default
186 //! is false.
187 virtual bool defaultEolFill(int style) const;
188
189 //! Returns the default font.
190 //!
191 //! \sa setDefaultFont()
192 QFont defaultFont() const;
193
194 //! Returns the default font for style number \a style.
195 virtual QFont defaultFont(int style) const;
196
197 //! Returns the default paper colour.
198 //!
199 //! \sa setDefaultPaper()
200 QColor defaultPaper() const;
201
202 //! Returns the default paper colour for style number \a style.
203 virtual QColor defaultPaper(int style) const;
204
205 //! Returns the QsciScintilla instance that the lexer is currently attached
206 //! to or 0 if it is unattached.
207 QsciScintilla *editor() const {return attached_editor;}
208
209 //! The current set of APIs is set to \a apis. If \a apis is 0 then any
210 //! existing APIs for this lexer are removed.
211 //!
212 //! \sa apis()
213 void setAPIs(QsciAbstractAPIs *apis);
214
215 //! The default text colour is set to \a c.
216 //!
217 //! \sa defaultColor(), color()
218 void setDefaultColor(const QColor &c);
219
220 //! The default font is set to \a f.
221 //!
222 //! \sa defaultFont(), font()
223 void setDefaultFont(const QFont &f);
224
225 //! The default paper colour is set to \a c.
226 //!
227 //! \sa defaultPaper(), paper()
228 void setDefaultPaper(const QColor &c);
229
230 //! \internal Set the QsciScintilla instance that the lexer is attached to.
231 virtual void setEditor(QsciScintilla *editor);
232
233 //! The colour, paper, font and end-of-line for each style number, and
234 //! all lexer specific properties are read from the settings \a qs.
235 //! \a prefix is prepended to the key of each entry. true is returned
236 //! if there was no error.
237 //!
238 //! \sa writeSettings(), QsciScintilla::setLexer()
239 bool readSettings(QSettings &qs,const char *prefix = "/Scintilla");
240
241 //! Causes all properties to be refreshed by emitting the
242 //! propertyChanged() signal as required.
243 virtual void refreshProperties();
244
245 //! Returns the number of style bits needed by the lexer. Normally this
246 //! should only be re-implemented by custom lexers. This is deprecated and
247 //! no longer has any effect.
248 virtual int styleBitsNeeded() const;
249
250 //! Returns the string of characters that comprise a word. The default is
251 //! 0 which implies the upper and lower case alphabetic characters and
252 //! underscore.
253 virtual const char *wordCharacters() const;
254
255 //! The colour, paper, font and end-of-line for each style number, and
256 //! all lexer specific properties are written to the settings \a qs.
257 //! \a prefix is prepended to the key of each entry. true is returned
258 //! if there was no error.
259 //!
260 //! \sa readSettings()
261 bool writeSettings(QSettings &qs,
262 const char *prefix = "/Scintilla") const;
263
264 public slots:
265 //! The auto-indentation style is set to \a autoindentstyle.
266 //!
267 //! \sa autoIndentStyle(), QsciScintilla::AiMaintain,
268 //! QsciScintilla::AiOpening, QsciScintilla::AiClosing
269 virtual void setAutoIndentStyle(int autoindentstyle);
270
271 //! The foreground colour for style number \a style is set to \a c. If
272 //! \a style is -1 then the colour is set for all styles.
273 virtual void setColor(const QColor &c,int style = -1);
274
275 //! The end-of-line fill for style number \a style is set to
276 //! \a eoffill. If \a style is -1 then the fill is set for all styles.
277 virtual void setEolFill(bool eoffill,int style = -1);
278
279 //! The font for style number \a style is set to \a f. If \a style is
280 //! -1 then the font is set for all styles.
281 virtual void setFont(const QFont &f,int style = -1);
282
283 //! The background colour for style number \a style is set to \a c. If
284 //! \a style is -1 then the colour is set for all styles.
285 virtual void setPaper(const QColor &c,int style = -1);
286
287 signals:
288 //! This signal is emitted when the foreground colour of style number
289 //! \a style has changed. The new colour is \a c.
290 void colorChanged(const QColor &c,int style);
291
292 //! This signal is emitted when the end-of-file fill of style number
293 //! \a style has changed. The new fill is \a eolfilled.
294 void eolFillChanged(bool eolfilled,int style);
295
296 //! This signal is emitted when the font of style number \a style has
297 //! changed. The new font is \a f.
298 void fontChanged(const QFont &f,int style);
299
300 //! This signal is emitted when the background colour of style number
301 //! \a style has changed. The new colour is \a c.
302 void paperChanged(const QColor &c,int style);
303
304 //! This signal is emitted when the value of the lexer property \a prop
305 //! needs to be changed. The new value is \a val.
306 void propertyChanged(const char *prop, const char *val);
307
308 protected:
309 //! The lexer's properties are read from the settings \a qs. \a prefix
310 //! (which has a trailing '/') should be used as a prefix to the key of
311 //! each setting. true is returned if there is no error.
312 //!
313 virtual bool readProperties(QSettings &qs,const QString &prefix);
314
315 //! The lexer's properties are written to the settings \a qs.
316 //! \a prefix (which has a trailing '/') should be used as a prefix to
317 //! the key of each setting. true is returned if there is no error.
318 //!
319 virtual bool writeProperties(QSettings &qs,const QString &prefix) const;
320
321 private:
322 struct StyleData {
323 QFont font;
324 QColor color;
325 QColor paper;
326 bool eol_fill;
327 };
328
329 struct StyleDataMap {
330 bool style_data_set;
331 QMap<int, StyleData> style_data;
332 };
333
334 StyleDataMap *style_map;
335
336 int autoIndStyle;
337 QFont defFont;
338 QColor defColor;
339 QColor defPaper;
340 QsciAbstractAPIs *apiSet;
341 QsciScintilla *attached_editor;
342
343 void setStyleDefaults() const;
344 StyleData &styleData(int style) const;
345
346 QsciLexer(const QsciLexer &);
347 QsciLexer &operator=(const QsciLexer &);
348 };
349
350 #endif