QGIS API Documentation 4.1.0-Master (5bf3c20f3c9)
Loading...
Searching...
No Matches
qgscodeeditorshell.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgscodeeditorshell.cpp
3 ---------------------
4 Date : April 2023
5 Copyright : (C) 2023 by Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16
17#include "qgscodeeditorshell.h"
18
19#include <QFont>
20#include <QString>
21#include <QWidget>
22#include <Qsci/qscilexerjson.h>
23
24#include "moc_qgscodeeditorshell.cpp"
25
27 : QgsCodeEditor( parent, QString(), false, false, QgsCodeEditor::Flag::CodeFolding, mode )
28 , mLanguage( language )
29{
30 if ( mLanguage != Qgis::ScriptLanguage::Bash && mLanguage != Qgis::ScriptLanguage::Batch )
31 {
32#ifdef Q_OS_WIN
34#else
36#endif
37 }
38
39 if ( !parent )
40 {
41 switch ( mLanguage )
42 {
44 setTitle( tr( "Batch Editor" ) );
45 break;
47 setTitle( tr( "Bash Editor" ) );
48 break;
49
59 break;
60 }
61 }
62
64}
65
67{
68 return mLanguage;
69}
70
72{
73 QsciLexer *lexer = nullptr;
75 switch ( language )
76 {
79 break;
80
90#ifdef Q_OS_WIN
92#else
94#endif
95 break;
96 }
97
98 switch ( language )
99 {
101 lexer = new QgsQsciLexerBash();
102 break;
104 lexer = new QgsQsciLexerBatch();
105 break;
106
107 default:
108 return; // unreachable
109 }
110
111 QFont font = lexerFont();
112 lexer->setDefaultFont( font );
113 lexer->setFont( font, -1 );
114
115 switch ( language )
116 {
118 {
119 font.setItalic( true );
120 lexer->setFont( font, QgsQsciLexerBash::LineComment );
121
122 lexer->setDefaultColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Default ) );
125
126 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Default ), QgsQsciLexerBash::Default );
127 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Error ), QgsQsciLexerBash::Error );
128 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::CommentLine ), QgsQsciLexerBash::LineComment );
129 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Number ), QgsQsciLexerBash::Number );
130 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Keyword ), QgsQsciLexerBash::Keyword );
131 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::DoubleQuote ), QgsQsciLexerBash::String );
132 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::SingleQuote ), QgsQsciLexerBash::SingleQuotedString );
133 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Operator ), QgsQsciLexerBash::Operator );
134 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Identifier ), QgsQsciLexerBash::Identifier );
135 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Identifier ), QgsQsciLexerBash::ScalarVariable );
136 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Tag ), QgsQsciLexerBash::BacktickQuotedCommand );
137 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Operator ), QgsQsciLexerBash::HeredocDelimiter );
138 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::CommentBlock ), QgsQsciLexerBash::HeredocQuotedString );
139 break;
140 }
141
143 {
144 font.setItalic( true );
145 lexer->setFont( font, QgsQsciLexerBatch::Comment );
146
147 lexer->setDefaultColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Default ) );
150
151 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Default ), QgsQsciLexerBatch::Default );
152 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::CommentLine ), QgsQsciLexerBatch::Comment );
153 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Keyword ), QgsQsciLexerBatch::Word );
154 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Tag ), QgsQsciLexerBatch::Label );
155 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Decoration ), QgsQsciLexerBatch::Hide );
156 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Method ), QgsQsciLexerBatch::Command );
157 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::DoubleQuote ), QgsQsciLexerBatch::Identifier );
158 lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Operator ), QgsQsciLexerBatch::Operator );
159 break;
160 }
161
162 default:
163 break;
164 }
165
166
167 setLexer( lexer );
168 setLineNumbersVisible( true );
170}
171
173QgsQsciLexerBash::QgsQsciLexerBash( QObject *parent )
174 : QsciLexer( parent )
175{}
176
177const char *QgsQsciLexerBash::language() const
178{
179 return "bash";
180}
181
182const char *QgsQsciLexerBash::lexer() const
183{
184 return nullptr;
185}
186
187int QgsQsciLexerBash::lexerId() const
188{
189 return QsciScintillaBase::SCLEX_BASH;
190}
191
192QString QgsQsciLexerBash::description( int style ) const
193{
194 switch ( style )
195 {
196 case Default:
197 return tr( "Default" );
198 case Error:
199 return tr( "Error" );
200 case LineComment:
201 return tr( "Comment" );
202 case Number:
203 return tr( "Number" );
204 case Keyword:
205 return tr( "Keyword" );
206 case String:
207 return tr( "String" );
208 case SingleQuotedString:
209 return tr( "Single Quoted String" );
210 case Operator:
211 return tr( "Operator" );
212 case Identifier:
213 return tr( "Identifier" );
214 case ScalarVariable:
215 return tr( "Scale Variable" );
216 case Parameter:
217 return tr( "Parameter" );
218 case BacktickQuotedCommand:
219 return tr( "Backtick Quoted Command" );
220 case HeredocDelimiter:
221 return tr( "Heredoc Delimiter" );
222 case HeredocQuotedString:
223 return tr( "Heredoc Quoted String" );
224 }
225 return QString();
226}
227
228const char *QgsQsciLexerBash::keywords( int set ) const
229{
230 switch ( set )
231 {
232 case 1:
233 return "case cat do done echo else esac exit export fi find for if in set then while";
234 }
235
236 return nullptr;
237}
238
239
240QgsQsciLexerBatch::QgsQsciLexerBatch( QObject *parent )
241 : QsciLexer( parent )
242{}
243
244const char *QgsQsciLexerBatch::language() const
245{
246 return "batch";
247}
248
249const char *QgsQsciLexerBatch::lexer() const
250{
251 return nullptr;
252}
253
254int QgsQsciLexerBatch::lexerId() const
255{
256 return QsciScintillaBase::SCLEX_BATCH;
257}
258
259QString QgsQsciLexerBatch::description( int style ) const
260{
261 switch ( style )
262 {
263 case Default:
264 return tr( "Default" );
265 case Comment:
266 return tr( "Comment" );
267 case Word:
268 return tr( "Word" );
269 case Label:
270 return tr( "Label" );
271 case Hide:
272 return tr( "Hide" );
273 case Command:
274 return tr( "Command" );
275 case Operator:
276 return tr( "Operator" );
277 case Identifier:
278 return tr( "Identifier" );
279 }
280 return QString();
281}
282
283const char *QgsQsciLexerBatch::keywords( int set ) const
284{
285 switch ( set )
286 {
287 case 1:
288 return "call defined do echo else errorlevel exist exit for goto if in not set";
289 }
290
291 return nullptr;
292}
293
294
ScriptLanguage
Scripting languages.
Definition qgis.h:4622
@ QgisExpression
QGIS expressions.
Definition qgis.h:4624
@ Batch
Windows batch files.
Definition qgis.h:4631
@ JavaScript
JavaScript.
Definition qgis.h:4626
@ Bash
Bash scripts.
Definition qgis.h:4632
@ Unknown
Unknown/other language.
Definition qgis.h:4633
@ Python
Python.
Definition qgis.h:4628
void initializeLexer() override
Called when the dialect specific code lexer needs to be initialized (or reinitialized).
Qgis::ScriptLanguage language() const override
Returns the associated scripting language.
QgsCodeEditorShell(QWidget *parent=nullptr, QgsCodeEditor::Mode mode=QgsCodeEditor::Mode::ScriptEditor, Qgis::ScriptLanguage language=Qgis::ScriptLanguage::Unknown)
Constructor for QgsCodeEditorShell.
QgsCodeEditor::Mode mode() const
Returns the code editor mode.
Mode
Code editor modes.
void runPostLexerConfigurationTasks()
Performs tasks which must be run after a lexer has been set for the widget.
void setTitle(const QString &title)
Set the widget title.
QgsCodeEditor(QWidget *parent=nullptr, const QString &title=QString(), bool folding=false, bool margin=false, QgsCodeEditor::Flags flags=QgsCodeEditor::Flags(), QgsCodeEditor::Mode mode=QgsCodeEditor::Mode::ScriptEditor)
Construct a new code editor.
Flag
Flags controlling behavior of code editor.
void setLineNumbersVisible(bool visible)
Sets whether line numbers should be visible in the editor.
QFont lexerFont() const
Returns the font to use in the lexer.
QColor lexerColor(QgsCodeEditorColorScheme::ColorRole role) const
Returns the color to use in the lexer for the specified role.