diff options
Diffstat (limited to 'corp/rih/frontend/static-markdown')
-rw-r--r-- | corp/rih/frontend/static-markdown/Cargo.toml | 12 | ||||
-rw-r--r-- | corp/rih/frontend/static-markdown/src/lib.rs | 27 |
2 files changed, 39 insertions, 0 deletions
diff --git a/corp/rih/frontend/static-markdown/Cargo.toml b/corp/rih/frontend/static-markdown/Cargo.toml new file mode 100644 index 000000000000..c0e298d44cf2 --- /dev/null +++ b/corp/rih/frontend/static-markdown/Cargo.toml @@ -0,0 +1,12 @@ +[package] +version = "1.0.0" +name = "static_markdown" +edition = "2018" + +[lib] +proc-macro = true + +[dependencies] +syn = "1.0" +quote = "1.0" +comrak = "0.18" diff --git a/corp/rih/frontend/static-markdown/src/lib.rs b/corp/rih/frontend/static-markdown/src/lib.rs new file mode 100644 index 000000000000..6a25c9292654 --- /dev/null +++ b/corp/rih/frontend/static-markdown/src/lib.rs @@ -0,0 +1,27 @@ +extern crate proc_macro; + +use comrak::{markdown_to_html, ComrakOptions}; +use proc_macro::TokenStream; +use quote::quote; +use syn::{parse_macro_input, LitStr}; + +#[proc_macro] +pub fn markdown(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as LitStr); + + let mut options = ComrakOptions::default(); + options.extension.strikethrough = true; + options.extension.tagfilter = true; + options.extension.table = true; + options.extension.autolink = true; + + let rendered_html = markdown_to_html(&input.value(), &options); + + let tokens = quote! { + yew::virtual_dom::VNode::VRaw(yew::virtual_dom::VRaw { + html: #rendered_html.into(), + }) + }; + + tokens.into() +} |