cleanup
This commit is contained in:
parent
fe389c38ca
commit
f0f82bf1f9
|
@ -1,18 +1,13 @@
|
|||
// elements resemble a final tree, including inherited namespace information
|
||||
|
||||
#![feature(drain_filter)]
|
||||
|
||||
/// elements resemble a final tree, including inherited namespace information
|
||||
use std::{
|
||||
collections::{vec_deque, HashMap, HashSet, VecDeque},
|
||||
convert::Infallible,
|
||||
collections::{HashMap, HashSet, VecDeque},
|
||||
str::FromStr,
|
||||
};
|
||||
|
||||
use tracing::debug;
|
||||
use tracing::trace;
|
||||
|
||||
use crate::{
|
||||
error::{DeserializeError, Error},
|
||||
xml::{self, parsers_complete::Parser, Attribute},
|
||||
Result,
|
||||
};
|
||||
|
||||
|
@ -330,16 +325,16 @@ impl Element {
|
|||
let mut children = Vec::new();
|
||||
loop {
|
||||
let child = self.content.front();
|
||||
debug!("child: {:?}", child);
|
||||
trace!("child: {:?}", child);
|
||||
if let Some(child) = child {
|
||||
match child {
|
||||
Content::Element(element) => {
|
||||
if let Ok(child) = <T as FromElement>::from_element(element.clone()) {
|
||||
debug!("parsed child");
|
||||
trace!("parsed child");
|
||||
children.push(child);
|
||||
self.content.pop_front();
|
||||
} else {
|
||||
debug!("failed to parse child");
|
||||
trace!("failed to parse child");
|
||||
return Ok(children);
|
||||
}
|
||||
}
|
||||
|
|
12
src/event.rs
12
src/event.rs
|
@ -1,12 +0,0 @@
|
|||
// tags, declaration, comments, text. individual bits and what they contain, e.g. tag contains attributes and namespace declarations, lang, ONLY within the tag
|
||||
|
||||
pub enum Event<'s> {
|
||||
StartTag(Vec<Event<'s>>),
|
||||
EmptyTag(Vec<Event>),
|
||||
Attribute(())
|
||||
CData(&'s str),
|
||||
Comment(&'s str),
|
||||
Declaration(Vec<Attribute<'s>>),
|
||||
Attribute((&'str))
|
||||
EndTag,
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
// lexer: tokenizes to bits like '<', '<?', '"', etc.
|
||||
|
||||
pub enum Token {
|
||||
Whitespace,
|
||||
OpenTag,
|
||||
CloseTag,
|
||||
Slash,
|
||||
Text(String),
|
||||
}
|
|
@ -1,14 +1,10 @@
|
|||
use circular::Buffer;
|
||||
use futures::{FutureExt, Stream};
|
||||
use nom::Err;
|
||||
use std::{
|
||||
collections::{hash_set, BTreeMap, HashMap, HashSet, VecDeque},
|
||||
future::Future,
|
||||
path::Prefix,
|
||||
pin::{pin, Pin},
|
||||
str::{self, FromStr},
|
||||
collections::{HashMap, HashSet, VecDeque},
|
||||
str,
|
||||
};
|
||||
use tokio::io::{AsyncBufRead, AsyncBufReadExt, AsyncRead, AsyncReadExt};
|
||||
use tokio::io::{AsyncRead, AsyncReadExt};
|
||||
use tracing::debug;
|
||||
|
||||
use crate::{
|
||||
|
@ -732,11 +728,11 @@ impl<R> Reader<R> {
|
|||
char_data.map(|char_data| text.as_mut().map(|s| s.push_str(*char_data)));
|
||||
}
|
||||
// TODO: is this important?
|
||||
xml::ContentItem::PI(pi) => {
|
||||
xml::ContentItem::PI(_pi) => {
|
||||
char_data.map(|char_data| text.as_mut().map(|s| s.push_str(*char_data)));
|
||||
}
|
||||
// TODO: comments?
|
||||
xml::ContentItem::Comment(comment) => {
|
||||
xml::ContentItem::Comment(_comment) => {
|
||||
char_data.map(|char_data| text.as_mut().map(|s| s.push_str(*char_data)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,6 @@
|
|||
use std::{
|
||||
collections::{HashSet, VecDeque},
|
||||
pin::pin,
|
||||
str::FromStr,
|
||||
task::Poll,
|
||||
};
|
||||
use std::collections::HashSet;
|
||||
|
||||
use async_recursion::async_recursion;
|
||||
use circular::Buffer;
|
||||
use futures::{Future, FutureExt, Sink, SinkExt};
|
||||
use tokio::io::{AsyncWrite, AsyncWriteExt};
|
||||
|
||||
use crate::{
|
||||
|
@ -15,7 +8,7 @@ use crate::{
|
|||
element::{escape_str, Content, Element, IntoContent, IntoElement, Name, NamespaceDeclaration},
|
||||
endable::Endable,
|
||||
error::Error,
|
||||
xml::{self, composers::Composer, parsers_complete::Parser, ETag, XMLDecl},
|
||||
xml::{self, composers::Composer, parsers_complete::Parser},
|
||||
Result, XMLNS_NS, XML_NS,
|
||||
};
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ use super::{
|
|||
|
||||
/// Compact Composer trait, can create different trait later for pretty composition
|
||||
pub trait Composer<'s> {
|
||||
async fn write<W>(&self, writer: &mut W) -> io::Result<()>
|
||||
fn write<W>(&self, writer: &mut W) -> impl std::future::Future<Output = io::Result<()>>
|
||||
where
|
||||
W: Unpin + AsyncWrite;
|
||||
}
|
||||
|
@ -817,7 +817,8 @@ impl<'s> Composer<'s> for Content<'s> {
|
|||
ContentItem::CDSect(cd_sect) => cd_sect.write(writer).await?,
|
||||
ContentItem::PI(pi) => pi.write(writer).await?,
|
||||
ContentItem::Comment(comment) => comment.write(writer).await?,
|
||||
_ => todo!("verify no split chardata"),
|
||||
// TODO: verify no split chardata
|
||||
// _ => todo!("verify no split chardata"),
|
||||
}
|
||||
if let Some(char_data) = char_data {
|
||||
char_data.write(writer).await?;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use std::{char, convert::Infallible, ops::Deref, str::FromStr};
|
||||
use std::{char, ops::Deref};
|
||||
|
||||
use parsers_complete::Parser;
|
||||
|
||||
|
|
|
@ -32,14 +32,14 @@ use super::{
|
|||
pub trait Parser<'s> {
|
||||
type Output;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Self::Output>;
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Self::Output>;
|
||||
}
|
||||
|
||||
/// [1] NSAttName ::= PrefixedAttName | DefaultAttName
|
||||
impl<'s> Parser<'s> for NSAttName<'s> {
|
||||
type Output = NSAttName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Self::Output> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Self::Output> {
|
||||
alt((
|
||||
map(PrefixedAttName::parse, |prefixed_att_name| {
|
||||
NSAttName::PrefixedAttName(prefixed_att_name)
|
||||
|
@ -53,7 +53,7 @@ impl<'s> Parser<'s> for NSAttName<'s> {
|
|||
impl<'s> Parser<'s> for PrefixedAttName<'s> {
|
||||
type Output = PrefixedAttName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PrefixedAttName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PrefixedAttName<'s>> {
|
||||
map(preceded(tag("xmlns:"), NCName::parse), |nc_name| {
|
||||
PrefixedAttName(nc_name)
|
||||
})(input)
|
||||
|
@ -74,8 +74,8 @@ impl Parser<'_> for DefaultAttName {
|
|||
impl<'s> Parser<'s> for NCName<'s> {
|
||||
type Output = NCName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NCName<'s>> {
|
||||
let (rest, name) = peek(recognize(Name::parse))(input)?;
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NCName<'s>> {
|
||||
let (_rest, name) = peek(recognize(Name::parse))(input)?;
|
||||
if let Some(char) = name.find(':') {
|
||||
map(take(char), |nc_name| NCName(nc_name))(input)
|
||||
} else {
|
||||
|
@ -88,7 +88,7 @@ impl<'s> Parser<'s> for NCName<'s> {
|
|||
impl<'s> Parser<'s> for QName<'s> {
|
||||
type Output = QName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, QName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, QName<'s>> {
|
||||
alt((
|
||||
map(PrefixedName::parse, |prefixed_name| {
|
||||
QName::PrefixedName(prefixed_name)
|
||||
|
@ -104,7 +104,7 @@ impl<'s> Parser<'s> for QName<'s> {
|
|||
impl<'s> Parser<'s> for PrefixedName<'s> {
|
||||
type Output = PrefixedName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PrefixedName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PrefixedName<'s>> {
|
||||
map(
|
||||
separated_pair(Prefix::parse, char(':'), LocalPart::parse),
|
||||
|(prefix, local_part)| PrefixedName { prefix, local_part },
|
||||
|
@ -116,7 +116,7 @@ impl<'s> Parser<'s> for PrefixedName<'s> {
|
|||
impl<'s> Parser<'s> for UnprefixedName<'s> {
|
||||
type Output = UnprefixedName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, UnprefixedName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, UnprefixedName<'s>> {
|
||||
map(LocalPart::parse, |local_part| UnprefixedName(local_part))(input)
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ impl<'s> Parser<'s> for UnprefixedName<'s> {
|
|||
impl<'s> Parser<'s> for Prefix<'s> {
|
||||
type Output = Prefix<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Prefix<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Prefix<'s>> {
|
||||
map(NCName::parse, |nc_name| Prefix(nc_name))(input)
|
||||
}
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ impl<'s> Parser<'s> for Prefix<'s> {
|
|||
impl<'s> Parser<'s> for LocalPart<'s> {
|
||||
type Output = LocalPart<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, LocalPart<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, LocalPart<'s>> {
|
||||
map(NCName::parse, |nc_name| LocalPart(nc_name))(input)
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ impl<'s> Parser<'s> for LocalPart<'s> {
|
|||
impl<'s> Parser<'s> for Document<'s> {
|
||||
type Output = Document<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Document<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Document<'s>> {
|
||||
tuple((Prolog::parse, Element::parse, many0(Misc::parse)))(input)
|
||||
}
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ impl Parser<'_> for NameChar {
|
|||
impl<'s> Parser<'s> for Name<'s> {
|
||||
type Output = Name<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Name<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Name<'s>> {
|
||||
map(
|
||||
recognize(pair(NameStartChar::parse, many0(NameChar::parse))),
|
||||
|name| Name(name),
|
||||
|
@ -223,7 +223,7 @@ impl<'s> Parser<'s> for Names<'s> {
|
|||
type Output = Names<'s>;
|
||||
|
||||
// TODO: fix
|
||||
fn parse(input: &'s str) -> IResult<&str, Names<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Names<'s>> {
|
||||
map(
|
||||
pair(Name::parse, many0(preceded(char('\u{20}'), Name::parse))),
|
||||
|(head, tail)| Names(vec![vec![head], tail].concat()),
|
||||
|
@ -235,7 +235,7 @@ impl<'s> Parser<'s> for Names<'s> {
|
|||
impl<'s> Parser<'s> for Nmtoken<'s> {
|
||||
type Output = Nmtoken<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Nmtoken<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Nmtoken<'s>> {
|
||||
map(recognize(many1(NameChar::parse)), |nmtoken| {
|
||||
Nmtoken(nmtoken)
|
||||
})(input)
|
||||
|
@ -246,7 +246,7 @@ impl<'s> Parser<'s> for Nmtoken<'s> {
|
|||
impl<'s> Parser<'s> for Nmtokens<'s> {
|
||||
type Output = Nmtokens<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Nmtokens<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Nmtokens<'s>> {
|
||||
map(
|
||||
pair(
|
||||
Nmtoken::parse,
|
||||
|
@ -262,7 +262,7 @@ impl<'s> Parser<'s> for Nmtokens<'s> {
|
|||
impl<'s> Parser<'s> for EntityValue<'s> {
|
||||
type Output = EntityValue<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityValue<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityValue<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -311,7 +311,7 @@ impl<'s> Parser<'s> for EntityValue<'s> {
|
|||
impl<'s> Parser<'s> for AttValue<'s> {
|
||||
type Output = AttValue<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttValue<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttValue<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -347,7 +347,7 @@ impl<'s> Parser<'s> for AttValue<'s> {
|
|||
impl<'s> Parser<'s> for SystemLiteral<'s> {
|
||||
type Output = SystemLiteral<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, SystemLiteral<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, SystemLiteral<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(char('"'), recognize(many0(none_of("\""))), char('"')),
|
||||
|
@ -365,7 +365,7 @@ impl<'s> Parser<'s> for SystemLiteral<'s> {
|
|||
impl<'s> Parser<'s> for PubidLiteral<'s> {
|
||||
type Output = PubidLiteral<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PubidLiteral<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PubidLiteral<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(char('"'), recognize(many0(PubidChar::parse)), char('"')),
|
||||
|
@ -401,7 +401,7 @@ impl Parser<'_> for PubidChar {
|
|||
impl<'s> Parser<'s> for CharData<'s> {
|
||||
type Output = CharData<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CharData<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CharData<'s>> {
|
||||
map(
|
||||
recognize(many_till(
|
||||
none_of("<&"),
|
||||
|
@ -416,7 +416,7 @@ impl<'s> Parser<'s> for CharData<'s> {
|
|||
impl<'s> Parser<'s> for Comment<'s> {
|
||||
type Output = Comment<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Comment<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Comment<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<!--"),
|
||||
|
@ -432,7 +432,7 @@ impl<'s> Parser<'s> for Comment<'s> {
|
|||
impl<'s> Parser<'s> for PI<'s> {
|
||||
type Output = PI<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PI<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PI<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?"),
|
||||
|
@ -457,7 +457,7 @@ impl<'s> Parser<'s> for PI<'s> {
|
|||
impl<'s> Parser<'s> for PITarget<'s> {
|
||||
type Output = PITarget<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PITarget<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PITarget<'s>> {
|
||||
let (rest, name) = Name::parse(input)?;
|
||||
if name.0.to_lowercase() == "xml" {
|
||||
return Err(Err::Error(Error {
|
||||
|
@ -475,7 +475,7 @@ impl<'s> Parser<'s> for PITarget<'s> {
|
|||
impl<'s> Parser<'s> for CDSect<'s> {
|
||||
type Output = CDSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CDSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CDSect<'s>> {
|
||||
map(
|
||||
delimited(CDStart::parse, CData::parse, CDEnd::parse),
|
||||
|c_data| CDSect(c_data),
|
||||
|
@ -496,7 +496,7 @@ impl Parser<'_> for CDStart {
|
|||
impl<'s> Parser<'s> for CData<'s> {
|
||||
type Output = CData<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CData<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CData<'s>> {
|
||||
map(
|
||||
recognize(many_till(Char::parse, peek(tag("]]>")))),
|
||||
|c_data| CData(c_data),
|
||||
|
@ -517,7 +517,7 @@ impl Parser<'_> for CDEnd {
|
|||
impl<'s> Parser<'s> for Prolog<'s> {
|
||||
type Output = Prolog<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Prolog<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Prolog<'s>> {
|
||||
tuple((
|
||||
opt(XMLDecl::parse),
|
||||
many0(Misc::parse),
|
||||
|
@ -530,7 +530,7 @@ impl<'s> Parser<'s> for Prolog<'s> {
|
|||
impl<'s> Parser<'s> for XMLDecl<'s> {
|
||||
type Output = XMLDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, XMLDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, XMLDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?xml"),
|
||||
|
@ -602,7 +602,7 @@ impl Parser<'_> for VersionNum {
|
|||
impl<'s> Parser<'s> for Misc<'s> {
|
||||
type Output = Misc<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Misc<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Misc<'s>> {
|
||||
alt((
|
||||
map(Comment::parse, |comment| Misc::Comment(comment)),
|
||||
map(PI::parse, |pi| Misc::PI(pi)),
|
||||
|
@ -616,7 +616,7 @@ impl<'s> Parser<'s> for Misc<'s> {
|
|||
impl<'s> Parser<'s> for DoctypeDecl<'s> {
|
||||
type Output = DoctypeDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DoctypeDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DoctypeDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!DOCTYPE"), S::parse),
|
||||
|
@ -646,7 +646,7 @@ impl<'s> Parser<'s> for DoctypeDecl<'s> {
|
|||
impl<'s> Parser<'s> for DeclSep<'s> {
|
||||
type Output = DeclSep<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DeclSep<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DeclSep<'s>> {
|
||||
alt((
|
||||
map(PEReference::parse, |pe_reference| {
|
||||
DeclSep::PEReference(pe_reference)
|
||||
|
@ -660,7 +660,7 @@ impl<'s> Parser<'s> for DeclSep<'s> {
|
|||
impl<'s> Parser<'s> for IntSubset<'s> {
|
||||
type Output = IntSubset<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IntSubset<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IntSubset<'s>> {
|
||||
many0(alt((
|
||||
map(MarkupDecl::parse, |markup_decl| {
|
||||
IntSubsetDeclaration::MarkupDecl(markup_decl)
|
||||
|
@ -676,7 +676,7 @@ impl<'s> Parser<'s> for IntSubset<'s> {
|
|||
impl<'s> Parser<'s> for MarkupDecl<'s> {
|
||||
type Output = MarkupDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, MarkupDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, MarkupDecl<'s>> {
|
||||
alt((
|
||||
map(Elementdecl::parse, |elementdecl| {
|
||||
MarkupDecl::Elementdecl(elementdecl)
|
||||
|
@ -700,7 +700,7 @@ impl<'s> Parser<'s> for MarkupDecl<'s> {
|
|||
impl<'s> Parser<'s> for ExtSubset<'s> {
|
||||
type Output = ExtSubset<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtSubset<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtSubset<'s>> {
|
||||
map(
|
||||
pair(opt(TextDecl::parse), ExtSubsetDecl::parse),
|
||||
|(text_decl, ext_subset_decl)| ExtSubset {
|
||||
|
@ -715,7 +715,7 @@ impl<'s> Parser<'s> for ExtSubset<'s> {
|
|||
impl<'s> Parser<'s> for ExtSubsetDecl<'s> {
|
||||
type Output = ExtSubsetDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtSubsetDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtSubsetDecl<'s>> {
|
||||
many0(alt((
|
||||
map(MarkupDecl::parse, |markup_decl| {
|
||||
ExtSubsetDeclaration::MarkupDecl(markup_decl)
|
||||
|
@ -765,7 +765,7 @@ impl Parser<'_> for SDDecl {
|
|||
impl<'s> Parser<'s> for Element<'s> {
|
||||
type Output = Element<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Element<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Element<'s>> {
|
||||
alt((
|
||||
map(EmptyElemTag::parse, |empty_elem_tag| {
|
||||
Element::Empty(empty_elem_tag)
|
||||
|
@ -783,7 +783,7 @@ impl<'s> Parser<'s> for Element<'s> {
|
|||
impl<'s> Parser<'s> for STag<'s> {
|
||||
type Output = STag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, STag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, STag<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<"),
|
||||
|
@ -799,7 +799,7 @@ impl<'s> Parser<'s> for STag<'s> {
|
|||
impl<'s> Parser<'s> for Attribute<'s> {
|
||||
type Output = Attribute<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Attribute<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Attribute<'s>> {
|
||||
alt((
|
||||
map(
|
||||
separated_pair(NSAttName::parse, Eq::parse, AttValue::parse),
|
||||
|
@ -814,7 +814,7 @@ impl<'s> Parser<'s> for Attribute<'s> {
|
|||
}
|
||||
// pub type Attribute<'s> = (Name<'s>, AttValue<'s>);
|
||||
/// [41] Attribute ::= Name Eq AttValue
|
||||
// pub fn attribute(input: &str) -> IResult<&str, Attribute> {
|
||||
// pub fn attribute(input: &str) -> IResult<&'s str, Attribute> {
|
||||
// separated_pair(name, eq, att_value)(input)
|
||||
// }
|
||||
|
||||
|
@ -823,7 +823,7 @@ impl<'s> Parser<'s> for Attribute<'s> {
|
|||
impl<'s> Parser<'s> for ETag<'s> {
|
||||
type Output = ETag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ETag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ETag<'s>> {
|
||||
map(
|
||||
delimited(tag("</"), QName::parse, pair(opt(S::parse), tag(">"))),
|
||||
|name| ETag { name },
|
||||
|
@ -834,7 +834,7 @@ impl<'s> Parser<'s> for ETag<'s> {
|
|||
impl<'s> Parser<'s> for ContentItem<'s> {
|
||||
type Output = ContentItem<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ContentItem<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ContentItem<'s>> {
|
||||
alt((
|
||||
map(Element::parse, |element| ContentItem::Element(element)),
|
||||
map(Reference::parse, |reference| {
|
||||
|
@ -851,7 +851,7 @@ impl<'s> Parser<'s> for ContentItem<'s> {
|
|||
impl<'s> Parser<'s> for Content<'s> {
|
||||
type Output = Content<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Content<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Content<'s>> {
|
||||
map(
|
||||
pair(
|
||||
opt(CharData::parse),
|
||||
|
@ -878,7 +878,7 @@ impl<'s> Parser<'s> for Content<'s> {
|
|||
impl<'s> Parser<'s> for EmptyElemTag<'s> {
|
||||
type Output = EmptyElemTag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EmptyElemTag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EmptyElemTag<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<"),
|
||||
|
@ -895,7 +895,7 @@ impl<'s> Parser<'s> for EmptyElemTag<'s> {
|
|||
impl<'s> Parser<'s> for Elementdecl<'s> {
|
||||
type Output = Elementdecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Elementdecl> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Elementdecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ELEMENT"), S::parse),
|
||||
|
@ -911,7 +911,7 @@ impl<'s> Parser<'s> for Elementdecl<'s> {
|
|||
impl<'s> Parser<'s> for Contentspec<'s> {
|
||||
type Output = Contentspec<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Contentspec<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Contentspec<'s>> {
|
||||
alt((
|
||||
value(Contentspec::Empty, tag("EMPTY")),
|
||||
value(Contentspec::Any, tag("ANY")),
|
||||
|
@ -942,7 +942,7 @@ impl Parser<'_> for Occurence {
|
|||
impl<'s> Parser<'s> for Children<'s> {
|
||||
type Output = Children<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Children<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Children<'s>> {
|
||||
map(
|
||||
pair(
|
||||
alt((
|
||||
|
@ -961,7 +961,7 @@ impl<'s> Parser<'s> for Children<'s> {
|
|||
impl<'s> Parser<'s> for Cp<'s> {
|
||||
type Output = Cp<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Cp<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Cp<'s>> {
|
||||
map(
|
||||
pair(
|
||||
alt((
|
||||
|
@ -980,7 +980,7 @@ impl<'s> Parser<'s> for Cp<'s> {
|
|||
impl<'s> Parser<'s> for Choice<'s> {
|
||||
type Output = Choice<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Choice<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Choice<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1005,7 +1005,7 @@ impl<'s> Parser<'s> for Choice<'s> {
|
|||
impl<'s> Parser<'s> for Seq<'s> {
|
||||
type Output = Seq<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Seq<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Seq<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1031,7 +1031,7 @@ impl<'s> Parser<'s> for Seq<'s> {
|
|||
impl<'s> Parser<'s> for Mixed<'s> {
|
||||
type Output = Mixed<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Mixed<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Mixed<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -1063,7 +1063,7 @@ impl<'s> Parser<'s> for Mixed<'s> {
|
|||
impl<'s> Parser<'s> for AttlistDecl<'s> {
|
||||
type Output = AttlistDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttlistDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttlistDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ATTLIST"), S::parse),
|
||||
|
@ -1083,7 +1083,7 @@ impl<'s> Parser<'s> for AttlistDecl<'s> {
|
|||
impl<'s> Parser<'s> for AttDef<'s> {
|
||||
type Output = AttDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttDef<'s>> {
|
||||
map(
|
||||
tuple((
|
||||
preceded(
|
||||
|
@ -1111,7 +1111,7 @@ impl<'s> Parser<'s> for AttDef<'s> {
|
|||
impl<'s> Parser<'s> for AttType<'s> {
|
||||
type Output = AttType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttType<'s>> {
|
||||
alt((
|
||||
value(AttType::StringType, StringType::parse),
|
||||
map(TokenizedType::parse, |tokenized_type| {
|
||||
|
@ -1157,7 +1157,7 @@ impl Parser<'_> for TokenizedType {
|
|||
impl<'s> Parser<'s> for EnumeratedType<'s> {
|
||||
type Output = EnumeratedType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EnumeratedType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EnumeratedType<'s>> {
|
||||
alt((
|
||||
map(NotationType::parse, |notation_type| {
|
||||
EnumeratedType::NotationType(notation_type)
|
||||
|
@ -1173,7 +1173,7 @@ impl<'s> Parser<'s> for EnumeratedType<'s> {
|
|||
impl<'s> Parser<'s> for NotationType<'s> {
|
||||
type Output = NotationType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NotationType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NotationType<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((tag("NOTATION"), S::parse, tag("("), opt(S::parse))),
|
||||
|
@ -1198,7 +1198,7 @@ impl<'s> Parser<'s> for NotationType<'s> {
|
|||
impl<'s> Parser<'s> for Enumeration<'s> {
|
||||
type Output = Enumeration<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Enumeration<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Enumeration<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1223,7 +1223,7 @@ impl<'s> Parser<'s> for Enumeration<'s> {
|
|||
impl<'s> Parser<'s> for DefaultDecl<'s> {
|
||||
type Output = DefaultDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DefaultDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DefaultDecl<'s>> {
|
||||
alt((
|
||||
value(DefaultDecl::Required, tag("#REQUIRED")),
|
||||
value(DefaultDecl::Implied, tag("#IMPLIED")),
|
||||
|
@ -1239,7 +1239,7 @@ impl<'s> Parser<'s> for DefaultDecl<'s> {
|
|||
impl<'s> Parser<'s> for ConditionalSect<'s> {
|
||||
type Output = ConditionalSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ConditionalSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ConditionalSect<'s>> {
|
||||
alt((
|
||||
map(IncludeSect::parse, |include_sect| {
|
||||
ConditionalSect::IncludeSect(include_sect)
|
||||
|
@ -1255,7 +1255,7 @@ impl<'s> Parser<'s> for ConditionalSect<'s> {
|
|||
impl<'s> Parser<'s> for IncludeSect<'s> {
|
||||
type Output = IncludeSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IncludeSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IncludeSect<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((
|
||||
|
@ -1277,7 +1277,7 @@ impl<'s> Parser<'s> for IncludeSect<'s> {
|
|||
impl<'s> Parser<'s> for IgnoreSect<'s> {
|
||||
type Output = IgnoreSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IgnoreSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IgnoreSect<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((
|
||||
|
@ -1299,7 +1299,7 @@ impl<'s> Parser<'s> for IgnoreSect<'s> {
|
|||
impl<'s> Parser<'s> for IgnoreSectContents<'s> {
|
||||
type Output = IgnoreSectContents<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IgnoreSectContents<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IgnoreSectContents<'s>> {
|
||||
map(
|
||||
pair(
|
||||
Ignore::parse,
|
||||
|
@ -1320,7 +1320,7 @@ impl<'s> Parser<'s> for IgnoreSectContents<'s> {
|
|||
impl<'s> Parser<'s> for Ignore<'s> {
|
||||
type Output = Ignore<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Ignore<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Ignore<'s>> {
|
||||
map(
|
||||
recognize(many_till(Char::parse, peek(alt((tag("<!["), tag("]]>")))))),
|
||||
|ignore| Ignore(ignore),
|
||||
|
@ -1332,7 +1332,7 @@ impl<'s> Parser<'s> for Ignore<'s> {
|
|||
impl<'s> Parser<'s> for CharRef<'s> {
|
||||
type Output = CharRef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CharRef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CharRef<'s>> {
|
||||
alt((
|
||||
delimited(
|
||||
tag("&#"),
|
||||
|
@ -1357,7 +1357,7 @@ impl<'s> Parser<'s> for CharRef<'s> {
|
|||
impl<'s> Parser<'s> for Reference<'s> {
|
||||
type Output = Reference<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Reference<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Reference<'s>> {
|
||||
alt((
|
||||
map(EntityRef::parse, |entity_ref| {
|
||||
Reference::EntityRef(entity_ref)
|
||||
|
@ -1371,7 +1371,7 @@ impl<'s> Parser<'s> for Reference<'s> {
|
|||
impl<'s> Parser<'s> for EntityRef<'s> {
|
||||
type Output = EntityRef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityRef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityRef<'s>> {
|
||||
map(delimited(tag("&"), Name::parse, tag(";")), |entity_ref| {
|
||||
EntityRef(entity_ref)
|
||||
})(input)
|
||||
|
@ -1382,7 +1382,7 @@ impl<'s> Parser<'s> for EntityRef<'s> {
|
|||
impl<'s> Parser<'s> for PEReference<'s> {
|
||||
type Output = PEReference<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEReference<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEReference<'s>> {
|
||||
map(delimited(tag("%"), Name::parse, tag(";")), |pe_reference| {
|
||||
PEReference(pe_reference)
|
||||
})(input)
|
||||
|
@ -1393,7 +1393,7 @@ impl<'s> Parser<'s> for PEReference<'s> {
|
|||
impl<'s> Parser<'s> for EntityDecl<'s> {
|
||||
type Output = EntityDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityDecl<'s>> {
|
||||
alt((
|
||||
map(GEDecl::parse, |ge_decl| EntityDecl::GEDecl(ge_decl)),
|
||||
map(PEDecl::parse, |pe_decl| EntityDecl::PEDecl(pe_decl)),
|
||||
|
@ -1405,7 +1405,7 @@ impl<'s> Parser<'s> for EntityDecl<'s> {
|
|||
impl<'s> Parser<'s> for GEDecl<'s> {
|
||||
type Output = GEDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, GEDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, GEDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ENTITY"), S::parse),
|
||||
|
@ -1421,7 +1421,7 @@ impl<'s> Parser<'s> for GEDecl<'s> {
|
|||
impl<'s> Parser<'s> for PEDecl<'s> {
|
||||
type Output = PEDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((tag("<!ENTITY"), S::parse, tag("%"), S::parse)),
|
||||
|
@ -1437,7 +1437,7 @@ impl<'s> Parser<'s> for PEDecl<'s> {
|
|||
impl<'s> Parser<'s> for EntityDef<'s> {
|
||||
type Output = EntityDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityDef<'s>> {
|
||||
alt((
|
||||
map(EntityValue::parse, |entity_value| {
|
||||
EntityDef::EntityValue(entity_value)
|
||||
|
@ -1457,7 +1457,7 @@ impl<'s> Parser<'s> for EntityDef<'s> {
|
|||
impl<'s> Parser<'s> for PEDef<'s> {
|
||||
type Output = PEDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEDef<'s>> {
|
||||
alt((
|
||||
map(EntityValue::parse, |entity_value| {
|
||||
PEDef::EntityValue(entity_value)
|
||||
|
@ -1470,11 +1470,11 @@ impl<'s> Parser<'s> for PEDef<'s> {
|
|||
}
|
||||
|
||||
/// [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
|
||||
// pub fn external_id(input: &str) -> IResult<&str, ExternalID> {
|
||||
// pub fn external_id(input: &str) -> IResult<&'s str, ExternalID> {
|
||||
impl<'s> Parser<'s> for ExternalID<'s> {
|
||||
type Output = ExternalID<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExternalID<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExternalID<'s>> {
|
||||
alt((
|
||||
map(
|
||||
preceded(pair(tag("SYSTEM"), S::parse), SystemLiteral::parse),
|
||||
|
@ -1498,7 +1498,7 @@ impl<'s> Parser<'s> for ExternalID<'s> {
|
|||
impl<'s> Parser<'s> for NDataDecl<'s> {
|
||||
type Output = NDataDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NDataDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NDataDecl<'s>> {
|
||||
map(
|
||||
preceded(tuple((S::parse, tag("NDATA"), S::parse)), Name::parse),
|
||||
|n_data_decl| NDataDecl(n_data_decl),
|
||||
|
@ -1510,7 +1510,7 @@ impl<'s> Parser<'s> for NDataDecl<'s> {
|
|||
impl<'s> Parser<'s> for TextDecl<'s> {
|
||||
type Output = TextDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, TextDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, TextDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?xml"),
|
||||
|
@ -1532,7 +1532,7 @@ impl<'s> Parser<'s> for TextDecl<'s> {
|
|||
impl<'s> Parser<'s> for ExtParsedEnt<'s> {
|
||||
type Output = ExtParsedEnt<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtParsedEnt<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtParsedEnt<'s>> {
|
||||
map(
|
||||
pair(opt(TextDecl::parse), Content::parse),
|
||||
|(text_decl, content)| ExtParsedEnt { text_decl, content },
|
||||
|
@ -1544,7 +1544,7 @@ impl<'s> Parser<'s> for ExtParsedEnt<'s> {
|
|||
impl<'s> Parser<'s> for EncodingDecl<'s> {
|
||||
type Output = EncodingDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EncodingDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EncodingDecl<'s>> {
|
||||
map(
|
||||
preceded(
|
||||
tuple((S::parse, tag("encoding"), Eq::parse)),
|
||||
|
@ -1562,7 +1562,7 @@ impl<'s> Parser<'s> for EncodingDecl<'s> {
|
|||
impl<'s> Parser<'s> for EncName<'s> {
|
||||
type Output = EncName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EncName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EncName<'s>> {
|
||||
map(
|
||||
recognize(pair(
|
||||
satisfy(|c| matches!(c, 'A'..='Z' | 'a'..='z' )),
|
||||
|
@ -1579,7 +1579,7 @@ impl<'s> Parser<'s> for EncName<'s> {
|
|||
impl<'s> Parser<'s> for NotationDecl<'s> {
|
||||
type Output = NotationDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NotationDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NotationDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!NOTATION"), S::parse),
|
||||
|
@ -1606,7 +1606,7 @@ impl<'s> Parser<'s> for NotationDecl<'s> {
|
|||
impl<'s> Parser<'s> for PublicID<'s> {
|
||||
type Output = PublicID<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PublicID<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PublicID<'s>> {
|
||||
map(
|
||||
preceded(pair(tag("PUBLIC"), S::parse), PubidLiteral::parse),
|
||||
|public_id| PublicID(public_id),
|
||||
|
|
|
@ -29,7 +29,7 @@ use super::{
|
|||
pub trait Parser<'s> {
|
||||
type Output;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Self::Output>;
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Self::Output>;
|
||||
|
||||
fn parse_full(input: &'s str) -> crate::Result<Self::Output> {
|
||||
match <Self as Parser>::parse(input) {
|
||||
|
@ -49,7 +49,7 @@ pub trait Parser<'s> {
|
|||
impl<'s> Parser<'s> for NSAttName<'s> {
|
||||
type Output = NSAttName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Self::Output> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Self::Output> {
|
||||
alt((
|
||||
map(PrefixedAttName::parse, |prefixed_att_name| {
|
||||
NSAttName::PrefixedAttName(prefixed_att_name)
|
||||
|
@ -63,7 +63,7 @@ impl<'s> Parser<'s> for NSAttName<'s> {
|
|||
impl<'s> Parser<'s> for PrefixedAttName<'s> {
|
||||
type Output = PrefixedAttName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PrefixedAttName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PrefixedAttName<'s>> {
|
||||
map(preceded(tag("xmlns:"), NCName::parse), |nc_name| {
|
||||
PrefixedAttName(nc_name)
|
||||
})(input)
|
||||
|
@ -84,8 +84,8 @@ impl Parser<'_> for DefaultAttName {
|
|||
impl<'s> Parser<'s> for NCName<'s> {
|
||||
type Output = NCName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NCName<'s>> {
|
||||
let (rest, name) = peek(recognize(Name::parse))(input)?;
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NCName<'s>> {
|
||||
let (_rest, name) = peek(recognize(Name::parse))(input)?;
|
||||
if let Some(char) = name.find(':') {
|
||||
map(take(char), |nc_name| NCName(nc_name))(input)
|
||||
} else {
|
||||
|
@ -98,7 +98,7 @@ impl<'s> Parser<'s> for NCName<'s> {
|
|||
impl<'s> Parser<'s> for QName<'s> {
|
||||
type Output = QName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, QName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, QName<'s>> {
|
||||
alt((
|
||||
map(PrefixedName::parse, |prefixed_name| {
|
||||
QName::PrefixedName(prefixed_name)
|
||||
|
@ -114,7 +114,7 @@ impl<'s> Parser<'s> for QName<'s> {
|
|||
impl<'s> Parser<'s> for PrefixedName<'s> {
|
||||
type Output = PrefixedName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PrefixedName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PrefixedName<'s>> {
|
||||
map(
|
||||
separated_pair(Prefix::parse, char(':'), LocalPart::parse),
|
||||
|(prefix, local_part)| PrefixedName { prefix, local_part },
|
||||
|
@ -126,7 +126,7 @@ impl<'s> Parser<'s> for PrefixedName<'s> {
|
|||
impl<'s> Parser<'s> for UnprefixedName<'s> {
|
||||
type Output = UnprefixedName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, UnprefixedName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, UnprefixedName<'s>> {
|
||||
map(LocalPart::parse, |local_part| UnprefixedName(local_part))(input)
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ impl<'s> Parser<'s> for UnprefixedName<'s> {
|
|||
impl<'s> Parser<'s> for Prefix<'s> {
|
||||
type Output = Prefix<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Prefix<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Prefix<'s>> {
|
||||
map(NCName::parse, |nc_name| Prefix(nc_name))(input)
|
||||
}
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ impl<'s> Parser<'s> for Prefix<'s> {
|
|||
impl<'s> Parser<'s> for LocalPart<'s> {
|
||||
type Output = LocalPart<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, LocalPart<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, LocalPart<'s>> {
|
||||
map(NCName::parse, |nc_name| LocalPart(nc_name))(input)
|
||||
}
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ impl<'s> Parser<'s> for LocalPart<'s> {
|
|||
impl<'s> Parser<'s> for Document<'s> {
|
||||
type Output = Document<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Document<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Document<'s>> {
|
||||
tuple((Prolog::parse, Element::parse, many0(Misc::parse)))(input)
|
||||
}
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ impl Parser<'_> for NameChar {
|
|||
impl<'s> Parser<'s> for Name<'s> {
|
||||
type Output = Name<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Name<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Name<'s>> {
|
||||
map(
|
||||
recognize(pair(NameStartChar::parse, many0(NameChar::parse))),
|
||||
|name| Name(name),
|
||||
|
@ -233,7 +233,7 @@ impl<'s> Parser<'s> for Names<'s> {
|
|||
type Output = Names<'s>;
|
||||
|
||||
// TODO: fix
|
||||
fn parse(input: &'s str) -> IResult<&str, Names<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Names<'s>> {
|
||||
map(
|
||||
pair(Name::parse, many0(preceded(char('\u{20}'), Name::parse))),
|
||||
|(head, tail)| Names(vec![vec![head], tail].concat()),
|
||||
|
@ -245,7 +245,7 @@ impl<'s> Parser<'s> for Names<'s> {
|
|||
impl<'s> Parser<'s> for Nmtoken<'s> {
|
||||
type Output = Nmtoken<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Nmtoken<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Nmtoken<'s>> {
|
||||
map(recognize(many1(NameChar::parse)), |nmtoken| {
|
||||
Nmtoken(nmtoken)
|
||||
})(input)
|
||||
|
@ -256,7 +256,7 @@ impl<'s> Parser<'s> for Nmtoken<'s> {
|
|||
impl<'s> Parser<'s> for Nmtokens<'s> {
|
||||
type Output = Nmtokens<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Nmtokens<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Nmtokens<'s>> {
|
||||
map(
|
||||
pair(
|
||||
Nmtoken::parse,
|
||||
|
@ -272,7 +272,7 @@ impl<'s> Parser<'s> for Nmtokens<'s> {
|
|||
impl<'s> Parser<'s> for EntityValue<'s> {
|
||||
type Output = EntityValue<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityValue<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityValue<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -321,7 +321,7 @@ impl<'s> Parser<'s> for EntityValue<'s> {
|
|||
impl<'s> Parser<'s> for AttValue<'s> {
|
||||
type Output = AttValue<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttValue<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttValue<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -357,7 +357,7 @@ impl<'s> Parser<'s> for AttValue<'s> {
|
|||
impl<'s> Parser<'s> for SystemLiteral<'s> {
|
||||
type Output = SystemLiteral<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, SystemLiteral<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, SystemLiteral<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(char('"'), recognize(many0(none_of("\""))), char('"')),
|
||||
|
@ -375,7 +375,7 @@ impl<'s> Parser<'s> for SystemLiteral<'s> {
|
|||
impl<'s> Parser<'s> for PubidLiteral<'s> {
|
||||
type Output = PubidLiteral<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PubidLiteral<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PubidLiteral<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(char('"'), recognize(many0(PubidChar::parse)), char('"')),
|
||||
|
@ -411,7 +411,7 @@ impl Parser<'_> for PubidChar {
|
|||
impl<'s> Parser<'s> for CharData<'s> {
|
||||
type Output = CharData<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CharData<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CharData<'s>> {
|
||||
map(
|
||||
recognize(many_till(
|
||||
none_of("<&"),
|
||||
|
@ -426,7 +426,7 @@ impl<'s> Parser<'s> for CharData<'s> {
|
|||
impl<'s> Parser<'s> for Comment<'s> {
|
||||
type Output = Comment<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Comment<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Comment<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<!--"),
|
||||
|
@ -442,7 +442,7 @@ impl<'s> Parser<'s> for Comment<'s> {
|
|||
impl<'s> Parser<'s> for PI<'s> {
|
||||
type Output = PI<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PI<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PI<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?"),
|
||||
|
@ -467,7 +467,7 @@ impl<'s> Parser<'s> for PI<'s> {
|
|||
impl<'s> Parser<'s> for PITarget<'s> {
|
||||
type Output = PITarget<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PITarget<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PITarget<'s>> {
|
||||
let (rest, name) = Name::parse(input)?;
|
||||
if name.0.to_lowercase() == "xml" {
|
||||
return Err(Err::Error(Error {
|
||||
|
@ -485,7 +485,7 @@ impl<'s> Parser<'s> for PITarget<'s> {
|
|||
impl<'s> Parser<'s> for CDSect<'s> {
|
||||
type Output = CDSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CDSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CDSect<'s>> {
|
||||
map(
|
||||
delimited(CDStart::parse, CData::parse, CDEnd::parse),
|
||||
|c_data| CDSect(c_data),
|
||||
|
@ -506,7 +506,7 @@ impl Parser<'_> for CDStart {
|
|||
impl<'s> Parser<'s> for CData<'s> {
|
||||
type Output = CData<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CData<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CData<'s>> {
|
||||
map(
|
||||
recognize(many_till(Char::parse, peek(tag("]]>")))),
|
||||
|c_data| CData(c_data),
|
||||
|
@ -527,7 +527,7 @@ impl Parser<'_> for CDEnd {
|
|||
impl<'s> Parser<'s> for Prolog<'s> {
|
||||
type Output = Prolog<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Prolog<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Prolog<'s>> {
|
||||
tuple((
|
||||
opt(XMLDecl::parse),
|
||||
many0(Misc::parse),
|
||||
|
@ -540,7 +540,7 @@ impl<'s> Parser<'s> for Prolog<'s> {
|
|||
impl<'s> Parser<'s> for XMLDecl<'s> {
|
||||
type Output = XMLDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, XMLDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, XMLDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?xml"),
|
||||
|
@ -612,7 +612,7 @@ impl Parser<'_> for VersionNum {
|
|||
impl<'s> Parser<'s> for Misc<'s> {
|
||||
type Output = Misc<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Misc<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Misc<'s>> {
|
||||
alt((
|
||||
map(Comment::parse, |comment| Misc::Comment(comment)),
|
||||
map(PI::parse, |pi| Misc::PI(pi)),
|
||||
|
@ -626,7 +626,7 @@ impl<'s> Parser<'s> for Misc<'s> {
|
|||
impl<'s> Parser<'s> for DoctypeDecl<'s> {
|
||||
type Output = DoctypeDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DoctypeDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DoctypeDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!DOCTYPE"), S::parse),
|
||||
|
@ -656,7 +656,7 @@ impl<'s> Parser<'s> for DoctypeDecl<'s> {
|
|||
impl<'s> Parser<'s> for DeclSep<'s> {
|
||||
type Output = DeclSep<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DeclSep<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DeclSep<'s>> {
|
||||
alt((
|
||||
map(PEReference::parse, |pe_reference| {
|
||||
DeclSep::PEReference(pe_reference)
|
||||
|
@ -670,7 +670,7 @@ impl<'s> Parser<'s> for DeclSep<'s> {
|
|||
impl<'s> Parser<'s> for IntSubset<'s> {
|
||||
type Output = IntSubset<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IntSubset<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IntSubset<'s>> {
|
||||
many0(alt((
|
||||
map(MarkupDecl::parse, |markup_decl| {
|
||||
IntSubsetDeclaration::MarkupDecl(markup_decl)
|
||||
|
@ -686,7 +686,7 @@ impl<'s> Parser<'s> for IntSubset<'s> {
|
|||
impl<'s> Parser<'s> for MarkupDecl<'s> {
|
||||
type Output = MarkupDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, MarkupDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, MarkupDecl<'s>> {
|
||||
alt((
|
||||
map(Elementdecl::parse, |elementdecl| {
|
||||
MarkupDecl::Elementdecl(elementdecl)
|
||||
|
@ -710,7 +710,7 @@ impl<'s> Parser<'s> for MarkupDecl<'s> {
|
|||
impl<'s> Parser<'s> for ExtSubset<'s> {
|
||||
type Output = ExtSubset<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtSubset<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtSubset<'s>> {
|
||||
map(
|
||||
pair(opt(TextDecl::parse), ExtSubsetDecl::parse),
|
||||
|(text_decl, ext_subset_decl)| ExtSubset {
|
||||
|
@ -725,7 +725,7 @@ impl<'s> Parser<'s> for ExtSubset<'s> {
|
|||
impl<'s> Parser<'s> for ExtSubsetDecl<'s> {
|
||||
type Output = ExtSubsetDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtSubsetDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtSubsetDecl<'s>> {
|
||||
many0(alt((
|
||||
map(MarkupDecl::parse, |markup_decl| {
|
||||
ExtSubsetDeclaration::MarkupDecl(markup_decl)
|
||||
|
@ -775,7 +775,7 @@ impl Parser<'_> for SDDecl {
|
|||
impl<'s> Parser<'s> for Element<'s> {
|
||||
type Output = Element<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Element<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Element<'s>> {
|
||||
alt((
|
||||
map(EmptyElemTag::parse, |empty_elem_tag| {
|
||||
Element::Empty(empty_elem_tag)
|
||||
|
@ -793,7 +793,7 @@ impl<'s> Parser<'s> for Element<'s> {
|
|||
impl<'s> Parser<'s> for STag<'s> {
|
||||
type Output = STag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, STag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, STag<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<"),
|
||||
|
@ -809,7 +809,7 @@ impl<'s> Parser<'s> for STag<'s> {
|
|||
impl<'s> Parser<'s> for Attribute<'s> {
|
||||
type Output = Attribute<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Attribute<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Attribute<'s>> {
|
||||
alt((
|
||||
map(
|
||||
separated_pair(NSAttName::parse, Eq::parse, AttValue::parse),
|
||||
|
@ -824,7 +824,7 @@ impl<'s> Parser<'s> for Attribute<'s> {
|
|||
}
|
||||
// pub type Attribute<'s> = (Name<'s>, AttValue<'s>);
|
||||
/// [41] Attribute ::= Name Eq AttValue
|
||||
// pub fn attribute(input: &str) -> IResult<&str, Attribute> {
|
||||
// pub fn attribute(input: &str) -> IResult<&'s str, Attribute> {
|
||||
// separated_pair(name, eq, att_value)(input)
|
||||
// }
|
||||
|
||||
|
@ -833,7 +833,7 @@ impl<'s> Parser<'s> for Attribute<'s> {
|
|||
impl<'s> Parser<'s> for ETag<'s> {
|
||||
type Output = ETag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ETag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ETag<'s>> {
|
||||
map(
|
||||
delimited(tag("</"), QName::parse, pair(opt(S::parse), tag(">"))),
|
||||
|name| ETag { name },
|
||||
|
@ -844,7 +844,7 @@ impl<'s> Parser<'s> for ETag<'s> {
|
|||
impl<'s> Parser<'s> for ContentItem<'s> {
|
||||
type Output = ContentItem<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ContentItem<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ContentItem<'s>> {
|
||||
alt((
|
||||
map(Element::parse, |element| ContentItem::Element(element)),
|
||||
map(Reference::parse, |reference| {
|
||||
|
@ -861,7 +861,7 @@ impl<'s> Parser<'s> for ContentItem<'s> {
|
|||
impl<'s> Parser<'s> for Content<'s> {
|
||||
type Output = Content<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Content<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Content<'s>> {
|
||||
map(
|
||||
pair(
|
||||
opt(CharData::parse),
|
||||
|
@ -888,7 +888,7 @@ impl<'s> Parser<'s> for Content<'s> {
|
|||
impl<'s> Parser<'s> for EmptyElemTag<'s> {
|
||||
type Output = EmptyElemTag<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EmptyElemTag<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EmptyElemTag<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<"),
|
||||
|
@ -905,7 +905,7 @@ impl<'s> Parser<'s> for EmptyElemTag<'s> {
|
|||
impl<'s> Parser<'s> for Elementdecl<'s> {
|
||||
type Output = Elementdecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Elementdecl> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Elementdecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ELEMENT"), S::parse),
|
||||
|
@ -921,7 +921,7 @@ impl<'s> Parser<'s> for Elementdecl<'s> {
|
|||
impl<'s> Parser<'s> for Contentspec<'s> {
|
||||
type Output = Contentspec<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Contentspec<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Contentspec<'s>> {
|
||||
alt((
|
||||
value(Contentspec::Empty, tag("EMPTY")),
|
||||
value(Contentspec::Any, tag("ANY")),
|
||||
|
@ -952,7 +952,7 @@ impl Parser<'_> for Occurence {
|
|||
impl<'s> Parser<'s> for Children<'s> {
|
||||
type Output = Children<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Children<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Children<'s>> {
|
||||
map(
|
||||
pair(
|
||||
alt((
|
||||
|
@ -971,7 +971,7 @@ impl<'s> Parser<'s> for Children<'s> {
|
|||
impl<'s> Parser<'s> for Cp<'s> {
|
||||
type Output = Cp<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Cp<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Cp<'s>> {
|
||||
map(
|
||||
pair(
|
||||
alt((
|
||||
|
@ -990,7 +990,7 @@ impl<'s> Parser<'s> for Cp<'s> {
|
|||
impl<'s> Parser<'s> for Choice<'s> {
|
||||
type Output = Choice<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Choice<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Choice<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1015,7 +1015,7 @@ impl<'s> Parser<'s> for Choice<'s> {
|
|||
impl<'s> Parser<'s> for Seq<'s> {
|
||||
type Output = Seq<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Seq<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Seq<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1041,7 +1041,7 @@ impl<'s> Parser<'s> for Seq<'s> {
|
|||
impl<'s> Parser<'s> for Mixed<'s> {
|
||||
type Output = Mixed<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Mixed<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Mixed<'s>> {
|
||||
alt((
|
||||
map(
|
||||
delimited(
|
||||
|
@ -1073,7 +1073,7 @@ impl<'s> Parser<'s> for Mixed<'s> {
|
|||
impl<'s> Parser<'s> for AttlistDecl<'s> {
|
||||
type Output = AttlistDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttlistDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttlistDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ATTLIST"), S::parse),
|
||||
|
@ -1093,7 +1093,7 @@ impl<'s> Parser<'s> for AttlistDecl<'s> {
|
|||
impl<'s> Parser<'s> for AttDef<'s> {
|
||||
type Output = AttDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttDef<'s>> {
|
||||
map(
|
||||
tuple((
|
||||
preceded(
|
||||
|
@ -1121,7 +1121,7 @@ impl<'s> Parser<'s> for AttDef<'s> {
|
|||
impl<'s> Parser<'s> for AttType<'s> {
|
||||
type Output = AttType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, AttType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, AttType<'s>> {
|
||||
alt((
|
||||
value(AttType::StringType, StringType::parse),
|
||||
map(TokenizedType::parse, |tokenized_type| {
|
||||
|
@ -1150,7 +1150,6 @@ impl Parser<'_> for TokenizedType {
|
|||
fn parse(input: &'_ str) -> IResult<&str, TokenizedType> {
|
||||
alt((
|
||||
value(TokenizedType::ID, tag("ID")),
|
||||
// TODO: check if this is required
|
||||
// try idrefs first to avoid losing 'S'
|
||||
value(TokenizedType::IDRefs, tag("IDREFS")),
|
||||
value(TokenizedType::IDRef, tag("IDREF")),
|
||||
|
@ -1167,7 +1166,7 @@ impl Parser<'_> for TokenizedType {
|
|||
impl<'s> Parser<'s> for EnumeratedType<'s> {
|
||||
type Output = EnumeratedType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EnumeratedType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EnumeratedType<'s>> {
|
||||
alt((
|
||||
map(NotationType::parse, |notation_type| {
|
||||
EnumeratedType::NotationType(notation_type)
|
||||
|
@ -1183,7 +1182,7 @@ impl<'s> Parser<'s> for EnumeratedType<'s> {
|
|||
impl<'s> Parser<'s> for NotationType<'s> {
|
||||
type Output = NotationType<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NotationType<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NotationType<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((tag("NOTATION"), S::parse, tag("("), opt(S::parse))),
|
||||
|
@ -1208,7 +1207,7 @@ impl<'s> Parser<'s> for NotationType<'s> {
|
|||
impl<'s> Parser<'s> for Enumeration<'s> {
|
||||
type Output = Enumeration<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Enumeration<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Enumeration<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("("), opt(S::parse)),
|
||||
|
@ -1233,7 +1232,7 @@ impl<'s> Parser<'s> for Enumeration<'s> {
|
|||
impl<'s> Parser<'s> for DefaultDecl<'s> {
|
||||
type Output = DefaultDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, DefaultDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, DefaultDecl<'s>> {
|
||||
alt((
|
||||
value(DefaultDecl::Required, tag("#REQUIRED")),
|
||||
value(DefaultDecl::Implied, tag("#IMPLIED")),
|
||||
|
@ -1249,7 +1248,7 @@ impl<'s> Parser<'s> for DefaultDecl<'s> {
|
|||
impl<'s> Parser<'s> for ConditionalSect<'s> {
|
||||
type Output = ConditionalSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ConditionalSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ConditionalSect<'s>> {
|
||||
alt((
|
||||
map(IncludeSect::parse, |include_sect| {
|
||||
ConditionalSect::IncludeSect(include_sect)
|
||||
|
@ -1265,7 +1264,7 @@ impl<'s> Parser<'s> for ConditionalSect<'s> {
|
|||
impl<'s> Parser<'s> for IncludeSect<'s> {
|
||||
type Output = IncludeSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IncludeSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IncludeSect<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((
|
||||
|
@ -1287,7 +1286,7 @@ impl<'s> Parser<'s> for IncludeSect<'s> {
|
|||
impl<'s> Parser<'s> for IgnoreSect<'s> {
|
||||
type Output = IgnoreSect<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IgnoreSect<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IgnoreSect<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((
|
||||
|
@ -1309,7 +1308,7 @@ impl<'s> Parser<'s> for IgnoreSect<'s> {
|
|||
impl<'s> Parser<'s> for IgnoreSectContents<'s> {
|
||||
type Output = IgnoreSectContents<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, IgnoreSectContents<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, IgnoreSectContents<'s>> {
|
||||
map(
|
||||
pair(
|
||||
Ignore::parse,
|
||||
|
@ -1330,7 +1329,7 @@ impl<'s> Parser<'s> for IgnoreSectContents<'s> {
|
|||
impl<'s> Parser<'s> for Ignore<'s> {
|
||||
type Output = Ignore<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Ignore<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Ignore<'s>> {
|
||||
map(
|
||||
recognize(many_till(Char::parse, peek(alt((tag("<!["), tag("]]>")))))),
|
||||
|ignore| Ignore(ignore),
|
||||
|
@ -1342,7 +1341,7 @@ impl<'s> Parser<'s> for Ignore<'s> {
|
|||
impl<'s> Parser<'s> for CharRef<'s> {
|
||||
type Output = CharRef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, CharRef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, CharRef<'s>> {
|
||||
alt((
|
||||
delimited(
|
||||
tag("&#"),
|
||||
|
@ -1367,7 +1366,7 @@ impl<'s> Parser<'s> for CharRef<'s> {
|
|||
impl<'s> Parser<'s> for Reference<'s> {
|
||||
type Output = Reference<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, Reference<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, Reference<'s>> {
|
||||
alt((
|
||||
map(EntityRef::parse, |entity_ref| {
|
||||
Reference::EntityRef(entity_ref)
|
||||
|
@ -1381,7 +1380,7 @@ impl<'s> Parser<'s> for Reference<'s> {
|
|||
impl<'s> Parser<'s> for EntityRef<'s> {
|
||||
type Output = EntityRef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityRef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityRef<'s>> {
|
||||
map(delimited(tag("&"), Name::parse, tag(";")), |entity_ref| {
|
||||
EntityRef(entity_ref)
|
||||
})(input)
|
||||
|
@ -1392,7 +1391,7 @@ impl<'s> Parser<'s> for EntityRef<'s> {
|
|||
impl<'s> Parser<'s> for PEReference<'s> {
|
||||
type Output = PEReference<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEReference<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEReference<'s>> {
|
||||
map(delimited(tag("%"), Name::parse, tag(";")), |pe_reference| {
|
||||
PEReference(pe_reference)
|
||||
})(input)
|
||||
|
@ -1403,7 +1402,7 @@ impl<'s> Parser<'s> for PEReference<'s> {
|
|||
impl<'s> Parser<'s> for EntityDecl<'s> {
|
||||
type Output = EntityDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityDecl<'s>> {
|
||||
alt((
|
||||
map(GEDecl::parse, |ge_decl| EntityDecl::GEDecl(ge_decl)),
|
||||
map(PEDecl::parse, |pe_decl| EntityDecl::PEDecl(pe_decl)),
|
||||
|
@ -1415,7 +1414,7 @@ impl<'s> Parser<'s> for EntityDecl<'s> {
|
|||
impl<'s> Parser<'s> for GEDecl<'s> {
|
||||
type Output = GEDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, GEDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, GEDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!ENTITY"), S::parse),
|
||||
|
@ -1431,7 +1430,7 @@ impl<'s> Parser<'s> for GEDecl<'s> {
|
|||
impl<'s> Parser<'s> for PEDecl<'s> {
|
||||
type Output = PEDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tuple((tag("<!ENTITY"), S::parse, tag("%"), S::parse)),
|
||||
|
@ -1447,7 +1446,7 @@ impl<'s> Parser<'s> for PEDecl<'s> {
|
|||
impl<'s> Parser<'s> for EntityDef<'s> {
|
||||
type Output = EntityDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EntityDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EntityDef<'s>> {
|
||||
alt((
|
||||
map(EntityValue::parse, |entity_value| {
|
||||
EntityDef::EntityValue(entity_value)
|
||||
|
@ -1467,7 +1466,7 @@ impl<'s> Parser<'s> for EntityDef<'s> {
|
|||
impl<'s> Parser<'s> for PEDef<'s> {
|
||||
type Output = PEDef<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PEDef<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PEDef<'s>> {
|
||||
alt((
|
||||
map(EntityValue::parse, |entity_value| {
|
||||
PEDef::EntityValue(entity_value)
|
||||
|
@ -1480,11 +1479,11 @@ impl<'s> Parser<'s> for PEDef<'s> {
|
|||
}
|
||||
|
||||
/// [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
|
||||
// pub fn external_id(input: &str) -> IResult<&str, ExternalID> {
|
||||
// pub fn external_id(input: &str) -> IResult<&'s str, ExternalID> {
|
||||
impl<'s> Parser<'s> for ExternalID<'s> {
|
||||
type Output = ExternalID<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExternalID<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExternalID<'s>> {
|
||||
alt((
|
||||
map(
|
||||
preceded(pair(tag("SYSTEM"), S::parse), SystemLiteral::parse),
|
||||
|
@ -1508,7 +1507,7 @@ impl<'s> Parser<'s> for ExternalID<'s> {
|
|||
impl<'s> Parser<'s> for NDataDecl<'s> {
|
||||
type Output = NDataDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NDataDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NDataDecl<'s>> {
|
||||
map(
|
||||
preceded(tuple((S::parse, tag("NDATA"), S::parse)), Name::parse),
|
||||
|n_data_decl| NDataDecl(n_data_decl),
|
||||
|
@ -1520,7 +1519,7 @@ impl<'s> Parser<'s> for NDataDecl<'s> {
|
|||
impl<'s> Parser<'s> for TextDecl<'s> {
|
||||
type Output = TextDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, TextDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, TextDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
tag("<?xml"),
|
||||
|
@ -1542,7 +1541,7 @@ impl<'s> Parser<'s> for TextDecl<'s> {
|
|||
impl<'s> Parser<'s> for ExtParsedEnt<'s> {
|
||||
type Output = ExtParsedEnt<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, ExtParsedEnt<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, ExtParsedEnt<'s>> {
|
||||
map(
|
||||
pair(opt(TextDecl::parse), Content::parse),
|
||||
|(text_decl, content)| ExtParsedEnt { text_decl, content },
|
||||
|
@ -1554,7 +1553,7 @@ impl<'s> Parser<'s> for ExtParsedEnt<'s> {
|
|||
impl<'s> Parser<'s> for EncodingDecl<'s> {
|
||||
type Output = EncodingDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EncodingDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EncodingDecl<'s>> {
|
||||
map(
|
||||
preceded(
|
||||
tuple((S::parse, tag("encoding"), Eq::parse)),
|
||||
|
@ -1572,7 +1571,7 @@ impl<'s> Parser<'s> for EncodingDecl<'s> {
|
|||
impl<'s> Parser<'s> for EncName<'s> {
|
||||
type Output = EncName<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, EncName<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, EncName<'s>> {
|
||||
map(
|
||||
recognize(pair(
|
||||
satisfy(|c| matches!(c, 'A'..='Z' | 'a'..='z' )),
|
||||
|
@ -1589,7 +1588,7 @@ impl<'s> Parser<'s> for EncName<'s> {
|
|||
impl<'s> Parser<'s> for NotationDecl<'s> {
|
||||
type Output = NotationDecl<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, NotationDecl<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, NotationDecl<'s>> {
|
||||
map(
|
||||
delimited(
|
||||
pair(tag("<!NOTATION"), S::parse),
|
||||
|
@ -1616,7 +1615,7 @@ impl<'s> Parser<'s> for NotationDecl<'s> {
|
|||
impl<'s> Parser<'s> for PublicID<'s> {
|
||||
type Output = PublicID<'s>;
|
||||
|
||||
fn parse(input: &'s str) -> IResult<&str, PublicID<'s>> {
|
||||
fn parse(input: &'s str) -> IResult<&'s str, PublicID<'s>> {
|
||||
map(
|
||||
preceded(pair(tag("PUBLIC"), S::parse), PubidLiteral::parse),
|
||||
|public_id| PublicID(public_id),
|
||||
|
@ -1626,8 +1625,6 @@ impl<'s> Parser<'s> for PublicID<'s> {
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::num::NonZero;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in New Issue