create first rough html output
This commit is contained in:
parent
a6a6f9e72e
commit
998ebd481e
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/target
|
||||
/output
|
||||
|
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -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",
|
||||
|
7
README.md
Normal file
7
README.md
Normal file
@ -0,0 +1,7 @@
|
||||
```
|
||||
<details>
|
||||
<summary>What is CSS</summary>
|
||||
<p>Cascading Style Sheets.</p>
|
||||
</details>
|
||||
```:q
|
||||
|
56
laws/eheg.toml
Normal file
56
laws/eheg.toml
Normal 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
15
laws/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>"]
|
32
laws/mschg.toml
Normal file
32
laws/mschg.toml
Normal 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
29
laws/schifffahrtsg.toml
Normal 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
42
laws/stgb.toml
Normal 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
18
laws/teg.toml
Normal 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
29
laws/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>"""
|
16
laws/vereinsg.toml
Normal file
16
laws/vereinsg.toml
Normal 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
7
laws/vgg.toml
Normal file
@ -0,0 +1,7 @@
|
||||
[law]
|
||||
id = 20011654
|
||||
|
||||
[[law.classifiers]]
|
||||
name = "Abschnitt"
|
||||
is_root = true
|
||||
match_function = "contains"
|
88
src/main.rs
88
src/main.rs
@ -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");
|
||||
}
|
||||
}
|
||||
|
13
templates/index.html
Normal file
13
templates/index.html
Normal file
@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h2,h3,h4,h5,h6 {
|
||||
display: inline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>ABGB</h1>
|
||||
{{content}}
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user