oak_tailwind/language/
mod.rs1use crate::{ast::TailwindRoot, lexer::TailwindLexer, parser::TailwindParser};
2use oak_core::{Language, LanguageCategory};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde::Serialize, serde::Deserialize)]
6pub enum TailwindMode {
7 #[default]
8 Template,
9 Expression,
10 }
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, serde::Serialize, serde::Deserialize)]
15pub struct TailwindLanguage {
16 pub allow_raw_blocks: bool,
17 pub allow_custom_tags: bool,
18 pub mode: TailwindMode,
19}
20
21impl Language for TailwindLanguage {
22 const NAME: &'static str = "tailwind";
23 const CATEGORY: LanguageCategory = LanguageCategory::Markup;
24
25 type TokenType = crate::kind::TailwindSyntaxKind;
26 type ElementType = crate::kind::TailwindSyntaxKind;
27 type TypedRoot = TailwindRoot;
28}
29
30impl TailwindLanguage {
31 pub fn new() -> Self {
32 Self::standard()
33 }
34
35 pub fn standard() -> Self {
36 Self { allow_raw_blocks: true, allow_custom_tags: false, mode: TailwindMode::Template }
37 }
38
39 pub fn lexer(&self) -> TailwindLexer<'_> {
40 TailwindLexer::new(self)
41 }
42
43 pub fn parser(&self) -> TailwindParser<'_> {
44 TailwindParser::new(self)
45 }
46}