// Path: kheera-testrunner/src/main/java/gherkin/ast/Location.java
// public class Location {
//     private final int line;
//     private final int column;
// 
//     public Location(int line, int column) {
//         this.line = line;
//         this.column = column;
//     }
// 
//     public int getLine() {
//         return line;
//     }
// 
//     public int getColumn() {
//         return column;
//     }
// }
// 
// Path: kheera-testrunner/src/main/java/gherkin/Parser.java
// public interface ITokenMatcher {
//     boolean match_EOF(Token token);
//     boolean match_Empty(Token token);
//     boolean match_Comment(Token token);
//     boolean match_TagLine(Token token);
//     boolean match_FeatureLine(Token token);
//     boolean match_BackgroundLine(Token token);
//     boolean match_ScenarioLine(Token token);
//     boolean match_ScenarioOutlineLine(Token token);
//     boolean match_ExamplesLine(Token token);
//     boolean match_StepLine(Token token);
//     boolean match_DocStringSeparator(Token token);
//     boolean match_TableRow(Token token);
//     boolean match_Language(Token token);
//     boolean match_Other(Token token);
//     void reset();
// }
// 
// Path: kheera-testrunner/src/main/java/gherkin/Parser.java
// public enum TokenType {
//     None,
//     EOF,
//     Empty,
//     Comment,
//     TagLine,
//     FeatureLine,
//     BackgroundLine,
//     ScenarioLine,
//     ScenarioOutlineLine,
//     ExamplesLine,
//     StepLine,
//     DocStringSeparator,
//     TableRow,
//     Language,
//     Other,
//     ;
// }


import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import gherkin.ast.Location;
import static gherkin.Parser.ITokenMatcher;
import static gherkin.Parser.TokenType;
    public boolean match_ExamplesLine(Token token) {
        return matchTitleLine(token, TokenType.ExamplesLine, currentDialect.getExamplesKeywords());
    }

    private boolean matchTitleLine(Token token, TokenType tokenType, List<String> keywords) {
        for (String keyword : keywords) {
            if (token.line.startsWithTitleKeyword(keyword)) {
                String title = token.line.getRestTrimmed(keyword.length() + GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR.length());
                setTokenMatched(token, tokenType, title, keyword, null, null);
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean match_DocStringSeparator(Token token) {
        return activeDocStringSeparator == null
                // open
                ? match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_SEPARATOR, true) ||
                match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_ALTERNATIVE_SEPARATOR, true)
                // close
                : match_DocStringSeparator(token, activeDocStringSeparator, false);
    }

    private boolean match_DocStringSeparator(Token token, String separator, boolean isOpen) {
        if (token.line.startsWith(separator)) {
            String contentType = null;
            if (isOpen) {
                contentType = token.line.getRestTrimmed(separator.length());
// Path: kheera-testrunner/src/main/java/gherkin/ast/Location.java
// public class Location {
//     private final int line;
//     private final int column;
// 
//     public Location(int line, int column) {
//         this.line = line;
//         this.column = column;
//     }
// 
//     public int getLine() {
//         return line;
//     }
// 
//     public int getColumn() {
//         return column;
//     }
// }
// 
// Path: kheera-testrunner/src/main/java/gherkin/Parser.java
// public interface ITokenMatcher {
//     boolean match_EOF(Token token);
//     boolean match_Empty(Token token);
//     boolean match_Comment(Token token);
//     boolean match_TagLine(Token token);
//     boolean match_FeatureLine(Token token);
//     boolean match_BackgroundLine(Token token);
//     boolean match_ScenarioLine(Token token);
//     boolean match_ScenarioOutlineLine(Token token);
//     boolean match_ExamplesLine(Token token);
//     boolean match_StepLine(Token token);
//     boolean match_DocStringSeparator(Token token);
//     boolean match_TableRow(Token token);
//     boolean match_Language(Token token);
//     boolean match_Other(Token token);
//     void reset();
// }
// 
// Path: kheera-testrunner/src/main/java/gherkin/Parser.java
// public enum TokenType {
//     None,
//     EOF,
//     Empty,
//     Comment,
//     TagLine,
//     FeatureLine,
//     BackgroundLine,
//     ScenarioLine,
//     ScenarioOutlineLine,
//     ExamplesLine,
//     StepLine,
//     DocStringSeparator,
//     TableRow,
//     Language,
//     Other,
//     ;
// }


// Path: kheera-testrunner/src/main/java/gherkin/TokenMatcher.java
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import gherkin.ast.Location;
import static gherkin.Parser.ITokenMatcher;
import static gherkin.Parser.TokenType;

    public boolean match_ExamplesLine(Token token) {
        return matchTitleLine(token, TokenType.ExamplesLine, currentDialect.getExamplesKeywords());
    }

    private boolean matchTitleLine(Token token, TokenType tokenType, List<String> keywords) {
        for (String keyword : keywords) {
            if (token.line.startsWithTitleKeyword(keyword)) {
                String title = token.line.getRestTrimmed(keyword.length() + GherkinLanguageConstants.TITLE_KEYWORD_SEPARATOR.length());
                setTokenMatched(token, tokenType, title, keyword, null, null);
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean match_DocStringSeparator(Token token) {
        return activeDocStringSeparator == null
                // open
                ? match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_SEPARATOR, true) ||
                match_DocStringSeparator(token, GherkinLanguageConstants.DOCSTRING_ALTERNATIVE_SEPARATOR, true)
                // close
                : match_DocStringSeparator(token, activeDocStringSeparator, false);
    }

    private boolean match_DocStringSeparator(Token token, String separator, boolean isOpen) {
        if (token.line.startsWith(separator)) {
            String contentType = null;
            if (isOpen) {
                contentType = token.line.getRestTrimmed(separator.length());
                activeDocStringSeparator = separator;