All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kefirsf.bb.proc.PatternConstant Maven / Gradle / Ivy

Go to download

KefirBB is a Java-library for text processing. Initially it was developed for BB2HTML translation. But flexible configuration allows to use it in different cases. For example for parsing Markdown, Textile, and for HTML filtration.

The newest version!
package org.kefirsf.bb.proc;

/**
 * Constant element of pattern or template
 *
 * @author Kefir
 */
public class PatternConstant implements ProcPatternElement {
    /**
     * Constant value
     */
    private final String value;
    private final char[] chars;

    /**
     * Mark ignore case
     */
    private final boolean ignoreCase;

    /**
     * Length of constant value
     */
    private final int valueLength;

    /**
     * Don't move the cursor offset.
     */
    private final boolean ghost;

    /**
     * Create constant element.
     *
     * @param value constant value
     * @param ignoreCase ignore text case when parse a constant
     */
    public PatternConstant(String value, boolean ignoreCase) {
        this.value = value;
        this.chars = value.toCharArray();
        this.valueLength = value.length();
        this.ignoreCase = ignoreCase;
        this.ghost = false;
    }

    /**
     * Create constant element.
     *
     * @param value constant value
     * @param ignoreCase ignore text case when parse a constant
     * @param ghost don't move the cursor after parsing
     */
    public PatternConstant(String value, boolean ignoreCase, boolean ghost) {
        this.value = value;
        this.chars = value.toCharArray();
        this.valueLength = value.length();
        this.ignoreCase = ignoreCase;
        this.ghost = ghost;
    }

    /**
     * Parse constant
     *
     * @param context    current context
     * @param terminator not used
     * @return true - if next sequence in source equals to this constant value,
     *         false - other
     */
    public boolean parse(Context context, ProcPatternElement terminator) {
        if (isNextIn(context)) {
            if(!ghost) {
                context.getSource().incOffset(valueLength);
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Check equals next sequence in source to this constant
     *
     * @param context current context
     * @return true if next subsequence is equals
     *         false other
     */
    public boolean isNextIn(Context context) {
        return context.getSource().nextIs(this);
    }

    /**
     * Find this constant.
     *
     * @param source text source
     * @return смещение константы
     */
    public int findIn(Source source) {
        return source.find(this);
    }

    public String getValue() {
        return value;
    }

    public boolean isIgnoreCase() {
        return ignoreCase;
    }

    public char[] getCharArray(){
        return chars;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        PatternConstant that = (PatternConstant) o;

        if (ignoreCase != that.ignoreCase) return false;
        //noinspection RedundantIfStatement
        if (!value.equals(that.value)) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = value.hashCode();
        result = 31 * result + (ignoreCase ? 1 : 0);
        return result;
    }

    /**
     * @return string representation of this object.
     */
    @Override
    public String toString() {
        return value;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy