OpenMW
|
00001 #ifndef CSV_WORLD_SCRIPTHIGHLIGHTER_H 00002 #define CSV_WORLD_SCRIPTHIGHLIGHTER_H 00003 00004 #include <map> 00005 00006 #include <QSyntaxHighlighter> 00007 00008 #include <components/compiler/nullerrorhandler.hpp> 00009 #include <components/compiler/parser.hpp> 00010 #include <components/compiler/extensions.hpp> 00011 00012 #include "../../model/world/scriptcontext.hpp" 00013 00014 namespace CSVWorld 00015 { 00016 class ScriptHighlighter : public QSyntaxHighlighter, private Compiler::Parser 00017 { 00018 public: 00019 00020 enum Type 00021 { 00022 Type_Int, 00023 Type_Float, 00024 Type_Name, 00025 Type_Keyword, 00026 Type_Special, 00027 Type_Comment, 00028 Type_Id 00029 }; 00030 00031 private: 00032 00033 Compiler::NullErrorHandler mErrorHandler; 00034 Compiler::Extensions mExtensions; 00035 CSMWorld::ScriptContext mContext; 00036 std::map<Type, QTextCharFormat> mScheme; 00037 00038 private: 00039 00040 virtual bool parseInt (int value, const Compiler::TokenLoc& loc, 00041 Compiler::Scanner& scanner); 00044 00045 virtual bool parseFloat (float value, const Compiler::TokenLoc& loc, 00046 Compiler::Scanner& scanner); 00049 00050 virtual bool parseName (const std::string& name, 00051 const Compiler::TokenLoc& loc, Compiler::Scanner& scanner); 00054 00055 virtual bool parseKeyword (int keyword, const Compiler::TokenLoc& loc, 00056 Compiler::Scanner& scanner); 00059 00060 virtual bool parseSpecial (int code, const Compiler::TokenLoc& loc, 00061 Compiler::Scanner& scanner); 00064 00065 virtual bool parseComment (const std::string& comment, const Compiler::TokenLoc& loc, 00066 Compiler::Scanner& scanner); 00069 00070 virtual void parseEOF (Compiler::Scanner& scanner); 00072 00073 void highlight (const Compiler::TokenLoc& loc, Type type); 00074 00075 public: 00076 00077 ScriptHighlighter (const CSMWorld::Data& data, QTextDocument *parent); 00078 00079 virtual void highlightBlock (const QString& text); 00080 00081 void invalidateIds(); 00082 }; 00083 } 00084 00085 #endif