code: String parseLine(CharCursor is, LineMap lineMap)
      throws IOException
    {
      int ch = is.read();
  
      _buf.clear();
  
      String filename = null;
      int line = 0;
  
      // Take 3: match /.*:\d+:/
      _token.clear();
  
    line:
      for (; ch != is.DONE; ch = is.read()) {
        while (ch == ':') {
          line = 0;
          for (ch = is.read(); ch >= '0' && ch <= '9'; ch = is.read())
            line = 10 * line + ch - '0';
          if (ch == ':' && line > 0) {
            filename = _token.toString();
            break line;
          }
          else {
            _token.append(':');
            if (line > 0)
              _token.append(line);
          }
        }
  
        if (ch != is.DONE)
          _token.append((char) ch);
      }
  
      if (filename == null)
        return null;
  
      int column = 0;
  
      // skip added junk like jikes extra "emacs" style columns
      for (; ch != is.DONE && ch != ' '; ch = is.read()) {
      }
      
      for (; ch == ' '; ch = is.read()) {
      }
  
      // now gather the message
      _buf.clear();
      for (; ch != is.DONE; ch = is.read())
        _buf.append((char) ch);
  
      String message = _buf.toString();
  
      if (lineMap != null)
        return lineMap.convertError(filename, line, 0, message);
      else
        return filename + ":" + line + ": " + message;
    }
docs: Scans errors.
  
  <p>Javac errors look like "filename:line: message"