This commit is contained in:
parent
15e0e485c4
commit
c92d72c580
15
data/configs/kschg.toml
Normal file
15
data/configs/kschg.toml
Normal 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>"]
|
@ -1,21 +1,19 @@
|
|||||||
[law]
|
[law]
|
||||||
id = "10002180"
|
id = 10002180
|
||||||
|
|
||||||
[[law.classifiers]]
|
[[law.classifiers]]
|
||||||
name = "Abschnitt"
|
name = "Abschnitt"
|
||||||
|
is_root = true
|
||||||
match_function = "contains"
|
match_function = "contains"
|
||||||
|
|
||||||
[[law.classifiers]]
|
[[law.classifiers]]
|
||||||
name = "Number"
|
name = "Number"
|
||||||
|
is_root = false
|
||||||
match_function = "starts_with_number"
|
match_function = "starts_with_number"
|
||||||
|
|
||||||
[parser]
|
[parser]
|
||||||
remove_strings = ["<i>", "</i>"]
|
remove_strings = ["<i>", "</i>"]
|
||||||
|
|
||||||
[[parser.replace_rules]]
|
|
||||||
find = "\\u{a0}"
|
|
||||||
replace_with = " "
|
|
||||||
|
|
||||||
[[parser.replace_rules]]
|
[[parser.replace_rules]]
|
||||||
find = "<super>bis</super>"
|
find = "<super>bis</super>"
|
||||||
replace_with = "bis"
|
replace_with = "bis"
|
||||||
|
47
data/configs/stgb.toml
Normal file
47
data/configs/stgb.toml
Normal 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
19
data/configs/teg.toml
Normal 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
29
data/configs/urhg.toml
Normal 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
7
data/configs/vvg.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[law]
|
||||||
|
id = 20011654
|
||||||
|
|
||||||
|
[[law.classifiers]]
|
||||||
|
name = "Abschnitt"
|
||||||
|
is_root = true
|
||||||
|
match_function = "contains"
|
@ -32,6 +32,7 @@ fn create_classifier(match_function: &str) -> Result<ClassifierApplicable, Error
|
|||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
law: Law,
|
law: Law,
|
||||||
|
#[serde(default)]
|
||||||
parser: ParserConfig,
|
parser: ParserConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,9 +81,11 @@ struct Classifier {
|
|||||||
match_function: String,
|
match_function: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize, Default)]
|
||||||
struct ParserConfig {
|
struct ParserConfig {
|
||||||
|
#[serde(default)] //okay to not have this part in the config
|
||||||
remove_strings: Vec<String>,
|
remove_strings: Vec<String>,
|
||||||
|
#[serde(default)] //okay to not have this part in the config
|
||||||
replace_rules: Vec<ReplaceRule>,
|
replace_rules: Vec<ReplaceRule>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,3 +94,20 @@ struct ReplaceRule {
|
|||||||
find: String,
|
find: String,
|
||||||
replace_with: 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -33,6 +33,8 @@ impl Parser {
|
|||||||
info!("Parsing {url}");
|
info!("Parsing {url}");
|
||||||
let xml = fetch(url)?;
|
let xml = fetch(url)?;
|
||||||
|
|
||||||
|
let xml = xml.replace("\u{a0}", " ");
|
||||||
|
|
||||||
self.parse_from_str(&xml, builder)
|
self.parse_from_str(&xml, builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +87,7 @@ mod tests {
|
|||||||
use std::{fs, sync::Arc};
|
use std::{fs, sync::Arc};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
config::Config,
|
||||||
law::{
|
law::{
|
||||||
responsible::{contains, starts_with_number},
|
responsible::{contains, starts_with_number},
|
||||||
Classifier, LawBuilder,
|
Classifier, LawBuilder,
|
||||||
@ -93,55 +96,6 @@ mod tests {
|
|||||||
};
|
};
|
||||||
use pretty_assertions::assert_eq;
|
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) {
|
fn test(law_id: &str, builder: &mut LawBuilder, parser: Parser) {
|
||||||
let paragraph_path = format!("./data/expected/overview/{law_id}");
|
let paragraph_path = format!("./data/expected/overview/{law_id}");
|
||||||
let expected_path = format!("./data/expected/par/{law_id}");
|
let expected_path = format!("./data/expected/par/{law_id}");
|
||||||
@ -170,136 +124,36 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn teg() {
|
fn all_configs_produce_expected_output() {
|
||||||
let law_id = "10001905";
|
let configs = fs::read_dir("./data/configs").expect("No folder with config files");
|
||||||
let mut builder = LawBuilder::new();
|
|
||||||
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
|
||||||
|
|
||||||
let mut parser = Parser::new();
|
for config in configs {
|
||||||
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>"#);
|
let path = format!("{}", config.unwrap().path().display());
|
||||||
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>");
|
|
||||||
|
|
||||||
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]
|
let actual = &builder.history;
|
||||||
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 mut parser = Parser::new();
|
let expected = fs::read_to_string(&expected_path)
|
||||||
parser.add_string_to_remove("<i>");
|
.expect(&format!("Could not read file {expected_path}."));
|
||||||
parser.add_string_to_remove("</i>");
|
let expected = expected.trim().split('\n').collect::<Vec<&str>>();
|
||||||
|
|
||||||
parser.add_string_to_replace("\u{a0}", " ");
|
assert_eq!(actual, &expected);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[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
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user