oak_tailwind/language/
mod.rs1#![doc = include_str!("readme.md")]
2use crate::{ast::TailwindRoot, lexer::TailwindLexer, parser::TailwindParser};
3use oak_core::{Language, LanguageCategory};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum TailwindMode {
9 #[default]
11 Template,
12 Expression,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct TailwindLanguage {
20 pub mode: TailwindMode,
22}
23
24impl Language for TailwindLanguage {
25 const NAME: &'static str = "tailwind";
26 const CATEGORY: LanguageCategory = LanguageCategory::StyleSheet;
27
28 type TokenType = crate::lexer::token_type::TailwindTokenType;
29 type ElementType = crate::parser::element_type::TailwindElementType;
30 type TypedRoot = TailwindRoot;
31}
32
33impl TailwindLanguage {
34 pub fn new() -> Self {
36 Self::standard()
37 }
38
39 pub fn standard() -> Self {
41 Self { mode: TailwindMode::Template }
42 }
43
44 pub fn lexer(&self) -> TailwindLexer {
46 TailwindLexer::new(*self)
47 }
48
49 pub fn parser(&self) -> TailwindParser {
51 TailwindParser::new(*self)
52 }
53}