OpenMW
apps/opencs/view/world/scripthighlighter.hpp
Go to the documentation of this file.
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