diff options
| author | Bob Jamison <ishmalius@gmail.com> | 2006-04-12 13:25:21 +0000 |
|---|---|---|
| committer | ishmal <ishmal@users.sourceforge.net> | 2006-04-12 13:25:21 +0000 |
| commit | 6fd9af13a8614a4b95e8be1518e745915ef8bb56 (patch) | |
| tree | bf94fa5f7c3a7b2f581f3e7cf2522bf7c2d4b6c9 /src/dom/xmlwriter.cpp | |
| parent | Removed file/folder for ishmal (diff) | |
| download | inkscape-6fd9af13a8614a4b95e8be1518e745915ef8bb56.tar.gz inkscape-6fd9af13a8614a4b95e8be1518e745915ef8bb56.zip | |
Add new rearranged /dom directory
(bzr r479)
Diffstat (limited to 'src/dom/xmlwriter.cpp')
| -rw-r--r-- | src/dom/xmlwriter.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/dom/xmlwriter.cpp b/src/dom/xmlwriter.cpp new file mode 100644 index 000000000..08fd653e7 --- /dev/null +++ b/src/dom/xmlwriter.cpp @@ -0,0 +1,198 @@ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + + +#include <stdio.h> +#include <stdarg.h> + +#include "xmlwriter.h" + +namespace org +{ +namespace w3c +{ +namespace dom +{ + + + +//######################################################################### +//# O U T P U T +//######################################################################### + +/** + * + */ +void XmlWriter::spaces() +{ + for (int i=0 ; i<indent ; i++) + { + buf.push_back(' '); + } +} + +/** + * + */ +void XmlWriter::po(char *fmt, ...) +{ + char str[257]; + va_list args; + va_start(args, fmt); + vsnprintf(str, 256, fmt, args); + va_end(args) ; + + buf.append(str); +} + + +void XmlWriter::pos(const DOMString &str) +{ + buf.append(str); +} + +/** + * + */ +void XmlWriter::write(const Node *nodeArg) +{ + Node *node = (Node *)nodeArg; + + indent+=2; + + NamedNodeMap *attributes = node->getAttributes(); + int nrAttrs = attributes->getLength(); + + //### Start open tag + spaces(); + po("<"); + pos(node->getNodeName()); + if (nrAttrs>0) + po("\n"); + + //### Attributes + for (int i=0 ; i<nrAttrs ; i++) + { + Node *attr = attributes->item(i); + spaces(); + pos(attr->getNodeName()); + po("=\""); + pos(attr->getNodeValue()); + po("\"\n"); + } + + //### Finish open tag + if (nrAttrs>0) + spaces(); + po(">\n"); + + //### Contents + spaces(); + pos(node->getNodeValue()); + + //### Children + for (Node *child = node->getFirstChild() ; + child ; + child=child->getNextSibling()) + { + write(child); + } + + //### Close tag + spaces(); + po("</"); + pos(node->getNodeName()); + po(">\n"); + + indent-=2; +} + + +/** + * + */ +void XmlWriter::writeFile(FILE *f, const Node *node) +{ + if (!node) + { + po("XmlWriter: NULL document\n"); + return; + } + + indent = 0; + + //po("Document\n"); + + buf = ""; + + write(node); + + for (int i=0 ; i<buf.size() ; i++) + { + int ch = buf[i]; + fputc(ch, f); + } + fflush(f); + + buf = ""; + +} + + + +//######################################################################### +//# C O N S T R U C T O R / D E S T R U C T O R +//######################################################################### + +/** + * + */ +XmlWriter::XmlWriter() +{ +} + +/** + * + */ +XmlWriter::~XmlWriter() +{ +} + + + +} //namespace dom +} //namespace w3c +} //namespace org + +//######################################################################### +//# E N D O F F I L E +//######################################################################### + |
