///|
fn Cursor::comment(self : Cursor) -> Node raise ParseFailure {
  let start = self.index
  let mut level = -1
  let buf = StringBuilder()
  while true {
    let mut i = -1
    let max_level = if level == -1 { 2 } else { level }
    while self.current() == Some('#') && i < max_level {
      ignore(self.next())
      i += 1
    }
    if level == -1 {
      level = i
    }
    if self.current() != Some('\n') {
      self.expect(' ')
      while self.current() != None && self.current() != Some('\n') {
        buf.write_char(self.current().unwrap())
        ignore(self.next())
      }
    }
    if self.is_next_line_comment(level) {
      buf.write_char('\n')
      ignore(self.next())
    } else {
      break
    }
  }
  let content = buf.to_string()
  let kind = match level {
    0 => Comment(content)
    1 => GroupComment(content)
    _ => ResourceComment(content)
  }
  Node::with_span(kind, start, self.index)
}