diff options
| author | veradec <glitchmill.dyj3d@simplelogin.co> | 2026-09-10 20:17:00 +0530 |
|---|---|---|
| committer | veradec <glitchmill.dyj3d@simplelogin.co> | 2026-09-10 20:17:00 +0530 |
| commit | 8191e911c4f9d412179db4fea8d6b98b9fd20259 (patch) | |
| tree | f2d73ba7eba283e781978905d200504575f6be6a /src/main.rs | |
| parent | 5a59209227da78ab554138659e16d961181e2eed (diff) | |
feat: pre-processing works
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs index 32c3dba..944b405 100644 --- a/src/main.rs +++ b/src/main.rs @@ -136,7 +136,7 @@ fn parse(tokens: Vec<&str>, index: usize) -> (Vec<Okml>, usize) { key: current.to_string(), value: OkmlType::String(result.clone()) }); - // info!("{} => {}", current, result); + info!("{} => {}", current, result); } else { let mut return_value: OkmlType; @@ -159,10 +159,10 @@ fn parse(tokens: Vec<&str>, index: usize) -> (Vec<Okml>, usize) { key: current.to_string(), value: (return_value) }); - // info!("{} => {}", current, value); + info!("{} => {}", current, value); } } else { - // info!("{}", current); + info!("{}", current); } index +=1 } @@ -170,6 +170,48 @@ fn parse(tokens: Vec<&str>, index: usize) -> (Vec<Okml>, usize) { return (parent, index) } +fn pre_process(mut content: String) -> String{ + let mut chars: Vec<char> = content.chars().collect(); + let mut result = Vec::with_capacity(chars.len()); + let mut next_char: Option<&char>; + for (index, ¤t_char) in chars.iter().enumerate() { + next_char = chars.get(index+1); + if current_char == ' ' && next_char == Some(&':') { + continue; + } + + if current_char == ':' + && next_char != Some(&' ') + && chars.get(index.wrapping_sub(1)) != Some(&'\\') + { + result.push(current_char); + result.push(' '); + } else if current_char == '{' && chars.get(index-1) != Some(&' '){ + result.push(' '); + result.push(current_char); + } else if current_char == '`' && (next_char != Some(&'`')) { + result.push(current_char); + result.push('\n'); + } else if current_char == '`' && (chars.get(index-1) != Some(&'\n')) { + // result.push('\n'); + result.push(current_char); + } + else { + result.push(current_char); + } + } + + chars = result; + + + // for c in chars { + // print!("{c}", ); + // } + + let mut rc: String = chars.into_iter().collect(); + return rc; +} + fn load_from_file(file_path: &str) { let extension = &file_path[file_path.len()-4..file_path.len()]; @@ -179,11 +221,13 @@ fn load_from_file(file_path: &str) { } info!("File: {}", file_path); - let content = fs::read_to_string(file_path) + let mut content = fs::read_to_string(file_path) .expect("Should've read the file"); + let mut processed_content = pre_process(content.clone()); + let re = Regex::new(r"[ \t\n]+").unwrap(); - let tokens: Vec<&str> = re.split(&content).filter(|s| !s.is_empty()).collect(); + let tokens: Vec<&str> = re.split(&processed_content).filter(|s| !s.is_empty()).collect(); let (parsed_ast, _) = parse(tokens, 0); println!("{:#?}", parsed_ast); } |
