code: public String clean(final Reader cobolReader) throws CleanerException {
  
          if (cobolReader == null) {
              throw new CleanerException("COBOL source was null");
          }
  
          BufferedReader reader = new BufferedReader(cobolReader);
          String line;
          StringBuilder cleanedSource = new StringBuilder();
          CleaningContext context = new CleaningContext();
          try {
              while ((line = reader.readLine()) != null) {
                  if (isLineOfCode(line) && isDataDivision(line, context)) {
                      cleanedSource.append(removeExtraneousCharacters(
                              cleanLine(line), context));
                  }
                  cleanedSource.append("\n");
              }
              if (cleanedSource.length() <= "\n".length()) {
                  throw new CleanerException(
                          "No data descriptions found. Are you sure this is COBOL source?");
              }
              return cleanedSource.toString();
          } catch (IOException e) {
              throw new CleanerException(e);
          }
      }
docs: Takes in a raw COBOL source, potentially containing sequence numbers or
  non data description statements and produces a clean source code.
  <p/>
  Statements which are not data descriptions become empty lines in order to
  preserve original line numbering.
  
  @param cobolReader a reader for the raw COBOL source
  @return the source cleaned up
  @throws CleanerException if source cannot be read