#ifndef JEZUK_DOM_TEXT_H #define JEZUK_DOM_TEXT_H //////////////////////////// // C++ DOM definition // // $Id$ //////////////////////////// #include namespace Arabica { namespace DOM { template class Text_impl; template > class Text : public CharacterData { typedef Text_impl Text_implT; public: typedef Node NodeT; typedef CharacterData CharacterDataT; Text() : CharacterDataT() { } explicit Text(Text_implT* impl) : CharacterDataT(impl) { } Text(const Text& rhs) : CharacterDataT(rhs) { } explicit Text(const NodeT& rhs) : CharacterDataT(rhs, 0) { if(NodeT::impl_ == 0) // null nodes can always be cast return; typename Text::Type type = rhs.getNodeType(); if((type != Node_base::TEXT_NODE) && (type != Node_base::CDATA_SECTION_NODE)) throw DOMBadCast("Text"); } // Text Text splitText(int offset) { return Text(tImpl()->splitText(offset)); } // splitText protected: Text(const NodeT& rhs, int dummy) : CharacterDataT(rhs, dummy) { } Text_implT* tImpl() const { return dynamic_cast(*NodeT::impl_); } }; // class Text //////////////////////////////////////////////////////////////////// template class Text_impl : virtual public CharacterData_impl { public: virtual ~Text_impl() { } //////////////////////////////////////////////////////////// // DOM::Text methods virtual Text_impl* splitText(int offset) = 0; }; // Text_impl } // namespace DOM } // namespace Arabica #endif