search/mag_sel search/close
CompositeNode.h
1 // Copyright 2001-2021 Aspose Pty Ltd. All Rights Reserved.
3 //
4 // This file is part of Aspose.Words. The source code in this file
5 // is only intended as a supplement to the documentation, and is provided
6 // "as is", without warranty of any kind, either expressed or implied.
9 #pragma once
10 
11 #include <system/collections/ienumerable.h>
12 #include <system/array.h>
13 #include <cstdint>
14 
15 #include <Aspose.Words.Cpp/NodeType.h>
16 #include <Aspose.Words.Cpp/Node.h>
17 #include <Aspose.Words.Cpp/INodeCollection.h>
18 #include <Aspose.Words.Cpp/aspose_words_api_defs.h>
19 
20 namespace System { namespace Collections { namespace Generic { template <typename> class IEnumerator; } } }
21 namespace Aspose { namespace Words { enum class VisitorAction; } }
22 namespace Aspose { namespace Words { namespace Layout { namespace Core { class LayoutShapeDrawingMLAdapter; } } } }
23 namespace Aspose { namespace Words { namespace Layout { namespace Core { class LayoutShapeVMLAdapter; } } } }
24 namespace Aspose { namespace Words { class ImportInfoCollector; } }
25 namespace Aspose { namespace Words { class NodeRemover; } }
26 namespace Aspose { namespace Words { class AnnotationUtil; } }
27 namespace Aspose { namespace Words { namespace Revisions { class RevisionTrackingUtil; } } }
28 namespace Aspose { namespace Words { class StyleSeparatorInserter; } }
29 namespace Aspose { namespace Words { namespace Fields { class FieldQuoteUpdater; } } }
30 namespace Aspose { namespace Words { namespace Fields { class FieldIncludeTextUpdater; } } }
31 namespace Aspose { namespace Words { class NodeCollection; } }
32 namespace Aspose { namespace Words { namespace Layout { class ParagraphPrConverter; } } }
33 namespace Aspose { namespace Words { namespace Comparing { class ComparerNodeUtil; } } }
34 namespace Aspose { namespace Words { namespace Comparing { class ComparerIndexer; } } }
35 namespace Aspose { namespace Words { class NodeIndexer; } }
36 namespace Aspose { namespace Words { namespace RW { namespace Dml { namespace Writer { class DmlShapeValidator; } } } } }
37 namespace Aspose { namespace Words { class DocumentInserter; } }
38 namespace Aspose { namespace Words { namespace Replacing { class FindReplaceIndexer; } } }
39 namespace Aspose { namespace Words { namespace Tables { class TableMerger; } } }
40 namespace Aspose { namespace Words { namespace RW { namespace Docx { namespace Writer { class DocxFieldsWriter; } } } } }
41 namespace Aspose { namespace Words { namespace RW { class InlineMarkupResolver; } } }
42 namespace Aspose { namespace Words { namespace RW { namespace Txt { namespace Writer { class TxtWriterBase; } } } } }
43 namespace Aspose { namespace Words { class NodeEnumerator; } }
44 namespace Aspose { namespace Words { namespace RW { namespace Nrx { namespace Reader { class NrxRunReaderBase; } } } } }
45 namespace Aspose { namespace Words { namespace Replacing { class FindReplace; } } }
46 namespace Aspose { namespace Words { class RevisionGroup; } }
47 namespace Aspose { namespace Words { namespace Revisions { class RevisionUtil; } } }
48 namespace Aspose { namespace Words { namespace Revisions { class BookmarkDeleter; } } }
49 namespace Aspose { namespace Words { namespace Revisions { class BookmarkMover; } } }
50 namespace Aspose { namespace Words { namespace Validation { class ShapeValidator; } } }
51 namespace Aspose { namespace Words { namespace Layout { namespace Core { class WarningGenerator; } } } }
52 namespace Aspose { namespace Words { namespace Layout { namespace Core { class DocumentLayout; } } } }
53 namespace Aspose { namespace Words { class RangeDocumentBuilder; } }
54 namespace Aspose { namespace Words { namespace Fields { class FieldOldResultNodeCollection; } } }
55 namespace Aspose { namespace Words { namespace Fields { class FieldReplacer; } } }
56 namespace Aspose { namespace Words { namespace Tables { class FixedGridCalculator; } } }
57 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Writer { class OdtTrackedChangesWriter; } } } } }
58 namespace Aspose { namespace Words { namespace RW { namespace Docx { namespace Reader { class DocxAltChunkReader; } } } } }
59 namespace Aspose { namespace Words { namespace Fields { class FieldToc; } } }
60 namespace Aspose { namespace Words { namespace Fields { class ParagraphTocEntry; } } }
61 namespace Aspose { namespace Words { namespace Fields { class TocEntryExtractor; } } }
62 namespace Aspose { namespace Words { namespace Markup { class SdtContentHelper; } } }
63 namespace Aspose { namespace Words { namespace Markup { class StructuredDocumentTag; } } }
64 namespace Aspose { namespace Words { namespace Markup { class XmlMapping; } } }
65 namespace Aspose { namespace Words { namespace Math { class OfficeMath; } } }
66 namespace Aspose { namespace Words { class NodeCopier; } }
67 namespace Aspose { namespace Words { class NodeTextCollector; } }
68 namespace Aspose { namespace Words { class NodeRangeVisitingHelper; } }
69 namespace Aspose { namespace Words { class NodeUtil; } }
70 namespace Aspose { namespace Words { namespace Layout { class AttributeConverter; } } }
71 namespace Aspose { namespace Words { namespace Layout { class DocumentSpanConverter; } } }
72 namespace Aspose { namespace Words { class Bookmark; } }
73 namespace Aspose { namespace Words { namespace BuildingBlocks { class BuildingBlock; } } }
74 namespace Aspose { namespace Words { class DocumentBase; } }
75 namespace Aspose { namespace Words { namespace Fields { class NodeRangeResultApplier; } } }
76 namespace Aspose { namespace Words { namespace Notes { class FootnoteSeparator; } } }
77 namespace Aspose { namespace Words { class DocumentBuilder; } }
78 namespace Aspose { namespace Words { namespace Validation { class DocumentValidator; } } }
79 namespace Aspose { namespace Words { class WordCounter; } }
80 namespace Aspose { namespace Words { namespace Drawing { class ShapeBase; } } }
81 namespace Aspose { namespace Words { namespace RW { namespace Html { namespace Writer { class HtmlCoreWriter; } } } } }
82 namespace Aspose { namespace Words { namespace RW { namespace Wml { namespace Writer { class WmlEquationXmlWriter; } } } } }
83 namespace Aspose { namespace Words { namespace RW { class MarkupResolver; } } }
84 namespace Aspose { namespace Words { class InlineStory; } }
85 namespace Aspose { namespace Words { namespace Notes { class FootnoteSeparatorCollection; } } }
86 namespace Aspose { namespace Words { namespace Markup { class SmartTag; } } }
87 namespace Aspose { namespace Words { class Story; } }
88 namespace Aspose { namespace Words { class Section; } }
89 namespace Aspose { namespace Words { namespace TableLayout { class TableLayouter; } } }
90 namespace Aspose { namespace Words { namespace Tables { class Cell; } } }
91 namespace Aspose { namespace Words { namespace Tables { class Row; } } }
92 namespace Aspose { namespace Words { namespace Tables { class Table; } } }
93 namespace Aspose { namespace Words { class Paragraph; } }
94 namespace Aspose { namespace Words { namespace RW { namespace Docx { namespace Reader { class DocxDocumentReaderBase; } } } } }
95 namespace Aspose { namespace Words { namespace RW { namespace Nrx { namespace Reader { class NrxDocumentReaderBase; } } } } }
96 namespace Aspose { namespace Words { namespace RW { namespace Html { namespace Writer { class HtmlDocumentSplitter; } } } } }
97 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Reader { class OdtTextIndexesReader; } } } } }
98 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Reader { class OdtTableCellReader; } } } } }
99 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Reader { class OdtTableReader; } } } } }
100 namespace Aspose { namespace Words { namespace RW { namespace Vml { class VmlShapeReader; } } } }
101 namespace Aspose { namespace Words { namespace RW { namespace Odt { namespace Reader { class OdtParagraphReader; } } } } }
102 namespace Aspose { namespace Words { namespace RW { namespace Wml { namespace Reader { class WmlInlineReader; } } } } }
103 namespace Aspose { namespace Words { class WordUtil; } }
104 namespace Aspose { namespace Words { namespace RW { namespace Docx { namespace Reader { class DocxStoryReader; } } } } }
105 namespace Aspose { namespace Words { namespace RW { namespace Doc { namespace Escher { class EsShapeFiler; } } } } }
106 namespace Aspose { namespace Words { namespace RW { namespace Doc { namespace Reader { class ModelBuilder; } } } } }
107 namespace Aspose { namespace Words { namespace RW { namespace Html { class CssParagraph; } } } }
108 namespace Aspose { namespace Words { namespace RW { namespace Html { namespace Reader { class HtmlTableReader; } } } } }
109 namespace Aspose { namespace Words { namespace RW { namespace Rtf { namespace Reader { class RtfModelBuilder; } } } } }
110 namespace Aspose { namespace Words { namespace RW { namespace Rtf { namespace Writer { class RtfDocPrWriter; } } } } }
111 namespace Aspose { namespace Words { namespace RW { namespace Wml { namespace Reader { class WmlBodyReader; } } } } }
112 namespace Aspose { namespace Words { class INodeCloningListener; } }
113 namespace System { namespace Text { class StringBuilder; } }
114 namespace Aspose { namespace Words { class NodeList; } }
115 namespace Aspose { namespace Words { class DocumentVisitor; } }
116 
117 namespace Aspose {
118 
119 namespace Words {
120 
181 class ASPOSE_WORDS_SHARED_CLASS CompositeNode : public Aspose::Words::Node, public System::Collections::Generic::IEnumerable<System::SharedPtr<Aspose::Words::Node>>, public Aspose::Words::INodeCollection
182 {
183  typedef CompositeNode ThisType;
186  typedef Aspose::Words::INodeCollection BaseType2;
187 
188  typedef ::System::BaseTypesInfo<BaseType, BaseType1, BaseType2> ThisTypeBaseTypesInfo;
189  ASPOSE_WORDS_SHARED_RTTI_INFO_DECL();
190 
191  friend class Aspose::Words::Layout::Core::LayoutShapeDrawingMLAdapter;
192  friend class Aspose::Words::Layout::Core::LayoutShapeVMLAdapter;
193  friend class Aspose::Words::ImportInfoCollector;
194  friend class Aspose::Words::NodeRemover;
195  friend class Aspose::Words::AnnotationUtil;
196  friend class Aspose::Words::Revisions::RevisionTrackingUtil;
197  friend class Aspose::Words::StyleSeparatorInserter;
198  friend class Aspose::Words::Fields::FieldQuoteUpdater;
199  friend class Aspose::Words::Fields::FieldIncludeTextUpdater;
200  friend class Aspose::Words::NodeCollection;
201  friend class Aspose::Words::Layout::ParagraphPrConverter;
202  friend class Aspose::Words::Comparing::ComparerNodeUtil;
203  friend class Aspose::Words::Comparing::ComparerIndexer;
204  friend class Aspose::Words::NodeIndexer;
205  friend class Aspose::Words::RW::Dml::Writer::DmlShapeValidator;
206  friend class Aspose::Words::DocumentInserter;
207  friend class Aspose::Words::Replacing::FindReplaceIndexer;
208  friend class Aspose::Words::Tables::TableMerger;
209  friend class Aspose::Words::RW::Docx::Writer::DocxFieldsWriter;
210  friend class Aspose::Words::RW::InlineMarkupResolver;
211  friend class Aspose::Words::RW::Txt::Writer::TxtWriterBase;
212  friend class Aspose::Words::NodeEnumerator;
213  friend class Aspose::Words::RW::Nrx::Reader::NrxRunReaderBase;
214  friend class Aspose::Words::Replacing::FindReplace;
215  friend class Aspose::Words::RevisionGroup;
216  friend class Aspose::Words::Revisions::RevisionUtil;
217  friend class Aspose::Words::Revisions::BookmarkDeleter;
218  friend class Aspose::Words::Revisions::BookmarkMover;
219  friend class Aspose::Words::Validation::ShapeValidator;
220  friend class Aspose::Words::Layout::Core::WarningGenerator;
221  friend class Aspose::Words::Layout::Core::DocumentLayout;
222  friend class Aspose::Words::RangeDocumentBuilder;
223  friend class Aspose::Words::Fields::FieldOldResultNodeCollection;
224  friend class Aspose::Words::Fields::FieldReplacer;
225  friend class Aspose::Words::Tables::FixedGridCalculator;
226  friend class Aspose::Words::RW::Odt::Writer::OdtTrackedChangesWriter;
227  friend class Aspose::Words::RW::Docx::Reader::DocxAltChunkReader;
228  friend class Aspose::Words::Fields::FieldToc;
229  friend class Aspose::Words::Fields::ParagraphTocEntry;
230  friend class Aspose::Words::Fields::TocEntryExtractor;
231  friend class Aspose::Words::Markup::SdtContentHelper;
234  friend class Aspose::Words::Math::OfficeMath;
235  friend class Aspose::Words::NodeCopier;
236  friend class Aspose::Words::NodeTextCollector;
237  friend class Aspose::Words::NodeRangeVisitingHelper;
238  friend class Aspose::Words::NodeUtil;
239  friend class Aspose::Words::Layout::AttributeConverter;
240  friend class Aspose::Words::Layout::DocumentSpanConverter;
241  friend class Aspose::Words::Bookmark;
243  friend class Aspose::Words::DocumentBase;
244  friend class Aspose::Words::Fields::NodeRangeResultApplier;
245  friend class Aspose::Words::Notes::FootnoteSeparator;
246  friend class Aspose::Words::DocumentBuilder;
247  friend class Aspose::Words::Validation::DocumentValidator;
248  friend class Aspose::Words::WordCounter;
250  friend class Aspose::Words::RW::Html::Writer::HtmlCoreWriter;
251  friend class Aspose::Words::RW::Wml::Writer::WmlEquationXmlWriter;
252  friend class Aspose::Words::RW::MarkupResolver;
253  friend class Aspose::Words::InlineStory;
254  friend class Aspose::Words::Notes::FootnoteSeparatorCollection;
255  friend class Aspose::Words::Markup::SmartTag;
256  friend class Aspose::Words::Story;
257  friend class Aspose::Words::Section;
258  friend class Aspose::Words::TableLayout::TableLayouter;
259  friend class Aspose::Words::Tables::Cell;
260  friend class Aspose::Words::Tables::Row;
261  friend class Aspose::Words::Tables::Table;
262  friend class Aspose::Words::Paragraph;
263  friend class Aspose::Words::RW::Docx::Reader::DocxDocumentReaderBase;
264  friend class Aspose::Words::RW::Nrx::Reader::NrxDocumentReaderBase;
265  friend class Aspose::Words::RW::Html::Writer::HtmlDocumentSplitter;
266  friend class Aspose::Words::RW::Odt::Reader::OdtTextIndexesReader;
267  friend class Aspose::Words::RW::Odt::Reader::OdtTableCellReader;
268  friend class Aspose::Words::RW::Odt::Reader::OdtTableReader;
269  friend class Aspose::Words::RW::Vml::VmlShapeReader;
270  friend class Aspose::Words::RW::Odt::Reader::OdtParagraphReader;
271  friend class Aspose::Words::RW::Wml::Reader::WmlInlineReader;
272  friend class Aspose::Words::WordUtil;
273  friend class Aspose::Words::RW::Docx::Reader::DocxStoryReader;
274  friend class Aspose::Words::RW::Doc::Escher::EsShapeFiler;
275  friend class Aspose::Words::RW::Doc::Reader::ModelBuilder;
276  friend class Aspose::Words::RW::Html::CssParagraph;
277  friend class Aspose::Words::RW::Html::Reader::HtmlTableReader;
278  friend class Aspose::Words::RW::Rtf::Reader::RtfModelBuilder;
279  friend class Aspose::Words::RW::Rtf::Writer::RtfDocPrWriter;
280  friend class Aspose::Words::RW::Wml::Reader::WmlBodyReader;
281 
282 public:
284 
285 public:
286 
331  ASPOSE_WORDS_SHARED_API bool get_IsComposite() override;
332 
359  ASPOSE_WORDS_SHARED_API bool get_HasChildNodes();
360 
417 
478 
505  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> get_LastChild() const;
506 
557  ASPOSE_WORDS_SHARED_API int32_t get_Count();
559 
608  ASPOSE_WORDS_SHARED_API System::String GetText() override;
609 
725 
812  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> GetChild(Aspose::Words::NodeType nodeType, int32_t index, bool isDeep);
813 
823 
833 
885 
944 
1006 
1118 
1183 
1217 
1265  ASPOSE_WORDS_SHARED_API void RemoveAllChildren();
1266 
1379  ASPOSE_WORDS_SHARED_API void RemoveSmartTags();
1380 
1394  ASPOSE_WORDS_SHARED_API int32_t IndexOf(System::SharedPtr<Aspose::Words::Node> child);
1396  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> GetCurrentNode() override;
1397 
1398 protected:
1399 
1400  bool get_HasNonMarkupDescendants();
1401  bool get_HasOneChildOnly();
1402  System::SharedPtr<Aspose::Words::Node> get_FirstNonMarkupDescendant();
1403  System::SharedPtr<Aspose::Words::Node> get_LastNonMarkupDescendant();
1404  System::SharedPtr<Aspose::Words::CompositeNode> get_FirstNonMarkupCompositeDescendant();
1405  System::SharedPtr<Aspose::Words::CompositeNode> get_LastNonMarkupCompositeDescendant();
1406  System::SharedPtr<Aspose::Words::Node> get_FirstNonAnnotationChild();
1407  System::SharedPtr<Aspose::Words::Node> get_LastNonAnnotationChild();
1408 
1409  ASPOSE_WORDS_SHARED_API CompositeNode();
1411 
1412  ASPOSE_WORDS_SHARED_API void CoreRemoveSelfOnly();
1413  bool HasInlineNodes();
1414  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> Clone(bool isCloneChildren, System::SharedPtr<Aspose::Words::INodeCloningListener> cloningListener) override;
1415  ASPOSE_WORDS_SHARED_API void GetTextToBuilder(System::SharedPtr<System::Text::StringBuilder> builder) override;
1420  int32_t IndexOfChildByDescendant(System::SharedPtr<Aspose::Words::Node> descendant, bool skipAnnotations);
1421  ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> GetNodeFromPos(int32_t position) override;
1422  ASPOSE_WORDS_SHARED_API int32_t GetTextLength() override;
1423  virtual ASPOSE_WORDS_SHARED_API System::String GetEndText();
1424  System::String GetChildrenText();
1425  ASPOSE_WORDS_SHARED_API bool AcceptCore(System::SharedPtr<Aspose::Words::DocumentVisitor> visitor);
1428  ASPOSE_WORDS_SHARED_API bool AcceptChildren(System::SharedPtr<Aspose::Words::DocumentVisitor> visitor);
1429  virtual bool CanInsert(System::SharedPtr<Aspose::Words::Node> newChild) = 0;
1431 
1432  virtual ASPOSE_WORDS_SHARED_API ~CompositeNode();
1433 
1434 private:
1435 
1439 
1440  void GetChildrenTextInternal(System::SharedPtr<System::Text::StringBuilder> builder);
1441  void InsertAfterCore(System::SharedPtr<Aspose::Words::Node> newChild, System::SharedPtr<Aspose::Words::Node> prevChild);
1442  void InsertBeforeCore(System::SharedPtr<Aspose::Words::Node> newChild, System::SharedPtr<Aspose::Words::Node> nextChild);
1444 
1445 };
1446 
1447 }
1448 }