@@ -65,7 +65,8 @@ pub enum JournalCstNode {
6565 max_entry_value_first_part_commodity_trailing_len : usize ,
6666 max_entry_value_first_separator_len : usize ,
6767 max_entry_value_second_part_decimal_len : usize ,
68- max_entry_value_second_part_numeric_units_len : usize ,
68+ max_entry_value_second_part_units_len : usize ,
69+ max_entry_value_second_part_commodity_leading_len : usize ,
6970 max_entry_value_second_separator_len : usize ,
7071 max_entry_value_third_part_decimal_len : usize ,
7172 max_entry_value_third_part_numeric_units_len : usize ,
@@ -198,7 +199,8 @@ struct ParserTempData {
198199 max_entry_value_first_part_commodity_trailing_len : usize ,
199200 max_entry_value_first_separator_len : usize ,
200201 max_entry_value_second_part_decimal_len : usize ,
201- max_entry_value_second_part_numeric_units_len : usize ,
202+ max_entry_value_second_part_units_len : usize ,
203+ max_entry_value_second_part_commodity_leading_len : usize ,
202204 max_entry_value_second_separator_len : usize ,
203205 max_entry_value_third_part_decimal_len : usize ,
204206 max_entry_value_third_part_numeric_units_len : usize ,
@@ -225,7 +227,8 @@ impl ParserTempData {
225227 max_entry_value_first_part_commodity_trailing_len : 0 ,
226228 max_entry_value_first_separator_len : 0 ,
227229 max_entry_value_second_part_decimal_len : 0 ,
228- max_entry_value_second_part_numeric_units_len : 0 ,
230+ max_entry_value_second_part_units_len : 0 ,
231+ max_entry_value_second_part_commodity_leading_len : 0 ,
229232 max_entry_value_second_separator_len : 0 ,
230233 max_entry_value_third_part_decimal_len : 0 ,
231234 max_entry_value_third_part_numeric_units_len : 0 ,
@@ -525,9 +528,12 @@ pub fn parse_content(content: &str) -> Result<JournalFile, errors::SyntaxError>
525528 data. max_entry_value_second_part_decimal_len = data
526529 . max_entry_value_second_part_decimal_len
527530 . max ( p. second_part_decimal . chars ( ) . count ( ) ) ;
528- data. max_entry_value_second_part_numeric_units_len = data
529- . max_entry_value_second_part_numeric_units_len
530- . max ( p. second_part_numeric_units . len ( ) ) ;
531+ data. max_entry_value_second_part_units_len = data
532+ . max_entry_value_second_part_units_len
533+ . max ( p. second_part_units . chars ( ) . count ( ) ) ;
534+ data. max_entry_value_second_part_commodity_leading_len = data
535+ . max_entry_value_second_part_commodity_leading_len
536+ . max ( leading_commodity_len_from_units ( & p. second_part_units ) ) ;
531537
532538 data. max_entry_value_second_separator_len = data
533539 . max_entry_value_second_separator_len
@@ -776,8 +782,9 @@ fn save_transaction(data: &mut ParserTempData, journal: &mut Vec<JournalCstNode>
776782 . max_entry_value_first_part_commodity_trailing_len ,
777783 max_entry_value_first_separator_len : data. max_entry_value_first_separator_len ,
778784 max_entry_value_second_part_decimal_len : data. max_entry_value_second_part_decimal_len ,
779- max_entry_value_second_part_numeric_units_len : data
780- . max_entry_value_second_part_numeric_units_len ,
785+ max_entry_value_second_part_units_len : data. max_entry_value_second_part_units_len ,
786+ max_entry_value_second_part_commodity_leading_len : data
787+ . max_entry_value_second_part_commodity_leading_len ,
781788 max_entry_value_second_separator_len : data. max_entry_value_second_separator_len ,
782789 max_entry_value_third_part_decimal_len : data. max_entry_value_third_part_decimal_len ,
783790 max_entry_value_third_part_numeric_units_len : data
@@ -798,7 +805,8 @@ fn save_transaction(data: &mut ParserTempData, journal: &mut Vec<JournalCstNode>
798805 data. max_entry_value_first_part_commodity_trailing_len = 0 ;
799806 data. max_entry_value_first_separator_len = 0 ;
800807 data. max_entry_value_second_part_decimal_len = 0 ;
801- data. max_entry_value_second_part_numeric_units_len = 0 ;
808+ data. max_entry_value_second_part_units_len = 0 ;
809+ data. max_entry_value_second_part_commodity_leading_len = 0 ;
802810 data. max_entry_value_second_separator_len = 0 ;
803811 data. max_entry_value_third_part_decimal_len = 0 ;
804812 data. max_entry_value_third_part_numeric_units_len = 0 ;
@@ -1000,6 +1008,7 @@ impl EntryValueParser {
10001008 } else if !c. is_whitespace ( ) {
10011009 second_part_value. push ( c) ;
10021010 state = SecondPartCommodityBefore ;
1011+ current_spaces_in_a_row = 0 ;
10031012 }
10041013 }
10051014 SecondPartCommodityBefore => {
@@ -1235,7 +1244,7 @@ mod test {
12351244 #[test]
12361245 fn test_parser() {
12371246 let mut parser = EntryValueParser::default();
1238- _ = parser.parse("0.0 AAAA = 2.0 AAAA @ $1.50 ");
1247+ _ = parser.parse("EUR -100 @@ USDT 120 ");
12391248 println!("{:?}", parser);
12401249 assert!(false);
12411250 }
0 commit comments