add configs for laws
All checks were successful
CI/CD Pipeline / test (push) Successful in 2m23s

This commit is contained in:
philipp 2024-02-06 11:18:40 +01:00
parent 15e0e485c4
commit c92d72c580
8 changed files with 173 additions and 184 deletions

15
data/configs/kschg.toml Normal file
View File

@ -0,0 +1,15 @@
[law]
id = 10002462
[[law.classifiers]]
name = "Hauptstück"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Abschnitt"
is_root = false
match_function = "contains"
[parser]
remove_strings = ["<i>", "</i>"]

View File

@ -1,21 +1,19 @@
[law]
id = "10002180"
id = 10002180
[[law.classifiers]]
name = "Abschnitt"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Number"
is_root = false
match_function = "starts_with_number"
[parser]
remove_strings = ["<i>", "</i>"]
[[parser.replace_rules]]
find = "\\u{a0}"
replace_with = " "
[[parser.replace_rules]]
find = "<super>bis</super>"
replace_with = "bis"

47
data/configs/stgb.toml Normal file
View File

@ -0,0 +1,47 @@
[law]
id = 10002296
[[law.classifiers]]
name = "Teil"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Abschnitt"
is_root = false
match_function = "contains"
[parser]
remove_strings = [
"<i>", "</i>",
"<n>", "</n>",
"<b>", "</b>",
"<super>", "</super>",
"""<abstand ct="text" halign="l" />"""
]
[[parser.replace_rules]]
find = """<ueberschrift typ="g1min" ct="text" halign="c">Allgemeine Bestimmungen</ueberschrift>"""
replace_with = """<ueberschrift typ="g2" ct="text" halign="c">Allgemeine Bestimmungen</ueberschrift>"""
[[parser.replace_rules]]
find = """<ueberschrift typ="para" ct="text" halign="c">1. Verwertungsrechte.</ueberschrift>"""
replace_with = """<ueberschrift typ="g1" ct="text" halign="c">1. Verwertungsrechte.</ueberschrift>"""
[[parser.replace_rules]]
find = """<absatz typ="abs" ct="text" halign="j">(3) Die Verjährungsfrist beträgt</absatz><absatz typ="erltext" ct="text" halign="j">zwanzig Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung zwar nicht mit lebenslanger Freiheitsstrafe, aber mit mehr als zehnjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">zehn Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als fünfjähriger, aber höchstens zehnjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">fünf Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als einjähriger, aber höchstens fünfjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">drei Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als sechsmonatiger, aber höchstens einjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">ein Jahr,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit nicht mehr als sechsmonatiger Freiheitsstrafe oder nur mit Geldstrafe bedroht ist.</schluss></liste>"""
replace_with = """<absatz typ="abs" ct="text" halign="j">(3) Die Verjährungsfrist beträgt zwanzig Jahre, wenn die Handlung zwar nicht mit lebenslanger Freiheitsstrafe, aber mit mehr als zehnjähriger Freiheitsstrafe bedroht ist; zehn Jahre, wenn die Handlung mit mehr als fünfjähriger, aber höchstens zehnjähriger Freiheitsstrafe bedroht ist; fünf Jahre, wenn die Handlung mit mehr als einjähriger, aber höchstens fünfjähriger Freiheitsstrafe bedroht ist; drei Jahre, wenn die Handlung mit mehr als sechsmonatiger, aber höchstens einjähriger Freiheitsstrafe bedroht ist; ein Jahr, wenn die Handlung mit nicht mehr als sechsmonatiger Freiheitsstrafe oder nur mit Geldstrafe bedroht ist.</absatz>"""
[[parser.replace_rules]]
find = """<absatz typ="abs" ct="text" halign="j">(3) Die Frist beträgt</absatz><absatz typ="erltext" ct="text" halign="j">fünfzehn Jahre,</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">wenn auf Freiheitsstrafe von mehr als einem Jahr, aber nicht mehr als zehn Jahren erkannt worden ist;</schlussteil></liste><absatz typ="erltext" ct="text" halign="j">zehn Jahre,</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">wenn auf Freiheitsstrafe von mehr als drei Monaten, aber nicht mehr als einem Jahr oder auf eine Geldstrafe unter Festsetzung einer Ersatzfreiheitsstrafe von mehr als drei Monaten erkannt worden ist;</schlussteil></liste><absatz typ="erltext" ct="text" halign="j">fünf Jahre</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">in allen übrigen Fällen.</schlussteil></liste>"""
replace_with = """<absatz typ="abs" ct="text" halign="j">(3) Die Frist beträgt fünfzehn Jahre, wenn auf Freiheitsstrafe von mehr als einem Jahr, aber nicht mehr als zehn Jahren erkannt worden ist; zehn Jahre, wenn auf Freiheitsstrafe von mehr als drei Monaten, aber nicht mehr als einem Jahr oder auf eine Geldstrafe unter Festsetzung einer Ersatzfreiheitsstrafe von mehr als drei Monaten erkannt worden ist; fünf Jahre in allen übrigen Fällen.</absatz>"""
[[parser.replace_rules]]
find = """<ueberschrift typ="g1min" ct="text" halign="c">Strafbare Handlungen gegen Leib und Leben</ueberschrift>"""
replace_with = """<ueberschrift typ="g2" ct="text" halign="c">Strafbare Handlungen gegen Leib und Leben</ueberschrift>"""
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"

19
data/configs/teg.toml Normal file
View File

@ -0,0 +1,19 @@
[law]
id = 10001905
[[law.classifiers]]
name = "Abschnitt"
is_root = true
match_function = "contains"
[parser]
remove_strings = [
"""<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>""",
"""<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>""",
"""<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>""",
"""<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>""",
"""<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>""",
"<i>",
"</i>"
]

29
data/configs/urhg.toml Normal file
View File

@ -0,0 +1,29 @@
[law]
id = 10001848
[[law.classifiers]]
name = "Hauptstück"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Abschnitt"
is_root = false
match_function = "contains"
[[law.classifiers]]
name = "Number"
is_root = false
match_function = "starts_with_number"
[[parser.replace_rules]]
find = "<i>.</i>"
replace_with = "."
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"
[[parser.replace_rules]]
find = """<liste><schlussteil ebene="0" art="normal" ct="text">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</schlussteil></liste>"""
replace_with = """<absatz typ="abs" ct="text" halign="j">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</absatz>"""

7
data/configs/vvg.toml Normal file
View File

@ -0,0 +1,7 @@
[law]
id = 20011654
[[law.classifiers]]
name = "Abschnitt"
is_root = true
match_function = "contains"

View File

@ -32,6 +32,7 @@ fn create_classifier(match_function: &str) -> Result<ClassifierApplicable, Error
#[derive(Debug, Deserialize)]
pub struct Config {
law: Law,
#[serde(default)]
parser: ParserConfig,
}
@ -80,9 +81,11 @@ struct Classifier {
match_function: String,
}
#[derive(Debug, Deserialize)]
#[derive(Debug, Deserialize, Default)]
struct ParserConfig {
#[serde(default)] //okay to not have this part in the config
remove_strings: Vec<String>,
#[serde(default)] //okay to not have this part in the config
replace_rules: Vec<ReplaceRule>,
}
@ -91,3 +94,20 @@ struct ReplaceRule {
find: String,
replace_with: String,
}
#[cfg(test)]
mod tests {
use std::fs;
use super::Config;
#[test]
fn all_configs_are_deserializable() {
let configs = fs::read_dir("./data/configs").expect("No folder with config files");
for config in configs {
let path = format!("{}", config.unwrap().path().display());
Config::load(&path).unwrap();
}
}
}

View File

@ -33,6 +33,8 @@ impl Parser {
info!("Parsing {url}");
let xml = fetch(url)?;
let xml = xml.replace("\u{a0}", " ");
self.parse_from_str(&xml, builder)
}
@ -85,6 +87,7 @@ mod tests {
use std::{fs, sync::Arc};
use crate::{
config::Config,
law::{
responsible::{contains, starts_with_number},
Classifier, LawBuilder,
@ -93,55 +96,6 @@ mod tests {
};
use pretty_assertions::assert_eq;
// TODO: Instead of specific test cases, use this general method once there is a nice way to
// add classifiers + custom removals/edits of law texts
//
//#[test]
//fn paragraph() {
// let laws = fs::read_dir("./data/expected/overview/")
// .expect("No folder with expected overview files");
// for law in laws {
// let path = law.unwrap();
// let law_path = format!("{}", path.path().display());
// let law_id = path.file_name().into_string().unwrap().to_string();
// //TODO: Remove this if once all law texts pass
// if ["10001905".into()].contains(&law_id) {
// let expected_path = format!("./data/expected/par/{law_id}");
// let pars = fs::read_to_string(law_path).expect("Could not read file {file_path}.");
// let pars = pars.trim().split('\n').collect::<Vec<&str>>();
// let mut builder = LawBuilder::new("law");
// builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
// let mut parser = Parser::new();
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
// parser.add_string_to_remove("<i>");
// parser.add_string_to_remove("</i>");
// for par in pars {
// let cont = parser.parse(par, &mut builder).unwrap();
// if !cont {
// break;
// }
// }
// let actual = builder.history;
// let expected = fs::read_to_string(&expected_path)
// .expect(&format!("Could not read file {expected_path}."));
// let expected = expected.trim().split('\n').collect::<Vec<&str>>();
// assert_eq!(actual, expected);
// }
// }
//}
fn test(law_id: &str, builder: &mut LawBuilder, parser: Parser) {
let paragraph_path = format!("./data/expected/overview/{law_id}");
let expected_path = format!("./data/expected/par/{law_id}");
@ -170,136 +124,36 @@ mod tests {
}
#[test]
fn teg() {
let law_id = "10001905";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
fn all_configs_produce_expected_output() {
let configs = fs::read_dir("./data/configs").expect("No folder with config files");
let mut parser = Parser::new();
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
parser.add_string_to_remove("<i>");
parser.add_string_to_remove("</i>");
for config in configs {
let path = format!("{}", config.unwrap().path().display());
test(law_id, &mut builder, parser);
let (law_id, mut builder, parser) = Config::load(&path).unwrap();
let paragraph_path = format!("./data/expected/overview/{law_id}");
let expected_path = format!("./data/expected/par/{law_id}");
let pars =
fs::read_to_string(paragraph_path).expect("Could not read file {paragraph_path}.");
let pars = pars.trim().split('\n').collect::<Vec<&str>>();
for par in pars {
println!("{par}");
let cont = parser.parse(par, &mut builder).unwrap();
if !cont {
break;
}
}
#[test]
fn mschg() {
let law_id = "10002180";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
builder.add_classifier(Classifier::new("Number", Arc::new(&starts_with_number)));
let actual = &builder.history;
let mut parser = Parser::new();
parser.add_string_to_remove("<i>");
parser.add_string_to_remove("</i>");
let expected = fs::read_to_string(&expected_path)
.expect(&format!("Could not read file {expected_path}."));
let expected = expected.trim().split('\n').collect::<Vec<&str>>();
parser.add_string_to_replace("\u{a0}", " ");
parser.add_string_to_replace("<super>bis</super>", "bis");
parser.add_string_to_replace("<super>ter</super>", "ter");
parser.add_string_to_replace("<gdash />", "-");
parser.add_string_to_replace(
"(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)",
"<gldsym>§ 69.</gldsym>(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)",
);
test(law_id, &mut builder, parser);
assert_eq!(actual, &expected);
}
#[test]
fn stgb() {
let law_id = "10002296";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Teil", Arc::new(&contains)).root());
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)));
let mut parser = Parser::new();
parser.add_string_to_remove("<n>");
parser.add_string_to_remove("</n>");
parser.add_string_to_remove("<i>");
parser.add_string_to_remove("</i>");
parser.add_string_to_remove("<b>");
parser.add_string_to_remove("</b>");
parser.add_string_to_remove("<super>");
parser.add_string_to_remove("</super>");
parser.add_string_to_remove(r#"<abstand ct="text" halign="l" />"#);
parser.add_string_to_replace("\u{a0}", " ");
parser.add_string_to_replace(
r#"<ueberschrift typ="g1min" ct="text" halign="c">Allgemeine Bestimmungen</ueberschrift>"#,
r#"<ueberschrift typ="g2" ct="text" halign="c">Allgemeine Bestimmungen</ueberschrift>"#
);
parser.add_string_to_replace(
r#"<ueberschrift typ="para" ct="text" halign="c">1. Verwertungsrechte.</ueberschrift>"#,
r#"<ueberschrift typ="g1" ct="text" halign="c">1. Verwertungsrechte.</ueberschrift>"#,
);
parser.add_string_to_replace(
r#"<absatz typ="abs" ct="text" halign="j">(3) Die Verjährungsfrist beträgt</absatz><absatz typ="erltext" ct="text" halign="j">zwanzig Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung zwar nicht mit lebenslanger Freiheitsstrafe, aber mit mehr als zehnjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">zehn Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als fünfjähriger, aber höchstens zehnjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">fünf Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als einjähriger, aber höchstens fünfjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">drei Jahre,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit mehr als sechsmonatiger, aber höchstens einjähriger Freiheitsstrafe bedroht ist;</schluss></liste><absatz typ="erltext" ct="text" halign="j">ein Jahr,</absatz><liste><schluss typ="e1" ct="text">wenn die Handlung mit nicht mehr als sechsmonatiger Freiheitsstrafe oder nur mit Geldstrafe bedroht ist.</schluss></liste>"#,
r#"<absatz typ="abs" ct="text" halign="j">(3) Die Verjährungsfrist beträgt zwanzig Jahre, wenn die Handlung zwar nicht mit lebenslanger Freiheitsstrafe, aber mit mehr als zehnjähriger Freiheitsstrafe bedroht ist; zehn Jahre, wenn die Handlung mit mehr als fünfjähriger, aber höchstens zehnjähriger Freiheitsstrafe bedroht ist; fünf Jahre, wenn die Handlung mit mehr als einjähriger, aber höchstens fünfjähriger Freiheitsstrafe bedroht ist; drei Jahre, wenn die Handlung mit mehr als sechsmonatiger, aber höchstens einjähriger Freiheitsstrafe bedroht ist; ein Jahr, wenn die Handlung mit nicht mehr als sechsmonatiger Freiheitsstrafe oder nur mit Geldstrafe bedroht ist.</absatz>"#,
);
parser.add_string_to_replace(
r#"<absatz typ="abs" ct="text" halign="j">(3) Die Frist beträgt</absatz><absatz typ="erltext" ct="text" halign="j">fünfzehn Jahre,</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">wenn auf Freiheitsstrafe von mehr als einem Jahr, aber nicht mehr als zehn Jahren erkannt worden ist;</schlussteil></liste><absatz typ="erltext" ct="text" halign="j">zehn Jahre,</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">wenn auf Freiheitsstrafe von mehr als drei Monaten, aber nicht mehr als einem Jahr oder auf eine Geldstrafe unter Festsetzung einer Ersatzfreiheitsstrafe von mehr als drei Monaten erkannt worden ist;</schlussteil></liste><absatz typ="erltext" ct="text" halign="j">fünf Jahre</absatz><liste><schlussteil ebene="0.5" art="normal" ct="text">in allen übrigen Fällen.</schlussteil></liste>"#,
r#"<absatz typ="abs" ct="text" halign="j">(3) Die Frist beträgt fünfzehn Jahre, wenn auf Freiheitsstrafe von mehr als einem Jahr, aber nicht mehr als zehn Jahren erkannt worden ist; zehn Jahre, wenn auf Freiheitsstrafe von mehr als drei Monaten, aber nicht mehr als einem Jahr oder auf eine Geldstrafe unter Festsetzung einer Ersatzfreiheitsstrafe von mehr als drei Monaten erkannt worden ist; fünf Jahre in allen übrigen Fällen.</absatz>"#,
);
parser.add_string_to_replace("\u{a0}", " ");
parser.add_string_to_replace(
r#"<ueberschrift typ="g1min" ct="text" halign="c">Strafbare Handlungen gegen Leib und Leben</ueberschrift>"#,
r#"<ueberschrift typ="g2" ct="text" halign="c">Strafbare Handlungen gegen Leib und Leben</ueberschrift>"#,
);
parser.add_string_to_replace("<gdash />", "-");
test(law_id, &mut builder, parser);
}
#[test]
fn kschg() {
let law_id = "10002462";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Hauptstück", Arc::new(&contains)).root());
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)));
let mut parser = Parser::new();
parser.add_string_to_remove("<i>");
parser.add_string_to_remove("</i>");
test(law_id, &mut builder, parser);
}
#[test]
fn vvg() {
let law_id = "20011654";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
let parser = Parser::new();
test(law_id, &mut builder, parser);
}
#[test]
fn urhg() {
let law_id = "10001848";
let mut builder = LawBuilder::new();
builder.add_classifier(Classifier::new("Hauptstück", Arc::new(&contains)).root());
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)));
builder.add_classifier(Classifier::new("Number", Arc::new(&starts_with_number)));
let mut parser = Parser::new();
parser.add_string_to_replace("<i>.</i>", ".");
parser.add_string_to_replace("<gdash />", "-");
parser.add_string_to_replace(
r#"<liste><schlussteil ebene="0" art="normal" ct="text">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</schlussteil></liste>"#,
r#"<absatz typ="abs" ct="text" halign="j">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</absatz>"#,
);
parser.add_string_to_replace("\u{a0}", " ");
test(law_id, &mut builder, parser);
}
// TODO: 10001622(ABGB)
// https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10002180
}