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;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let max_len = match numbering {
 | 
			
		||||
            Decimal => 19,
 | 
			
		||||
            AlphaLower | AlphaUpper | RomanLower | RomanUpper => 13,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let chars_num = chars.clone();
 | 
			
		||||
        let len_num = 1 + chars_num
 | 
			
		||||
            .clone()
 | 
			
		||||
            .take(max_len - 1)
 | 
			
		||||
            .take_while(|c| match numbering {
 | 
			
		||||
                Decimal => c.is_ascii_digit(),
 | 
			
		||||
                AlphaLower => c.is_ascii_lowercase(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -203,7 +203,7 @@ pub enum ListKind {
 | 
			
		|||
    Ordered {
 | 
			
		||||
        numbering: OrderedListNumbering,
 | 
			
		||||
        style: OrderedListStyle,
 | 
			
		||||
        start: u32,
 | 
			
		||||
        start: u64,
 | 
			
		||||
    },
 | 
			
		||||
    Task,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -265,11 +265,11 @@ pub enum Atom<'s> {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
impl OrderedListNumbering {
 | 
			
		||||
    fn parse_number(self, n: &str) -> u32 {
 | 
			
		||||
    fn parse_number(self, n: &str) -> u64 {
 | 
			
		||||
        match self {
 | 
			
		||||
            Self::Decimal => n.parse().unwrap(),
 | 
			
		||||
            Self::AlphaLower | Self::AlphaUpper => {
 | 
			
		||||
                let d0 = u32::from(if matches!(self, Self::AlphaLower) {
 | 
			
		||||
                let d0 = u64::from(if matches!(self, Self::AlphaLower) {
 | 
			
		||||
                    b'a'
 | 
			
		||||
                } else {
 | 
			
		||||
                    b'A'
 | 
			
		||||
| 
						 | 
				
			
			@ -283,13 +283,13 @@ impl OrderedListNumbering {
 | 
			
		|||
                    .iter()
 | 
			
		||||
                    .rev()
 | 
			
		||||
                    .copied()
 | 
			
		||||
                    .map(u32::from)
 | 
			
		||||
                    .map(u64::from)
 | 
			
		||||
                    .zip(weights)
 | 
			
		||||
                    .map(|(d, w)| w * (d - d0 + 1))
 | 
			
		||||
                    .sum()
 | 
			
		||||
            }
 | 
			
		||||
            Self::RomanLower | Self::RomanUpper => {
 | 
			
		||||
                fn value(d: char) -> u32 {
 | 
			
		||||
                fn value(d: char) -> u64 {
 | 
			
		||||
                    match d {
 | 
			
		||||
                        'i' | 'I' => 1,
 | 
			
		||||
                        'v' | 'V' => 5,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue