diff options
Diffstat (limited to 'kommander/widget/parserdata.cpp')
-rw-r--r-- | kommander/widget/parserdata.cpp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/kommander/widget/parserdata.cpp b/kommander/widget/parserdata.cpp new file mode 100644 index 00000000..778be3d6 --- /dev/null +++ b/kommander/widget/parserdata.cpp @@ -0,0 +1,134 @@ +/*************************************************************************** + parserdata.cpp - Parser data: keywords, functions etc. + ------------------- + copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org> + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "parserdata.h" +using namespace Parse; + +KeywordGroup ParserData::keywordGroup(Keyword k) const +{ + if (m_groups.contains(k)) + return m_groups[k]; + else + return GroupMisc; +} + +Keyword ParserData::stringToKeyword(const QString& s) const +{ + QString k = s.lower(); + if (m_keywords.contains(k)) + return m_keywords[k]; + else + return Variable; +} + +QString ParserData::keywordToString(Parse::Keyword k) const +{ + for (QMapConstIterator<QString, Keyword> it = m_keywords.begin(); it != m_keywords.end(); ++it) + if (it.data() == k) + return it.key(); + return QString(); +} + +bool ParserData::registerFunction(const QString& name, Function f) +{ + m_functions[name.lower()] = f; + return true; +} + +ParserData::ParserData() +{ + m_keywords["for"] = For; + m_keywords["foreach"] = Foreach; + m_keywords["in"] = In; + m_keywords["end"] = End; + m_keywords["if"] = If; + m_keywords["then"] = Then; + m_keywords["else"] = Else; + m_keywords["elseif"] = Elseif; + m_keywords["endif"] = Endif; + m_keywords["{"] = LeftCurlyBrace; + m_keywords["}"] = RightCurlyBrace; + m_keywords["switch"] = Switch; + m_keywords["case"] = Case; + m_keywords["while"] = While; + m_keywords["to"] = To; + m_keywords["step"] = Step; + m_keywords["do"] = Do; + m_keywords["break"] = Break; + m_keywords["continue"] = Continue; + m_keywords["exit"] = Exit; + m_keywords["."] = Dot; + m_keywords[";"] = Semicolon; + m_keywords[","] = Comma; + m_keywords["="] = Assign; + m_keywords["<"] = Less; + m_keywords["<="] = LessEqual; + m_keywords[">"] = Greater; + m_keywords[">="] = GreaterEqual; + m_keywords["=="] = Equal; + m_keywords["!="] = NotEqual; + m_keywords["<>"] = NotEqual; + m_keywords["not"] = Not; + m_keywords["!"] = Not; + m_keywords["and"] = And; + m_keywords["&&"] = And; + m_keywords["or"] = Or; + m_keywords["||"] = Or; + m_keywords["false"] = False; + m_keywords["true"] = True; + m_keywords["("] = LeftParenthesis; + m_keywords[")"] = RightParenthesis; + m_keywords["["] = LeftBracket; + m_keywords["]["] = DoubleBracket; + m_keywords["]"] = RightBracket; + m_keywords["+"] = Plus; + m_keywords["-"] = Minus; + m_keywords["*"] = Multiply; + m_keywords["/"] = Divide; + m_keywords["%"] = Mod; + m_keywords["+="] = PlusEqual; + m_keywords["-="] = MinusEqual; + m_keywords["++"] = Increment; + m_keywords["--"] = Decrement; + m_keywords["mod"] = Mod; + m_keywords["with"] = ArrKeyVal; + + m_groups[Less] = GroupComparison; + m_groups[LessEqual] = GroupComparison; + m_groups[Equal] = GroupComparison; + m_groups[NotEqual] = GroupComparison; + m_groups[Greater] = GroupComparison; + m_groups[GreaterEqual] = GroupComparison; + + m_groups[Plus] = GroupAdd; + m_groups[Minus] = GroupAdd; + m_groups[Multiply] = GroupMultiply; + m_groups[Divide] = GroupMultiply; + m_groups[Mod] = GroupMultiply; + + registerStandardFunctions(); +} + +bool ParserData::isFunction(const QString& name) const +{ + return m_functions.contains(name.lower()); +} + +const Function& ParserData::function(const QString& name) const +{ + return m_functions[name.lower()]; +} + |