Remove unused markdown stage

This commit is contained in:
Shadowfacts 2025-01-04 14:57:52 -05:00
parent a0c4c06de7
commit a9a6b85c5f
4 changed files with 1 additions and 424 deletions

295
Cargo.lock generated
View File

@ -390,17 +390,6 @@ dependencies = [
"crypto-common",
]
[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "env_filter"
version = "0.1.3"
@ -454,15 +443,6 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
[[package]]
name = "fsevent-sys"
version = "4.1.0"
@ -825,145 +805,6 @@ dependencies = [
"cc",
]
[[package]]
name = "icu_collections"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
"displaydoc",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_locid"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
"displaydoc",
"litemap",
"tinystr",
"writeable",
"zerovec",
]
[[package]]
name = "icu_locid_transform"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
"displaydoc",
"icu_locid",
"icu_locid_transform_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_locid_transform_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
[[package]]
name = "icu_normalizer"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
dependencies = [
"displaydoc",
"icu_collections",
"icu_normalizer_data",
"icu_properties",
"icu_provider",
"smallvec",
"utf16_iter",
"utf8_iter",
"write16",
"zerovec",
]
[[package]]
name = "icu_normalizer_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
[[package]]
name = "icu_properties"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
dependencies = [
"displaydoc",
"icu_collections",
"icu_locid_transform",
"icu_properties_data",
"icu_provider",
"tinystr",
"zerovec",
]
[[package]]
name = "icu_properties_data"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
[[package]]
name = "icu_provider"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
dependencies = [
"displaydoc",
"icu_locid",
"icu_provider_macros",
"stable_deref_trait",
"tinystr",
"writeable",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_provider_macros"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "idna"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
"idna_adapter",
"smallvec",
"utf8_iter",
]
[[package]]
name = "idna_adapter"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
dependencies = [
"icu_normalizer",
"icu_properties",
]
[[package]]
name = "ignore"
version = "0.4.23"
@ -1099,12 +940,6 @@ dependencies = [
"redox_syscall",
]
[[package]]
name = "litemap"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
[[package]]
name = "lock_api"
version = "0.4.12"
@ -1696,12 +1531,6 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "string_cache"
version = "0.8.7"
@ -1751,17 +1580,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
[[package]]
name = "synstructure"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tendril"
version = "0.4.3"
@ -1815,16 +1633,6 @@ dependencies = [
"syn",
]
[[package]]
name = "tinystr"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
"displaydoc",
"zerovec",
]
[[package]]
name = "tinyvec"
version = "1.8.1"
@ -2113,35 +1921,12 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "url"
version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
]
[[package]]
name = "utf-8"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
name = "utf16_iter"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
[[package]]
name = "utf8_iter"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]]
name = "utf8parse"
version = "0.2.2"
@ -2184,7 +1969,6 @@ dependencies = [
"tower",
"tower-http",
"unicode-normalization",
"url",
]
[[package]]
@ -2372,18 +2156,6 @@ dependencies = [
"memchr",
]
[[package]]
name = "write16"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
[[package]]
name = "writeable"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]]
name = "xml5ever"
version = "0.18.1"
@ -2395,30 +2167,6 @@ dependencies = [
"markup5ever",
]
[[package]]
name = "yoke"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
"serde",
"stable_deref_trait",
"yoke-derive",
"zerofrom",
]
[[package]]
name = "yoke-derive"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
"syn",
"synstructure",
]
[[package]]
name = "zerocopy"
version = "0.7.35"
@ -2439,46 +2187,3 @@ dependencies = [
"quote",
"syn",
]
[[package]]
name = "zerofrom"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
dependencies = [
"proc-macro2",
"quote",
"syn",
"synstructure",
]
[[package]]
name = "zerovec"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
dependencies = [
"yoke",
"zerofrom",
"zerovec-derive",
]
[[package]]
name = "zerovec-derive"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn",
]

View File

@ -49,4 +49,3 @@ toml = "0.8.19"
tower = { version = "0.5.2", features = ["steer", "util"] }
tower-http = { version = "0.6.2", features = ["fs"] }
unicode-normalization = "0.1.24"
url = "2.5.4"

View File

@ -2,7 +2,6 @@ mod footnote_backrefs;
mod footnote_defs;
mod heading_anchors;
mod highlight;
mod link_decorations;
use pulldown_cmark::{Event, Options, Parser, html};
use std::io::Write;
@ -20,10 +19,9 @@ pub fn parse<'a>(s: &'a str) -> impl Iterator<Item = Event<'a>> {
let parser = Parser::new_ext(s, options);
// TODO: revisit which of these stages are necessary, remove unused (and url crate dep)
let heading_anchors = heading_anchors::new(parser);
let link_decorations = link_decorations::new(heading_anchors);
// note backrefs need to come before defs, because the defs stage replaces the
// Tag::FootnoteDefinition events that the backrefs stage relies on with plain html
let footnote_backrefs = footnote_backrefs::new(link_decorations);
let footnote_backrefs = footnote_backrefs::new(heading_anchors);
let footnote_defs = footnote_defs::new(footnote_backrefs);
let highlight = highlight::new(footnote_defs);
highlight

View File

@ -1,125 +0,0 @@
use pulldown_cmark::{CowStr, Event, Tag, TagEnd, html};
use url::Url;
pub struct LinkDecorations<'a, I: Iterator<Item = Event<'a>>> {
iter: I,
}
pub fn new<'a, I: Iterator<Item = Event<'a>>>(iter: I) -> LinkDecorations<'a, I> {
LinkDecorations { iter }
}
impl<'a, I: Iterator<Item = Event<'a>>> Iterator for LinkDecorations<'a, I> {
type Item = Event<'a>;
fn next(&mut self) -> Option<Self::Item> {
match self.iter.next() {
Some(Event::Start(Tag::Link {
dest_url, title, ..
})) => {
let link = href_to_pretty_link(&dest_url);
let mut s = format!(r#"<a href="{}" data-link="{}"#, dest_url, link);
if !title.is_empty() {
s.push_str(" title=\"");
s.push_str(title.as_ref());
}
s.push_str("\">");
html::push_html(&mut s, LinkContents(&mut self.iter));
s.push_str("</a>");
Some(Event::Html(CowStr::Boxed(s.into_boxed_str())))
}
e => e,
}
}
}
struct LinkContents<'a, 'b, I: Iterator<Item = Event<'a>>>(&'b mut I);
impl<'a, 'b, I: Iterator<Item = Event<'a>>> Iterator for LinkContents<'a, 'b, I> {
type Item = Event<'a>;
fn next(&mut self) -> Option<Self::Item> {
match self.0.next() {
Some(Event::End(TagEnd::Link)) => None,
e => e,
}
}
}
fn href_to_pretty_link<'a>(href: &CowStr<'a>) -> CowStr<'a> {
match Url::parse(href) {
Ok(url) => {
let mut s = String::new();
let host = url.host_str();
if let Some(h) = host {
if h.starts_with("www.") {
s.push_str(&h[4..]);
} else {
s.push_str(h);
}
}
let path = url.path();
if path != "/" {
s.push_str(path);
}
if host.map(|s| s.ends_with("youtube.com")).unwrap_or(false) && path == "/watch" {
s.push('?');
s.push_str(url.query().unwrap());
}
if s.len() > 40 {
s = s.chars().take(40).collect();
s.push('…');
}
CowStr::Boxed(s.into_boxed_str())
}
Err(_) => {
// if there was an error parsing the url, we just pass it through unchanged
href.clone()
}
}
}
#[cfg(test)]
mod tests {
use pulldown_cmark::{CowStr, Parser, html};
fn pretty_link<'a>(s: &'a str) -> CowStr<'a> {
super::href_to_pretty_link(&CowStr::Borrowed(s))
}
fn render(s: &str) -> String {
let mut out = String::new();
let parser = Parser::new(s);
let heading_anchors = super::new(parser);
html::push_html(&mut out, heading_anchors);
out
}
#[test]
fn test_href_to_pretty_link() {
assert_eq!(
pretty_link("https://asahilinux.org/2022/03/asahi-linux-alpha-release/").as_ref(),
"asahilinux.org/2022/03/asahi-linux-alpha…"
);
assert_eq!(
pretty_link("https://www.youtube.com/watch?v=MFzDaBzBlL0").as_ref(),
"youtube.com/watch?v=MFzDaBzBlL0"
);
assert_eq!(
pretty_link("https://www.youtube.com/watch?v=MFzDaBzBlL0&t=10").as_ref(),
"youtube.com/watch?v=MFzDaBzBlL0&t=10"
);
}
#[test]
fn test_link_decorations() {
assert_eq!(
render("[foo](bar)").trim(),
r#"<p><a href="bar" data-link="bar">foo</a></p>"#
);
}
}