summaryrefslogtreecommitdiff
path: root/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
diff options
context:
space:
mode:
Diffstat (limited to 'support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java')
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java410
1 files changed, 0 insertions, 410 deletions
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
deleted file mode 100644
index 681c2f8fef..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
- * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.controller.LoggingController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.DisplayUtils;
-import java.util.Locale;
-import java.util.Map;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-
-/**
- * Implements the command line parser.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Parser {
-
- // command line arguments to be
- // processed by this parser
- private final String[] arguments;
-
- // command line options, it will
- // group each option available
- // in arara
- private Options options;
-
- // each option available in
- // arara
- private Option version;
- private Option help;
- private Option log;
- private Option verbose;
- private Option silent;
- private Option dryrun;
- private Option timeout;
- private Option language;
- private Option loops;
- private Option preamble;
- private Option onlyheader;
-
- public Parser() {
- this.arguments = null;
- }
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Constructor.
- * @param arguments Array of strings representing the command line
- * arguments.
- */
- public Parser(String[] arguments) {
- this.arguments = arguments;
- }
-
- /**
- * Parses the command line arguments.
- * @return A boolean value indicating if the parsing should allow the
- * application to look for directives in the provided main file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public boolean parse() throws AraraException {
-
- // create new instances of the
- // command line options, including
- // the ones that require arguments
- version = new Option("V", "version", false, "");
- help = new Option("h", "help", false, "");
- log = new Option("l", "log", false, "");
- verbose = new Option("v", "verbose", false, "");
- silent = new Option("s", "silent", false, "");
- dryrun = new Option("n", "dry-run", false, "");
- timeout = new Option("t", "timeout", true, "");
- timeout.setArgName("number");
- language = new Option("L", "language", true, "");
- language.setArgName("code");
- loops = new Option("m", "max-loops", true, "");
- loops.setArgName("number");
- preamble = new Option("p", "preamble", true, "");
- preamble.setArgName("name");
- onlyheader = new Option("H", "header", false, "");
-
- // add all options to the options
- // group, so they are recognized
- // by the command line parser
- options = new Options();
- options.addOption(version);
- options.addOption(help);
- options.addOption(log);
- options.addOption(verbose);
- options.addOption(silent);
- options.addOption(dryrun);
- options.addOption(timeout);
- options.addOption(language);
- options.addOption(loops);
- options.addOption(preamble);
- options.addOption(onlyheader);
-
- // update all descriptions based
- // on the localized messages
- updateDescriptions();
-
- // a new default command line
- // parser is created and the
- // arguments are parsed
- CommandLineParser parser = new DefaultParser();
-
- try {
-
- CommandLine line = parser.parse(options, arguments);
-
- String reference;
- if (line.hasOption("language")) {
- ConfigurationController.getInstance().
- put("execution.language",
- new Language(line.getOptionValue("language"))
- );
- Locale locale = ((Language) ConfigurationController.
- getInstance().get("execution.language")).getLocale();
- messages.setLocale(locale);
- updateDescriptions();
- }
-
- if (line.hasOption("help")) {
- printVersion();
- printUsage();
- return false;
- }
-
- if (line.hasOption("version")) {
- printVersion();
- printNotes();
- return false;
- }
-
- if (line.getArgs().length != 1) {
- printVersion();
- printUsage();
- return false;
- } else {
- reference = line.getArgs()[0];
- }
-
- if (line.hasOption("timeout")) {
- try {
- long value = Long.parseLong(line.getOptionValue("timeout"));
- if (value <= 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_TIMEOUT_INVALID_RANGE
- )
- );
- } else {
- ConfigurationController.getInstance().
- put("execution.timeout", true);
- ConfigurationController.getInstance().
- put("execution.timeout.value", value);
- }
- } catch (NumberFormatException nfexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_TIMEOUT_NAN
- )
- );
- }
- }
-
- if (line.hasOption("max-loops")) {
- try {
- long value = Long.parseLong(
- line.getOptionValue("max-loops")
- );
- if (value <= 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_LOOPS_INVALID_RANGE
- )
- );
- } else {
- ConfigurationController.getInstance().
- put("execution.loops", value);
- }
- } catch (NumberFormatException nfexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_LOOPS_NAN
- )
- );
- }
- }
-
- if (line.hasOption("verbose")) {
- ConfigurationController.getInstance().
- put("execution.verbose", true);
- }
-
- if (line.hasOption("silent")) {
- ConfigurationController.getInstance().
- put("execution.verbose", false);
- }
-
- if (line.hasOption("dry-run")) {
- ConfigurationController.getInstance().
- put("execution.dryrun", true);
- ConfigurationController.getInstance().
- put("execution.errors.halt", false);
- }
-
- if (line.hasOption("log")) {
- ConfigurationController.getInstance().
- put("execution.logging", true);
- }
-
- if (line.hasOption("preamble")) {
- @SuppressWarnings("unchecked")
- Map<String, String> preambles = (Map<String, String>)
- ConfigurationController.getInstance().
- get("execution.preambles");
- if (preambles.containsKey(line.getOptionValue("preamble"))) {
- ConfigurationController.getInstance().
- put("execution.preamble.active", true);
- ConfigurationController.getInstance().
- put("execution.preamble.content",
- preambles.get(line.getOptionValue("preamble"))
- );
- }
- else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_INVALID_PREAMBLE,
- line.getOptionValue("preamble")
- )
- );
- }
- }
-
- if (line.hasOption("header")) {
- ConfigurationController.getInstance().
- put("execution.header", true);
- }
-
- CommonUtils.discoverFile(reference);
- LoggingController.enableLogging((Boolean) ConfigurationController.
- getInstance().get("execution.logging"));
- ConfigurationController.getInstance().put("display.time", true);
-
- return true;
-
- } catch (ParseException pexception) {
- printVersion();
- printUsage();
- return false;
- }
- }
-
- /**
- * Prints the application usage.
- */
- private void printUsage() {
- HelpFormatter formatter = new HelpFormatter();
- StringBuilder builder = new StringBuilder();
- builder.append("arara [file [--dry-run] [--log] ");
- builder.append("[--verbose | --silent] [--timeout N] ");
- builder.append("[--max-loops N] [--language L] ");
- builder.append("[ --preamble P ] [--header] | --help | --version]");
- formatter.printHelp(builder.toString(), options);
- }
-
- /**
- * Prints the application version.
- */
- private void printVersion() {
- String year = (String) ConfigurationController.getInstance().
- get("application.copyright.year");
- String number = (String) ConfigurationController.getInstance().
- get("application.version");
- String revision = (String) ConfigurationController.getInstance().
- get("application.revision");
- StringBuilder builder = new StringBuilder();
- builder.append("arara ");
- builder.append(number);
- builder.append(" (revision ");
- builder.append(revision);
- builder.append(")");
- builder.append("\n");
- builder.append("Copyright (c) ").append(year).append(", ");
- builder.append("Paulo Roberto Massa Cereda");
- builder.append("\n");
- builder.append(messages.getMessage(
- Messages.INFO_PARSER_ALL_RIGHTS_RESERVED)
- );
- builder.append("\n");
- System.out.println(builder.toString());
- }
-
- /**
- * Print the application notes.
- */
- private void printNotes() {
- DisplayUtils.wrapText(messages.getMessage(Messages.INFO_PARSER_NOTES));
- }
-
- /**
- * Updates all the descriptions in order to make them reflect the current
- * language setting.
- */
- private void updateDescriptions() {
- version.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_VERSION_DESCRIPTION
- )
- );
- help.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_HELP_DESCRIPTION
- )
- );
- log.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LOG_DESCRIPTION
- )
- );
- verbose.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_VERBOSE_MODE_DESCRIPTION
- )
- );
- silent.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_SILENT_MODE_DESCRIPTION
- )
- );
- dryrun.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_DRYRUN_MODE_DESCRIPTION
- )
- );
- timeout.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_TIMEOUT_DESCRIPTION
- )
- );
- language.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LANGUAGE_DESCRIPTION
- )
- );
- loops.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LOOPS_DESCRIPTION
- )
- );
- preamble.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_PREAMBLE_DESCRIPTION
- )
- );
- onlyheader.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_ONLY_HEADER
- )
- );
- }
-
-}