Fix comparing key and mark prefix/suffix as optional.
This commit is contained in:
		
							parent
							
								
									f6155ecf93
								
							
						
					
					
						commit
						8a0f9d4540
					
				| @ -14,7 +14,6 @@ use crate::types::AstNode; | ||||
| #[derive(Debug)] | ||||
| pub(crate) enum EmacsField<'s> { | ||||
|     Required(&'s str), | ||||
|     #[allow(dead_code)] | ||||
|     Optional(&'s str), | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -3492,13 +3492,21 @@ fn compare_citation<'b, 's>( | ||||
|             compare_property_quoted_string | ||||
|         ), | ||||
|         ( | ||||
|             EmacsField::Required(":prefix"), | ||||
|             |r| Some(r.prefix.iter()), | ||||
|             EmacsField::Optional(":prefix"), | ||||
|             |r| if r.prefix.is_empty() { | ||||
|                 None | ||||
|             } else { | ||||
|                 Some(r.prefix.iter()) | ||||
|             }, | ||||
|             compare_property_list_of_ast_nodes | ||||
|         ), | ||||
|         ( | ||||
|             EmacsField::Required(":suffix"), | ||||
|             |r| Some(r.suffix.iter()), | ||||
|             EmacsField::Optional(":suffix"), | ||||
|             |r| if r.suffix.is_empty() { | ||||
|                 None | ||||
|             } else { | ||||
|                 Some(r.suffix.iter()) | ||||
|             }, | ||||
|             compare_property_list_of_ast_nodes | ||||
|         ) | ||||
|     ) { | ||||
| @ -3544,13 +3552,21 @@ fn compare_citation_reference<'b, 's>( | ||||
|             compare_property_quoted_string | ||||
|         ), | ||||
|         ( | ||||
|             EmacsField::Required(":prefix"), | ||||
|             |r| Some(r.prefix.iter()), | ||||
|             EmacsField::Optional(":prefix"), | ||||
|             |r| if r.prefix.is_empty() { | ||||
|                 None | ||||
|             } else { | ||||
|                 Some(r.prefix.iter()) | ||||
|             }, | ||||
|             compare_property_list_of_ast_nodes | ||||
|         ), | ||||
|         ( | ||||
|             EmacsField::Required(":suffix"), | ||||
|             |r| Some(r.suffix.iter()), | ||||
|             EmacsField::Optional(":suffix"), | ||||
|             |r| if r.suffix.is_empty() { | ||||
|                 None | ||||
|             } else { | ||||
|                 Some(r.suffix.iter()) | ||||
|             }, | ||||
|             compare_property_list_of_ast_nodes | ||||
|         ) | ||||
|     ) { | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| use nom::branch::alt; | ||||
| use nom::bytes::complete::tag; | ||||
| use nom::character::complete::anychar; | ||||
| use nom::combinator::map; | ||||
| use nom::combinator::not; | ||||
| use nom::combinator::opt; | ||||
| use nom::combinator::recognize; | ||||
| @ -56,18 +57,22 @@ pub(crate) fn citation_reference_key<'b, 'g, 'r, 's>( | ||||
|     context: RefContext<'b, 'g, 'r, 's>, | ||||
|     input: OrgSource<'s>, | ||||
| ) -> Res<OrgSource<'s>, OrgSource<'s>> { | ||||
|     let (remaining, source) = recognize(tuple(( | ||||
|         tag("@"), | ||||
|         many1(verify( | ||||
|             preceded( | ||||
|                 not(parser_with_context!(exit_matcher_parser)(context)), | ||||
|                 anychar, | ||||
|             ), | ||||
|             |c| { | ||||
|                 WORD_CONSTITUENT_CHARACTERS.contains(*c) || "-.:?~`'/*@+|(){}<>&_^$#%~".contains(*c) | ||||
|             }, | ||||
|     let (remaining, source) = map( | ||||
|         tuple(( | ||||
|             tag("@"), | ||||
|             recognize(many1(verify( | ||||
|                 preceded( | ||||
|                     not(parser_with_context!(exit_matcher_parser)(context)), | ||||
|                     anychar, | ||||
|                 ), | ||||
|                 |c| { | ||||
|                     WORD_CONSTITUENT_CHARACTERS.contains(*c) | ||||
|                         || "-.:?~`'/*@+|(){}<>&_^$#%~".contains(*c) | ||||
|                 }, | ||||
|             ))), | ||||
|         )), | ||||
|     )))(input)?; | ||||
|         |(_, key)| key, | ||||
|     )(input)?; | ||||
|     Ok((remaining, source)) | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander