1#![doc = include_str!("readme.md")]
2use alloc::{
3 string::{String, ToString},
4 vec,
5 vec::Vec,
6};
7use oak_core::{Language, LanguageCategory};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12pub struct CommentConfig {
13 pub line_comment: Option<String>,
15 pub block_comment: Option<(String, String)>,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub struct StringConfig {
23 pub quotes: Vec<char>,
25 pub escape_char: Option<char>,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32pub struct WhitespaceConfig {
33 pub characters: Vec<char>,
35 pub new_line_characters: Vec<char>,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq)]
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
42pub struct VonLanguage {
43 pub commentconfig: CommentConfig,
45 pub stringconfig: StringConfig,
47 pub whitespaceconfig: WhitespaceConfig,
49}
50
51impl VonLanguage {
52 pub fn new() -> Self {
54 Self::default()
55 }
56}
57
58impl Default for VonLanguage {
59 fn default() -> Self {
60 Self {
61 commentconfig: CommentConfig { line_comment: Some("#".to_string()), block_comment: None },
62 stringconfig: StringConfig { quotes: vec!['"', '\''], escape_char: Some('\\') },
63 whitespaceconfig: WhitespaceConfig { characters: vec![' ', '\t'], new_line_characters: vec!['\n', '\r'] },
64 }
65 }
66}
67
68impl Language for VonLanguage {
69 const NAME: &'static str = "von";
70 const CATEGORY: LanguageCategory = LanguageCategory::Programming;
71
72 type TokenType = crate::lexer::token_type::VonTokenType;
73 type ElementType = crate::parser::element_type::VonElementType;
74 type TypedRoot = crate::ast::VonRoot;
75}