create first rough html output
This commit is contained in:
@@ -1 +1,2 @@
|
||||
/target
|
||||
/output
|
||||
|
||||
Generated
+1
-1
@@ -533,7 +533,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "risp"
|
||||
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 = [
|
||||
"clap",
|
||||
"directories",
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
```
|
||||
<details>
|
||||
<summary>What is CSS</summary>
|
||||
<p>Cascading Style Sheets.</p>
|
||||
</details>
|
||||
```:q
|
||||
|
||||
@@ -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>"""
|
||||
@@ -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>"]
|
||||
@@ -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)"
|
||||
|
||||
@@ -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 = "-"
|
||||
|
||||
@@ -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 = "-"
|
||||
|
||||
@@ -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>"
|
||||
]
|
||||
|
||||
@@ -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>"""
|
||||
@@ -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 = "-"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
[law]
|
||||
id = 20011654
|
||||
|
||||
[[law.classifiers]]
|
||||
name = "Abschnitt"
|
||||
is_root = true
|
||||
match_function = "contains"
|
||||
+80
-8
@@ -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();
|
||||
if let Some(desc) = header.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 {
|
||||
HeadingContent::Paragraph(p) => {}
|
||||
HeadingContent::Paragraph(p) => {
|
||||
for section in p {
|
||||
ret.push_str(&print_paragraph(section));
|
||||
}
|
||||
}
|
||||
HeadingContent::Heading(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() {
|
||||
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 {
|
||||
print_header(h, 0);
|
||||
for config in configs {
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h2,h3,h4,h5,h6 {
|
||||
display: inline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>ABGB</h1>
|
||||
{{content}}
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user