#ifndef JEZUK_DOM_TEXT_H #define JEZUK_DOM_TEXT_H //////////////////////////// // C++ DOM definition // // $Id$ //////////////////////////// #include namespace DOM { template class Text_impl; template class Text : public CharacterData { typedef CharacterData CharDataT; public: Text() : CharacterData() { } explicit Text(Text_impl* impl) : CharacterData(impl) { } Text(const Text& rhs) : CharacterData(rhs) { } explicit Text(const Node& rhs) : CharacterData(rhs, 0) { typename Text::Type type = rhs.getNodeType(); if((type != Text::TEXT_NODE) && (type != Text::CDATA_SECTION_NODE)) //throw std::runtime_error("bad_cast: Cannot cast Node to Text"); throw std::bad_cast(); } // Text protected: Text(const Node& rhs, int dummy) : CharacterData(rhs, 0) { } Text splitText(int offset) { return tImpl()->splitText(offset); } // splitText protected: Text_impl* tImpl() const { return dynamic_cast*>(CharDataT::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 #endif