push
This commit is contained in:
@ -1,17 +1,18 @@
|
||||
mod parser;
|
||||
|
||||
use crate::{par::parser::Risdok, Error};
|
||||
use crate::{law::LawBuilder, par::parser::Risdok, Error};
|
||||
|
||||
fn fetch_page(url: &str) -> Result<String, Error> {
|
||||
Ok(ureq::get(url).call()?.into_string()?)
|
||||
}
|
||||
|
||||
pub(crate) fn parse(url: &str) -> Result<(), Error> {
|
||||
pub(crate) fn parse(url: &str, builder: &mut LawBuilder) -> Result<(), Error> {
|
||||
println!("{url}");
|
||||
let xml = fetch_page(url)?;
|
||||
let risdok = Risdok::from_str(&xml)?;
|
||||
let risdok = Risdok::from_str(&xml, builder)?;
|
||||
|
||||
println!("{risdok}");
|
||||
println!("{builder:#?}");
|
||||
//println!("{risdok}");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use std::fmt::Display;
|
||||
|
||||
use roxmltree::Node;
|
||||
|
||||
use crate::Error;
|
||||
use crate::{law::LawBuilder, Error};
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub(crate) struct Risdok {
|
||||
@ -12,14 +12,14 @@ pub(crate) struct Risdok {
|
||||
}
|
||||
|
||||
impl Risdok {
|
||||
pub(crate) fn parse(n: Node) -> Self {
|
||||
pub(crate) fn parse(n: Node, builder: &mut LawBuilder) -> Self {
|
||||
assert!(n.tag_name().name() == "risdok");
|
||||
|
||||
let mut c = n.children();
|
||||
|
||||
let ret = Self {
|
||||
metadaten: Metadaten::parse(c.next().unwrap()),
|
||||
nutzdaten: Nutzdaten::parse(c.next().unwrap()),
|
||||
nutzdaten: Nutzdaten::parse(c.next().unwrap(), builder),
|
||||
layoutdaten: Layoutdaten::parse(c.next().unwrap()),
|
||||
};
|
||||
|
||||
@ -28,11 +28,11 @@ impl Risdok {
|
||||
ret
|
||||
}
|
||||
|
||||
pub(crate) fn from_str(xml: &str) -> Result<Self, Error> {
|
||||
pub(crate) fn from_str(xml: &str, builder: &mut LawBuilder) -> Result<Self, Error> {
|
||||
let doc = roxmltree::Document::parse(&xml)?;
|
||||
let root = doc.root();
|
||||
assert_eq!(root.children().into_iter().count(), 1);
|
||||
Ok(Self::parse(root.children().next().unwrap()))
|
||||
Ok(Self::parse(root.children().next().unwrap(), builder))
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,12 +70,12 @@ pub(crate) struct Nutzdaten {
|
||||
abschnitt: Abschnitt,
|
||||
}
|
||||
impl Nutzdaten {
|
||||
pub(crate) fn parse(n: Node) -> Self {
|
||||
pub(crate) fn parse(n: Node, builder: &mut LawBuilder) -> Self {
|
||||
assert!(n.tag_name().name() == "nutzdaten");
|
||||
|
||||
let mut c = n.children();
|
||||
let ret = Self {
|
||||
abschnitt: Abschnitt::parse(c.next().unwrap()),
|
||||
abschnitt: Abschnitt::parse(c.next().unwrap(), builder),
|
||||
};
|
||||
|
||||
assert_eq!(c.next(), None);
|
||||
@ -86,12 +86,11 @@ impl Nutzdaten {
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub(crate) struct Abschnitt {
|
||||
ueberschrifts: Vec<Ueberschrift>,
|
||||
ueberschriftPara: Option<Ueberschrift>,
|
||||
absatze: Vec<AbsatzAbs>,
|
||||
}
|
||||
impl Abschnitt {
|
||||
pub(crate) fn parse(n: Node) -> Self {
|
||||
pub(crate) fn parse(n: Node, builder: &mut LawBuilder) -> Self {
|
||||
assert!(n.tag_name().name() == "abschnitt");
|
||||
|
||||
let mut c = n.children().peekable();
|
||||
@ -119,16 +118,18 @@ impl Abschnitt {
|
||||
}
|
||||
}
|
||||
|
||||
let mut ueberschrifts = Vec::new();
|
||||
loop {
|
||||
match &c.peek() {
|
||||
match c.peek() {
|
||||
Some(child) => {
|
||||
if Ueberschrift::test(&child, "g1") {
|
||||
ueberschrifts.push(Ueberschrift::parse(c.next().unwrap(), "g1"));
|
||||
let ueberschrift = Ueberschrift::parse(c.next().unwrap(), "g1");
|
||||
builder.new_header(&ueberschrift.content);
|
||||
} else if Ueberschrift::test(&child, "g2") {
|
||||
ueberschrifts.push(Ueberschrift::parse(c.next().unwrap(), "g2"));
|
||||
let ueberschrift = Ueberschrift::parse(c.next().unwrap(), "g2");
|
||||
builder.new_desc(&ueberschrift.content);
|
||||
} else if Ueberschrift::test(&child, "g1min") {
|
||||
ueberschrifts.push(Ueberschrift::parse(c.next().unwrap(), "g1min"));
|
||||
let ueberschrift = Ueberschrift::parse(c.next().unwrap(), "g1min");
|
||||
builder.new_header(&ueberschrift.content);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@ -181,7 +182,6 @@ impl Abschnitt {
|
||||
Self {
|
||||
ueberschriftPara,
|
||||
absatze,
|
||||
ueberschrifts,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user