File: dom_document.h

package info (click to toggle)
clanlib 1.0~svn3827-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 24,312 kB
  • ctags: 16,513
  • sloc: cpp: 101,606; xml: 6,410; makefile: 1,747; ansic: 463; perl: 424; php: 247; sh: 53
file content (175 lines) | stat: -rw-r--r-- 6,557 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*
**  ClanLib SDK
**  Copyright (c) 1997-2005 The ClanLib Team
**
**  This software is provided 'as-is', without any express or implied
**  warranty.  In no event will the authors be held liable for any damages
**  arising from the use of this software.
**
**  Permission is granted to anyone to use this software for any purpose,
**  including commercial applications, and to alter it and redistribute it
**  freely, subject to the following restrictions:
**
**  1. The origin of this software must not be misrepresented; you must not
**     claim that you wrote the original software. If you use this software
**     in a product, an acknowledgment in the product documentation would be
**     appreciated but is not required.
**  2. Altered source versions must be plainly marked as such, and must not be
**     misrepresented as being the original software.
**  3. This notice may not be removed or altered from any source distribution.
**
**  Note: Some of the libraries ClanLib may link to may have additional
**  requirements or restrictions.
**
**  File Author(s):
**
**    Magnus Norddahl
**    (if your name is missing here, please add it)
*/

//! clanCore="XML"
//! header=core.h

#ifndef header_dom_document
#define header_dom_document

#ifdef CL_API_DLL
#ifdef CL_CORE_EXPORT
#define CL_API_CORE __declspec(dllexport)
#else
#define CL_API_CORE __declspec(dllimport)
#endif
#else
#define CL_API_CORE
#endif

#if _MSC_VER > 1000
#pragma once
#endif

#include "dom_node.h"

class CL_InputSource;
class CL_OutputSource;
class CL_DomDocumentType;
class CL_DomImplementation;
class CL_DomCDATASection;
class CL_DomProcessingInstruction;
class CL_DomElement;
class CL_DomDocumentFragment;
class CL_DomComment;
class CL_DomText;
class CL_DomAttr;
class CL_DomEntityReference;
class CL_DomNodeList;
class CL_DomDocument_Generic;

//: DOM Document class.
//- !group=Core/XML!
//- !header=core.h!
//- <p>The Document interface represents the entire HTML or XML document.
//- Conceptually, it is the root of the document tree, and provides the
//- primary access to the document's data.</p>
//- <p>Since elements, text nodes, comments, processing instructions, etc.
//- cannot exist outside the context of a Document, the Document interface
//- also contains the factory methods needed to create these objects. The
//- Node objects created have a ownerDocument attribute which associates
//- them with the Document within whose context they were created.</p>
class CL_API_CORE CL_DomDocument : public CL_DomNode
{
//! Construction:
public:
	//: Constructs a DOM Document.
	CL_DomDocument();

	CL_DomDocument(CL_InputSource *input, bool delete_input = false, bool eat_whitespace = true);

	CL_DomDocument(const CL_SharedPtr<CL_DomNode_Generic> &impl);
	
	~CL_DomDocument();
	
//! Attributes:
public:
	//: Returns the Document Type Declaration (see CL_DomDocumentType)associated with this document.
	//- <p>For HTML documents as well as XML documents without a document type declaration this
	//- returns null. The DOM Level 1 does not support editing the Document Type Declaration,
	//- therefore docType cannot be altered in any way.</p>
	CL_DomDocumentType get_doctype();

	//: Returns the CL_DomImplementation object that handles this document.
	CL_DomImplementation get_implementation();

	//: Returns the root document element node.
	//- <p>This is a convenience attribute that allows direct access to the child node that is
	//- the root element of the document. For HTML documents, this is the element with the tag name "HTML".</p>
	CL_DomElement get_document_element();
	
//! Operations:
public:
	//: Creates an element of the type specified.
	//- <p>Note that the instance returned implements the Element interface, so attributes can be
	//- specified directly on the returned object.</p>
	//param tag_name: The name of the element type to instantiate. For XML, this is case-sensitive.
	CL_DomElement create_element(const std::string &tag_name);

	//: Creates an empty DocumentFragment object.
	CL_DomDocumentFragment create_document_fragment();

	//: Creates a Text node given the specified string.
	//param data: The data for the node.
	CL_DomText create_text_node(const std::string &data);

	//: Creates a Comment node given the specified string.
	//param data: The data for the node.
	CL_DomComment create_comment(const std::string &data);

	//: Creates a CDATASection node whose value is the specified string.
	//param data: The data for the CDATASection contents.
	CL_DomCDATASection create_cdata_section(const std::string &data);
	
	//: Creates a ProcessingInstruction node given the specified name and data strings.
	//param target: The target part of the processing instruction.
	//param data: The data for the node.
	CL_DomProcessingInstruction create_processing_instruction(
		const std::string &target,
		const std::string &data);

	//: Creates an Attr of the given name.
	//- <p>Note that the Attr instance can then be set on an Element using the setAttribute method.</p>
	//param name: The name of the attribute.
	CL_DomAttr create_attribute(const std::string &name);

	//: Creates an EntityReference object.
	//param name: The name of the entity to reference.
	CL_DomEntityReference create_entity_reference(const std::string &name);

	//: Returns a NodeList of all the Elements with a given tag name in the order in which they would be encountered in a preorder traversal of the Document tree.
	//param tagname: The name of the tag to match on. The special value "*" matches all tags.
	CL_DomNodeList get_elements_by_tag_name(const std::string &tag_name);

	//: Loads the DOM document as XML from an input source.
	//param input: Input source to read from.
	//param delete_input: If true, will delete input source after usage.
	//param eat_whitespace: Passed on to CL_XMLTokenizer::set_eat_whitespace.
	//param insert_point: Place in the DOM to insert the loaded XML code.
	//retval: List of all top level nodes created.
	std::vector<CL_DomNode> load(
		CL_InputSource *input,
		bool delete_input = false,
		bool eat_whitespace = true,
		CL_DomNode insert_point = CL_DomNode());

	//: Saves the DOM document as XML to an input source.
	//param output: Output source to write to.
	//param delete_output: If true, will delete output source after usage.
	//param insert_whitespace: Passed on to CL_XMLWriter::set_insert_whitespace.
	void save(CL_OutputSource *output, bool delete_output = false, bool insert_whitespace = true);

	//: Removes all nodes from the DOM document.
	void clear_all();

//! Implementation:
private:
};

#endif