block: limit ordered list number width
use 64-bit to not let limit be too low, 32-bit allows for only 6 alpha digits, "zzzzzz".
This commit is contained in:
		
					parent
					
						
							
								4b52fb0832
							
						
					
				
			
			
				commit
				
					
						dc38076f50
					
				
			
		
					 2 changed files with 11 additions and 5 deletions
				
			
		| 
						 | 
					@ -734,9 +734,15 @@ impl IdentifiedBlock {
 | 
				
			||||||
            return None;
 | 
					            return None;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let max_len = match numbering {
 | 
				
			||||||
 | 
					            Decimal => 19,
 | 
				
			||||||
 | 
					            AlphaLower | AlphaUpper | RomanLower | RomanUpper => 13,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let chars_num = chars.clone();
 | 
					        let chars_num = chars.clone();
 | 
				
			||||||
        let len_num = 1 + chars_num
 | 
					        let len_num = 1 + chars_num
 | 
				
			||||||
            .clone()
 | 
					            .clone()
 | 
				
			||||||
 | 
					            .take(max_len - 1)
 | 
				
			||||||
            .take_while(|c| match numbering {
 | 
					            .take_while(|c| match numbering {
 | 
				
			||||||
                Decimal => c.is_ascii_digit(),
 | 
					                Decimal => c.is_ascii_digit(),
 | 
				
			||||||
                AlphaLower => c.is_ascii_lowercase(),
 | 
					                AlphaLower => c.is_ascii_lowercase(),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
					@ -203,7 +203,7 @@ pub enum ListKind {
 | 
				
			||||||
    Ordered {
 | 
					    Ordered {
 | 
				
			||||||
        numbering: OrderedListNumbering,
 | 
					        numbering: OrderedListNumbering,
 | 
				
			||||||
        style: OrderedListStyle,
 | 
					        style: OrderedListStyle,
 | 
				
			||||||
        start: u32,
 | 
					        start: u64,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    Task,
 | 
					    Task,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -265,11 +265,11 @@ pub enum Atom<'s> {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl OrderedListNumbering {
 | 
					impl OrderedListNumbering {
 | 
				
			||||||
    fn parse_number(self, n: &str) -> u32 {
 | 
					    fn parse_number(self, n: &str) -> u64 {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            Self::Decimal => n.parse().unwrap(),
 | 
					            Self::Decimal => n.parse().unwrap(),
 | 
				
			||||||
            Self::AlphaLower | Self::AlphaUpper => {
 | 
					            Self::AlphaLower | Self::AlphaUpper => {
 | 
				
			||||||
                let d0 = u32::from(if matches!(self, Self::AlphaLower) {
 | 
					                let d0 = u64::from(if matches!(self, Self::AlphaLower) {
 | 
				
			||||||
                    b'a'
 | 
					                    b'a'
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    b'A'
 | 
					                    b'A'
 | 
				
			||||||
| 
						 | 
					@ -283,13 +283,13 @@ impl OrderedListNumbering {
 | 
				
			||||||
                    .iter()
 | 
					                    .iter()
 | 
				
			||||||
                    .rev()
 | 
					                    .rev()
 | 
				
			||||||
                    .copied()
 | 
					                    .copied()
 | 
				
			||||||
                    .map(u32::from)
 | 
					                    .map(u64::from)
 | 
				
			||||||
                    .zip(weights)
 | 
					                    .zip(weights)
 | 
				
			||||||
                    .map(|(d, w)| w * (d - d0 + 1))
 | 
					                    .map(|(d, w)| w * (d - d0 + 1))
 | 
				
			||||||
                    .sum()
 | 
					                    .sum()
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Self::RomanLower | Self::RomanUpper => {
 | 
					            Self::RomanLower | Self::RomanUpper => {
 | 
				
			||||||
                fn value(d: char) -> u32 {
 | 
					                fn value(d: char) -> u64 {
 | 
				
			||||||
                    match d {
 | 
					                    match d {
 | 
				
			||||||
                        'i' | 'I' => 1,
 | 
					                        'i' | 'I' => 1,
 | 
				
			||||||
                        'v' | 'V' => 5,
 | 
					                        'v' | 'V' => 5,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue