xref: /aosp_15_r20/external/libprotobuf-mutator/examples/xml/xml.proto (revision fd525a9c096e28cf6f8d8719388df0568a611e7b)
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