source: NonGTP/Xerces/xercesc/dom/deprecated/RangeImpl.hpp @ 188

Revision 188, 7.9 KB checked in by mattausch, 19 years ago (diff)

added xercesc to support

Line 
1#ifndef RangeImpl_HEADER_GUARD_
2#define RangeImpl_HEADER_GUARD_
3/*
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in
18 *    the documentation and/or other materials provided with the
19 *    distribution.
20 *
21 * 3. The end-user documentation included with the redistribution,
22 *    if any, must include the following acknowledgment:
23 *       "This product includes software developed by the
24 *        Apache Software Foundation (http://www.apache.org/)."
25 *    Alternately, this acknowledgment may appear in the software itself,
26 *    if and wherever such third-party acknowledgments normally appear.
27 *
28 * 4. The names "Xerces" and "Apache Software Foundation" must
29 *    not be used to endorse or promote products derived from this
30 *    software without prior written permission. For written
31 *    permission, please contact apache\@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache",
34 *    nor may "Apache" appear in their name, without prior written
35 *    permission of the Apache Software Foundation.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation, and was
53 * originally based on software copyright (c) 1999, International
54 * Business Machines, Inc., http://www.ibm.com .  For more information
55 * on the Apache Software Foundation, please see
56 * <http://www.apache.org/>.
57 */
58
59 /*
60 * $Id: RangeImpl.hpp,v 1.3 2002/11/04 15:04:44 tng Exp $
61 */
62
63//
64//  This file is part of the internal implementation of the C++ XML DOM.
65//  It should NOT be included or used directly by application programs.
66//
67//  Applications should include the file <xercesc/dom/deprecated/DOM.hpp> for the entire
68//  DOM API, or DOM_*.hpp for individual DOM classes, where the class
69//  name is substituded for the *.
70//
71
72
73#include "DOM_Node.hpp"
74#include "RefCountedImpl.hpp"
75#include "DOM_Range.hpp"
76#include "DOM_Text.hpp"
77#include "DOM_Document.hpp"
78#include <xercesc/util/RefVectorOf.hpp>
79
80XERCES_CPP_NAMESPACE_BEGIN
81
82
83typedef RefVectorOf<RangeImpl> Ranges;
84
85class CDOM_EXPORT RangeImpl : public RefCountedImpl {
86public:
87    //c'tor
88    RangeImpl(DOM_Document doc);
89    RangeImpl(const RangeImpl& other);
90
91    //d'tor
92    ~RangeImpl();
93
94    //referencing related functions
95    virtual void                unreferenced();
96
97
98    //getter functions
99    DOM_Node    getStartContainer() const;
100    unsigned    int getStartOffset() const;
101    DOM_Node    getEndContainer() const;
102    unsigned int getEndOffset() const;
103
104
105
106    void        collapse(bool toStart);
107    bool        getCollapsed() const;
108
109    void        setStartBefore(const DOM_Node& node);
110    void        setStartAfter(const DOM_Node& node);
111    void        setEndBefore(const DOM_Node& node);
112    void        setEndAfter(const DOM_Node& node);
113
114    void        setStart(const DOM_Node& node, unsigned int offset);
115    void        setEnd(const DOM_Node& node, unsigned int offset);
116
117    void        selectNode(const DOM_Node& node);
118    void        selectNodeContents(const DOM_Node& node);
119
120    short       compareBoundaryPoints(DOM_Range::CompareHow how, RangeImpl* range) const;
121
122    void        detach();
123
124    void        deleteContents();
125
126    RangeImpl*  cloneRange() const;
127    DOMString   toString() const;
128
129    DOM_Document getDocument();
130    void        surroundContents(DOM_Node& node);
131    DOM_DocumentFragment extractContents();
132    DOM_DocumentFragment cloneContents() const;
133    void        insertNode(DOM_Node& newNode);
134    const DOM_Node    getCommonAncestorContainer() const;
135
136    // functions to inform all existing valid ranges about a change
137    void updateSplitInfo(TextImpl* oldNode, TextImpl* startNode, unsigned int offset);
138    void updateRangeForInsertedNode(NodeImpl* node);
139    void receiveReplacedText(NodeImpl* node);
140    void updateRangeForDeletedText(DOM_Node& node, unsigned int offset, int count);
141    void updateRangeForDeletedNode(NodeImpl* node);
142
143private:
144    enum TraversalType {
145        EXTRACT_CONTENTS = 1,
146        CLONE_CONTENTS   = 2,
147        DELETE_CONTENTS  = 3
148    };
149
150    enum TraversePoint {
151        BEFORE  = -1,
152        START   = 0,
153        AFTER   = 1
154    };
155
156    //setter functions
157    void        setStartContainer(const DOM_Node& node);
158    void        setStartOffset(unsigned int offset) ;
159    void        setEndContainer(const DOM_Node& node);
160    void        setEndOffset(unsigned int offset) ;
161
162    //misc functions
163    void        validateNode(const DOM_Node& node) const;
164    bool        isValidAncestorType(const DOM_Node& node) const;
165    bool        hasLegalRootContainer(const DOM_Node& node) const;
166    bool        isLegalContainedNode(const DOM_Node& node ) const;
167    void        checkIndex(const DOM_Node& node, unsigned int offset) const;
168    static bool isAncestorOf(const DOM_Node& a, const DOM_Node& b);
169
170    unsigned short indexOf(const DOM_Node& child, const DOM_Node& parent) const;
171
172    const DOM_Node    commonAncestorOf(const DOM_Node& pointA, const DOM_Node& pointB) const;
173    DOM_Node    nextNode(const DOM_Node& node, bool visitChildren) const;
174    DOM_DocumentFragment traverseContents(TraversalType type);
175    void        checkReadOnly(DOM_Node& start, DOM_Node& end,
176                    unsigned int starOffset, unsigned int endOffset);
177    void        recurseTreeAndCheck(DOM_Node& start, DOM_Node& end);
178    DOM_Node    removeChild(DOM_Node& parent, DOM_Node& child);
179
180    DOM_DocumentFragment traverseSameContainer( int how );
181    DOM_DocumentFragment traverseCommonStartContainer( DOM_Node endAncestor, int how );
182    DOM_DocumentFragment traverseCommonEndContainer( DOM_Node startAncestor, int how );
183    DOM_DocumentFragment traverseCommonAncestors( DOM_Node startAncestor, DOM_Node endAncestor, int how );
184    DOM_Node    traverseRightBoundary( DOM_Node root, int how );
185    DOM_Node    traverseLeftBoundary( DOM_Node root, int how );
186    DOM_Node    traverseNode( DOM_Node n, bool isFullySelected, bool isLeft, int how );
187    DOM_Node    traverseFullySelected( DOM_Node n, int how );
188    DOM_Node    traversePartiallySelected( DOM_Node n, int how );
189    DOM_Node    traverseTextNode( DOM_Node n, bool isLeft, int how );
190    DOM_Node    getSelectedNode( DOM_Node container, int offset );
191
192
193    //private data
194    DOM_Node        fStartContainer;
195    unsigned int    fStartOffset;
196    DOM_Node        fEndContainer;
197    unsigned int    fEndOffset;
198    bool            fCollapsed;
199    DOM_Document    fDocument;
200    bool            fDetached;
201
202    DOM_Node        fRemoveChild;
203
204};
205
206XERCES_CPP_NAMESPACE_END
207
208#endif
Note: See TracBrowser for help on using the repository browser.