Show formatted challenge content text
This commit is contained in:
parent
0620607c6d
commit
e54ce5b52e
4 changed files with 26 additions and 4 deletions
11
Cargo.lock
generated
11
Cargo.lock
generated
|
@ -1120,6 +1120,16 @@ dependencies = [
|
||||||
"encoding",
|
"encoding",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gh-emoji"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "30ad64b43d48c1745c0059e5ba223816eb599eec8956c668fc0a31f6b9cd799e"
|
||||||
|
dependencies = [
|
||||||
|
"phf",
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ghash"
|
name = "ghash"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
|
@ -3276,6 +3286,7 @@ dependencies = [
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"dotenv",
|
"dotenv",
|
||||||
"gettext",
|
"gettext",
|
||||||
|
"gh-emoji",
|
||||||
"poise",
|
"poise",
|
||||||
"r2d2",
|
"r2d2",
|
||||||
"r2d2_sqlite",
|
"r2d2_sqlite",
|
||||||
|
|
|
@ -13,6 +13,7 @@ comrak = "0.18.0"
|
||||||
derive_more = "0.99.17"
|
derive_more = "0.99.17"
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
gettext = "0.4.0"
|
gettext = "0.4.0"
|
||||||
|
gh-emoji = "1.0.7"
|
||||||
poise = "0.5.5"
|
poise = "0.5.5"
|
||||||
r2d2 = "0.8.10"
|
r2d2 = "0.8.10"
|
||||||
r2d2_sqlite = "0.22.0"
|
r2d2_sqlite = "0.22.0"
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
use core::panic;
|
use core::panic;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
use comrak::format_html;
|
||||||
use serde::{Deserialize, Deserializer, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize};
|
||||||
use serde_yaml::Value;
|
use serde_yaml::Value;
|
||||||
|
|
||||||
use crate::{prelude::*};
|
use crate::{prelude::*, utils::furigana_to_html};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Challenge {
|
pub struct Challenge {
|
||||||
|
pub text: Option<String>,
|
||||||
pub japanese: Option<Vec<Vec<Vec<ChallengeWord>>>>,
|
pub japanese: Option<Vec<Vec<Vec<ChallengeWord>>>>,
|
||||||
pub english: Option<Vec<String>>,
|
pub english: Option<Vec<String>>,
|
||||||
pub song: Option<Song>,
|
pub song: Option<Song>,
|
||||||
|
@ -29,10 +31,11 @@ impl Challenge {
|
||||||
options
|
options
|
||||||
};
|
};
|
||||||
let arena = Arena::new();
|
let arena = Arena::new();
|
||||||
|
let challenge_text = fs::read_to_string(format!("content/challenges/{number}.md"))
|
||||||
|
.expect("Couldn't find challenge file");
|
||||||
let root = parse_document(
|
let root = parse_document(
|
||||||
&arena,
|
&arena,
|
||||||
& (fs::read_to_string(format!("content/challenges/{number}.md"))
|
&(challenge_text.clone()
|
||||||
.expect("Couldn't find challenge file")
|
|
||||||
// comrak can't find frontmatter if there's only frontmatter and no newline at end
|
// comrak can't find frontmatter if there's only frontmatter and no newline at end
|
||||||
// TODO: Open issue in comrak
|
// TODO: Open issue in comrak
|
||||||
+ "\n"),
|
+ "\n"),
|
||||||
|
@ -45,7 +48,13 @@ impl Challenge {
|
||||||
let lines: Vec<&str> = frontmatter.trim().lines().collect();
|
let lines: Vec<&str> = frontmatter.trim().lines().collect();
|
||||||
lines[1..lines.len() - 1].join("\n")
|
lines[1..lines.len() - 1].join("\n")
|
||||||
};
|
};
|
||||||
let challenge: Challenge = serde_yaml::from_str(&frontmatter).unwrap();
|
let mut challenge: Challenge = serde_yaml::from_str(&frontmatter).unwrap();
|
||||||
|
//challenge.text = Some(challenge_text.replace(&frontmatter, "").trim().to_owned());
|
||||||
|
let mut html = vec![];
|
||||||
|
format_html(root, &ComrakOptions::default(), &mut html)
|
||||||
|
.expect("Failed to format HTML");
|
||||||
|
challenge.text = Some(furigana_to_html(&gh_emoji::Replacer::new()
|
||||||
|
.replace_all(&String::from_utf8(html).unwrap())));
|
||||||
challenge
|
challenge
|
||||||
} else {
|
} else {
|
||||||
panic!("No frontmatter!")
|
panic!("No frontmatter!")
|
||||||
|
|
|
@ -100,6 +100,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{{ content.text | safe }}
|
||||||
{% if content.translation %}
|
{% if content.translation %}
|
||||||
<p>
|
<p>
|
||||||
Translation
|
Translation
|
||||||
|
|
Loading…
Add table
Reference in a new issue