ziyy_core/parser/mod.rs
1use crate::error::Result;
2use crate::splitter::fragment::{Fragment, FragmentType};
3use chunk::{Chunk, ChunkData};
4#[cfg(feature = "parallel")]
5use rayon::prelude::*;
6
7pub mod ansi;
8pub mod chunk;
9pub mod color;
10pub mod tag_parser;
11pub mod word_parser;
12
13pub struct Parser {
14 parse_placeholders: bool,
15}
16
17impl Default for Parser {
18 fn default() -> Self {
19 Self::new(true)
20 }
21}
22
23impl Parser {
24 pub fn new(parse_placeholders: bool) -> Self {
25 Self { parse_placeholders }
26 }
27
28 pub fn parse<'a>(&self, frags: Vec<Fragment<'a>>) -> Vec<Result<Chunk<'a>>> {
29 // let word_parer = WordParser::new();
30 #[cfg(feature = "parallel")]
31 {
32 frags
33 .into_par_iter()
34 .map(|frag| {
35 let span = frag.span;
36 match frag.r#type {
37 FragmentType::Tag => {
38 let mut tag_parser =
39 tag_parser::TagParser::new(self.parse_placeholders);
40 Ok(Chunk {
41 data: ChunkData::Tag(tag_parser.parse(frag)?),
42 span,
43 })
44 }
45
46 FragmentType::Whitespace => {
47 // Handle whitespace fragments
48 Ok(Chunk {
49 data: ChunkData::WhiteSpace(frag.lexeme),
50 span,
51 })
52 }
53
54 FragmentType::Word => {
55 // Handle word fragments
56 // let chs = word_parer.parse(frag)?;
57 // chunks.extend_from_slice(&chs);
58 Ok(Chunk {
59 data: ChunkData::Word(frag.lexeme),
60 span,
61 })
62 }
63 }
64 })
65 .collect()
66 }
67
68 #[cfg(not(feature = "parallel"))]
69 frags
70 .into_iter()
71 .map(|frag| {
72 let span = frag.span;
73 match frag.r#type {
74 FragmentType::Tag => {
75 let mut tag_parser = tag_parser::TagParser::new(self.parse_placeholders);
76 Ok(Chunk {
77 data: ChunkData::Tag(tag_parser.parse(frag)?),
78 span,
79 })
80 }
81
82 FragmentType::Whitespace => {
83 // Handle whitespace fragments
84 Ok(Chunk {
85 data: ChunkData::WhiteSpace(frag.lexeme),
86 span,
87 })
88 }
89
90 FragmentType::Word => {
91 // Handle word fragments
92 // let chs = word_parer.parse(frag)?;
93 // chunks.extend_from_slice(&chs);
94 Ok(Chunk {
95 data: ChunkData::Word(frag.lexeme),
96 span,
97 })
98 }
99 }
100 })
101 .collect()
102 }
103}