📄 xml_grammar.hpp
字号:
| Comment;
extSubset =
!TextDecl >> extSubsetDecl;
extSubsetDecl =
*(
markupdecl
| conditionalSect
| DeclSep
);
SDDecl =
S >> L"standalone" >> Eq >>
(
(L'\'' >> (str_p(L"yes") | L"no") >> L'\'')
| (L'"' >> (str_p(L"yes") | L"no") >> L'"')
);
element =
EmptyElemTag
| STag >> spirit::spflush >> content >> ETag;
STag =
L'<' >> Name >> *(S >> Attribute) >> !S >> L'>';
Attribute =
Name >> Eq >> AttValue;
ETag =
L"</" >> Name >> !S >> L'>';
content =
!CharData >>
*(
(
element
| Reference
| CDSect
| PI
| Comment
) >> !CharData
);
EmptyElemTag =
L'<' >> Name >> *(S >> Attribute) >> !S >> L"/>";
elementdecl =
L"<!ELEMENT" >> S >> Name >> S >> contentspec >> !S >> L'>';
contentspec =
str_p(L"EMPTY")
| L"ANY"
| Mixed
| children;
children =
(choice | seq) >> !(ch_p(L'?') | L'*' | L'+');
cp =
(Name | choice | seq) >> !(ch_p(L'?') | L'*' | L'+');
choice =
L'(' >> !S >> cp
>> +(!S >> L'|' >> !S >> cp)
>> !S >> L')';
seq =
L'(' >> !S >> cp >>
*(!S >> L',' >> !S >> cp)
>> !S >> L')';
Mixed =
L'(' >> !S >> L"#PCDATA"
>> *(!S >> L'|' >> !S >> Name)
>> !S >> L")*"
| L'(' >> !S >> L"#PCDATA" >> !S >> L')';
AttlistDecl =
L"<!ATTLIST" >> S >> Name >> *AttDef >> !S >> L'>';
AttDef =
S >> Name >> S >> AttType >> S >> DefaultDecl;
AttType =
StringType
| TokenizedType
| EnumeratedType;
StringType =
str_p(L"CDATA");
TokenizedType =
longest[
str_p(L"ID")
| L"IDREF"
| L"IDREFS"
| L"ENTITY"
| L"ENTITIES"
| L"NMTOKEN"
| L"NMTOKENS"
];
EnumeratedType =
NotationType
| Enumeration;
NotationType =
L"NOTATION" >> S >> L'(' >> !S >> Name
>> *(!S >> L'|' >> !S >> Name)
>> !S >> L')';
Enumeration =
L'(' >> !S >> Nmtoken
>> *(!S >> L'|' >> !S >> Nmtoken)
>> !S >> L')';
DefaultDecl =
str_p(L"#REQUIRED")
| L"#IMPLIED"
| !(L"#FIXED" >> S) >> AttValue;
conditionalSect =
includeSect
| ignoreSect;
includeSect =
L"<![" >> !S >> L"INCLUDE" >> !S
>> L'[' >> extSubsetDecl >> L"]]>";
ignoreSect =
L"<![" >> !S >> L"IGNORE" >> !S
>> L'[' >> *ignoreSectContents >> L"]]>";
ignoreSectContents =
Ignore >> *(L"<![" >> ignoreSectContents >> L"]]>" >> Ignore);
Ignore =
*(Char - (str_p(L"<![") | L"]]>"));
CharRef =
L"&#" >> +digit >> L';'
| L"&#x" >> +xdigit >> L';';
Reference =
EntityRef
| CharRef;
EntityRef =
L'&' >> Name >> L';';
PEReference =
L'%' >> Name >> L';';
EntityDecl =
GEDecl
| PEDecl;
GEDecl =
L"<!ENTITY" >> S >> Name >> S >> EntityDef >> !S >> L'>';
PEDecl =
L"<!ENTITY" >> S >> L'%' >> S >> Name >> S >> PEDef
>> !S >> L'>';
EntityDef =
EntityValue
| ExternalID >> !NDataDecl;
PEDef =
EntityValue
| ExternalID;
ExternalID =
L"SYSTEM" >> S >> SystemLiteral
| L"PUBLIC" >> S >> PubidLiteral >> S >> SystemLiteral;
NDataDecl =
S >> L"NDATA" >> S >> Name;
TextDecl =
L"<?xml" >> !VersionInfo >> EncodingDecl >> !S >> L"?>";
extParsedEnt =
!TextDecl >> content;
EncodingDecl =
S >> L"encoding" >> Eq
>> ( L'"' >> EncName >> L'"'
| L'\'' >> EncName >> L'\''
);
EncName =
alpha >> *(alnum | L'.' | L'_' | L'-');
NotationDecl =
L"<!NOTATION" >> S >> Name >> S
>> (ExternalID | PublicID) >> !S >> L'>';
PublicID =
L"PUBLIC" >> S >> PubidLiteral;
SPIRIT_DEBUG_RULE(document);
SPIRIT_DEBUG_RULE(prolog);
SPIRIT_DEBUG_RULE(element);
SPIRIT_DEBUG_RULE(Misc);
SPIRIT_DEBUG_RULE(PEReference);
SPIRIT_DEBUG_RULE(Reference);
SPIRIT_DEBUG_RULE(PITarget);
SPIRIT_DEBUG_RULE(CData);
SPIRIT_DEBUG_RULE(doctypedecl);
SPIRIT_DEBUG_RULE(XMLDecl);
SPIRIT_DEBUG_RULE(SDDecl);
SPIRIT_DEBUG_RULE(VersionInfo);
SPIRIT_DEBUG_RULE(EncodingDecl);
SPIRIT_DEBUG_RULE(VersionNum);
SPIRIT_DEBUG_RULE(Eq);
SPIRIT_DEBUG_RULE(DeclSep);
SPIRIT_DEBUG_RULE(ExternalID);
SPIRIT_DEBUG_RULE(markupdecl);
SPIRIT_DEBUG_RULE(NotationDecl);
SPIRIT_DEBUG_RULE(EntityDecl);
SPIRIT_DEBUG_RULE(AttlistDecl);
SPIRIT_DEBUG_RULE(elementdecl);
SPIRIT_DEBUG_RULE(TextDecl);
SPIRIT_DEBUG_RULE(extSubsetDecl);
SPIRIT_DEBUG_RULE(conditionalSect);
SPIRIT_DEBUG_RULE(EmptyElemTag);
SPIRIT_DEBUG_RULE(STag);
SPIRIT_DEBUG_RULE(content);
SPIRIT_DEBUG_RULE(ETag);
SPIRIT_DEBUG_RULE(Attribute);
SPIRIT_DEBUG_RULE(contentspec);
SPIRIT_DEBUG_RULE(Mixed);
SPIRIT_DEBUG_RULE(children);
SPIRIT_DEBUG_RULE(choice);
SPIRIT_DEBUG_RULE(seq);
SPIRIT_DEBUG_RULE(cp);
SPIRIT_DEBUG_RULE(AttDef);
SPIRIT_DEBUG_RULE(AttType);
SPIRIT_DEBUG_RULE(DefaultDecl);
SPIRIT_DEBUG_RULE(StringType);
SPIRIT_DEBUG_RULE(TokenizedType);
SPIRIT_DEBUG_RULE(EnumeratedType);
SPIRIT_DEBUG_RULE(NotationType);
SPIRIT_DEBUG_RULE(Enumeration);
SPIRIT_DEBUG_RULE(EntityValue);
SPIRIT_DEBUG_RULE(AttValue);
SPIRIT_DEBUG_RULE(SystemLiteral);
SPIRIT_DEBUG_RULE(PubidLiteral);
SPIRIT_DEBUG_RULE(CharDataChar);
SPIRIT_DEBUG_RULE(CharData);
SPIRIT_DEBUG_RULE(Comment);
SPIRIT_DEBUG_RULE(PI);
SPIRIT_DEBUG_RULE(CDSect);
SPIRIT_DEBUG_RULE(extSubset);
SPIRIT_DEBUG_RULE(includeSect);
SPIRIT_DEBUG_RULE(ignoreSect);
SPIRIT_DEBUG_RULE(ignoreSectContents);
SPIRIT_DEBUG_RULE(Ignore);
SPIRIT_DEBUG_RULE(CharRef);
SPIRIT_DEBUG_RULE(EntityRef);
SPIRIT_DEBUG_RULE(GEDecl);
SPIRIT_DEBUG_RULE(PEDecl);
SPIRIT_DEBUG_RULE(EntityDef);
SPIRIT_DEBUG_RULE(PEDef);
SPIRIT_DEBUG_RULE(NDataDecl);
SPIRIT_DEBUG_RULE(extParsedEnt);
SPIRIT_DEBUG_RULE(EncName);
SPIRIT_DEBUG_RULE(PublicID);
SPIRIT_DEBUG_RULE(document);
SPIRIT_DEBUG_RULE(S);
SPIRIT_DEBUG_RULE(Name);
SPIRIT_DEBUG_RULE(Names);
SPIRIT_DEBUG_RULE(Nmtoken);
SPIRIT_DEBUG_RULE(Nmtokens);
}
spirit::rule<IteratorT> const&
start() const
{
return document;
}
};
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -