create first rough html output

This commit is contained in:
philipp 2024-02-17 09:44:08 +01:00
parent a6a6f9e72e
commit 998ebd481e
15 changed files with 346 additions and 9 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target /target
/output

2
Cargo.lock generated
View File

@ -533,7 +533,7 @@ dependencies = [
[[package]] [[package]]
name = "risp" name = "risp"
version = "0.1.0" version = "0.1.0"
source = "git+ssh://git@git.hofer.link:2222/philipp/risp.git#324df0568aa8430985d303187885441dcb5e9bf3" source = "git+https://git.hofer.link/philipp/risp.git#3bc0a005174075172eeac1d0f5f2ef8708f375e0"
dependencies = [ dependencies = [
"clap", "clap",
"directories", "directories",

7
README.md Normal file
View File

@ -0,0 +1,7 @@
```
<details>
<summary>What is CSS</summary>
<p>Cascading Style Sheets.</p>
</details>
```:q

56
laws/eheg.toml Normal file
View File

@ -0,0 +1,56 @@
[law]
id = 10001871
[[law.classifiers]]
name = "Abschnitt"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Uppercase letter"
is_root = false
match_function = "starts_with_uppercaseletter"
[[law.classifiers]]
name = "roman letter"
is_root = false
match_function = "starts_with_roman_number"
[[law.classifiers]]
name = "letter"
is_root = false
match_function = "starts_with_letter"
[parser]
remove_strings = [
"""<ueberschrift typ="para" ct="text" halign="c">§ 33</ueberschrift>""",
"<i>", "</i>",
"<n>", "</n>"
]
move_para_headers_into_content = true
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"
[[parser.replace_rules]]
find = "(Anm.: § 108 aufgehoben durch Art. II Z 7 BGBl. Nr. 566/1983)"
replace_with = "<gldsym>§ 108.</gldsym>(Anm.: § 108 aufgehoben durch Art. II Z 7 BGBl. Nr. 566/1983)"
# Wrongly formatted "headers"
[[parser.replace_rules]]
find = """<ueberschrift typ="g1" ct="text" halign="c">Fristablauf</ueberschrift>"""
replace_with = """<ueberschrift typ="para" ct="text" halign="c">Fristablauf</ueberschrift>"""
[[parser.replace_rules]]
find = """<ueberschrift typ="para" ct="text" halign="c">I. Nichtigkeitsgründe</ueberschrift>"""
replace_with = """<ueberschrift typ="g1" ct="text" halign="c">I. Nichtigkeitsgründe</ueberschrift>"""
[[parser.replace_rules]]
find = """<ueberschrift typ="g2" ct="text" halign="c">I. Allgemeine Vorschriften</ueberschrift>"""
replace_with = """<ueberschrift typ="g1" ct="text" halign="c">I. Allgemeine Vorschriften</ueberschrift>"""
[[parser.replace_rules]]
find = """<ueberschrift typ="g2" ct="text" halign="c">I. Name der geschiedenen Frau</ueberschrift>"""
replace_with = """<ueberschrift typ="g1" ct="text" halign="c">I. Name der geschiedenen Frau</ueberschrift>"""

15
laws/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>"]

32
laws/mschg.toml Normal file
View File

@ -0,0 +1,32 @@
[law]
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 = "<super>bis</super>"
replace_with = "bis"
[[parser.replace_rules]]
find = "<super>ter</super>"
replace_with = "ter"
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"
[[parser.replace_rules]]
find = "(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)"
replace_with = "<gldsym>§ 69.</gldsym>(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)"

29
laws/schifffahrtsg.toml Normal file
View File

@ -0,0 +1,29 @@
[law]
id = 10012703
[[law.classifiers]]
name = "Teil"
is_root = true
match_function = "contains"
[[law.classifiers]]
name = "Hauptstück"
is_root = false
match_function = "contains"
[parser]
remove_strings = [
"<gs sperrweite=\"26\">", "</gs>",
"<super>", "</super>",
"<sub>", "</sub>",
"<b>", "</b>",
"<n>", "</n>",
"<i>", "</i>",
"<tab position=\"35.4\" />" # this is a nice one, have a look at § 133 (2) Zi. 5 and enjoy :^)
]
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"

42
laws/stgb.toml Normal file
View File

@ -0,0 +1,42 @@
[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="g2" ct="text" halign="c">Erster Abschnitt</ueberschrift>"""
replace_with = """<ueberschrift typ="g1" ct="text" halign="c">Erster Abschnitt</ueberschrift>"""
[[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 = """<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 = "-"

18
laws/teg.toml Normal file
View File

@ -0,0 +1,18 @@
[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
laws/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>"""

16
laws/vereinsg.toml Normal file
View File

@ -0,0 +1,16 @@
[law]
id = 20001917
[[law.classifiers]]
name = "Abschnitt"
is_root = true
match_function = "contains"
[parser]
remove_strings = ["<n>", "</n>"]
[[parser.replace_rules]]
find = "<gdash />"
replace_with = "-"

7
laws/vgg.toml Normal file
View File

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

View File

@ -1,27 +1,99 @@
use risp::law::{Heading, HeadingContent, Law}; use std::fs;
fn print_header(header: Heading, level: usize) { use risp::law::{Content, Heading, HeadingContent, Law, Section};
fn print_content(content: Content) -> String {
let mut ret = String::new();
match content {
Content::Text(t) => ret.push_str(&format!("<div class='content text'>{t}</div>")),
Content::Item(l) | Content::List(l) => {
ret.push_str("<span class='content list'>");
for item in l {
ret.push_str(&print_content(item));
}
ret.push_str("</span>");
}
}
ret
}
fn print_paragraph(section: Section) -> String {
let mut ret = String::new();
ret.push_str("<div class='par'>");
ret.push_str(&format!("<span class='symb'>{}</span>", section.symb));
if let Some(par_header) = section.par_header {
ret.push_str(&format!("<span class='header'>{}</span>", par_header));
}
if let Some(note) = section.par_note {
ret.push_str(&format!("<span class='note'>Beachte: {}</span>", note));
}
ret.push_str(&print_content(section.content));
ret.push_str("</div>");
ret
}
fn print_header(header: Heading, level: usize) -> String {
let mut ret = String::new();
let mut header_title = header.name.clone(); let mut header_title = header.name.clone();
if let Some(desc) = header.desc { if let Some(desc) = header.desc {
header_title.push_str(&format!(" ({desc})")) header_title.push_str(&format!(" ({desc})"))
} }
println!("{} {header_title}", " ".repeat(level)); ret.push_str(&format!(
"<details>\
<summary><h{0}>{1}</h{0}></summary>\n\
<p>",
level + 2,
header_title
));
match header.content { match header.content {
HeadingContent::Paragraph(p) => {} HeadingContent::Paragraph(p) => {
for section in p {
ret.push_str(&print_paragraph(section));
}
}
HeadingContent::Heading(subheaders) => { HeadingContent::Heading(subheaders) => {
for subheader in subheaders { for subheader in subheaders {
print_header(subheader, level + 1); ret.push_str(&print_header(subheader, level + 1));
} }
} }
} }
ret.push_str("</p></details>");
ret
}
fn get_content(config_path: &str) -> String {
let law = Law::from_config(config_path).unwrap();
let mut ret = String::new();
for h in law.header {
ret.push_str(&print_header(h, 0));
}
ret
} }
fn main() { fn main() {
let law = Law::from_config("data/abgb.toml").unwrap(); let configs = fs::read_dir("./laws").expect("No folder with config files");
for h in law.header { for config in configs {
print_header(h, 0); let config = config.unwrap();
let filename = config.file_name().into_string().unwrap();
//TODO: use proper logic...
let law_name = filename.replace(".toml", "");
let path = format!("{}", config.path().display());
let content = get_content(&path);
let template = fs::read_to_string("templates/index.html").unwrap();
let site = template.replace("{{content}}", &content);
fs::write(&format!("output/{law_name}.html"), &site).expect("Unable to write file");
} }
} }

13
templates/index.html Normal file
View File

@ -0,0 +1,13 @@
<html>
<head>
<style>
h2,h3,h4,h5,h6 {
display: inline;
}
</style>
</head>
<body>
<h1>ABGB</h1>
{{content}}
</body>
</html>