#ifndef _ENGINE_H
#define _ENGINE_H
#define DBL_QUOTES 0x22
#define SIN_QUOTES 0x27
#define BCK_QUOTES 0x60
#define Yes true
#define No false
#include "cffile.h"
#include "theme.h"
#include <vector>
#include <string>
using namespace std;
class Engine {
public:
virtual ~Engine() {IO.close();}
void init_switches();
void pre_parse();
void makeMargin();
void makeAnchor();
bool abortParse();
bool abortColour(int index);
bool isInsideIt(int index, string start, string end);
bool isInsideTag(int index);
bool isNotWord(int index);
void eraseTags(int start, int fin);
void parsePreProc();
void parseSymbol();
bool colourSymbol(int start, int end);
bool isSymbol(char c);
void parseLabel();
void colourLabel(int start, int end);
void parseNum();
bool colourNum(int start, int end);
void parseString(char quotetype, bool &inside);
void colourString(int index, bool &inside, string cssclass);
void parseBigComment(string start, string end, bool &inside);
void parseKeys();
void colourKeys(int index, string key, string cssclass);
bool isKey(int start, int end) const;
int noCaseFind(string search, int index);
void parseVariable(string var);
void colourVariable(int index);
void parseComment(string cmnt);
void colourComment(int index);
void parseCharZeroComment(char zchar);
void loadKeys();
void doParsing();
void begHtml(string name);
void endHtml();
void hyperTagMe();
void hyperLinkMe();
void hyperNameMe();
void hyperIncludeMe();
int getLineCount() {return lncount;}
virtual
void fill() = 0;
void toggleBigtab() {opt_bigtab = !opt_bigtab;}
void toggleWebcpp() {opt_webcpp = !opt_webcpp;}
void toggleHypinc() {opt_hypinc = !opt_hypinc;}
void toggleFollow() {opt_follow = !opt_follow;}
void toggleAnchor() {opt_anchor = !opt_anchor;}
void toggleNumber() {opt_number = !opt_number;}
void toggleExtcss() {opt_extcss = !opt_extcss;}
void setTabWidth(string width);
protected:
bool opt_bigtab;
bool opt_webcpp;
bool opt_hypinc;
bool opt_follow;
bool opt_number;
bool opt_extcss;
bool opt_anchor;
protected:
bool doStrings;
bool doSymbols;
bool doNumbers;
bool doKeywords;
bool doCaseKeys;
bool doLabels;
bool doPreProc;
bool doScalars;
bool doArrays;
bool doHashes;
bool doHtmlTags;
bool doCComnt;
bool doHskComnt;
bool doHtmComnt;
bool doPasComnt;
bool doBigComnt;
bool doCinComnt;
bool doAdaComnt;
bool doUnxComnt;
bool doAsmComnt;
bool doRemComnt;
bool doFtnComnt;
bool doTclComnt;
bool doAspComnt;
bool doBatComnt;
public:
CFfile IO;
Theme Scs2;
protected:
int lncount;
int tabwidth;
string tw;
string buffer;
vector<string> keys;
vector<string> types;
bool inDblQuotes;
bool inSinQuotes;
bool inBckQuotes;
bool inHtmTags;
bool inComment;
bool endComment;
};
#endif