[LIB-9] Add reserved, NAG and semicolon comment PGN tokens
[chesshog.git] / chesshog-format / src / main / java / org / hedgecode / chess / pgn / token / CommentToken.java
index 59feecb..22e5a0a 100644 (file)
@@ -29,13 +29,37 @@ import org.hedgecode.chess.pgn.entity.Moves;
  */
 public class CommentToken implements Token<Moves> {
 
-    private static final String COMMENT_REGEX = "^\\s*\\{([^}]+)\\}";
-    private static final Pattern COMMENT_PATTERN = Pattern.compile(COMMENT_REGEX);
+    enum Type {
+
+        BRACE     ( BRACE_PATTERN     ),
+        SEMICOLON ( SEMICOLON_PATTERN );
+
+        private Pattern pattern;
+
+        Type(Pattern pattern) {
+            this.pattern = pattern;
+        }
+
+        public Pattern pattern() {
+            return pattern;
+        }
+    }
+
+    private static final String BRACE_REGEX = "^\\s*\\{([^}]+)\\}";
+    private static final Pattern BRACE_PATTERN = Pattern.compile(BRACE_REGEX);
+    private static final String SEMICOLON_REGEX = "^\\s*;([^\t]+)\t";
+    private static final Pattern SEMICOLON_PATTERN = Pattern.compile(SEMICOLON_REGEX);
     private static final int COMMENT_GROUP = 1;
 
+    private Type commentType;
+
+    public CommentToken(Type type) {
+        this.commentType = type;
+    }
+
     @Override
     public int token(Moves moves, String pgn) throws ParseException {
-        Matcher matcher = COMMENT_PATTERN.matcher(pgn);
+        Matcher matcher = commentType.pattern().matcher(pgn);
         if (!matcher.find()) {
             throw new ParseException("parse.pgn.incorrect.comment", pgn);
         } else {