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