def parse_newline
      s0 = @current_pos
      s1 = []
      s2 = parse_whitespace
      while s2 != :failed
        s1 << s2
        s2 = parse_whitespace
      end
      s2 = match_str("\n")
      if s2 == :failed
        s2 = @current_pos
        s3 = match_str("\r")
        s2 = if s3 != :failed
               s4 = match_str("\n")
               s4 = nil if s4 == :failed
               [s3, s4]
             else
               @current_pos = s2
               :failed
             end
      end
      if s2 != :failed
        [s1, s2]
      else
        @current_pos = s0
        :failed
      end
    end
def parse_newline
      s0 = @current_pos
      s1 = []
      s2 = parse_whitespace
      while s2 != :failed
        s1 << s2
        s2 = parse_whitespace
      end
      s2 = match_str("\n")
      if s2 == :failed
        s2 = @current_pos
        s3 = match_str("\r")
        s2 = if s3 != :failed
               s4 = match_str("\n")
               s4 = nil if s4 == :failed
               [s3, s4]
             else
               @current_pos = s2
               :failed
             end
      end
      if s2 != :failed
        [s1, s2]
      else
        @current_pos = s0
        :failed
      end
    end
newline : whitespace* ("\n" | "\r" "\n"?)