/* This page is part of the Game of Life source code */

/*
 * Enumerates over a string containing a text file, returning lines.
 */
package org.bitstorm.util;

import java.util.Enumeration;

/**
 * Enumerates over a string containing a text file, returning lines.
 * Line endings in the text can be "\r\n", "\r" or "\n".
 @author Edwin Martin
 */
// But nothing beats Python ;-)
// for line in file("file.txt"):
//    # Process line
public class LineEnumerator implements Enumeration {
  private final String s;
  private final String separator;
  public final String CR = "\r";
  public final String LF = "\n";
  public final String CRLF = "\r\n";
  int offset;
  int eolOffset;

  /**
   * Constructs a TextEnumerator.
   @param s String with text
   */
  public LineEnumeratorString s ) {
    this.s = s;
    // find out the seperator
    if s.indexOfCR != -) {
      if s.indexOfCRLF != -)
        separator = CRLF;
      else 
        separator = CR;
    else {
      separator = LF;
    }
    eolOffset = -separator.length();
  }
  /**
   @see java.util.Enumeration#hasMoreElements()
   */
  public boolean hasMoreElements() {
    return eolOffset != s.length();
  }
  /**
   * When the "last line" ends with a return, the next empty line will also be returned, as it should.
   * Returned lines do not end with return chars (LF, CR or CRLF). 
   @see java.util.Enumeration#nextElement()
   */
  public Object nextElement() {
    // skip to next line
    offset = eolOffset+separator.length();
    // find the next seperator
    eolOffset = s.indexOfseparator, offset );
    // not found, set to last char (the last line doesn't need have a \n or \r)
    if eolOffset == -)
      eolOffset = s.length();
    return s.substringoffset, eolOffset );
  }
}
Java2html