1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#![allow(clippy::upper_case_acronyms)]
extern crate anyhow;
#[macro_use]
extern crate lazy_static;
extern crate pest;
#[macro_use]
extern crate pest_derive;
use pest::iterators::Pairs;
use pest::RuleType;
#[macro_export]
macro_rules! inline {
($x:expr) => {
$x.replace("\n", "")
};
}
mod dtd;
pub mod document;
pub mod document_type;
pub mod parser;
pub mod renderer;
#[allow(dead_code)]
fn print_type<T>(_: &T) {
println!("{}", std::any::type_name::<T>());
}
#[allow(dead_code)]
fn print_pairs<T>(pairs: &mut Pairs<T>, level: usize)
where
T: RuleType,
{
let indent = " ".repeat(level);
for pair in pairs {
let rule = pair.as_rule();
let span = pair.as_span();
let tag = format!("{:?}", &rule);
if tag == "EOI" {
println!();
continue;
}
println!("{}Rule: {:?}", indent, rule);
println!("{}Span: {:?}", indent, span);
let mut inner = pair.into_inner();
if tag == "comment" {
if let Some(text) = inner.clone().last() {
println!("{}Text: {:?}", indent, text);
}
}
print_pairs(&mut inner, level + 2);
}
}