feat(tools/cheddar): allow disabling tagfilter extension
Makes it possible to do things like embedding YouTube videos in blog posts rendered through Cheddar. Change-Id: I6aed943c7bec0167b9f009d36dd067c52c6d3083 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9275 Tested-by: BuildkiteCI Reviewed-by: Mark Shevchenko <markshevchenko@gmail.com>
This commit is contained in:
parent
94ebb30b1f
commit
87d63e4a1b
3 changed files with 24 additions and 7 deletions
|
@ -48,7 +48,7 @@ fn markdown_endpoint(request: &rouille::Request) -> rouille::Response {
|
||||||
|
|
||||||
for text in texts.values_mut() {
|
for text in texts.values_mut() {
|
||||||
let mut buf: Vec<u8> = Vec::new();
|
let mut buf: Vec<u8> = Vec::new();
|
||||||
format_markdown(&mut text.as_bytes(), &mut buf);
|
format_markdown(&mut text.as_bytes(), &mut buf, true);
|
||||||
*text = String::from_utf8_lossy(&buf).to_string();
|
*text = String::from_utf8_lossy(&buf).to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +89,12 @@ fn main() {
|
||||||
.long("about-filter")
|
.long("about-filter")
|
||||||
.takes_value(false),
|
.takes_value(false),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("no-tagfilter")
|
||||||
|
.help("Disable HTML tag filter")
|
||||||
|
.long("no-tagfilter")
|
||||||
|
.takes_value(false),
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("sourcegraph-server")
|
Arg::with_name("sourcegraph-server")
|
||||||
.help("Run as a Sourcegraph compatible web-server")
|
.help("Run as a Sourcegraph compatible web-server")
|
||||||
|
@ -122,7 +128,11 @@ fn main() {
|
||||||
let mut out_handle = stdout.lock();
|
let mut out_handle = stdout.lock();
|
||||||
|
|
||||||
if matches.is_present("about-filter") && filename.ends_with(".md") {
|
if matches.is_present("about-filter") && filename.ends_with(".md") {
|
||||||
format_markdown(&mut in_handle, &mut out_handle);
|
format_markdown(
|
||||||
|
&mut in_handle,
|
||||||
|
&mut out_handle,
|
||||||
|
!matches.is_present("no-tagfilter"),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
format_code(
|
format_code(
|
||||||
&THEMES.themes["InspiredGitHub"],
|
&THEMES.themes["InspiredGitHub"],
|
||||||
|
|
|
@ -233,6 +233,7 @@ fn format_callout_paragraph(callout: Callout) -> NodeValue {
|
||||||
pub fn format_markdown_with_shortlinks<R: BufRead, W: Write>(
|
pub fn format_markdown_with_shortlinks<R: BufRead, W: Write>(
|
||||||
reader: &mut R,
|
reader: &mut R,
|
||||||
writer: &mut W,
|
writer: &mut W,
|
||||||
|
tagfilter: bool,
|
||||||
shortlinks: &[Shortlink],
|
shortlinks: &[Shortlink],
|
||||||
) {
|
) {
|
||||||
let document = {
|
let document = {
|
||||||
|
@ -244,7 +245,13 @@ pub fn format_markdown_with_shortlinks<R: BufRead, W: Write>(
|
||||||
};
|
};
|
||||||
|
|
||||||
let arena = Arena::new();
|
let arena = Arena::new();
|
||||||
let root = parse_document(&arena, &linkify_shortlinks(document, shortlinks), &MD_OPTS);
|
|
||||||
|
let mut opts = MD_OPTS.clone();
|
||||||
|
if !tagfilter {
|
||||||
|
opts.extension.tagfilter = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let root = parse_document(&arena, &linkify_shortlinks(document, shortlinks), &opts);
|
||||||
|
|
||||||
// This node must exist with a lifetime greater than that of the parsed AST
|
// This node must exist with a lifetime greater than that of the parsed AST
|
||||||
// in case that callouts are encountered (otherwise insertion into the tree
|
// in case that callouts are encountered (otherwise insertion into the tree
|
||||||
|
@ -280,11 +287,11 @@ pub fn format_markdown_with_shortlinks<R: BufRead, W: Write>(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
format_html(root, &MD_OPTS, writer).expect("Markdown rendering failed");
|
format_html(root, &opts, writer).expect("Markdown rendering failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_markdown<R: BufRead, W: Write>(reader: &mut R, writer: &mut W) {
|
pub fn format_markdown<R: BufRead, W: Write>(reader: &mut R, writer: &mut W, tagfilter: bool) {
|
||||||
format_markdown_with_shortlinks(reader, writer, &TVL_LINKS)
|
format_markdown_with_shortlinks(reader, writer, tagfilter, &TVL_LINKS)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_syntax_for_file(filename: &str) -> &'static SyntaxReference {
|
fn find_syntax_for_file(filename: &str) -> &'static SyntaxReference {
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::io::BufReader;
|
||||||
fn expect_markdown(input: &str, expected: &str) {
|
fn expect_markdown(input: &str, expected: &str) {
|
||||||
let mut input_buf = BufReader::new(input.trim().as_bytes());
|
let mut input_buf = BufReader::new(input.trim().as_bytes());
|
||||||
let mut out_buf: Vec<u8> = vec![];
|
let mut out_buf: Vec<u8> = vec![];
|
||||||
format_markdown(&mut input_buf, &mut out_buf);
|
format_markdown(&mut input_buf, &mut out_buf, true);
|
||||||
|
|
||||||
let out_string = String::from_utf8(out_buf).expect("output should be UTF8");
|
let out_string = String::from_utf8(out_buf).expect("output should be UTF8");
|
||||||
assert_eq!(out_string.trim(), expected.trim());
|
assert_eq!(out_string.trim(), expected.trim());
|
||||||
|
|
Loading…
Reference in a new issue