You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.1 KiB

/*
* Copyright (C) 2019 Google Inc.
*
* 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.
*/
#pragma once
#include <sstream>
#include "xml.pb.h"
namespace xmlProtoFuzzer {
class ProtoConverter
{
public:
ProtoConverter() = default;
ProtoConverter(ProtoConverter const&) = delete;
ProtoConverter(ProtoConverter&&) = delete;
std::string protoToString(XmlDocument const&);
private:
void visit(Prolog const&);
void visit(ProcessingInstruction const&);
void visit(ExternalId const&);
void visit(DocTypeDecl const&);
void visit(VersionNum const&);
void visit(Encodings const&);
void visit(Misc const&);
void visit(KeyValue const&);
void visit(Element const&);
void visit(ElementDecl const&);
void visit(AttValue const&);
void visit(DefaultDecl const&);
void visit(AttDef const&);
void visit(AttListDecl const&);
void visit(NotationDecl const&);
void visit(EntityDecl const&);
void visit(EntityValue const&);
void visit(EntityDef const&);
void visit(PEDef const&);
void visit(NDataDecl const&);
void visit(ConditionalSect const&);
void visit(OneExtSubsetDecl const&);
void visit(ExtSubsetDecl const&);
void visit(MarkupDecl const&);
void visit(CData const&);
void visit(Content const&);
void visit(XmlDeclaration const&);
void visit(XmlDocument const&);
template <typename T>
bool isValid(T const& messageType) {
return T::Type_IsValid(messageType.type());
}
std::string removeNonAscii(std::string const&);
std::string getUri(Element_Id _x);
std::string getPredefined(Element_Id _x, std::string const&);
std::ostringstream m_output;
static constexpr auto s_XInclude = "xmlns:xi=\"http://www.w3.org/2001/XInclude\"";
};
}