diff --git a/crates/css-syntax/src/syntax.rs b/crates/css-syntax/src/syntax.rs index 306e17fb..bbd6b2b5 100644 --- a/crates/css-syntax/src/syntax.rs +++ b/crates/css-syntax/src/syntax.rs @@ -684,11 +684,51 @@ impl From for Constituent { } } } + +pub fn write_formal_syntax_from_syntax( + syntax_str: impl Into, + locale_str: &str, + value_definition_url: &str, + syntax_tooltip: &'_ HashMap, +) -> Result { + let syntax = Syntax { + name: "dummy".to_string(), + syntax: syntax_str.into(), + }; + write_formal_syntax_internal( + syntax, + locale_str, + value_definition_url, + syntax_tooltip, + true, + ) +} + pub fn write_formal_syntax( css: CssType, locale_str: &str, value_definition_url: &str, syntax_tooltip: &'_ HashMap, +) -> Result { + let syntax: Syntax = get_syntax_internal(css, true); + if syntax.syntax.is_empty() { + return Err(SyntaxError::NoSyntaxFound); + } + write_formal_syntax_internal( + syntax, + locale_str, + value_definition_url, + syntax_tooltip, + false, + ) +} + +fn write_formal_syntax_internal( + syntax: Syntax, + locale_str: &str, + value_definition_url: &str, + syntax_tooltip: &'_ HashMap, + skip_first: bool, ) -> Result { let mut renderer = SyntaxRenderer { locale_str, @@ -696,16 +736,12 @@ pub fn write_formal_syntax( syntax_tooltip, constituents: Default::default(), }; - let syntax: Syntax = get_syntax_internal(css, true); - if syntax.syntax.is_empty() { - return Err(SyntaxError::NoSyntaxFound); - } let mut out = String::new(); write!(out, r#"
"#)?;
     let constituents = renderer.get_constituent_syntaxes(syntax)?;
 
-    for constituent in constituents {
-        renderer.render(&mut out, &constituent)?;
+    for constituent in constituents.iter().skip(if skip_first { 1 } else { 0 }) {
+        renderer.render(&mut out, constituent)?;
         out.push_str("
"); } diff --git a/crates/rari-doc/src/templ/templs/csssyntax.rs b/crates/rari-doc/src/templ/templs/csssyntax.rs index bdaa4876..5ef74126 100644 --- a/crates/rari-doc/src/templ/templs/csssyntax.rs +++ b/crates/rari-doc/src/templ/templs/csssyntax.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; use std::sync::LazyLock; -use css_syntax::syntax::{write_formal_syntax, CssType, LinkedToken}; +use css_syntax::syntax::{ + write_formal_syntax, write_formal_syntax_from_syntax, CssType, LinkedToken, +}; use rari_templ_func::rari_f; use tracing::{error, warn}; @@ -63,3 +65,16 @@ pub fn csssyntax(name: Option) -> Result { &TOOLTIPS, )?) } + +#[rari_f] +pub fn csssyntaxraw(syntax: String) -> Result { + Ok(write_formal_syntax_from_syntax( + syntax, + env.locale.as_url_str(), + &format!( + "/{}/docs/Web/CSS/Value_definition_syntax", + env.locale.as_url_str() + ), + &TOOLTIPS, + )?) +} diff --git a/crates/rari-doc/src/templ/templs/mod.rs b/crates/rari-doc/src/templ/templs/mod.rs index 0b44ad6b..21bb1057 100644 --- a/crates/rari-doc/src/templ/templs/mod.rs +++ b/crates/rari-doc/src/templ/templs/mod.rs @@ -69,6 +69,7 @@ pub fn invoke( "specifications" => specification::specification_any, "glossary" => glossary::glossary_any, "csssyntax" => csssyntax::csssyntax_any, + "csssyntaxraw" => csssyntax::csssyntaxraw_any, "listsubpages" => listsubpages::list_sub_pages_any, "cssinfo" => cssinfo::cssinfo_any, "inheritancediagram" => inheritance_diagram::inheritance_diagram_any,