diff options
Diffstat (limited to 'libtemplate/xmlparser.c')
| -rw-r--r-- | libtemplate/xmlparser.c | 643 |
1 files changed, 0 insertions, 643 deletions
diff --git a/libtemplate/xmlparser.c b/libtemplate/xmlparser.c deleted file mode 100644 index 8db3d3d..0000000 --- a/libtemplate/xmlparser.c +++ /dev/null @@ -1,643 +0,0 @@ -#include "xmlparser.h" -#include "../config.h" -#include "../libcore/helpers.h" - -using namespace std; - -cXmlParser::cXmlParser(void) { - view = NULL; - globals = NULL; - skinSetup = NULL; -} - -cXmlParser::~cXmlParser() { -} - -/********************************************************************* -* PUBLIC Functions -*********************************************************************/ -bool cXmlParser::ReadView(cTemplateView *view, string xmlFile) { - if (!view) - return false; - this->view = view; - string xmlPath = GetPath(xmlFile); - if (! ReadXMLFile(xmlPath.c_str()) ) - return false; - if (! Validate() ) - return false; - if (! SetDocument() ) - return false; - if (! CheckNodeName(view->GetViewName()) ) - return false; - return true; -} - -bool cXmlParser::ParseView(void) { - if (!view) - return false; - - vector<stringpair> rootAttribs = ParseAttributes(); - ValidateAttributes(NodeName(), rootAttribs); - view->SetParameters(rootAttribs); - - if (!LevelDown()) - return false; - - do { - - if (view->ValidSubView(NodeName())) { - ParseSubView(); - } else if (view->ValidViewElement(NodeName())) { - ParseViewElement(); - } else if (view->ValidViewList(NodeName())) { - ParseViewList(); - } else if (view->ValidViewGrid(NodeName())) { - ParseGrid(); - } else if (CheckNodeName("tab")) { - ParseViewTab(view); - } else { - return false; - } - - } while (NextNode()); - - return true; - -} - -bool cXmlParser::ReadPluginView(string plugName, int templateNumber, string templateName) { - string xmlPath = GetPath(templateName); - DeleteDocument(); - if (! ReadXMLFile(xmlPath.c_str()) ) - return false; - if (! Validate() ) - return false; - if (! SetDocument() ) - return false; - return true; -} - -bool cXmlParser::ParsePluginView(string plugName, int templateNumber) { - cTemplateView *plugView = new cTemplateViewMenu(); - view->AddPluginView(plugName, templateNumber, plugView); - - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - plugView->SetParameters(attribs); - - if (!LevelDown()) - return false; - do { - - if (plugView->ValidViewElement(NodeName())) { - ParseViewElement(plugView); - } else if (plugView->ValidViewList(NodeName())) { - ParseViewList(plugView); - } else if (CheckNodeName("tab")) { - ParseViewTab(plugView); - } else { - return false; - } - - } while (NextNode()); - - return true; -} - -bool cXmlParser::ReadGlobals(cGlobals *globals, string xmlFile) { - this->globals = globals; - string xmlPath = GetPath(xmlFile); - DeleteDocument(); - if (! ReadXMLFile(xmlPath.c_str()) ) - return false; - if (! Validate() ) - return false; - if (! SetDocument() ) - return false; - if (! CheckNodeName("globals") ) - return false; - return true; -} - -bool cXmlParser::ParseGlobals(void) { - if (!LevelDown()) - return false; - do { - if (CheckNodeName("colors")) { - ParseGlobalColors(); - } else if (CheckNodeName("variables")) { - ParseGlobalVariables(); - } else if (CheckNodeName("fonts")) { - ParseGlobalFonts(); - } else if (CheckNodeName("translations")) { - ParseTranslations(); - } - } while (NextNode()); - return true; -} - -bool cXmlParser::ReadSkinSetup(cSkinSetup *skinSetup, string xmlFile) { - this->skinSetup = skinSetup; - if (! ReadXMLFile(xmlFile.c_str()) ) - return false; - if (! Validate() ) - return false; - if (! SetDocument() ) - return false; - if (! CheckNodeName("setup") ) - return false; - return true; -} - -bool cXmlParser::ParseSkinSetup(string skin) { - if (!LevelDown()) - return false; - do { - if (CheckNodeName("menu")) { - ParseSetupMenu(); - } else if (CheckNodeName("translations")) { - ParseTranslations(); - } - } while (NextNode()); - return true; -} -/********************************************************************* -* PRIVATE Functions -*********************************************************************/ - -bool cXmlParser::ParseSubView(void) { - if (!view) - return false; - - cTemplateView *subView = new cTemplateViewMenu(); - view->AddSubView(NodeName(), subView); - - vector<pair<string, string> > subViewAttribs = ParseAttributes(); - ValidateAttributes(NodeName(), subViewAttribs); - subView->SetParameters(subViewAttribs); - - if (!LevelDown()) - return false; - do { - - if (subView->ValidViewElement(NodeName())) { - ParseViewElement(subView); - } else if (subView->ValidViewList(NodeName())) { - ParseViewList(subView); - } else if (CheckNodeName("tab")) { - ParseViewTab(subView); - } else { - return false; - } - - } while (NextNode()); - LevelUp(); - return true; - -} -void cXmlParser::ParseViewElement(cTemplateView *subView) { - if (!view) - return; - - const char *viewElementName = NodeName(); - vector<stringpair> attributes = ParseAttributes(); - ValidateAttributes("viewelement", attributes); - - if (!LevelDown()) - return; - - cTemplateViewElement *viewElement = new cTemplateViewElement(); - viewElement->SetParameters(attributes); - - do { - if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) { - esyslog("skindesigner: invalid tag \"%s\" in viewelement", NodeName()); - continue; - } - cTemplatePixmapNode *pix = NULL; - if (CheckNodeName("area") || CheckNodeName("areascroll")) { - pix = ParseArea(); - } else { - pix = ParseAreaContainer(); - } - pix->SetGlobals(globals); - viewElement->AddPixmap(pix); - } while (NextNode()); - LevelUp(); - - if (subView) - subView->AddViewElement(viewElementName, viewElement); - else - view->AddViewElement(viewElementName, viewElement); -} - -void cXmlParser::ParseViewList(cTemplateView *subView) { - if (!view) - return; - - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - - cTemplateViewList *viewList = new cTemplateViewList(); - viewList->SetGlobals(globals); - viewList->SetParameters(attribs); - - if (!LevelDown()) - return; - - do { - if (CheckNodeName("currentelement")) { - - cTemplateViewElement *currentElement = new cTemplateViewElement(); - vector<stringpair> attribsCur = ParseAttributes(); - ValidateAttributes(NodeName(), attribsCur); - currentElement->SetGlobals(globals); - currentElement->SetParameters(attribsCur); - if (!LevelDown()) - continue; - do { - if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) { - esyslog("skindesigner: invalid tag \"%s\" in viewelement", NodeName()); - continue; - } - cTemplatePixmapNode *pix = NULL; - if (CheckNodeName("area") || CheckNodeName("areascroll")) { - pix = ParseArea(); - } else { - pix = ParseAreaContainer(); - } - currentElement->AddPixmap(pix); - } while (NextNode()); - LevelUp(); - viewList->AddCurrentElement(currentElement); - - } else if (CheckNodeName("listelement")) { - - cTemplateViewElement *listElement = new cTemplateViewElement(); - vector<stringpair> attribsList = ParseAttributes(); - ValidateAttributes(NodeName(), attribsList); - listElement->SetGlobals(globals); - listElement->SetParameters(attribsList); - if (!LevelDown()) - return; - do { - if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) { - esyslog("skindesigner: invalid tag \"%s\" in viewelement", NodeName()); - continue; - } - cTemplatePixmapNode *pix = NULL; - if (CheckNodeName("area") || CheckNodeName("areascroll")) { - pix = ParseArea(); - } else { - pix = ParseAreaContainer(); - } - listElement->AddPixmap(pix); - } while (NextNode()); - LevelUp(); - viewList->AddListElement(listElement); - } - - } while (NextNode()); - LevelUp(); - - if (subView) - subView->AddViewList(NodeName(), viewList); - else - view->AddViewList(NodeName(), viewList); -} - -void cXmlParser::ParseViewTab(cTemplateView *subView) { - if (!view || !subView) - return; - - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - - cTemplateViewTab *viewTab = new cTemplateViewTab(); - viewTab->SetGlobals(globals); - viewTab->SetParameters(attribs); - viewTab->SetScrolling(); - ParseFunctionCalls(viewTab); - subView->AddViewTab(viewTab); -} - -void cXmlParser::ParseGrid(void) { - if (!view) - return; - - vector<stringpair> attributes = ParseAttributes(); - ValidateAttributes(NodeName(), attributes); - - if (!LevelDown()) - return; - - cTemplateViewGrid *viewGrid = new cTemplateViewGrid(); - viewGrid->SetParameters(attributes); - - do { - - if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) { - esyslog("skindesigner: invalid tag \"%s\" in grid", NodeName()); - continue; - } - cTemplatePixmapNode *pix = NULL; - if (CheckNodeName("area") || CheckNodeName("areascroll")) { - pix = ParseArea(); - } else { - pix = ParseAreaContainer(); - } - pix->SetGlobals(globals); - viewGrid->AddPixmap(pix); - } while (NextNode()); - LevelUp(); - - view->AddGrid(viewGrid); -} - -cTemplatePixmap *cXmlParser::ParseArea(void) { - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - - cTemplatePixmap *pix = new cTemplatePixmap(); - if (CheckNodeName("areascroll")) { - pix->SetScrolling(); - } - pix->SetParameters(attribs); - ParseFunctionCalls(pix); - return pix; -} - -cTemplatePixmapContainer *cXmlParser::ParseAreaContainer(void) { - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - - cTemplatePixmapContainer *pixContainer = new cTemplatePixmapContainer(); - pixContainer->SetParameters(attribs); - - if (!LevelDown()) - return pixContainer; - do { - if (!CheckNodeName("area") && !CheckNodeName("areascroll")) { - esyslog("skindesigner: invalid tag \"%s\" in areacontainer", NodeName()); - continue; - } - cTemplatePixmap *pix = ParseArea(); - pixContainer->AddPixmap(pix); - } while (NextNode()); - LevelUp(); - return pixContainer; -} - -void cXmlParser::ParseFunctionCalls(cTemplatePixmap *pix) { - if (!view) - return; - if (!LevelDown()) - return; - do { - if (CheckNodeName("loop")) { - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - cTemplateLoopFunction *loopFunc = new cTemplateLoopFunction(); - loopFunc->SetParameters(attribs); - ParseLoopFunctionCalls(loopFunc); - pix->AddLoopFunction(loopFunc); - } else if (view->ValidFunction(NodeName())) { - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - pix->AddFunction(NodeName(), attribs); - } - - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::ParseLoopFunctionCalls(cTemplateLoopFunction *loopFunc) { - if (!view) - return; - if (!LevelDown()) - return; - do { - if (view->ValidFunction(NodeName())) { - vector<stringpair> attribs = ParseAttributes(); - ValidateAttributes(NodeName(), attribs); - loopFunc->AddFunction(NodeName(), attribs); - } - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::ParseGlobalColors(void) { - if (!LevelDown()) - return; - do { - if (!CheckNodeName("color")) { - continue; - } - string attributeName = "name"; - string colorName = ""; - string colorValue = ""; - bool ok = GetAttribute(attributeName, colorName); - if (ok) { - ok = GetNodeValue(colorValue); - if (ok) - InsertColor(colorName, colorValue); - } - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::InsertColor(string name, string value) { - if (value.size() != 8) - return; - std::stringstream str; - str << value; - tColor colVal; - str >> std::hex >> colVal; - globals->AddColor(name, colVal); -} - -void cXmlParser::ParseGlobalVariables(void) { - if (!LevelDown()) - return; - do { - if (!CheckNodeName("var")) { - continue; - } - string attributeName = "name"; - string attributeType = "type"; - string varName = ""; - string varType = ""; - string varValue = ""; - - bool ok1 = GetAttribute(attributeName, varName); - bool ok2 = GetAttribute(attributeType, varType); - - if (ok1 && ok2) { - bool ok = GetNodeValue(varValue); - if (ok) - InsertVariable(varName, varType, varValue); - } - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::InsertVariable(string name, string type, string value) { - if (!type.compare("int")) { - int val = atoi(value.c_str()); - globals->AddInt(name, val); - } else if (!type.compare("double")) { - globals->AddDouble(name, value); - } else if (!type.compare("string")) { - globals->AddString(name, value); - } -} - -void cXmlParser::ParseGlobalFonts(void) { - if (!LevelDown()) - return; - do { - if (!CheckNodeName("font")) { - continue; - } - string attributeName = "name"; - string fontName = ""; - string fontValue = ""; - - bool ok = GetAttribute(attributeName, fontName); - if (ok) { - ok = GetNodeValue(fontValue); - if (ok) { - globals->AddFont(fontName, fontValue); - } - } - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::ParseTranslations(void) { - if (!LevelDown()) - return; - do { - if (!CheckNodeName("token")) { - continue; - } - string attributeName = "name"; - string tokenName = ""; - - if (!GetAttribute(attributeName, tokenName)) - continue; - - if (!LevelDown()) - continue; - - stringmap tokenTranslations; - do { - if (!CheckNodeName("trans")) { - continue; - } - string attributeName = "lang"; - string language = ""; - if (!GetAttribute(attributeName, language)) - continue; - string translation = ""; - if (!GetNodeValue(translation)) - continue; - tokenTranslations.insert(stringpair(language, translation)); - } while (NextNode()); - LevelUp(); - - if (globals) { - globals->AddTranslation(tokenName, tokenTranslations); - } else if (skinSetup) { - skinSetup->SetTranslation(tokenName, tokenTranslations); - } - - } while (NextNode()); - LevelUp(); -} - -void cXmlParser::ParseSetupMenu(void) { - if (!skinSetup) - return; - if (!LevelDown()) - return; - do { - if (CheckNodeName("parameter")) { - ParseSetupParameter(); - } else if (CheckNodeName("submenu")) { - string attributeName = "name"; - string subMenuName = ""; - string attributeDisplayText = "displaytext"; - string subDisplayText = ""; - GetAttribute(attributeName, subMenuName); - GetAttribute(attributeDisplayText, subDisplayText); - skinSetup->SetSubMenu(subMenuName, subDisplayText); - ParseSetupMenu(); - } - } while (NextNode()); - skinSetup->SubMenuDone(); - LevelUp(); -} - -void cXmlParser::ParseSetupParameter(void) { - if (!skinSetup) - return; - string attributeType = "type"; - string paramType = ""; - string attributeName = "name"; - string paramName = ""; - string attributeDisplayText = "displaytext"; - string paramDisplayText = ""; - string attributeHelpText = "helptext"; - string paramHelpText = ""; - string attributeMin = "min"; - string paramMin = ""; - string attributeMax = "max"; - string paramMax = ""; - string paramValue = ""; - string attributeOptions = "options"; - string paramOptions=""; - - GetAttribute(attributeType, paramType); - GetAttribute(attributeName, paramName); - GetAttribute(attributeDisplayText, paramDisplayText); - GetAttribute(attributeHelpText, paramHelpText); - GetAttribute(attributeMin, paramMin); - GetAttribute(attributeMax, paramMax); - GetAttribute(attributeOptions, paramOptions); - GetNodeValue(paramValue); - - skinSetup->SetParameter(paramType, paramName, paramDisplayText, paramHelpText, paramMin, paramMax, paramValue, paramOptions); -} - -void cXmlParser::ValidateAttributes(const char *nodeName, vector<stringpair> &attributes) { - bool repeat = true; - while (repeat) { - repeat = false; - for (vector<stringpair>::iterator it = attributes.begin(); it != attributes.end(); it++) { - string attributeName = (*it).first; - if (!view->ValidAttribute(nodeName, attributeName.c_str())) { - attributes.erase(it); - repeat = true; - break; - } - } - } -} - -string cXmlParser::GetPath(string xmlFile) { - string activeSkin = Setup.OSDSkin; - string activeTheme = Setup.OSDTheme; - string path = ""; - if (!xmlFile.compare("globals.xml")) { - path = *cString::sprintf("%s%s/%s", *config.GetSkinPath(activeSkin), activeSkin.c_str(), xmlFile.c_str()); - } else if (!xmlFile.compare("theme.xml")) { - path = *cString::sprintf("%s%s/themes/%s/%s", *config.GetSkinPath(activeSkin), activeSkin.c_str(), activeTheme.c_str(), xmlFile.c_str()); - } else if (!xmlFile.compare("setup.xml")) { - path = *cString::sprintf("%s%s/%s", *config.GetSkinPath(activeSkin), activeSkin.c_str(), xmlFile.c_str()); - } else { - path = *cString::sprintf("%s%s/xmlfiles/%s", *config.GetSkinPath(activeSkin), activeSkin.c_str(), xmlFile.c_str()); - } - return path; -} - |
