blob: d23ecc4b467ae5fda3a658e936d592a1656a6555 [file] [log] [blame]
/*
* Copyright 2014 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef COBALT_DOM_SERIALIZER_H_
#define COBALT_DOM_SERIALIZER_H_
#include <iosfwd>
#include "cobalt/dom/node.h"
namespace cobalt {
namespace dom {
// This class is responsible for serializing nodes into the provided output
// stream. Note that in the serialization result, the attributes are sorted
// alphabetically, each tag has both opening and closing tag.
class Serializer : public ConstNodeVisitor {
public:
explicit Serializer(std::ostream* out_stream);
// Serializes the provided node and its descendants.
void Serialize(const scoped_refptr<const Node>& node);
// Serializes the provided node, excluding the descendants.
void SerializeSelfOnly(const scoped_refptr<const Node>& node);
// Serializes the descendants of the provided node, excluding the node itself.
void SerializeDescendantsOnly(const scoped_refptr<const Node>& node);
private:
// From ConstNodeVisitor.
void Visit(const CDATASection* cdata_section) OVERRIDE;
void Visit(const Comment* comment) OVERRIDE;
void Visit(const Document* document) OVERRIDE;
void Visit(const DocumentType* document_type) OVERRIDE;
void Visit(const Element* element) OVERRIDE;
void Visit(const Text* text) OVERRIDE;
// Pointer to the output stream provided by the user.
std::ostream* out_stream_;
// Used by the Visit methods. True when Visit is called when entering a Node,
// false when leaving.
bool entering_node_;
DISALLOW_COPY_AND_ASSIGN(Serializer);
};
} // namespace dom
} // namespace cobalt
#endif // COBALT_DOM_SERIALIZER_H_