From ac5d6067d36ca0f3e18c4fb733fc31cbfa4d3db6 Mon Sep 17 00:00:00 2001 From: Florian Dieminger Date: Wed, 9 Oct 2024 16:54:23 +0200 Subject: [PATCH] fix(templ): fix delimiter usage --- crates/rari-doc/src/pages/build.rs | 1 + crates/rari-doc/src/pages/json.rs | 3 +++ crates/rari-doc/src/templ/render.rs | 6 ++---- crates/rari-md/src/ext.rs | 3 +++ crates/rari-md/src/html.rs | 4 ++-- crates/rari-md/src/lib.rs | 2 +- crates/rari-md/src/p.rs | 19 +++++++++++-------- 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/crates/rari-doc/src/pages/build.rs b/crates/rari-doc/src/pages/build.rs index 1ccdc2cc..f9fc74b4 100644 --- a/crates/rari-doc/src/pages/build.rs +++ b/crates/rari-doc/src/pages/build.rs @@ -296,6 +296,7 @@ fn build_doc(doc: &Doc) -> Result { }, browser_compat: doc.meta.browser_compat.clone(), other_translations, + page_type: doc.meta.page_type, }, url: doc.meta.url.clone(), ..Default::default() diff --git a/crates/rari-doc/src/pages/json.rs b/crates/rari-doc/src/pages/json.rs index 8cc1667b..543fb704 100644 --- a/crates/rari-doc/src/pages/json.rs +++ b/crates/rari-doc/src/pages/json.rs @@ -2,6 +2,7 @@ use std::path::PathBuf; use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc}; use rari_data::baseline::SupportStatusWithByKey; +use rari_types::fm_types::PageType; use rari_types::locale::{Locale, Native}; use serde::{Deserialize, Serialize}; @@ -114,6 +115,8 @@ pub struct JsonDoc { pub baseline: Option<&'static SupportStatusWithByKey>, #[serde(rename = "browserCompat", skip_serializing_if = "Vec::is_empty")] pub browser_compat: Vec, + #[serde(rename = "pageType")] + pub page_type: PageType, } #[derive(Debug, Clone, Serialize)] diff --git a/crates/rari-doc/src/templ/render.rs b/crates/rari-doc/src/templ/render.rs index e95de72a..2063e998 100644 --- a/crates/rari-doc/src/templ/render.rs +++ b/crates/rari-doc/src/templ/render.rs @@ -1,5 +1,6 @@ use std::fmt::Write; +use rari_md::ext::{DELIM_END, DELIM_START}; use rari_types::globals::deny_warnings; use rari_types::{AnyArg, RariEnv}; use tracing::{span, warn, Level}; @@ -8,9 +9,6 @@ use super::parser::{parse, Token}; use super::templs::invoke; use crate::error::DocError; -static DELIM_START: &str = ";!::::"; -static DELIM_END: &str = ";!::::"; - pub struct Rendered { pub content: String, pub templs: Vec, @@ -117,7 +115,7 @@ pub fn render_and_decode_ref(env: &RariEnv, input: &str) -> Result Result { let mut decoded = String::with_capacity(input.len()); - if !input.contains(";!::::") { + if !input.contains(DELIM_START) { return Ok(input.to_string()); } let mut frags = vec![]; diff --git a/crates/rari-md/src/ext.rs b/crates/rari-md/src/ext.rs index 02dce767..e20fcf8a 100644 --- a/crates/rari-md/src/ext.rs +++ b/crates/rari-md/src/ext.rs @@ -2,3 +2,6 @@ pub(crate) enum Flag { Card, None, } + +pub static DELIM_START: &str = ";!::::"; +pub static DELIM_END: &str = ";!::::"; diff --git a/crates/rari-md/src/html.rs b/crates/rari-md/src/html.rs index fb9056c5..8324c603 100644 --- a/crates/rari-md/src/html.rs +++ b/crates/rari-md/src/html.rs @@ -22,7 +22,7 @@ use rari_types::locale::Locale; use crate::anchor; use crate::ctype::isspace; -use crate::ext::Flag; +use crate::ext::{Flag, DELIM_START}; use crate::node_card::{is_callout, NoteCard}; /// Formats an AST as HTML, modified by the given options. @@ -598,7 +598,7 @@ impl<'o, 'c: 'o> HtmlFormatter<'o, 'c> { let mut text_content = Vec::with_capacity(20); Self::collect_first_child_text(node, &mut text_content); let raw_id = String::from_utf8(text_content).unwrap(); - let is_templ = raw_id.starts_with("!::::"); + let is_templ = raw_id.starts_with(DELIM_START); if is_templ { write!(self.output, "
bool { let b = &b[..b .iter() @@ -8,15 +10,16 @@ fn only_escaped_templ(b: &[u8], start: usize) -> bool { .find_position(|c| *c != &b'\n') .map(|(i, _)| b.len() - i) .unwrap_or(0)]; - if b[start..].starts_with("!::::".as_bytes()) { + if b[start..].starts_with(DELIM_START.as_bytes()) { + let start = start + DELIM_START.as_bytes().len(); if let Some(end) = b[start..] - .windows(5) - .position(|window| window == "::::!".as_bytes()) + .windows(DELIM_END.as_bytes().len()) + .position(|window| window == DELIM_END.as_bytes()) { - if start + end + 5 == b.len() { + if start + end + DELIM_END.as_bytes().len() == b.len() { return true; } else { - return only_escaped_templ(b, start + end + 5); + return only_escaped_templ(b, start + end + DELIM_END.as_bytes().len()); } } } @@ -51,11 +54,11 @@ mod test { #[test] fn test_only_escaped_templ() { - let b = b"!::::0::::!"; + let b = b";!::::0;!::::"; assert!(only_escaped_templ(b, 0)); - let b = b"!::::0::::!!::::1::::!"; + let b = b";!::::0;!::::;!::::1;!::::"; assert!(only_escaped_templ(b, 0)); - let b = b"foo !::::0::::!!::::1::::!"; + let b = b"foo ;!::::0;!::::;!::::1::::!;"; assert!(!only_escaped_templ(b, 0)); } }