///|
/// Advance the cursor past PDF white space.
///
/// The first non-whitespace byte, delimiter, or end of input is left unread.
pub fn pdf_cursor_drop_whitespace(cursor : @core.ByteCursor) -> Unit {
  let mut done = false
  while !done {
    let value = cursor.peek_byte()
    if value == @core.pdf_no_more || @core.pdf_is_not_whitespace_byte(value) {
      done = true
    } else {
      cursor.nudge()
    }
  }
}

///|
/// Read a borrowed view up to PDF white space or a delimiter.
///
/// The terminating byte is left unread so higher-level lexers can dispatch on
/// delimiters after reading a regular token.
pub fn pdf_cursor_read_until_whitespace_or_delimiter(
  cursor : @core.ByteCursor,
) -> BytesView {
  try! cursor.read_until_view(@core.pdf_is_whitespace_or_delimiter_byte)
}

///|
/// Skip PDF white space and read a regular token as a borrowed byte view.
pub fn pdf_cursor_read_regular_token_view(
  cursor : @core.ByteCursor,
) -> BytesView {
  pdf_cursor_drop_whitespace(cursor)
  pdf_cursor_read_until_whitespace_or_delimiter(cursor)
}