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

javax0.jamal.builtins.Sep Maven / Gradle / Ivy

package javax0.jamal.builtins;

import javax0.jamal.api.BadSyntax;
import javax0.jamal.api.Input;
import javax0.jamal.api.Macro;
import javax0.jamal.api.Processor;

import static javax0.jamal.tools.InputHandler.skip;
import static javax0.jamal.tools.InputHandler.skipWhiteSpaces;

public class Sep implements Macro {
    @Override
    public String evaluate(Input input, Processor processor) throws BadSyntax {
        skipWhiteSpaces(input);
        if (input.length() == 0) {
            restoreLastSavedDelimiters(processor);
        } else {
            String sep = input.substring(0, 1);
            skip(input, 1);
            int sepIndex = input.indexOf(sep);
            if (sepIndex == -1) {
                throw new BadSyntax("macro 'sep' needs two separators, like {@sep/[[/]]} where '/' is the separator");
            }
            String openMacro = input.substring(0, sepIndex);
            String closeMacro = input.substring(sepIndex + 1);
            if (openMacro.length() == 0 || closeMacro.length() == 0) {
                throw new BadSyntax("using macro 'sep' you cannot define zero length macro open and/or macro close strings");
            }
            processor.separators(openMacro, closeMacro);
        }
        return "";
    }

    private void restoreLastSavedDelimiters(Processor processor) throws BadSyntax {
        processor.separators(null, null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy