/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * xmlparser.cc * * Wed Mar 21 09:15:51 CET 2012 * Copyright 2012 Jonas Suhr Christensen * jsc@umbraculum.org ****************************************************************************/ /* * This file is part of Munia. * * Munia 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. * * Munia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Munia; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "xmlparser.h" #include "stdio.h" #include "xml_encode_decode.h" XmlParser::XmlParser(NodeTree *t) : tree(t) { } XmlParser::~XmlParser() { } void XmlParser::characterData(const std::string &data) { cdata += data; } void XmlParser::startTag(std::string name, attributes_t &attr) { if(name == "nodetree") { tree->nextid = atoi(xml_decode(attr["nextid"]).c_str()); } if(name == "node") { nodeid_t id = atoi(xml_decode(attr["id"]).c_str()); Node* parent = NULL; if(parents.size() != 0) { parent = tree->id2node.at(parents.top()); } node = tree->createNode(id); tree->insertChild(parent, node, -1); // just append, the xml is ordered } if(name == "children") { parents.push(node->id); } if(name == "attribute") { attr_name = attr["name"]; } cdata = ""; } void XmlParser::endTag(std::string name) { if(name == "node") { } if(name == "children") { parents.pop(); } if(name == "attribute") { if(attr_name != "dragged") // do not persist 'dragged' attribute { node->data.attributes[attr_name] = cdata; } } }