Apply the TODO keyword settings.
This commit is contained in:
		
							parent
							
								
									bdba495f69
								
							
						
					
					
						commit
						70fafd801e
					
				| @ -1,3 +1,5 @@ | ||||
| use std::collections::BTreeSet; | ||||
| 
 | ||||
| use super::FileAccessInterface; | ||||
| use super::LocalFileAccessInterface; | ||||
| use crate::types::Object; | ||||
| @ -8,6 +10,8 @@ use crate::types::Object; | ||||
| pub struct GlobalSettings<'g, 's> { | ||||
|     pub radio_targets: Vec<&'g Vec<Object<'s>>>, | ||||
|     pub file_access: &'g dyn FileAccessInterface, | ||||
|     pub in_progress_todo_keywords: BTreeSet<String>, | ||||
|     pub complete_todo_keywords: BTreeSet<String>, | ||||
| } | ||||
| 
 | ||||
| impl<'g, 's> GlobalSettings<'g, 's> { | ||||
| @ -17,6 +21,8 @@ impl<'g, 's> GlobalSettings<'g, 's> { | ||||
|             file_access: &LocalFileAccessInterface { | ||||
|                 working_directory: None, | ||||
|             }, | ||||
|             in_progress_todo_keywords: BTreeSet::new(), | ||||
|             complete_todo_keywords: BTreeSet::new() | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										12
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/main.rs
									
									
									
									
									
								
							| @ -148,11 +148,13 @@ fn run_parse_on_file<P: AsRef<Path>>(org_path: P) -> Result<(), Box<dyn std::err | ||||
|         .ok_or("Should be contained inside a directory.")?; | ||||
|     let org_contents = std::fs::read_to_string(org_path)?; | ||||
|     let org_contents = org_contents.as_str(); | ||||
|     let global_settings = GlobalSettings { | ||||
|         radio_targets: Vec::new(), | ||||
|         file_access: &LocalFileAccessInterface { | ||||
|             working_directory: Some(parent_directory.to_path_buf()), | ||||
|         }, | ||||
|     let file_access_interface = LocalFileAccessInterface { | ||||
|         working_directory: Some(parent_directory.to_path_buf()), | ||||
|     }; | ||||
|     let global_settings = { | ||||
|         let mut global_settings = GlobalSettings::default(); | ||||
|         global_settings.file_access = &file_access_interface; | ||||
|         global_settings | ||||
|     }; | ||||
|     let rust_parsed = parse_with_settings(org_contents, &global_settings)?; | ||||
|     println!("{:#?}", rust_parsed); | ||||
|  | ||||
| @ -18,6 +18,7 @@ use nom::multi::many_till; | ||||
| use nom::multi::separated_list1; | ||||
| use nom::sequence::tuple; | ||||
| 
 | ||||
| use super::in_buffer_settings::apply_in_buffer_settings; | ||||
| use super::in_buffer_settings::scan_for_in_buffer_settings; | ||||
| use super::org_source::OrgSource; | ||||
| use super::token::AllTokensIterator; | ||||
| @ -124,6 +125,15 @@ fn document_org_source<'b, 'g, 'r, 's>( | ||||
|         final_settings.extend(setup_file_settings); | ||||
|     } | ||||
|     final_settings.extend(document_settings); | ||||
|     let new_settings = apply_in_buffer_settings(final_settings, context.get_global_settings()).map_err(|_err| { | ||||
|                 nom::Err::Error(CustomError::MyError(MyError( | ||||
|                     "TODO: make this take an owned string so I can dump err.to_string() into it." | ||||
|                         .into(), | ||||
|                 ))) | ||||
|     })?; | ||||
|     let new_context = context.with_global_settings(&new_settings); | ||||
|     let context = &new_context; | ||||
| 
 | ||||
|     // TODO: read the keywords into settings and apply them to the GlobalSettings.
 | ||||
| 
 | ||||
|     let (remaining, document) = | ||||
|  | ||||
| @ -6,9 +6,11 @@ use nom::multi::many0; | ||||
| use nom::multi::many_till; | ||||
| 
 | ||||
| use super::keyword::filtered_keyword; | ||||
| use super::keyword_todo::keyword_todo; | ||||
| use super::OrgSource; | ||||
| use crate::error::Res; | ||||
| use crate::types::Keyword; | ||||
| use crate::GlobalSettings; | ||||
| 
 | ||||
| #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] | ||||
| pub fn scan_for_in_buffer_settings<'s>( | ||||
| @ -41,3 +43,27 @@ fn in_buffer_settings_key<'s>(input: OrgSource<'s>) -> Res<OrgSource<'s>, OrgSou | ||||
|         tag_no_case("typ_todo"), | ||||
|     ))(input) | ||||
| } | ||||
| 
 | ||||
| pub fn apply_in_buffer_settings<'g, 's, 'sf>( | ||||
|     keywords: Vec<Keyword<'sf>>, | ||||
|     original_settings: &'g GlobalSettings<'g, 's>, | ||||
| ) -> Result<GlobalSettings<'g, 's>, String> { | ||||
|     let mut new_settings = original_settings.clone(); | ||||
| 
 | ||||
|     for kw in keywords.iter().filter(|kw| { | ||||
|         kw.key.eq_ignore_ascii_case("todo") | ||||
|             || kw.key.eq_ignore_ascii_case("seq_todo") | ||||
|             || kw.key.eq_ignore_ascii_case("typ_todo") | ||||
|     }) { | ||||
|         let (_, (in_progress_words, complete_words)) = | ||||
|             keyword_todo(kw.value).map_err(|err| err.to_string())?; | ||||
|         new_settings | ||||
|             .in_progress_todo_keywords | ||||
|             .extend(in_progress_words.into_iter().map(str::to_string)); | ||||
|         new_settings | ||||
|             .complete_todo_keywords | ||||
|             .extend(complete_words.into_iter().map(str::to_string)); | ||||
|     } | ||||
| 
 | ||||
|     Ok(new_settings) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander