1*fd525a9cSAndroid Build Coastguard Workersyntax = "proto2"; 2*fd525a9cSAndroid Build Coastguard Workerpackage protobuf_mutator.xml; 3*fd525a9cSAndroid Build Coastguard Worker 4*fd525a9cSAndroid Build Coastguard Worker// Simplified definition of XML formant according https://www.w3.org/TR/xml/ 5*fd525a9cSAndroid Build Coastguard Worker// Not all features are implemented and some rules are flattened. 6*fd525a9cSAndroid Build Coastguard Worker 7*fd525a9cSAndroid Build Coastguard Worker// There are no required fields to allow backward compatibility with older 8*fd525a9cSAndroid Build Coastguard Worker// corpus. 9*fd525a9cSAndroid Build Coastguard Worker 10*fd525a9cSAndroid Build Coastguard Worker// document ::= prolog element Misc* 11*fd525a9cSAndroid Build Coastguard Worker// prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? 12*fd525a9cSAndroid Build Coastguard Worker// XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' 13*fd525a9cSAndroid Build Coastguard Worker// doctypedecl ::= 14*fd525a9cSAndroid Build Coastguard Worker// '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' 15*fd525a9cSAndroid Build Coastguard Workermessage Document { 16*fd525a9cSAndroid Build Coastguard Worker // XMLDecl 17*fd525a9cSAndroid Build Coastguard Worker optional string version = 1; 18*fd525a9cSAndroid Build Coastguard Worker optional string encoding = 2; 19*fd525a9cSAndroid Build Coastguard Worker optional bool standalone = 3; 20*fd525a9cSAndroid Build Coastguard Worker 21*fd525a9cSAndroid Build Coastguard Worker repeated Misk misk1 = 4; 22*fd525a9cSAndroid Build Coastguard Worker optional DoctypeDecl doctype = 5; 23*fd525a9cSAndroid Build Coastguard Worker optional Element element = 6; 24*fd525a9cSAndroid Build Coastguard Worker repeated Misk misk2 = 7; 25*fd525a9cSAndroid Build Coastguard Worker} 26*fd525a9cSAndroid Build Coastguard Worker 27*fd525a9cSAndroid Build Coastguard Workermessage DoctypeDecl { 28*fd525a9cSAndroid Build Coastguard Worker optional string name = 1; 29*fd525a9cSAndroid Build Coastguard Worker optional string external_id = 2; 30*fd525a9cSAndroid Build Coastguard Worker optional string int_subset = 3; 31*fd525a9cSAndroid Build Coastguard Worker repeated Misk misk = 4; 32*fd525a9cSAndroid Build Coastguard Worker} 33*fd525a9cSAndroid Build Coastguard Worker 34*fd525a9cSAndroid Build Coastguard Workermessage Misk { 35*fd525a9cSAndroid Build Coastguard Worker oneof _ { 36*fd525a9cSAndroid Build Coastguard Worker Pi pi = 1; 37*fd525a9cSAndroid Build Coastguard Worker string comment = 2; 38*fd525a9cSAndroid Build Coastguard Worker } 39*fd525a9cSAndroid Build Coastguard Worker} 40*fd525a9cSAndroid Build Coastguard Worker 41*fd525a9cSAndroid Build Coastguard Worker// element ::= EmptyElemTag | STag content ETag 42*fd525a9cSAndroid Build Coastguard Workermessage Element { 43*fd525a9cSAndroid Build Coastguard Worker optional Tag tag = 1; 44*fd525a9cSAndroid Build Coastguard Worker // Use EmptyElemTag tag if missing, or STag and ETag otherwise. 45*fd525a9cSAndroid Build Coastguard Worker repeated Content content = 2; 46*fd525a9cSAndroid Build Coastguard Worker} 47*fd525a9cSAndroid Build Coastguard Worker 48*fd525a9cSAndroid Build Coastguard Worker// EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' 49*fd525a9cSAndroid Build Coastguard Worker// STag ::= '<' Name (S Attribute)* S? '>' 50*fd525a9cSAndroid Build Coastguard Worker// ETag ::= '</' Name S? '>' 51*fd525a9cSAndroid Build Coastguard Workermessage Tag { 52*fd525a9cSAndroid Build Coastguard Worker optional string name = 1; 53*fd525a9cSAndroid Build Coastguard Worker repeated Attribute attribute = 2; 54*fd525a9cSAndroid Build Coastguard Worker} 55*fd525a9cSAndroid Build Coastguard Worker 56*fd525a9cSAndroid Build Coastguard Workermessage Reference { 57*fd525a9cSAndroid Build Coastguard Worker optional string name = 1; 58*fd525a9cSAndroid Build Coastguard Worker optional bool entry = 2; 59*fd525a9cSAndroid Build Coastguard Worker} 60*fd525a9cSAndroid Build Coastguard Worker 61*fd525a9cSAndroid Build Coastguard Workermessage Pi { 62*fd525a9cSAndroid Build Coastguard Worker optional string target = 1; 63*fd525a9cSAndroid Build Coastguard Worker optional string data = 2; 64*fd525a9cSAndroid Build Coastguard Worker} 65*fd525a9cSAndroid Build Coastguard Worker 66*fd525a9cSAndroid Build Coastguard Worker// content ::= 67*fd525a9cSAndroid Build Coastguard Worker// CharData? ((element | Reference | CDSect | PI | Comment) CharData?)* 68*fd525a9cSAndroid Build Coastguard Workermessage Content { 69*fd525a9cSAndroid Build Coastguard Worker oneof _ { 70*fd525a9cSAndroid Build Coastguard Worker string char_data = 1; 71*fd525a9cSAndroid Build Coastguard Worker Element element = 2; 72*fd525a9cSAndroid Build Coastguard Worker Reference reference = 3; 73*fd525a9cSAndroid Build Coastguard Worker string cdsect = 4; 74*fd525a9cSAndroid Build Coastguard Worker Misk misk = 5; 75*fd525a9cSAndroid Build Coastguard Worker } 76*fd525a9cSAndroid Build Coastguard Worker} 77*fd525a9cSAndroid Build Coastguard Worker 78*fd525a9cSAndroid Build Coastguard Worker// Attribute ::= Name Eq AttValue 79*fd525a9cSAndroid Build Coastguard Workermessage Attribute { 80*fd525a9cSAndroid Build Coastguard Worker optional string name = 1; 81*fd525a9cSAndroid Build Coastguard Worker optional string value = 2; 82*fd525a9cSAndroid Build Coastguard Worker} 83*fd525a9cSAndroid Build Coastguard Worker 84*fd525a9cSAndroid Build Coastguard Workermessage Input { 85*fd525a9cSAndroid Build Coastguard Worker optional Document document = 1; 86*fd525a9cSAndroid Build Coastguard Worker 87*fd525a9cSAndroid Build Coastguard Worker // Option will be sent into libxml2 parser. 88*fd525a9cSAndroid Build Coastguard Worker // TODO(vitalybuka): Use proto extension. Options is libxml2 specific, 89*fd525a9cSAndroid Build Coastguard Worker // other libs may need different data. At the moment mutator does not support 90*fd525a9cSAndroid Build Coastguard Worker // extensions. 91*fd525a9cSAndroid Build Coastguard Worker optional uint32 options = 2; 92*fd525a9cSAndroid Build Coastguard Worker} 93