2019-12-13 19:07:39 +00:00
|
|
|
/*
|
|
|
|
* 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&);
|
|
|
|
|
2019-12-27 16:50:49 +00:00
|
|
|
template <typename T>
|
|
|
|
bool isValid(T const& messageType) {
|
|
|
|
return T::Type_IsValid(messageType.type());
|
|
|
|
}
|
|
|
|
|
2019-12-13 19:07:39 +00:00
|
|
|
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\"";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|