/*************************************************************************** * Copyright (C) 2001 by Bernd Gehrmann * * bernd@kdevelop.org * * jakob@simon-gaarde.dk * * * * 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. * * * ***************************************************************************/ #ifndef _DOMUTIL_H_ #define _DOMUTIL_H_ #include #include #include #include #include /** @file domutil.h Utility functions to operate on %DOM. */ struct DomAttribute { TQString name; TQString value; }; struct DomPathElement { TQString tagName; TQValueList attribute; int matchNumber; // for use when more than one element matches the path }; typedef TQValueList DomPath; /** * Utility class for conveniently accessing data in a %DOM tree. */ class DomUtil { public: typedef TQPair Pair; typedef TQValueList PairList; /** * Remove all child elements from a given element. */ static void makeEmpty( TQDomElement& ); /** * Reads a string entry. */ static TQString readEntry(const TQDomDocument &doc, const TQString &path, const TQString &defaultEntry = TQString()); /** * Reads a number entry. */ static int readIntEntry(const TQDomDocument &doc, const TQString &path, int defaultEntry = 0); /** * Reads a boolean entry. The strings "true" and "TRUE" are interpreted * as true, all other as false. */ static bool readBoolEntry(const TQDomDocument &doc, const TQString &path, bool defaultEntry = false); /** * Reads a list entry. See writeListEntry(). */ static TQStringList readListEntry(const TQDomDocument &doc, const TQString &path, const TQString &tag); /** * Reads a list of string pairs. See writePairListEntry(). */ static PairList readPairListEntry(const TQDomDocument &doc, const TQString &path, const TQString &tag, const TQString &firstAttr, const TQString &secondAttr); /** * Reads a string to string map. See writeMapEntry() */ static TQMap readMapEntry(const TQDomDocument &doc, const TQString &path); /** * Retrieves an element by path, return null if any item along * the path does not exist. */ static TQDomElement elementByPath( const TQDomDocument& doc, const TQString& path ); /** * Retrieves an element by path, creating the necessary nodes. */ static TQDomElement createElementByPath( TQDomDocument& doc, const TQString& path ); /** * Retrieves a child element, creating it if it does not exist. * The return value is guaranteed to be non isNull() */ static TQDomElement namedChildElement( TQDomElement& el, const TQString& name ); /** Writes a string entry. For example, \verbatim writeEntry(doc, "/general/special", "foo"); \endverbatim creates the %DOM fragment: \verbatim foo \endverbatim */ static void writeEntry(TQDomDocument &doc, const TQString &path, const TQString &value); /** * Writes a number entry. */ static void writeIntEntry(TQDomDocument &doc, const TQString &path, int value); /** * Writes a boolean entry. Booleans are stored as "true", "false" resp. */ static void writeBoolEntry(TQDomDocument &doc, const TQString &path, bool value); /** Writes a string list element. The list elements are separated by tag. For example, \verbatim TQStringList l; l << "one" << "two"; writeListEntry(doc, "/general/special", "el", l); \endverbatim creates the %DOM fragment: \verbatim onetwo \endverbatim */ static void writeListEntry(TQDomDocument &doc, const TQString &path, const TQString &tag, const TQStringList &value); /** Writes a list of string pairs. The list elements are stored in the attributes firstAttr and secondAttr of elements named tag. For example, \verbatim DomUtil::PairList l; l << DomUtil::StringPair("one", "1"); l << DomUtil::StringPair("two", "2"); writePairListEntry(doc, "/general/special", "el", "first", "second", l); \endverbatim creates the %DOM fragment: \verbatim \endverbatim */ static void writePairListEntry(TQDomDocument &doc, const TQString &path, const TQString &tag, const TQString &firstAttr, const TQString &secondAttr, const PairList &value); /** * Writes a string to string map. This map is stored in a way, that it can be read with * readMapEntry() and readEntry() */ static void writeMapEntry(TQDomDocument &doc, const TQString& path, const TQMap &map); /** * Resolves an extended path * Extended path format: * pathpart: tag[|attr1=value[;attr2=value;..][|matchNumber]] * where matchNumber is zero-based * path: pathpart[/pathpart/..] */ static DomPath resolvPathStringExt(const TQString pathstring); /** Retrieve an element specified with extended path examples: - 1: "widget|class=TQDialog/property|name=geometry" or "widget|class=TQDialog/property||1" - 2: "widget/property|name=caption/string" or "widget/property||2/string" . \verbatim KdevFormName <-- 1. reaches this node 0 0 600 480 KdevFormCaption <-- 2. reaches this node \endverbatim */ static TQDomElement elementByPathExt(TQDomDocument &doc, const TQString &pathstring); /** * Open file - filename - and set setContents of doc */ static bool openDOMFile(TQDomDocument &doc, TQString filename); /** * Store contents of doc in file - filename. Existing file will be truncated! */ static bool saveDOMFile(TQDomDocument &doc, TQString filename); /** * Remove all child text nodes of parent described in pathExt */ static bool removeTextNodes(TQDomDocument doc,TQString pathExt); /** * Add child text node to parent described in pathExt */ static bool appendText(TQDomDocument doc, TQString pathExt, TQString text); /** * Replace all chilt text nodes of parent described in pathExt with one new. */ static bool replaceText(TQDomDocument doc, TQString pathExt, TQString text); private: static TQString readEntryAux(const TQDomDocument &doc, const TQString &path); }; #endif