// Path: src/main/java/com/mdimension/jchronic/Options.java
// public class Options {
//   private Pointer.PointerType _context;
//   private Calendar _now;
//   private boolean _guess;
//   private boolean _debug;
//   private int _ambiguousTimeRange;
//   private boolean _compatibilityMode;
// 
//   public Options() {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), true, 6);
//   }
// 
//   public Options(Calendar now) {
//     this(Pointer.PointerType.FUTURE, now, true, 6);
//   }
// 
//   public Options(Calendar now, boolean guess) {
//     this(Pointer.PointerType.FUTURE, now, guess, 6);
//   }
// 
//   public Options(Pointer.PointerType context) {
//     this(context, Calendar.getInstance(), true, 6);
//   }
// 
//   public Options(boolean guess) {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), guess, 6);
//   }
// 
//   public Options(int ambiguousTimeRange) {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), true, ambiguousTimeRange);
//   }
// 
//   public Options(Pointer.PointerType context, Calendar now, boolean guess, int ambiguousTimeRange) {
//     _context = context;
//     _now = now;
//     _guess = guess;
//     _ambiguousTimeRange = ambiguousTimeRange;
//   }
//   
//   public void setDebug(boolean debug) {
//     _debug = debug;
//   }
//   
//   public boolean isDebug() {
//     return _debug;
//   }
//   
//   public void setCompatibilityMode(boolean compatibilityMode) {
//     _compatibilityMode = compatibilityMode;
//   }
//   
//   public boolean isCompatibilityMode() {
//     return _compatibilityMode;
//   }
// 
//   public void setContext(Pointer.PointerType context) {
//     _context = context;
//   }
// 
//   public Pointer.PointerType getContext() {
//     return _context;
//   }
// 
//   public void setNow(Calendar now) {
//     _now = now;
//   }
// 
//   public Calendar getNow() {
//     return _now;
//   }
// 
//   public void setGuess(boolean guess) {
//     _guess = guess;
//   }
// 
//   public boolean isGuess() {
//     return _guess;
//   }
// 
//   public void setAmbiguousTimeRange(int ambiguousTimeRange) {
//     _ambiguousTimeRange = ambiguousTimeRange;
//   }
// 
//   public int getAmbiguousTimeRange() {
//     return _ambiguousTimeRange;
//   }
// }
// 
// Path: src/main/java/com/mdimension/jchronic/utils/Token.java
// public class Token {
//   private String _word;
//   private List<Tag<?>> _tags;
// 
//   public Token(String word) {
//     _word = word;
//     _tags = new LinkedList<Tag<?>>();
//   }
// 
//   public String getWord() {
//     return _word;
//   }
// 
//   /**
//    * Tag this token with the specified tag
//    */
//   public void tag(Tag<?> newTag) {
//     _tags.add(newTag);
//   }
// 
//   /**
//    * Remove all tags of the given class
//    */
//   public void untag(Class<?> tagClass) {
//     Iterator<Tag<?>> tagIter = _tags.iterator();
//     while (tagIter.hasNext()) {
//       Tag<?> tag = tagIter.next();
//       if (tagClass.isInstance(tag)) {
//         tagIter.remove();
//       }
//     }
//   }
// 
//   /**
//    * Return true if this token has any tags
//    */
//   public boolean isTagged() {
//     return !_tags.isEmpty();
//   }
// 
//   /**
//    * Return the Tag that matches the given class
//    */
//   @SuppressWarnings("unchecked")
//   public <T extends Tag> T getTag(Class<T> tagClass) {
//     List<T> matches = getTags(tagClass);
//     T matchingTag = null;
//     if (matches.size() > 0) {
//       matchingTag = matches.get(0);
//     }
// //    if (matches.size() >= 2) {
// //      throw new IllegalStateException("Multiple identical tags found (" + matches + ")");
// //    }
// //    else if (matches.size() == 1) {
// //      matchingTag = matches.get(0);
// //    }
//     return matchingTag;
//   }
// 
//   public List<Tag<?>> getTags() {
//     return _tags;
//   }
//   
//   /**
//    * Return the Tag that matches the given class
//    */
//   @SuppressWarnings("unchecked")
//   public <T extends Tag<?>> List<T> getTags(Class<T> tagClass) {
//     List<T> matches = new LinkedList<T>();
//     Iterator<Tag<?>> tagIter = _tags.iterator();
//     while (tagIter.hasNext()) {
//       Tag<?> tag = tagIter.next();
//       if (tagClass.isInstance(tag)) {
//         matches.add((T)tag);
//       }
//     }
//     return matches;
//   }
// 
//   @Override
//   public String toString() {
//     return _word + " " + _tags;
//   }
// }


import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import com.mdimension.jchronic.Options;
import com.mdimension.jchronic.utils.Token;
package com.mdimension.jchronic.tags;



public class SeparatorComma extends Separator {
  private static final Pattern COMMA_PATTERN = Pattern.compile("^,$");

  public SeparatorComma(Separator.SeparatorType type) {
    super(type);
  }

  @Override
  public String toString() {
    return super.toString() + "-comma";
  }

  public static SeparatorComma scan(Token token, Options options) {
    Map<Pattern, Separator.SeparatorType> scanner = new HashMap<Pattern, Separator.SeparatorType>();
    scanner.put(SeparatorComma.COMMA_PATTERN, Separator.SeparatorType.COMMA);
    for (Pattern scannerItem : scanner.keySet()) {
// Path: src/main/java/com/mdimension/jchronic/Options.java
// public class Options {
//   private Pointer.PointerType _context;
//   private Calendar _now;
//   private boolean _guess;
//   private boolean _debug;
//   private int _ambiguousTimeRange;
//   private boolean _compatibilityMode;
// 
//   public Options() {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), true, 6);
//   }
// 
//   public Options(Calendar now) {
//     this(Pointer.PointerType.FUTURE, now, true, 6);
//   }
// 
//   public Options(Calendar now, boolean guess) {
//     this(Pointer.PointerType.FUTURE, now, guess, 6);
//   }
// 
//   public Options(Pointer.PointerType context) {
//     this(context, Calendar.getInstance(), true, 6);
//   }
// 
//   public Options(boolean guess) {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), guess, 6);
//   }
// 
//   public Options(int ambiguousTimeRange) {
//     this(Pointer.PointerType.FUTURE, Calendar.getInstance(), true, ambiguousTimeRange);
//   }
// 
//   public Options(Pointer.PointerType context, Calendar now, boolean guess, int ambiguousTimeRange) {
//     _context = context;
//     _now = now;
//     _guess = guess;
//     _ambiguousTimeRange = ambiguousTimeRange;
//   }
//   
//   public void setDebug(boolean debug) {
//     _debug = debug;
//   }
//   
//   public boolean isDebug() {
//     return _debug;
//   }
//   
//   public void setCompatibilityMode(boolean compatibilityMode) {
//     _compatibilityMode = compatibilityMode;
//   }
//   
//   public boolean isCompatibilityMode() {
//     return _compatibilityMode;
//   }
// 
//   public void setContext(Pointer.PointerType context) {
//     _context = context;
//   }
// 
//   public Pointer.PointerType getContext() {
//     return _context;
//   }
// 
//   public void setNow(Calendar now) {
//     _now = now;
//   }
// 
//   public Calendar getNow() {
//     return _now;
//   }
// 
//   public void setGuess(boolean guess) {
//     _guess = guess;
//   }
// 
//   public boolean isGuess() {
//     return _guess;
//   }
// 
//   public void setAmbiguousTimeRange(int ambiguousTimeRange) {
//     _ambiguousTimeRange = ambiguousTimeRange;
//   }
// 
//   public int getAmbiguousTimeRange() {
//     return _ambiguousTimeRange;
//   }
// }
// 
// Path: src/main/java/com/mdimension/jchronic/utils/Token.java
// public class Token {
//   private String _word;
//   private List<Tag<?>> _tags;
// 
//   public Token(String word) {
//     _word = word;
//     _tags = new LinkedList<Tag<?>>();
//   }
// 
//   public String getWord() {
//     return _word;
//   }
// 
//   /**
//    * Tag this token with the specified tag
//    */
//   public void tag(Tag<?> newTag) {
//     _tags.add(newTag);
//   }
// 
//   /**
//    * Remove all tags of the given class
//    */
//   public void untag(Class<?> tagClass) {
//     Iterator<Tag<?>> tagIter = _tags.iterator();
//     while (tagIter.hasNext()) {
//       Tag<?> tag = tagIter.next();
//       if (tagClass.isInstance(tag)) {
//         tagIter.remove();
//       }
//     }
//   }
// 
//   /**
//    * Return true if this token has any tags
//    */
//   public boolean isTagged() {
//     return !_tags.isEmpty();
//   }
// 
//   /**
//    * Return the Tag that matches the given class
//    */
//   @SuppressWarnings("unchecked")
//   public <T extends Tag> T getTag(Class<T> tagClass) {
//     List<T> matches = getTags(tagClass);
//     T matchingTag = null;
//     if (matches.size() > 0) {
//       matchingTag = matches.get(0);
//     }
// //    if (matches.size() >= 2) {
// //      throw new IllegalStateException("Multiple identical tags found (" + matches + ")");
// //    }
// //    else if (matches.size() == 1) {
// //      matchingTag = matches.get(0);
// //    }
//     return matchingTag;
//   }
// 
//   public List<Tag<?>> getTags() {
//     return _tags;
//   }
//   
//   /**
//    * Return the Tag that matches the given class
//    */
//   @SuppressWarnings("unchecked")
//   public <T extends Tag<?>> List<T> getTags(Class<T> tagClass) {
//     List<T> matches = new LinkedList<T>();
//     Iterator<Tag<?>> tagIter = _tags.iterator();
//     while (tagIter.hasNext()) {
//       Tag<?> tag = tagIter.next();
//       if (tagClass.isInstance(tag)) {
//         matches.add((T)tag);
//       }
//     }
//     return matches;
//   }
// 
//   @Override
//   public String toString() {
//     return _word + " " + _tags;
//   }
// }


// Path: src/main/java/com/mdimension/jchronic/tags/SeparatorComma.java
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import com.mdimension.jchronic.Options;
import com.mdimension.jchronic.utils.Token;

package com.mdimension.jchronic.tags;



public class SeparatorComma extends Separator {
  private static final Pattern COMMA_PATTERN = Pattern.compile("^,$");

  public SeparatorComma(Separator.SeparatorType type) {
    super(type);
  }

  @Override
  public String toString() {
    return super.toString() + "-comma";
  }

  public static SeparatorComma scan(Token token, Options options) {
    Map<Pattern, Separator.SeparatorType> scanner = new HashMap<Pattern, Separator.SeparatorType>();
    scanner.put(SeparatorComma.COMMA_PATTERN, Separator.SeparatorType.COMMA);
    for (Pattern scannerItem : scanner.keySet()) {
      if (scannerItem.matcher(token.getWord()).matches()) {