fn utf16<'t>(c: &mut bool, i: &'t str) -> IResult<&'t str, char> {
        let (i, n1) = alt((parse_lower, parse_css))(i)?;
        let (i, r) = if (0xd800..=0xdfff).contains(&n1) {
            let (i, n2) = alt((parse_lower, parse_css))(i)?;
            let x = 0x10000 + (n1 - 0xd800) * 0x400 + (n2 - 0xdc00);
            map_opt(success(x), char::from_u32)(i)
        } else {
            map_opt(success(n1), char::from_u32)(i)
        }?;
        *c = true;
        Ok((i, r))
    }
// can parse codepoints > 0x10000, combining surrogate pairs
can parse codepoints > 0x10000, combining surrogate pairs
can parse codepoints > 0x10000 combining surrogate pairs
fn utf16<'t>(c: &mut bool, i: &'t str) -> IResult<&'t str, char> {
        let (i, n1) = alt((parse_lower, parse_css))(i)?;
        let (i, r) = if (0xd800..=0xdfff).contains(&n1) {
            let (i, n2) = alt((parse_lower, parse_css))(i)?;
            let x = 0x10000 + (n1 - 0xd800) * 0x400 + (n2 - 0xdc00);
            map_opt(success(x), char::from_u32)(i)
        } else {
            map_opt(success(n1), char::from_u32)(i)
        }?;
        *c = true;
        Ok((i, r))
    }
fn utf16 < ' t > ( c : & mut bool , i : & ' t str ) -> IResult < & ' t str , char > { let ( i , n1 ) = alt ( ( parse_lower , parse_css ) ) ( i ) ? ; let ( i , r ) = if ( 0xd800 ..= 0xdfff ) . contains ( & n1 ) { let ( i , n2 ) = alt ( ( parse_lower , parse_css ) ) ( i ) ? ; let x = 0x10000 + ( n1 - 0xd800 ) * 0x400 + ( n2 - 0xdc00 ) ; map_opt ( success ( x ) , char :: from_u32 ) ( i ) } else { map_opt ( success ( n1 ) , char :: from_u32 ) ( i ) } ? ; * c = true ; Ok ( ( i , r ) ) }
can parse codepoints > 0x10000, combining surrogate pairs
can parse codepoints > 0x10000 combining surrogate pairs
c
&mut bool
i
&'t str