// SPDX-License-Identifier: GPL-2.0-or-later /** @file * Interface for XML documents *//* * Authors: see git history * * Copyright (C) 2011 Authors * Copyright 2005 MenTaLguY * * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ #ifndef SEEN_INKSCAPE_XML_SP_REPR_DOC_H #define SEEN_INKSCAPE_XML_SP_REPR_DOC_H #include "xml/node.h" namespace Inkscape { namespace XML { /** * @brief Interface for XML documents * * This class represents a complete document tree. You have to go through this class * to create new nodes. It also contains transaction support, which forms the base * of the undo system. * * The document is also a node. It usually contains only two child nodes - a processing * instruction node (PINode) containing the XML prolog, and the root node. You can get * the root node of the document by calling the root() method. * * The name "transaction" can be misleading, because they are not atomic. Their main feature * is that they provide rollback. After starting a transaction, * all changes made to the document are stored in an internal event log. At any time * after starting the transaction, you can call the rollback() method, which restores * the document to the state it was before starting the transaction. Calling the commit() * method causes the internal event log to be discarded, and you can establish a new * "restore point" by calling beginTransaction() again. There can be only one active * transaction at a time for a given document. */ struct Document : virtual public Node { public: /** * @name Document transactions * @{ */ /** * @brief Checks whether there is an active transaction for this document * @return true if there's an established transaction for this document, false otherwise */ virtual bool inTransaction()=0; /** * @brief Begin a transaction and start recording changes * * By calling this method you effectively establish a resotre point. * You can undo all changes made to the document after this call using rollback(). */ virtual void beginTransaction()=0; /** * @brief Restore the state of the document prior to the transaction * * This method applies the inverses of all recorded changes in reverse order, * restoring the document state from before the transaction. For some implementations, * this function may do nothing. */ virtual void rollback()=0; /** * @brief Commit a transaction and discard change data * * This method finishes the active transaction and discards the recorded changes. */ virtual void commit()=0; /** * @brief Commit a transaction and store the events for later use * * This method finishes a transaction and returns an event chain * that describes the changes made to the document. This method may return NULL, * which means that the document implementation doesn't support event logging, * or that no changes were made. * * @return Event chain describing the changes, or NULL */ virtual Event *commitUndoable()=0; /*@}*/ /** * @name Create new nodes * @{ */ virtual Node *createElement(char const *name)=0; virtual Node *createTextNode(char const *content)=0; virtual Node *createTextNode(char const *content, bool is_CData)=0; virtual Node *createComment(char const *content)=0; virtual Node *createPI(char const *target, char const *content)=0; /*@}*/ /** * @brief Get the event logger for this document * * This is an implementation detail that should not be used outside of node implementations. * It should be made non-public in the future. */ virtual NodeObserver *logger()=0; }; } } #endif /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) indent-tabs-mode:nil fill-column:99 End: */ // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :