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