// 
// Decompiled by Procyon v0.6.0
// 

package org.jline.reader;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public interface Parser
{
    public static final String REGEX_VARIABLE = "[a-zA-Z_]+[a-zA-Z0-9_-]*";
    public static final String REGEX_COMMAND = "[:]?[a-zA-Z]+[a-zA-Z0-9_-]*";
    
    ParsedLine parse(final String p0, final int p1, final ParseContext p2) throws SyntaxError;
    
    default ParsedLine parse(final String line, final int cursor) throws SyntaxError {
        return this.parse(line, cursor, ParseContext.UNSPECIFIED);
    }
    
    default boolean isEscapeChar(final char ch) {
        return ch == '\\';
    }
    
    default boolean validCommandName(final String name) {
        return name != null && name.matches("[:]?[a-zA-Z]+[a-zA-Z0-9_-]*");
    }
    
    default boolean validVariableName(final String name) {
        return name != null && name.matches("[a-zA-Z_]+[a-zA-Z0-9_-]*");
    }
    
    default String getCommand(final String line) {
        final Pattern patternCommand = Pattern.compile("^\\s*[a-zA-Z_]+[a-zA-Z0-9_-]*=([:]?[a-zA-Z]+[a-zA-Z0-9_-]*)(\\s+|$)");
        final Matcher matcher = patternCommand.matcher(line);
        String out;
        if (matcher.find()) {
            out = matcher.group(1);
        }
        else {
            out = line.trim().split("\\s+")[0];
            if (!out.matches("[:]?[a-zA-Z]+[a-zA-Z0-9_-]*")) {
                out = "";
            }
        }
        return out;
    }
    
    default String getVariable(final String line) {
        String out = null;
        final Pattern patternCommand = Pattern.compile("^\\s*([a-zA-Z_]+[a-zA-Z0-9_-]*)\\s*=[^=~].*");
        final Matcher matcher = patternCommand.matcher(line);
        if (matcher.find()) {
            out = matcher.group(1);
        }
        return out;
    }
    
    public enum ParseContext
    {
        UNSPECIFIED, 
        ACCEPT_LINE, 
        SPLIT_LINE, 
        COMPLETE, 
        SECONDARY_PROMPT;
    }
}
