1 // This defines the interface to the QsciLexerJSON class.
2 //
3 // Copyright (c) 2021 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 QSCILEXERJSON_H
22 #define QSCILEXERJSON_H
23 
24 #include <QObject>
25 
26 #include <Qsci/qsciglobal.h>
27 #include <Qsci/qscilexer.h>
28 
29 
30 //! \brief The QsciLexerJSON class encapsulates the Scintilla JSON lexer.
31 class QSCINTILLA_EXPORT QsciLexerJSON : public QsciLexer
32 {
33     Q_OBJECT
34 
35 public:
36     //! This enum defines the meanings of the different styles used by the
37     //! JSON lexer.
38     enum {
39         //! The default.
40         Default = 0,
41 
42         //! A number.
43         Number = 1,
44 
45         //! A string.
46         String = 2,
47 
48         //! An unclosed string.
49         UnclosedString = 3,
50 
51         //! A property.
52         Property = 4,
53 
54         //! An escape sequence.
55         EscapeSequence = 5,
56 
57         //! A line comment.
58         CommentLine = 6,
59 
60         //! A block comment.
61         CommentBlock = 7,
62 
63         //! An operator.
64         Operator = 8,
65 
66         //! An Internationalised Resource Identifier (IRI).
67         IRI = 9,
68 
69         //! A JSON-LD compact IRI.
70         IRICompact = 10,
71 
72         //! A JSON keyword.
73         Keyword = 11,
74 
75         //! A JSON-LD keyword.
76         KeywordLD = 12,
77 
78         //! A parsing error.
79         Error = 13,
80     };
81 
82     //! Construct a QsciLexerJSON with parent \a parent.  \a parent is
83     //! typically the QsciScintilla instance.
84     QsciLexerJSON(QObject *parent = 0);
85 
86     //! Destroys the QsciLexerJSON instance.
87     virtual ~QsciLexerJSON();
88 
89     //! Returns the name of the language.
90     const char *language() const;
91 
92     //! Returns the name of the lexer.  Some lexers support a number of
93     //! languages.
94     const char *lexer() const;
95 
96     //! Returns the foreground colour of the text for style number \a style.
97     //!
98     //! \sa defaultPaper()
99     QColor defaultColor(int style) const;
100 
101     //! Returns the end-of-line fill for style number \a style.
102     bool defaultEolFill(int style) const;
103 
104     //! Returns the font for style number \a style.
105     QFont defaultFont(int style) const;
106 
107     //! Returns the background colour of the text for style number \a style.
108     //!
109     //! \sa defaultColor()
110     QColor defaultPaper(int style) const;
111 
112     //! Returns the set of keywords for the keyword set \a set recognised
113     //! by the lexer as a space separated string.
114     const char *keywords(int set) const;
115 
116     //! Returns the descriptive name for style number \a style.  If the
117     //! style is invalid for this language then an empty QString is returned.
118     //! This is intended to be used in user preference dialogs.
119     QString description(int style) const;
120 
121     //! Causes all properties to be refreshed by emitting the
122     //! propertyChanged() signal as required.
123     void refreshProperties();
124 
125     //! If \a highlight is true then line and block comments will be
126     //! highlighted.  The default is true.
127     //!
128     //! \sa hightlightComments()
129     void setHighlightComments(bool highlight);
130 
131     //! Returns true if line and block comments are highlighted
132     //!
133     //! \sa setHightlightComments()
highlightComments()134     bool highlightComments() const {return allow_comments;}
135 
136     //! If \a highlight is true then escape sequences in strings are
137     //! highlighted.  The default is true.
138     //!
139     //! \sa highlightEscapeSequences()
140     void setHighlightEscapeSequences(bool highlight);
141 
142     //! Returns true if escape sequences in strings are highlighted.
143     //!
144     //! \sa setHighlightEscapeSequences()
highlightEscapeSequences()145     bool highlightEscapeSequences() const {return escape_sequence;}
146 
147     //! If \a fold is true then trailing blank lines are included in a fold
148     //! block. The default is true.
149     //!
150     //! \sa foldCompact()
151     void setFoldCompact(bool fold);
152 
153     //! Returns true if trailing blank lines are included in a fold block.
154     //!
155     //! \sa setFoldCompact()
foldCompact()156     bool foldCompact() const {return fold_compact;}
157 
158 protected:
159     //! The lexer's properties are read from the settings \a qs.  \a prefix
160     //! (which has a trailing '/') should be used as a prefix to the key of
161     //! each setting.  true is returned if there is no error.
162     //!
163     bool readProperties(QSettings &qs,const QString &prefix);
164 
165     //! The lexer's properties are written to the settings \a qs.
166     //! \a prefix (which has a trailing '/') should be used as a prefix to
167     //! the key of each setting.  true is returned if there is no error.
168     //!
169     bool writeProperties(QSettings &qs,const QString &prefix) const;
170 
171 private:
172 	void setAllowCommentsProp();
173 	void setEscapeSequenceProp();
174 	void setCompactProp();
175 
176 	bool allow_comments;
177 	bool escape_sequence;
178 	bool fold_compact;
179 
180     QsciLexerJSON(const QsciLexerJSON &);
181     QsciLexerJSON &operator=(const QsciLexerJSON &);
182 };
183 
184 #endif
185