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.
93 lines
2.2 KiB
93 lines
2.2 KiB
syntax = "proto2";
|
|
package protobuf_mutator.xml;
|
|
|
|
// Simplified definition of XML formant according https://www.w3.org/TR/xml/
|
|
// Not all features are implemented and some rules are flattened.
|
|
|
|
// There are no required fields to allow backward compatibility with older
|
|
// corpus.
|
|
|
|
// document ::= prolog element Misc*
|
|
// prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
|
|
// XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
|
|
// doctypedecl ::=
|
|
// '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'
|
|
message Document {
|
|
// XMLDecl
|
|
optional string version = 1;
|
|
optional string encoding = 2;
|
|
optional bool standalone = 3;
|
|
|
|
repeated Misk misk1 = 4;
|
|
optional DoctypeDecl doctype = 5;
|
|
optional Element element = 6;
|
|
repeated Misk misk2 = 7;
|
|
}
|
|
|
|
message DoctypeDecl {
|
|
optional string name = 1;
|
|
optional string external_id = 2;
|
|
optional string int_subset = 3;
|
|
repeated Misk misk = 4;
|
|
}
|
|
|
|
message Misk {
|
|
oneof _ {
|
|
Pi pi = 1;
|
|
string comment = 2;
|
|
}
|
|
}
|
|
|
|
// element ::= EmptyElemTag | STag content ETag
|
|
message Element {
|
|
optional Tag tag = 1;
|
|
// Use EmptyElemTag tag if missing, or STag and ETag otherwise.
|
|
repeated Content content = 2;
|
|
}
|
|
|
|
// EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
|
|
// STag ::= '<' Name (S Attribute)* S? '>'
|
|
// ETag ::= '</' Name S? '>'
|
|
message Tag {
|
|
optional string name = 1;
|
|
repeated Attribute attribute = 2;
|
|
}
|
|
|
|
message Reference {
|
|
optional string name = 1;
|
|
optional bool entry = 2;
|
|
}
|
|
|
|
message Pi {
|
|
optional string target = 1;
|
|
optional string data = 2;
|
|
}
|
|
|
|
// content ::=
|
|
// CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*
|
|
message Content {
|
|
oneof _ {
|
|
string char_data = 1;
|
|
Element element = 2;
|
|
Reference reference = 3;
|
|
string cdsect = 4;
|
|
Misk misk = 5;
|
|
}
|
|
}
|
|
|
|
// Attribute ::= Name Eq AttValue
|
|
message Attribute {
|
|
optional string name = 1;
|
|
optional string value = 2;
|
|
}
|
|
|
|
message Input {
|
|
optional Document document = 1;
|
|
|
|
// Option will be sent into libxml2 parser.
|
|
// TODO(vitalybuka): Use proto extension. Options is libxml2 specific,
|
|
// other libs may need different data. At the moment mutator does not support
|
|
// extensions.
|
|
optional uint32 options = 2;
|
|
}
|