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 ::= '' // doctypedecl ::= // '' 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 ::= '' 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; }