diff options
author | Vincent Ambo <mail@tazj.in> | 2023-05-26T14·27+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2023-05-27T11·40+0000 |
commit | d419b81ef7bd3bfc3a6911a13a303278eaa1be98 (patch) | |
tree | e10930f9e01bbff5e0bd8fa1c385644bccedbb4e /corp/rih/static-markdown/src/lib.rs | |
parent | 99c78966372017cb3b7bf021f08520a040004b0c (diff) |
feat(corp/rih): add macro to render Markdown->yew::Html statically r/6209
This makes it possible to embed long texts from Markdown files instead of dealing with writing the weird HTML-tags inside the yew macros, which will be much easier for content editors to deal with. Change-Id: Idc4e67404fcfe2b8d5083cf556df1c701ba17660 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8648 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
Diffstat (limited to 'corp/rih/static-markdown/src/lib.rs')
-rw-r--r-- | corp/rih/static-markdown/src/lib.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/corp/rih/static-markdown/src/lib.rs b/corp/rih/static-markdown/src/lib.rs new file mode 100644 index 000000000000..6a25c9292654 --- /dev/null +++ b/corp/rih/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() +} |