(&mut self, leading_len: u32, ident_escaped: bool)
| 382 | } |
| 383 | |
| 384 | fn consume_url_sequence(&mut self, leading_len: u32, ident_escaped: bool) -> Token { |
| 385 | let mut len = leading_len; |
| 386 | let mut trailing_len = 0; |
| 387 | let mut contains_escape = ident_escaped; |
| 388 | let mut ends_with_paren = false; |
| 389 | let (whitespace_count, _) = self.consume_whitespace(); |
| 390 | if whitespace_count > 0 { |
| 391 | len += whitespace_count; |
| 392 | } |
| 393 | loop { |
| 394 | let b = self.peek_byte(0); |
| 395 | match b { |
| 396 | b')' => { |
| 397 | self.pos += 1; |
| 398 | len += 1; |
| 399 | trailing_len += 1; |
| 400 | ends_with_paren = true; |
| 401 | break; |
| 402 | } |
| 403 | 0 if self.at_end() => { |
| 404 | break; |
| 405 | } |
| 406 | b if b < 128 && ASCII_WHITESPACE.0[b as usize] => { |
| 407 | trailing_len += self.consume_whitespace().0; |
| 408 | len += trailing_len; |
| 409 | contains_escape = true; |
| 410 | let b2 = self.peek_byte(0); |
| 411 | match b2 { |
| 412 | b')' => { |
| 413 | self.pos += 1; |
| 414 | len += 1; |
| 415 | trailing_len += 1; |
| 416 | ends_with_paren = true; |
| 417 | break; |
| 418 | } |
| 419 | 0 if self.at_end() => { |
| 420 | break; |
| 421 | } |
| 422 | _ => { |
| 423 | return self.consume_remnants_of_bad_url(len); |
| 424 | } |
| 425 | } |
| 426 | } |
| 427 | b'\'' | b'"' | b'(' => { |
| 428 | return self.consume_remnants_of_bad_url(len); |
| 429 | } |
| 430 | b'\\' => { |
| 431 | let c2 = self.peek_char_at(1); |
| 432 | if is_escape_sequence('\\', c2) { |
| 433 | self.pos += 1; |
| 434 | len += self.consume_escape_sequence(); |
| 435 | contains_escape = true; |
| 436 | } else { |
| 437 | return self.consume_remnants_of_bad_url(len); |
| 438 | } |
| 439 | } |
| 440 | _ => { |
| 441 | // Bulk scan: find next ), \, or space (most common terminators) |
no test coverage detected