code: @Override
    public boolean tokenizeLine(String line, BufferedReader reader, Record record) throws IOException {
      int numChars = line.length();
      final char DELIMITER = separatorChar;
      final char QUOTE = quoteChar;
      final StringBuilder sb = new StringBuilder(30);
      boolean isQuoted = false;
      int i = 0;
      int j = 0;
      
      while (true) {
        
        if (!isQuoted) {
          if (i == line.length()) {
            break; // we're done
          }
          final char c = line.charAt(i);
          if (c == DELIMITER) {
            put(sb, j, record);
            j++;
            sb.setLength(0);
          } else if (c == QUOTE) {
            if (sb.length() == 0) {
              isQuoted = true;
            } else if (i + 1 < line.length() && line.charAt(i + 1) == QUOTE) {
              sb.append(c);
              i++;
            } else {
              isQuoted = true;
            }
          } else {
            sb.append(c);
          }
            
        } else {
          assert isQuoted;
          if (i == line.length()) {
            sb.append('\n');
            i = -1;
            line = reader.readLine();
            if (line == null) {
              throw new IllegalStateException("unexpected end of file, unclosed quotation");
            }
            numChars += line.length();
            if (!verifyRecordLength(
                numChars, maxCharactersPerRecord, sb, line, ignoreTooLongRecords, LOG)) {
              return false; // attempt to ignore it
            }
          } else {
            final char c = line.charAt(i);
            if (c == QUOTE) {
              if (i + 1 < line.length() && line.charAt(i + 1) == QUOTE) {
                sb.append(c); // found two quotes -> insert single quote
                i++;
              } else {
                isQuoted = false;
              }
            } else {
              sb.append(c);
            }
          }
        }
  
        i++;
      }
      
      if (!(j == 0 && sb.length() == 0)) {
        put(sb, j, record);
      }
      
      return true;
    }
docs: Splits the given input line into parts, using the given delimiter.