From 058a430894e2447a47aeecf351f16b1d6984cb3a Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Thu, 30 Jan 2020 13:10:44 +0100 Subject: [PATCH 1/3] style: justify text in paragraphs --- src/styles/app.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/styles/app.scss b/src/styles/app.scss index e33b36bf3..b494ced4f 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -54,6 +54,10 @@ blockquote { } } +p { + text-align: justify; +} + code { overflow: auto; } From 0c6fc68334aaa72a06f77ab91a17867d4b8a3eae Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Thu, 30 Jan 2020 18:34:26 +0100 Subject: [PATCH 2/3] use `hyphens: manual` --- Cargo.lock | 53 +++++++++++++++++++++++++ Cargo.toml | 1 + hyphenation-en-us.bincode | Bin 0 -> 151714 bytes src/main.rs | 1 + src/markdown.rs | 80 ++++++++++++++++++++++++++++++++++++++ src/posts.rs | 15 +------ src/styles/app.scss | 6 +++ 7 files changed, 142 insertions(+), 14 deletions(-) create mode 100644 hyphenation-en-us.bincode create mode 100644 src/markdown.rs diff --git a/Cargo.lock b/Cargo.lock index ea6e0783c..a1a77e13d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "atlatl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32bb156841d2e2a888185b5b4f7d93d30efd3a40d1671d9628ab39536adb7ea2" +dependencies = [ + "fnv", + "num-traits", + "serde", +] + [[package]] name = "atty" version = "0.2.14" @@ -35,6 +46,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +[[package]] +name = "bincode" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +dependencies = [ + "byteorder", + "serde", +] + [[package]] name = "bitflags" version = "1.2.1" @@ -70,6 +91,7 @@ dependencies = [ "comrak", "fs_extra", "handlebars", + "kl-hyphenate", "lazy_static", "regex", "sass-rs", @@ -173,6 +195,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "fs_extra" version = "1.1.0" @@ -218,6 +246,28 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" +[[package]] +name = "kl-hyphenate" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7f2e69c68893c9f23e268f56eab6fed56c6637f69a28a31346db5cef3a389dd" +dependencies = [ + "atlatl", + "bincode", + "kl-hyphenate-commons", + "serde", +] + +[[package]] +name = "kl-hyphenate-commons" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7db52982b6c74f9a9f66468824a6d8f6cf242be6b39d14625ca56f6939e7665" +dependencies = [ + "atlatl", + "serde", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -425,6 +475,9 @@ name = "serde" version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" diff --git a/Cargo.toml b/Cargo.toml index 7c01e45fc..e807fae28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,4 @@ fs_extra = "1.1.0" regex = "1.3" sass-rs = "0.2.1" chrono = "0.4.13" +kl-hyphenate = "0.7.2" diff --git a/hyphenation-en-us.bincode b/hyphenation-en-us.bincode new file mode 100644 index 0000000000000000000000000000000000000000..8f42678f35df3a9b70b779042224b2cd441a9394 GIT binary patch literal 151714 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 literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs index 51f89292b..15b581c93 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ mod blogs; +mod markdown; mod posts; use crate::blogs::Blog; diff --git a/src/markdown.rs b/src/markdown.rs new file mode 100644 index 000000000..f35d0ce2c --- /dev/null +++ b/src/markdown.rs @@ -0,0 +1,80 @@ +use comrak::{ + nodes::{AstNode, NodeValue}, + Arena, ComrakExtensionOptions, ComrakOptions, ComrakRenderOptions, +}; +use kl_hyphenate::{Hyphenator, Language, Load, Standard}; +use std::error::Error; + +const SOFT_HYPHEN: char = '\u{00AD}'; +const HYPHENATION_DICTIONARY: &str = "hyphenation-en-us.bincode"; + +pub(crate) fn render(input: &str) -> Result> { + let options = ComrakOptions { + render: ComrakRenderOptions { + unsafe_: true, // Allow rendering of raw HTML + ..ComrakRenderOptions::default() + }, + extension: ComrakExtensionOptions { + header_ids: Some(String::new()), + ..ComrakExtensionOptions::default() + }, + ..ComrakOptions::default() + }; + + let hyphenator = Standard::from_path(Language::EnglishUS, HYPHENATION_DICTIONARY)?; + + let arena = Arena::new(); + let ast = comrak::parse_document(&arena, input, &options); + + hyphenate(&ast, &hyphenator); + + let mut output = Vec::new(); + comrak::format_html(&ast, &options, &mut output)?; + Ok(String::from_utf8(output)?) +} + +// Pre-compute points inside words where browsers can add hyphens during rendering. +// +// Support for the CSS rule `hyphens: auto`, which tells the browser to split words by adding +// hyphens when there is no space left on the line, is quite low across browsers, preventing us +// from using it on the blog. +// +// A widely supported alternative is the `hyphens: manual` rule, which moves the burden of deciding +// *where* to break the word to the website. To properly use that rule, the website has to insert +// the "soft hyphen" unicode character (U+00AD) in every position the browser is allowed to break +// the word. +// +// The following piece of code walks through the Markdown AST adding those characters in every +// suitable place, thanks to the kl-hyphenate library. + +fn hyphenate<'a>(node: &'a AstNode<'a>, hyphenator: &Standard) { + match &mut node.data.borrow_mut().value { + NodeValue::Text(content) => { + if let Ok(string) = std::str::from_utf8(&content) { + let hyphenated = add_soft_hyphens(string, hyphenator); + *content = hyphenated.as_bytes().to_vec(); + } + } + _ => {} + } + for child in node.children() { + hyphenate(child, hyphenator); + } +} + +fn add_soft_hyphens(content: &str, hyphenator: &Standard) -> String { + let mut output = String::with_capacity(content.len()); + for (i, word) in content.split(' ').enumerate() { + if i != 0 { + output.push(' '); + } + let hyphenated = hyphenator.hyphenate(word); + for (j, segment) in hyphenated.into_iter().segments().enumerate() { + if j != 0 { + output.push(SOFT_HYPHEN); + } + output.push_str(&segment); + } + } + output +} diff --git a/src/posts.rs b/src/posts.rs index d8770f5ab..fa3f06047 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -1,5 +1,4 @@ use crate::blogs::Manifest; -use comrak::{ComrakExtensionOptions, ComrakOptions, ComrakRenderOptions}; use regex::Regex; use serde_derive::{Deserialize, Serialize}; use std::error::Error; @@ -63,19 +62,7 @@ impl Post { layout, } = serde_yaml::from_str(yaml)?; // next, the contents. we add + to get rid of the final "---\n\n" - let options = ComrakOptions { - render: ComrakRenderOptions { - unsafe_: true, // Allow rendering of raw HTML - ..ComrakRenderOptions::default() - }, - extension: ComrakExtensionOptions { - header_ids: Some(String::new()), - ..ComrakExtensionOptions::default() - }, - ..ComrakOptions::default() - }; - - let contents = comrak::markdown_to_html(&contents[end_of_yaml + 5..], &options); + let contents = crate::markdown::render(&contents[end_of_yaml + 5..])?; // finally, the url. let mut url = PathBuf::from(&*filename); diff --git a/src/styles/app.scss b/src/styles/app.scss index b494ced4f..93b798b10 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -56,6 +56,12 @@ blockquote { p { text-align: justify; + + /* Use manual hyphenation, as automatic hyphenation is not widely + * supported (Chrome doesn't implement it on all platforms). */ + -webkit-hyphens: manual; + -ms-hyphens: manual; + hyphens: manual; } code { From 76c6f0ab320a56a361038317ae44bc950f74466d Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Thu, 23 Jul 2020 11:18:23 +0200 Subject: [PATCH 3/3] break code blocks anywhere --- src/styles/app.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/app.scss b/src/styles/app.scss index 93b798b10..57474dbcb 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -66,6 +66,7 @@ p { code { overflow: auto; + line-break: anywhere; } code.language-console::before,