#import "./custom_html.typ": code-block
#import "./figures.typ": show-rule-figure

#let css-list = state("css-list", ())

/// Add string `css` to `css-list` if not already present
#let add-css(css) = context {
  css-list.update(x => if css in x { x } else { x + (css,) })
}

/// Concatenate all css found in css-list at the end of the document
#let get-css() = context {
  css-list.final().join("\n\n")
}

#let html_show(body) = {
  show raw: it => { 
    if it.lang == "raw-css" { 
      // remove code and add it to css style
      add-css(it.text) 
    } else if it.block { 
      // wrap <pre><code> inside a <code-block>
      code-block(it) 
    } else {
      it
    }
  }
  show figure: show-rule-figure
  body
}
