ParseState.java

/*
 * CSVeed (https://github.com/42BV/CSVeed)
 *
 * Copyright 2013-2023 CSVeed.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of The Apache Software License,
 * Version 2.0 which accompanies this distribution, and is available at
 * https://www.apache.org/licenses/LICENSE-2.0.txt
 */
package org.csveed.token;

/**
 * The Enum ParseState.
 */
public enum ParseState {

    /** The skip line. */
    SKIP_LINE(false, false, false, false, true),

    /** The skip line finished. */
    SKIP_LINE_FINISHED(false, true, false, false, true),

    /** The comment line. */
    COMMENT_LINE(false, false, false, false, true),

    /** The comment line finished. */
    COMMENT_LINE_FINISHED(false, true, false, false, true),

    /** The start of line. */
    START_OF_LINE(false, false, false, false, false),

    /** The outside before field. */
    OUTSIDE_BEFORE_FIELD(false, false, false, false, false),

    /** The outside after field. */
    OUTSIDE_AFTER_FIELD(false, false, false, false, false),

    /** The inside field. */
    INSIDE_FIELD(true, false, false, false, false),

    /** The first char inside quoted field. */
    FIRST_CHAR_INSIDE_QUOTED_FIELD(false, false, false, true, false),

    /** The inside quoted field. */
    INSIDE_QUOTED_FIELD(true, false, false, true, false),

    /** The escaping. */
    ESCAPING(false, false, false, false, false),

    /** The separator. */
    SEPARATOR(false, false, true, false, false),

    /** The line finished. */
    LINE_FINISHED(false, true, true, false, false),

    /** The finished. */
    FINISHED(false, true, true, false, false);

    /** When in this state, encountered symbols must be made part of the token. */
    private final boolean tokenize;

    /** When in this state, reading of the line is done. */
    private final boolean lineFinished;

    /** When in this state, the token may be popped. */
    private final boolean popToken;

    /** When a quote character is encountered here, this state MAY trigger an upgrade of the encountered symbol. */
    private final boolean upgradeQuoteToEscape;

    /** When in this state, ignore the entire line. */
    private final boolean ignore;

    /**
     * Instantiates a new parses the state.
     *
     * @param tokenize
     *            the tokenize
     * @param lineFinished
     *            the line finished
     * @param popToken
     *            the pop token
     * @param upgradeQuoteToEscape
     *            the upgrade quote to escape
     * @param ignore
     *            the ignore
     */
    ParseState(final boolean tokenize, final boolean lineFinished, final boolean popToken,
            final boolean upgradeQuoteToEscape, final boolean ignore) {
        this.tokenize = tokenize;
        this.lineFinished = lineFinished;
        this.popToken = popToken;
        this.upgradeQuoteToEscape = upgradeQuoteToEscape;
        this.ignore = ignore;
    }

    /**
     * Checks if is tokenize.
     *
     * @return true, if is tokenize
     */
    public boolean isTokenize() {
        return this.tokenize;
    }

    /**
     * Checks if is line finished.
     *
     * @return true, if is line finished
     */
    public boolean isLineFinished() {
        return this.lineFinished;
    }

    /**
     * Checks if is pop token.
     *
     * @return true, if is pop token
     */
    public boolean isPopToken() {
        return this.popToken;
    }

    /**
     * Checks if is upgrade quote to escape.
     *
     * @return true, if is upgrade quote to escape
     */
    public boolean isUpgradeQuoteToEscape() {
        return this.upgradeQuoteToEscape;
    }

    /**
     * Checks if is ignore.
     *
     * @return true, if is ignore
     */
    public boolean isIgnore() {
        return this.ignore;
    }

    /**
     * Trim.
     *
     * @return true, if successful
     */
    public boolean trim() {
        return this == INSIDE_FIELD;
    }
}