summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-04-10 22:00:34 +0000
committerKarl Berry <karl@freefriends.org>2020-04-10 22:00:34 +0000
commit993a56dc5ce732dfd560a3d411d970709e732080 (patch)
tree0be74e078fbfb126531e9983b39e07be3100635c
parent9ebef863fbd274ccc04480e1f12b7ce385c739c8 (diff)
arara
git-svn-id: svn://tug.org/texlive/trunk@54640 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/support/arara/README.md14
-rw-r--r--Master/texmf-dist/doc/support/arara/arara-manual.pdfbin1827955 -> 1862533 bytes
-rw-r--r--Master/texmf-dist/doc/support/arara/arara-manual.tex4
-rw-r--r--Master/texmf-dist/doc/support/arara/arara.sty10
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/cli.tex26
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/concepts.tex4
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/deploying.tex6
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/introduction.tex8
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/logging.tex2
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/methods.tex10
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/mvel.tex10
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/rules.tex214
-rw-r--r--Master/texmf-dist/doc/support/arara/chapters/yaml.tex4
-rw-r--r--Master/texmf-dist/scripts/arara/arara.jarbin15897096 -> 16028276 bytes
-rw-r--r--Master/texmf-dist/scripts/arara/rules/animate.yaml10
-rw-r--r--Master/texmf-dist/scripts/arara/rules/asymptote.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/bib2gls.yaml6
-rw-r--r--Master/texmf-dist/scripts/arara/rules/biber.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/bibtex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/bibtex8.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/bibtexu.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/clean.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/context.yaml171
-rw-r--r--Master/texmf-dist/scripts/arara/rules/convert.yaml34
-rw-r--r--Master/texmf-dist/scripts/arara/rules/csplain.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/datatooltk.yaml4
-rw-r--r--Master/texmf-dist/scripts/arara/rules/detex.yaml82
-rw-r--r--Master/texmf-dist/scripts/arara/rules/dvipdfm.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/dvipdfmx.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/dvips.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/dvipspdf.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/dvisvgm.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/etex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/fig2dev.yaml66
-rw-r--r--Master/texmf-dist/scripts/arara/rules/frontespizio.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/halt.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/indent.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/knitr.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/latex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/latexmk.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/luahbtex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/lualatex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/luatex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/make.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/makeglossaries.yaml6
-rw-r--r--Master/texmf-dist/scripts/arara/rules/makeglossarieslite.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/makeindex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/metapost.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/nomencl.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/pbibtex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/pdfcsplain.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/pdflatex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/pdftex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/pdftk.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/platex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/ps2pdf.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/ptex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/qpdf.yaml28
-rw-r--r--Master/texmf-dist/scripts/arara/rules/sketch.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/songidx.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/tex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/texcount.yaml74
-rw-r--r--Master/texmf-dist/scripts/arara/rules/texindy.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/tikzmake.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/upbibtex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/uplatex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/uptex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/xdvipdfmx.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/xelatex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/xetex.yaml2
-rw-r--r--Master/texmf-dist/scripts/arara/rules/xindy.yaml2
-rw-r--r--Master/texmf-dist/source/support/arara/arara-5.1.0-src.zipbin0 -> 129837 bytes
-rw-r--r--Master/texmf-dist/source/support/arara/build.gradle.kts257
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/java/org/islandoftex/arara/utils/Methods.java1222
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/Arara.kt115
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/CLI.kt171
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt90
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt101
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt157
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt85
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt24
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt97
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt319
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt158
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Language.kt69
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt59
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt106
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt50
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt122
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt50
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/FileType.kt110
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt375
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Session.kt119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt40
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt57
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt67
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt32
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt55
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt312
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt48
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt33
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt140
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt121
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt422
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt415
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt68
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt164
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt70
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt266
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt105
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt66
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/logback.xml52
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/release-notes5
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_de.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties120
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_it.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties119
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt62
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt58
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt102
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt143
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt20
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt76
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt33
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt139
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt23
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arara.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/changes.tex3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/conditionals.tex6
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echofour.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echothree.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echotwo.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/directive-with-options.tex6
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/echoone.yaml36
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/arararc.yaml6
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.my3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.xy3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echotwo.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt-error.tex5
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt.yaml16
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echotwo.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.tex5
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.yaml19
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/arararc.yaml2
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/invalid-config.tex3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/arararc.yaml5
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/known-extension.tex3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessionrule.yaml16
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessions.tex3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/arararc.yaml3
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/echoone.yaml10
-rw-r--r--Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/simple-directive.tex3
167 files changed, 768 insertions, 8290 deletions
diff --git a/Master/texmf-dist/doc/support/arara/README.md b/Master/texmf-dist/doc/support/arara/README.md
index 89ddfe91652..d5417174ca3 100644
--- a/Master/texmf-dist/doc/support/arara/README.md
+++ b/Master/texmf-dist/doc/support/arara/README.md
@@ -1,6 +1,6 @@
![arara](https://i.stack.imgur.com/hjUsN.png)
-# arara
+# arara v5.1.0
![Language: Kotlin](https://img.shields.io/badge/Language-Kotlin-blue.svg?style=flat-square)
![Minimum JRE: 8.0](https://img.shields.io/badge/Minimum_JRE-8-blue.svg?style=flat-square)
@@ -10,8 +10,6 @@ way to enhance your TeX experience. The tool is an effort to provide a concise
way to automate the daily TeX workflow for users and also package writers. Users
might write their own rules when the provided ones do not suffice.
-Current stable release: 5.0.2
-
> Please note that `arara` recently moved. We are proud to announce that
> `arara` is now part of the [Island of TeX](https://gitlab.com/islandoftex).
> The new address is https://gitlab.com/islandoftex/arara. The old GitHub
@@ -46,18 +44,18 @@ use your own rules.
ensured that a green tick means `arara` passes the test suite and is ready to
be tested. However, that is *not* meant you can use the executable artifacts of
the builds *for productive use*.
-
+
Development of `arara` takes place in the development branch. Feel free to be
one of our testers and enjoy the latest features and bug fixes by building from
- there.
-
+ there.
+
## Support
We use a [Gitter](https://gitter.im/cereda/arara) chatroom for discussing things
related to `arara`. You are more than welcome to come join the fun and say *hi!*
to us. We also have the [issues](https://gitlab.com/islandoftex/arara/issues)
section in our repository as a valid channel to report problems, bugs and
-suggest improvements.
+suggest improvements.
## Localization
@@ -86,7 +84,7 @@ manually deploy our tool.
## License
-This application is licensed under the
+This application is licensed under the
[New BSD License](https://opensource.org/licenses/BSD-3-Clause). Please
note that the New BSD License has been verified as a GPL-compatible free
software license by the [Free Software Foundation](http://www.fsf.org/), and
diff --git a/Master/texmf-dist/doc/support/arara/arara-manual.pdf b/Master/texmf-dist/doc/support/arara/arara-manual.pdf
index f1ab066d436..3a45d4a5196 100644
--- a/Master/texmf-dist/doc/support/arara/arara-manual.pdf
+++ b/Master/texmf-dist/doc/support/arara/arara-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/arara/arara-manual.tex b/Master/texmf-dist/doc/support/arara/arara-manual.tex
index d9926240c3b..3f245802fc7 100644
--- a/Master/texmf-dist/doc/support/arara/arara-manual.tex
+++ b/Master/texmf-dist/doc/support/arara/arara-manual.tex
@@ -42,8 +42,8 @@
\usepackage[margin=2.5cm]{geometry}
\usepackage{arara}
-\newcommand{\araraversion}{5.0}
-
+\newcommand{\araraversion}{5.1}
+
\begin{document}
\begin{titlingpage}
diff --git a/Master/texmf-dist/doc/support/arara/arara.sty b/Master/texmf-dist/doc/support/arara/arara.sty
index 5cc02225e5c..56eaf7608d7 100644
--- a/Master/texmf-dist/doc/support/arara/arara.sty
+++ b/Master/texmf-dist/doc/support/arara/arara.sty
@@ -125,7 +125,7 @@
shift={([xshift=0.35em, yshift=0.31em]frame.north west)},
scale=.11
]
-
+
\path[fill=#1!5] (104.4280,104.4280) circle (2.9472cm);
\path[shift={(-46.913,-45.374)},fill=#1] (88.7990,180.6000) --
(119.5860,149.8020) -- (88.7990,119.0130) -- (120.5410,87.2560) --
@@ -146,7 +146,7 @@
shift={([xshift=0.35em, yshift=0.31em]frame.north west)},
scale=.11
]
-
+
\path[fill=#1!5] (209.4880,104.7460) .. controls (209.4880,162.5980) and
(162.5940,209.4910) .. (104.7430,209.4910) .. controls (46.8930,209.4910) and
(0.0000,162.5970) .. (0.0000,104.7460) .. controls (0.0000,46.8950) and
@@ -193,7 +193,7 @@
shift={([xshift=0.35em, yshift=0.31em]frame.north west)},
scale=.11
]
-
+
\path[fill=#1!5] (104.4310,104.4310) circle (2.9473cm);
\begin{scope}[shift={(-46.694,-45.371)}]
\path[fill=#1] (139.1560,93.9220) .. controls (142.1760,91.1310) and
@@ -236,7 +236,7 @@
shift={([xshift=0.35em, yshift=0.31em]frame.north west)},
scale=.11
]
-
+
\path[fill=#1!5] (104.4280,104.4280) circle (2.9472cm);
\begin{scope}[shift={(-46.08801,-45.37)}]
\path[fill=#1] (113.9190,187.9100) -- (127.1980,200.4160) --
@@ -259,7 +259,7 @@
shift={([xshift=0.35em, yshift=0.31em]frame.north west)},
scale=.11
]
-
+
\path[fill=#1!5] (209.4910,104.7440) .. controls (209.4910,162.5960) and
(162.5940,209.4880) .. (104.7470,209.4880) .. controls (46.8950,209.4880) and
(0.0000,162.5950) .. (0.0000,104.7440) .. controls (0.0000,46.8930) and
diff --git a/Master/texmf-dist/doc/support/arara/chapters/cli.tex b/Master/texmf-dist/doc/support/arara/chapters/cli.tex
index 60678e88d5a..e4e34b76088 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/cli.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/cli.tex
@@ -210,8 +210,8 @@ This option can also be specified in the configuration file (see Section~\ref{se
The \opbox{{-}max-loops} option is used to redefine the maximum number of loops our tool will allow for potentially infinite iterations. Any positive integer can be used as the \prbox{number} value for this option. An execution of the previous directive with a lower maximum number of loops is shown as follows:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ arara -m 2 doc8.tex
- __ _ _ __ __ _ _ __ __ _
+$ arara -m 2 doc8.tex
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -230,7 +230,7 @@ This option can also be specified in the configuration file (see Section~\ref{se
\item[\describeop{n}{dry-run}] This option makes \arara\ go through all the motions of running tasks and subtasks, but with no actual calls. It is a very useful feature for testing the sequence of underlying system commands to be performed on a file. For instance, consider the following execution:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ arara -n doc5.tex
+$ arara -n doc5.tex
__ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
@@ -242,22 +242,22 @@ Processing 'doc5.tex' (size: 285 B, last modified: 03/01/2020
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
Author: Island of TeX
-About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
[DR] (BibTeX) The BibTeX reference management software
-----------------------------------------------------------------
Author: Island of TeX
-About to run: [ bibtex, doc5 ] @
+About to run: [ bibtex, doc5 ] @
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
Author: Island of TeX
-About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
Author: Island of TeX
-About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
Total: 0.23 seconds
\end{codebox}
@@ -285,7 +285,7 @@ In this example, we have a preamble named \abox{twopdftex} and a \TeX\ file name
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara -p twopdftex doc9.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -299,7 +299,7 @@ Processing 'doc9.tex' (size: 18 B, last modified: 05/29/2018
Total: 0.96 seconds
\end{codebox}
-It is important to note that this is just a directive-based preamble and nothing else, so a line other than a directive is discarded. Line breaks and conditionals are supported. Trying to exploit this area for other purposes will not work. The preamble specification in the configuration file is detailed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
+It is important to note that this is just a directive-based preamble and nothing else, so a line other than a directive is discarded. Line breaks and conditionals are supported. Trying to exploit this area for other purposes will not work. The preamble specification in the configuration file is detailed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
\item[\describeopp{t}{timeout}{number}] This option sets an execution timeout for every task, in milliseconds. If the timeout is reached before the task ends, \arara\ will kill it and halt the execution. Any positive integer can be used as the \prbox{number} value for this option. Of course, use a sensible value to allow proper time for a task to be executed. For instance, consider the following recursive call:
@@ -312,7 +312,7 @@ This will go \foo forever.
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara --timeout 3000 doc9.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -379,7 +379,7 @@ Note that other extensions can be added through a proper mapping in the configur
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara doc11.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -396,7 +396,7 @@ Total: 0.69 seconds
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara doc11
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -414,7 +414,7 @@ resolve against them as well!
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara doc11.
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
diff --git a/Master/texmf-dist/doc/support/arara/chapters/concepts.tex b/Master/texmf-dist/doc/support/arara/chapters/concepts.tex
index 06122792291..ef71eb10ab9 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/concepts.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/concepts.tex
@@ -10,7 +10,7 @@ Time for our first proper contact with \arara! I must stress that is very import
A \emph{rule} is a formal description of how \arara\ handles a certain task. For instance, if we want to use \rbox{pdflatex} with our tool, we should have a rule for that. Directives are mapped to rules, so a call to a non-existent rule \rbox{foo}, for instance, will indeed raise an error:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -263,7 +263,7 @@ Note that virtually any type of data can be used as parameter value, so lists, i
When handling parametrized directives, \arara\ always checks if directive parameters and rule arguments match. If we try to inject a non-existent parameter in a parametrized directive, the tool will raise an error about it:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
diff --git a/Master/texmf-dist/doc/support/arara/chapters/deploying.tex b/Master/texmf-dist/doc/support/arara/chapters/deploying.tex
index 2dfc68141c8..25932f9f9d2 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/deploying.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/deploying.tex
@@ -9,7 +9,7 @@ As previously mentioned, \arara\ runs on top of a Java virtual machine, availabl
From the early development stages, our tool employs a very straightforward directory structure. In short, we provide the \abox[araracolour]{ARARA\_HOME} alias to the directory path in which the \rbox[araracolour]{arara.jar} Java archive file is located. This particular file is the heart and soul of our tool and dictates the default rule search path, which is a special directory named \abox[araracolour]{rules/} available from the same level. This directory contains all rules specified in the YAML format, as seen in Section~\ref{sec:rule}, on page~\pageref{sec:rule}. The structure overview is presented as follows.
-\vspace{1em}
+\vspace{1em}
{\centering\begin{forest}
for tree={
@@ -51,7 +51,7 @@ $ mv arara /opt/paulo/
The tool has found a comfortable home inside my system! Observe that the full path of the \abox[araracolour]{ARARA\_HOME} reference points out to \abox[araracolour]{/opt/paulo/arara} since this is my deployment location of choice. The resulting structure overview, from the root directory, is presented as follows:
-\vspace{1em}
+\vspace{1em}
{\centering\begin{forest}
for tree={
@@ -216,4 +216,4 @@ $ which arara
/usr/local/bin/arara
\end{codebox}
-The \rbox{which} command shows the full path of the executable name provided as parameter. This particular utility does this by searching for an executable or script in the directories listed in the \abox[araracolour]{PATH} environment variable. Be mindful that aliases and shell functions are listed as well. \ No newline at end of file
+The \rbox{which} command shows the full path of the executable name provided as parameter. This particular utility does this by searching for an executable or script in the directories listed in the \abox[araracolour]{PATH} environment variable. Be mindful that aliases and shell functions are listed as well.
diff --git a/Master/texmf-dist/doc/support/arara/chapters/introduction.tex b/Master/texmf-dist/doc/support/arara/chapters/introduction.tex
index 11410ff6d3e..77e43685a8c 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/introduction.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/introduction.tex
@@ -28,7 +28,7 @@ The mentioned tools perform an analysis on the file and decide what has to be do
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara hello.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -62,8 +62,8 @@ Hello world!
For now, do not worry too much about the terms, we will come back to them later on, in Chapter~\ref{chap:importantconcepts}, on page~\pageref{chap:importantconcepts}. It suffices to say that \arara\ expects \emph{you} to provide a list of tasks, and this is done by inserting special comments in the source file. Let us see how \arara\ behaves with this updated code:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ arara hello.tex
- __ _ _ __ __ _ _ __ __ _
+$ arara hello.tex
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
@@ -81,7 +81,7 @@ Hurrah, we finally got our document properly compiled with a \TeX\ engine by the
\section{Core concepts}
\label{sec:coreconcepts}
-When adding a directive in our source code, we are explicitly telling the tool what we want it to do, but I am afraid that is not sufficient at all. So far, \arara\ knows \emph{what} to do, but now it needs to know \emph{how} the task should be done. If we want \arara\ to run \rbox{pdflatex} on \rbox{hello.tex}, we need to have instructions telling our tool how to run that specific application. This particular sequence of instructions is referred as a \emph{rule} in our context.
+When adding a directive in our source code, we are explicitly telling the tool what we want it to do, but I am afraid that is not sufficient at all. So far, \arara\ knows \emph{what} to do, but now it needs to know \emph{how} the task should be done. If we want \arara\ to run \rbox{pdflatex} on \rbox{hello.tex}, we need to have instructions telling our tool how to run that specific application. This particular sequence of instructions is referred as a \emph{rule} in our context.
\begin{messagebox}{Note on rules}{attentioncolour}{\icattention}{black}
Although the core team provides a lot of rules shipped with \arara\ out of the box, with the possibility of extending the set by adding more rules, some users might find this decision rather annoying, since other tools have most of their rules hard-coded, making the automation process even more transparent. However, since \arara\ does not rely on a specific automation or compilation scheme, it becomes more extensible. The use of directives in the source code make the automation steps more fluent, which allows the specification of complex workflows much easier.
diff --git a/Master/texmf-dist/doc/support/arara/chapters/logging.tex b/Master/texmf-dist/doc/support/arara/chapters/logging.tex
index de8979e02c6..80a4c45a4fd 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/logging.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/logging.tex
@@ -16,7 +16,7 @@ When running our tool on the previous example with the \opbox{{-}log} command li
\section{System information}
\label{sec:systeminformation}
-The very first entry to appear in the log file is the current version of \arara.
+The very first entry to appear in the log file is the current version of \arara.
\begin{codebox}{Log file}{teal}{\icnote}{white}
Welcome to arara 5.0.0!
diff --git a/Master/texmf-dist/doc/support/arara/chapters/methods.tex b/Master/texmf-dist/doc/support/arara/chapters/methods.tex
index dd6da67902d..7775d5e06bd 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/methods.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/methods.tex
@@ -597,7 +597,7 @@ According to the \href{https://en.wikipedia.org/wiki/Ordered_pair}{Wikipedia ent
\item[\mtbox{second()}\hfill\rrbox{B}] This method, as the name implies, returns the second entry of the ordered pair, as a \rbox{B} object. It is important to observe that, from the MVEL context, as the method constitutes a property accessor (namely, a getter), the parentheses can be safely omitted.
\end{description}
-Keep in mind that the entries in the \rbox{Pair} class, once defined, cannot be modified to other values. The initial values are set during instantiation and, therefore, only entry getters are available to the user during the object life cycle.
+Keep in mind that the entries in the \rbox{Pair} class, once defined, cannot be modified to other values. The initial values are set during instantiation and, therefore, only entry getters are available to the user during the object life cycle.
\end{messagebox}
\begin{messagebox}{Status for class loading and instantiation}{araracolour}{\icok}{white}
@@ -618,7 +618,7 @@ The class loading and instantiation methods provided by \arara\ typically return
\vspace{1.4em}
-Please make sure to \emph{always} check the returned integer status when using class loading and instantiation methods in directive and rule contexts. This feature is quite powerful yet tricky and subtle!
+Please make sure to \emph{always} check the returned integer status when using class loading and instantiation methods in directive and rule contexts. This feature is quite powerful yet tricky and subtle!
\end{messagebox}
\begin{description}
@@ -807,7 +807,7 @@ From the user perspective, a \rbox{Command} object is simply a good old list of
\vspace{0.4em}
-From the previous example, it is important to observe that a potential file name quoting is not necessary. The underlying system command execution library handles the provided arguments accordingly.
+From the previous example, it is important to observe that a potential file name quoting is not necessary. The underlying system command execution library handles the provided arguments accordingly.
Behind the scenes, however, \arara\ employs a different workflow when constructing a \rbox{Command} object. The tool sets the working directory path for the current command to \abox[araracolour]{USER\_DIR} which is based on the current execution. The working directory path can be explicitly set through specific method calls, described later on in this section.
@@ -870,7 +870,7 @@ return getCommandWithWorkingDirectory('/home/paulo',
\end{codebox}
\end{description}
-The methods presented in this section constitute the foundations of underlying system command execution. In particular, whenever possible, it is highly advisable to use \rbox{Command} objects through proper \mtbox{getCommand} method calls, as the plain string approach used in previous versions of our tool is marked as deprecated and will be removed in future versions.
+The methods presented in this section constitute the foundations of underlying system command execution. In particular, whenever possible, it is highly advisable to use \rbox{Command} objects through proper \mtbox{getCommand} method calls, as the plain string approach used in previous versions of our tool is marked as deprecated and will be removed in future versions.
\section{Others}
\label{sec:others}
@@ -955,7 +955,7 @@ Within a session there are two ``reserved'' namespaces: \verb|arara| and \verb|e
path = getSession().get('environment:PATH');
\end{codebox}
-The \verb|arara| namespace is a bit different. It provides flags that control \arara s behaviour. Flags are used in rules and may be manipulated by the user. Be aware, that every change in this namespace will result in \arara\ acting like you know what you did. Use this power with care. Currently, there is only one relevant flag: \verb|arara:FILENAME:halt|. This will stop the currently run command execution on the file with the specified file name. The value of this map entry is the exit status you want \arara\ to have.
+The \verb|arara| namespace is a bit different. It provides flags that control \arara s behaviour. Flags are used in rules and may be manipulated by the user. Be aware, that every change in this namespace will result in \arara\ acting like you know what you did. Use this power with care. Currently, there is only one relevant flag: \verb|arara:FILENAME:halt|. This will stop the currently run command execution on the file with the specified file name. The value of this map entry is the exit status you want \arara\ to have.
\begin{codebox}{Example}{teal}{\icnote}{white}
path = getSession().put('arara:myfile.tex:halt', 42);
diff --git a/Master/texmf-dist/doc/support/arara/chapters/mvel.tex b/Master/texmf-dist/doc/support/arara/chapters/mvel.tex
index 4ccca9b814d..385e5225106 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/mvel.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/mvel.tex
@@ -74,7 +74,7 @@ According to the documentation, MVEL allows you to express lists, maps and array
[ "Jim", "Bob", "Smith" ]
\end{codebox}
-Note that lists are denoted by comma-separated values delimited by square brackets. Similarly, maps (sets of key/value attributes) are expressed in the following format:
+Note that lists are denoted by comma-separated values delimited by square brackets. Similarly, maps (sets of key/value attributes) are expressed in the following format:
\begin{codebox}{Creating a map}{teal}{\icnote}{white}
[ "Foo" : "Bar", "Bar" : "Foo" ]
@@ -129,10 +129,10 @@ The expression language goes beyond simple evaluations. In fact, MVEL supports a
if (var > 0) {
r = "greater than zero";
}
-else if (var == 0) {
+else if (var == 0) {
r = "exactly zero";
}
-else {
+else {
r = "less than zero";
}
\end{codebox}
@@ -151,10 +151,10 @@ foreach (name : people) {
}
\end{codebox}
-As expected, MVEL also implements the standard C \rbox{for} loop. Observe that newer versions of MVEL allow an abbreviation of \rbox{foreach} to the usual \rbox{for} statement, as syntactic sugar. In order to explicitly indicate a collection iteration, we usually use \rbox{foreach} in the default rules for \arara, but both statements behave exactly the same from a semantic point of view.
+As expected, MVEL also implements the standard C \rbox{for} loop. Observe that newer versions of MVEL allow an abbreviation of \rbox{foreach} to the usual \rbox{for} statement, as syntactic sugar. In order to explicitly indicate a collection iteration, we usually use \rbox{foreach} in the default rules for \arara, but both statements behave exactly the same from a semantic point of view.
\begin{codebox}{Iteration statement}{teal}{\icnote}{white}
-for (int i = 0; i < 100; i++) {
+for (int i = 0; i < 100; i++) {
System.out.println(i);
}
\end{codebox}
diff --git a/Master/texmf-dist/doc/support/arara/chapters/rules.tex b/Master/texmf-dist/doc/support/arara/chapters/rules.tex
index 759d62e1338..a3f10dc2af8 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/rules.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/rules.tex
@@ -44,7 +44,7 @@ This rule executes the \rbox{asy} command line, referring to Asymptote, a powerf
\begin{description}
\item[\povalue{\hphantom{x}bw\hphantom{x}}] This option value, as the name suggests, converts all colors to a black and white model.
-\item[\povalue{cmyk}] This option value converts the RGB (red, green an blue) color model to the CMYK (cyan, magenta, yellow and black) counterpart.
+\item[\povalue{cmyk}] This option value converts the RGB (red, green an blue) color model to the CMYK (cyan, magenta, yellow and black) counterpart.
\item[\povalue{rgb}] This option value converts the CMYK (cyan, magenta, yellow and black) color model to the RGB (red, green an blue) counterpart.
@@ -71,7 +71,7 @@ This rule executes the \rbox{asy} command line, referring to Asymptote, a powerf
\item[\povalue{context}] This value, as the name indicates, sets the underlying \TeX\ engine to \rbox{context} for the current compilation. Note that the engine might play a major role in the generated code.
\item[\povalue{none}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{none} for the current compilation. In this case, there will be no associated engine.
-\end{description}
+\end{description}
\item[\abox{format}] This option, as the name suggests, converts each output file to a specified format. Make sure to take a look at the Asymptote manual for further details.
@@ -134,7 +134,7 @@ This rule executes the \rbox{bib2gls} command line application which extracts gl
This rule runs \rbox{biber}, the backend bibliography processor for \rbox{biblatex}, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
\begin{description}
-\item[\rpsbox{tool}] This option sets whether the bibliography processor should be executed in \emph{tool mode}, intended for transformations and modifications of datasources. Since this mode is oriented towards a datasource rather than a document, make sure to use it alongside the \abox{options} option.
+\item[\rpsbox{tool}] This option sets whether the bibliography processor should be executed in \emph{tool mode}, intended for transformations and modifications of datasources. Since this mode is oriented towards a datasource rather than a document, make sure to use it alongside the \abox{options} option.
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
\end{description}
@@ -192,6 +192,77 @@ When in doubt, always remember that the \opbox{{-}dry-run} command line option i
% arara: clean: { extensions: [ aux, log ] }
\end{codebox}
+\item[\rulebox{context}]
+This rule runs the \rbox{context} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format. Please refer to the user manual for further details.
+
+\begin{description}
+\item[\rpsbox{make}] This option, as the name indicates, sets whether the engine should create context formats. Please refer to the user manual for further details on this option.
+
+\item[\abox{ctx}] This option, as the name indicates, sets the \rbox{ctx} file for process management specification. Please refer to the user manual for further details on this option.
+
+\item[\abox{interface}] This option, as the name indicates, sets the specified user interface. Please refer to the user manual for further details on this option.
+
+\item[\rpsbox{autopdf}] This option, as the name indicates, closes the corresponding \rbox{pdf} file in viewer and then reopens it afterwards.
+
+\item[\abox{purge}] This option, as the name indicates, purges files according to the provided rule. Possible values are:
+
+\begin{description}
+\item[\povalue{partial}] This value, as the name suggests, purges files either or not after a proper run, defined through a pattern. Please refer to the user manual for further details.
+
+\item[\povalue{all}] This value, as the name suggests, purges all files either or not after a proper run, defined through a pattern. Please refer to the user manual for further details.
+
+\item[\povalue{result}] This value, as the name suggests, purges the resulting file before the actual run. Please refer to the user manual for further details.
+\end{description}
+
+\item[\abox{modules}] This option, as the name indicates, sets a list of modules and styles to be loaded, normally part of the distribution.
+
+\item[\abox{environments}] This option, as the name indicates, sets a list of environment files (document styles) to load first.
+
+\item[\abox{mode}] This option, as the name indicates, enables modes according to the provided list (conditional processing in styles).
+
+\item[\abox{path}] This option, as the name indicates, consults the given paths in the provided list during a file lookup.
+
+\item[\abox{arguments}] This option, as the name indicates, sets variables that can be consulted during a run. Such variables are defined as key/value pairs.
+
+\item[\abox{trackers}] This option, as the name indicates, sets the list of tracker variables. Please refer to the user manual for further details.
+
+\item[\abox{directives}] This option, as the name indicates, sets the list of directive variables. Please refer to the user manual for further details.
+
+\item[\abox{silent}] This option, as the name indicates, disables the log categories based on the provided list. Please refer to the user manual for further details.
+
+\item[\abox{errors}] This option, as the name indicates, shows errors at the end of a run and quits when it the provided list. Please refer to the user manual for further details.
+
+\item[\rpsbox{synctex}] This option sets whether \rbox{synctex}, an input and output synchronization feature that allows navigation from source to typeset material and vice versa, available in most \TeX\ engines, is activated.
+
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, the engine will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+\end{description}
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: context
+\end{codebox}
+
+\item[\rulebox{convert}]
+This rule runs the \rbox{convert} program, a member of the ImageMagick suite of tools. This program is used to convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, resample, and more.
+
+\begin{description}
+\item[\rpbox{program}{convert}] This option specifies the command utility path as a means to avoid potential clashes with underlying operating system commands.
+
+\item[\abox{options}~\rqbox] This option, as the name indicates, takes a list of raw command line options and appends it to the actual script call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: convert: { options: [ 'photo1.jpg', '--resize',
+% arara: --> '50%', 'photo2.jpg' ] }
+\end{codebox}
+
\item[\rulebox{csplain}]
This rule runs the \rbox{csplain} \TeX\ engine, a conservative extension of Knuth's plain \TeX\ with direct processing characters and hyphenation patterns for Czech and Slovak, on the provided \mtbox{currentFile} reference.
@@ -299,6 +370,37 @@ spreadsheet import functions also use this setting.
% arara: --> csv: booklist.csv }
\end{codebox}
+\item[\rulebox{detex}]
+This rule runs \rbox{detex}, a command line application that, as the name indicates, reads the provided \mtbox{currentFile} reference, removes all comments and \TeX\ control sequences and writes the remainder to the standard output or file.
+
+\begin{description}
+\item[\rpsbox{references}] This option defines whether the tool should echo values from page counters, references and citations.
+
+\item[\rpsbox{follow}] This option defines whether the tool should follow files referenced through typical input mechanisms.
+
+\item[\rpsbox{math}] This option defines whether the tool should replace math with nouns and verbs in order to preserve grammar.
+
+\item[\rpsbox{spaces}] This option, as the name indicates, define whether the tool should replace control sequences with spaces.
+
+\item[\rpsbox{words}] This option, as the name indicates, define whether the tool should output only a list of words.
+
+\item[\abox{environments}] This option takes a list of environments to be ignored by the tool during the text transformation.
+
+\item[\abox{mode}] This option, as the name indicates, defines the operation mode for the tool. Possible values are:
+
+\begin{description}
+\item[\povalue{latex}] This value, as the name suggests, enables and forces the \LaTeX\ mode for the tool.
+
+\item[\povalue{tex}] This value, as the name suggests, enables and forces the plain \TeX\ mode for the tool.
+\end{description}
+
+\item[\abox{output}] This value, as the name indicates, sets the output file in which the contents will be redirected.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: detex: { output: thesis.txt }
+\end{codebox}
+
\item[\rulebox{dvipdfm}]
This rule runs \rbox{dvipdfm}, a command line utility for file format translation, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
@@ -386,7 +488,52 @@ This rule runs the \rbox{etex} extended (plain) \TeX\ engine on the provided \mt
\end{description}
\begin{codebox}{Example}{teal}{\icnote}{white}
-% arara: etex: { shell: yes }
+% arara: etex: {
+% arara: --> shell: yes,
+% arara: --> interaction: batchmode
+% arara: --> }
+\end{codebox}
+
+\item[\rulebox{fig2dev}]
+This rule runs \rbox{fig2dev}, a command line application that translates \rbox{fig} code in the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{fig} suffix into the specified graphics language and puts them in the specified output file.
+
+\begin{description}
+\item[\abox{language}~\rqbox] This option, as the name indicates, sets the output graphics language for proper transformation. Possible values are listed in the following table (you can infer their types as well, based on the values):
+
+\bigskip
+
+{\centering
+\def\arraystretch{1.5}
+\begin{tabularx}{0.8\textwidth}{YYYYYY}
+\povalue{box} & \povalue{cgm} & \povalue{epic} &
+\povalue{eepic} & \povalue{eepicemu} & \povalue{emf}\\
+\povalue{eps} & \povalue{gif} & \povalue{ibmgl} &
+\povalue{jpeg} & \povalue{latex} & \povalue{map}\\
+\povalue{mf} & \povalue{mp} & \povalue{mmp} &
+\povalue{pcx} & \povalue{pdf} & \povalue{pdftex}\\
+\povalue{pdftex\_t} & \povalue{pic} & \povalue{pictex} &
+\povalue{png} & \povalue{ppm} & \povalue{ps}\\
+\povalue{pstex} & \povalue{pstex\_t} & \povalue{ptk} &
+\povalue{shape} & \povalue{sld} & \povalue{svg}\\
+\povalue{textyl} & \povalue{tiff} & \povalue{tk} &
+\povalue{tpic} & \povalue{xbm} & \povalue{xpm}
+\end{tabularx}\par}
+
+\bigskip
+
+\item[\abox{output}~\rqbox] This option, as the name indicates, sets the output file which will contain the translated code based on the provided file and language.
+
+\item[\abox{magnification}] This option, as the name suggests, sets the magnification level at which the figure is rendered.
+
+\item[\abox{font}] This option sets the default font used for text objects to the provided value. Keep in mind that the format of this option depends on the graphics language in use.
+
+\item[\abox{size}] This option, as the name suggests, set the default font size (in points) for text objects to the provided value.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: fig2dev: { language: mp, output: drawing.mp }
\end{codebox}
\item[\rulebox{frontespizio}]
@@ -440,7 +587,7 @@ This rule runs \rbox{latexindent}, a Perl script that indents \TeX\ files accord
\begin{description}
\item[\rpsbox{silent}] This option, as the name indicates, sets whether the script will operate in silent mode, in which no output is given to the terminal.
-\item[\rpsbox{overwrite}] This option, as the name indicates, sets whether the \mtbox{currentFile} reference will be overwritten. If activated, a copy will be made before the actual indentation process.
+\item[\rpsbox{overwrite}] This option, as the name indicates, sets whether the \mtbox{currentFile} reference will be overwritten. If activated, a copy will be made before the actual indentation process.
\item[\abox{trace}] This option, as the name indicates, enables the script tracing mode, such that a verbose output will be given to the \rbox{indent.log} log file. Possible values are:
@@ -720,7 +867,7 @@ This rule runs \rbox{makeindex}, a general purpose hierarchical index generator,
\item[\abox{order}] This option, as the name indicates, sets the default ordering scheme for the \rbox{makeindex} program. Two possible values are available:
\begin{description}
-\item[\povalue{letter}] This value, as the name indicates, activates the letter ordering scheme. In such scheme, a blank space does not precede any letter in the alphabet.
+\item[\povalue{letter}] This value, as the name indicates, activates the letter ordering scheme. In such scheme, a blank space does not precede any letter in the alphabet.
\item[\povalue{word}] This value, as the name indicates, activates the word ordering scheme. In such scheme, a blank space precedes any letter in the alphabet.
\end{description}
@@ -951,6 +1098,18 @@ This rule runs \rbox{ps2pdf}, a tool that converts PostScript to Portable Docume
% arara: ps2pdf: { output: article }
\end{codebox}
+\item[\rulebox{qpdf}]
+This rule runs \rbox{qpdf}, a command line application that does structural, content-preserving transformations of Portable Document Files, as well as providing capabilities to developers.
+
+\begin{description}
+\item[\abox{options}~\rqbox] This option, as the name indicates, takes a list of raw command line options and appends it to the actual script call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: qpdf: { options: [ '--linearize', 'input.pdf',
+% arara: --> 'output.pdf' ] }
+\end{codebox}
+
\item[\rulebox{sketch}]
This rule runs \rbox{sketch}, a system for producing line drawings of solid objects and scenes, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{sk} suffix. Note that one needs to add support for this particular file type, as seen in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
@@ -1002,6 +1161,49 @@ This rule runs the \rbox{tex} \TeX\ engine on the provided \mtbox{currentFile} r
% arara: tex: { shell: yes }
\end{codebox}
+\item[\rulebox{texcount}]
+This rule runs \rbox{texcount}, a Perl script designed to count words in \TeX\ and \LaTeX\ files, ignoring macros, tables, formulae and more on the provided \mtbox{currentFile} reference. The script is highly configurable, so make sure to check the manual for further information.
+
+\begin{description}
+\item[\abox{rules}] This option, as the name suggests, sets the rules which dictate how the script should work regarding word counting and option handling. Possible values are:
+
+\begin{description}
+\item[\povalue{relaxed}] This value, as the name indicates, sets a relaxed set of rules, allowing more general cases to be counted as either words and macros.
+
+\item[\povalue{restricted}] This value, as the name indicates, sets a more restricted set of rules for word counting and option handling.
+\end{description}
+
+\item[\abox{verbosity}] This option, as the name suggests, sets the verbosity level of the script according to the provided integer value. Possible values are:
+
+\begin{description}
+\item[\povalue{\hphantom{x}0\hphantom{x}}] This value sets the lowest verbosity level of all, such that the script does not present parsing details.
+
+\item[\povalue{\hphantom{x}1\hphantom{x}}] This value raises the details a bit and sets the verbosity level to include parsed words and marked formulae.
+
+\item[\povalue{\hphantom{x}2\hphantom{x}}] This value adds more details from the previous verbosity level by including ignored text as well.
+
+\item[\povalue{\hphantom{x}3\hphantom{x}}] This value adds more details from the previous verbosity level by including comments and options.
+
+\item[\povalue{\hphantom{x}4\hphantom{x}}] This value sets the highest verbosity level of all, such that the script includes parsed worded, marked formulae, ignored text, comments, options and internal states.
+\end{description}
+
+\item[\rpsbox{strict}] This option sets whether the tool should enable strict mode, so certain groups for which rules are not defined raise warnings.
+
+\item[\rpsbox{html}] This option, as the name suggests, defines whether the tool should output the report in the HTML format.
+
+\item[\rpsbox{total}] This option, as the name suggests, defines whether the tool should provide a total sum instead of partial sums (per file).
+
+\item[\rpsbox{unicode}] This option, as the name indicates, defines whether the tool should select Unicode as encoding for both input and output.
+
+\item[\abox{output}] This option, as the name suggests, sets the output file name in which the report will be written.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: texcount: { output: report.txt }
+\end{codebox}
+
\item[\rulebox{texindy}]
This rule runs \rbox{texindy}, a variant of the \rbox{xindy} indexing system focused on \LaTeX\ documents, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
diff --git a/Master/texmf-dist/doc/support/arara/chapters/yaml.tex b/Master/texmf-dist/doc/support/arara/chapters/yaml.tex
index c65c9898d72..bc6d63893c7 100644
--- a/Master/texmf-dist/doc/support/arara/chapters/yaml.tex
+++ b/Master/texmf-dist/doc/support/arara/chapters/yaml.tex
@@ -68,8 +68,8 @@ Scalar content can be written in block notation, using a literal style, indicate
\begin{codebox}{Scalar content in literal and folded styles}{teal}{\icnote}{white}
logo: |
This is the arara logo
- in its ASCII glory!
- __ _ _ __ __ _ _ __ __ _
+ in its ASCII glory!
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
diff --git a/Master/texmf-dist/scripts/arara/arara.jar b/Master/texmf-dist/scripts/arara/arara.jar
index 5af26466f3e..3a08d2ea12d 100644
--- a/Master/texmf-dist/scripts/arara/arara.jar
+++ b/Master/texmf-dist/scripts/arara/arara.jar
Binary files differ
diff --git a/Master/texmf-dist/scripts/arara/rules/animate.yaml b/Master/texmf-dist/scripts/arara/rules/animate.yaml
index d5baefa67d8..c2c3c3fcdcf 100644
--- a/Master/texmf-dist/scripts/arara/rules/animate.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/animate.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -16,13 +16,7 @@ commands:
prefix = [];
input = getBasename(reference).concat('.pdf');
output = getBasename(reference).concat('.gif');
- if (isUnix()) {
- prefix = [ program ];
- }
- else {
- prefix = [ 'cmd', '/c', program ];
- }
- return getCommand(prefix, '-delay', delay, '-loop',
+ return getCommand(program, '-delay', delay, '-loop',
loop, '-density', density, options, input, output);
}
arguments:
diff --git a/Master/texmf-dist/scripts/arara/rules/asymptote.yaml b/Master/texmf-dist/scripts/arara/rules/asymptote.yaml
index 7e56a0a7535..8ebf68eeda9 100644
--- a/Master/texmf-dist/scripts/arara/rules/asymptote.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/asymptote.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/bib2gls.yaml b/Master/texmf-dist/scripts/arara/rules/bib2gls.yaml
index a33744faec9..0fa6f4d1a25 100644
--- a/Master/texmf-dist/scripts/arara/rules/bib2gls.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/bib2gls.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -60,8 +60,8 @@ commands:
else
{
return getCommand('bib2gls', dir, trans, group, interpret,
- breakspace, trimfields, recordcount, recordcountunit,
- cite, verbose, merge, locale, uniscript, packages,
+ breakspace, trimfields, recordcount, recordcountunit,
+ cite, verbose, merge, locale, uniscript, packages,
ignore, custom, mapformats, options, getBasename(reference));
}
}
diff --git a/Master/texmf-dist/scripts/arara/rules/biber.yaml b/Master/texmf-dist/scripts/arara/rules/biber.yaml
index 5ca0498f15a..1edafe1e969 100644
--- a/Master/texmf-dist/scripts/arara/rules/biber.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/biber.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/bibtex.yaml b/Master/texmf-dist/scripts/arara/rules/bibtex.yaml
index 55dd1f0fec9..73016ff43e9 100644
--- a/Master/texmf-dist/scripts/arara/rules/bibtex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/bibtex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/bibtex8.yaml b/Master/texmf-dist/scripts/arara/rules/bibtex8.yaml
index 3741a920ea3..310cd96c2c2 100644
--- a/Master/texmf-dist/scripts/arara/rules/bibtex8.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/bibtex8.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/bibtexu.yaml b/Master/texmf-dist/scripts/arara/rules/bibtexu.yaml
index b1e6d181651..fa29aac8d2a 100644
--- a/Master/texmf-dist/scripts/arara/rules/bibtexu.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/bibtexu.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/clean.yaml b/Master/texmf-dist/scripts/arara/rules/clean.yaml
index 2a82eb3a87e..aa07560cb90 100644
--- a/Master/texmf-dist/scripts/arara/rules/clean.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/clean.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/context.yaml b/Master/texmf-dist/scripts/arara/rules/context.yaml
new file mode 100644
index 00000000000..5b8546486ed
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/context.yaml
@@ -0,0 +1,171 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: context
+name: ConTeXt
+authors:
+- Island of TeX
+commands:
+- name: ConTeXt engine
+ command: >
+ @{
+ return getCommand('context', make, ctx, interface, autopdf, purge,
+ modules, environments, mode, path, arguments,
+ trackers, directives, silent, errors, interaction,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: make
+ flag: >
+ @{
+ return isTrue(parameters.make, '--make');
+ }
+- identifier: ctx
+ flag: >
+ @{
+ return '--ctx='.concat(parameters.ctx);
+ }
+- identifier: interface
+ flag: >
+ @{
+ return [ '--interface', parameters.interface ];
+ }
+- identifier: autopdf
+ flag: >
+ @{
+ return isTrue(parameters.autopdf, '--autopdf');
+ }
+- identifier: purge
+ flag: >
+ @{
+ p = [ 'partial' : '--purge', 'all' : '--purgeall',
+ 'result' : '--purgeresult' ];
+ if (p.keySet().contains(parameters.purge)) {
+ return p.get(parameters.purge);
+ }
+ else {
+ throwError('Invalid value, expected either partial or all.');
+ }
+ }
+- identifier: modules
+ flag: >
+ @{
+ if (isList(parameters.modules)) {
+ return '--usemodule='.concat(String.join(',', parameters.modules));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: environments
+ flag: >
+ @{
+ if (isList(parameters.environments)) {
+ return '--environment='.concat(String.join(',',
+ parameters.environments));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: mode
+ flag: >
+ @{
+ if (isList(parameters.mode)) {
+ return '--mode='.concat(String.join(',', parameters.mode));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: path
+ flag: >
+ @{
+ if (isList(parameters.path)) {
+ return '--path='.concat(String.join(',', parameters.path));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: arguments
+ flag: >
+ @{
+ if (isList(parameters.arguments)) {
+ return '--arguments='.concat(String.join(',',
+ parameters.arguments));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: trackers
+ flag: >
+ @{
+ if (isList(parameters.trackers)) {
+ return '--trackers='.concat(String.join(',', parameters.trackers));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: directives
+ flag: >
+ @{
+ if (isList(parameters.directives)) {
+ return '--directives='.concat(String.join(',',
+ parameters.directives));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: silent
+ flag: >
+ @{
+ if (isList(parameters.modules)) {
+ return '--silent='.concat(String.join(',', parameters.silent));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: errors
+ flag: >
+ @{
+ if (isList(parameters.errors)) {
+ return '--errors='.concat(String.join(',', parameters.errors));
+ }
+ else {
+ throwError('I was expecting a list.');
+ }
+ }
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode' ].contains(parameters.interaction)) {
+ return '--'.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: synctex
+ flag: >
+ @{
+ return isTrue(parameters.synctex, '--synctex', '--nosynctex');
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
+
diff --git a/Master/texmf-dist/scripts/arara/rules/convert.yaml b/Master/texmf-dist/scripts/arara/rules/convert.yaml
new file mode 100644
index 00000000000..7a2140d0a77
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/convert.yaml
@@ -0,0 +1,34 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: convert
+name: Convert
+authors:
+- Island of TeX
+commands:
+- name: The Convert program
+ command: >
+ @{
+ return getCommand(program, options);
+ }
+arguments:
+- identifier: program
+ flag: >
+ @{
+ parameters.program
+ }
+ default: convert
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
+ required: true
diff --git a/Master/texmf-dist/scripts/arara/rules/csplain.yaml b/Master/texmf-dist/scripts/arara/rules/csplain.yaml
index 33e13c1a930..f5447599ca0 100644
--- a/Master/texmf-dist/scripts/arara/rules/csplain.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/csplain.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/datatooltk.yaml b/Master/texmf-dist/scripts/arara/rules/datatooltk.yaml
index 6fc08491c82..13526dbc130 100644
--- a/Master/texmf-dist/scripts/arara/rules/datatooltk.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/datatooltk.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -12,7 +12,7 @@ commands:
- name: The DatatoolTk software
command: >
@{
- return getCommand('datatooltk', options, output, csv, sql, input,
+ return getCommand('datatooltk', options, output, csv, sql, input,
sqldb, sqluser, name, probsoln, sort, sortlocale, sortcase,
seed, shuffle, sep, delim, csvheader, noconsole, debug,
owneronly, maptex, xls, ods, sheet, filterop, filters,
diff --git a/Master/texmf-dist/scripts/arara/rules/detex.yaml b/Master/texmf-dist/scripts/arara/rules/detex.yaml
new file mode 100644
index 00000000000..d90d779d6a9
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/detex.yaml
@@ -0,0 +1,82 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: detex
+name: DeTeX
+authors:
+- Island of TeX
+commands:
+- name: The DeTeX program
+ command: >
+ @{
+ c = getCommand('detex', references, mode, follow, math, spaces,
+ words, environments, reference);
+ if (isEmpty(output)) {
+ return c;
+ }
+ else {
+ p = unsafelyExecuteSystemCommand(c);
+ if (p.first == 0) {
+ return writeToFile(toFile(output), p.second, false);
+ }
+ else {
+ return false;
+ }
+ }
+ }
+arguments:
+- identifier: references
+ flag: >
+ @{
+ return isTrue(parameters.references, '-c');
+ }
+- identifier: mode
+ flag: >
+ @{
+ modes = [ 'latex' : '-l', 'tex' : '-t' ];
+ if (modes.keySet().contains(parameters.mode)) {
+ return modes.get(parameters.mode);
+ }
+ else {
+ throwError('I was expecting either the TeX or LaTeX mode.');
+ }
+ }
+- identifier: follow
+ flag: >
+ @{
+ return isFalse(parameters.follow, '-n');
+ }
+- identifier: math
+ flag: >
+ @{
+ return isFalse(parameters.math, '-r');
+ }
+- identifier: spaces
+ flag: >
+ @{
+ return isTrue(parameters.spaces, '-s');
+ }
+- identifier: words
+ flag: >
+ @{
+ return isTrue(parameters.words, '-w');
+ }
+- identifier: environments
+ flag: >
+ @{
+ if (!isList(parameters.environments)) {
+ throwError('I was expecting a list of environments.');
+ }
+ else {
+ return [ '-e', String.join(',', parameters.environments) ];
+ }
+ }
+- identifier: output
+ flag: >
+ @{
+ return parameters.output;
+ }
+
diff --git a/Master/texmf-dist/scripts/arara/rules/dvipdfm.yaml b/Master/texmf-dist/scripts/arara/rules/dvipdfm.yaml
index e80fe5bf989..bbd5be92c7d 100644
--- a/Master/texmf-dist/scripts/arara/rules/dvipdfm.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/dvipdfm.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/dvipdfmx.yaml b/Master/texmf-dist/scripts/arara/rules/dvipdfmx.yaml
index e4af77204b0..d62f89968d4 100644
--- a/Master/texmf-dist/scripts/arara/rules/dvipdfmx.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/dvipdfmx.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/dvips.yaml b/Master/texmf-dist/scripts/arara/rules/dvips.yaml
index c110f19679f..68196e09dda 100644
--- a/Master/texmf-dist/scripts/arara/rules/dvips.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/dvips.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/dvipspdf.yaml b/Master/texmf-dist/scripts/arara/rules/dvipspdf.yaml
index 52df9731dfa..a4888325e62 100644
--- a/Master/texmf-dist/scripts/arara/rules/dvipspdf.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/dvipspdf.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/dvisvgm.yaml b/Master/texmf-dist/scripts/arara/rules/dvisvgm.yaml
index 34edc09c576..d9d094ac3e4 100644
--- a/Master/texmf-dist/scripts/arara/rules/dvisvgm.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/dvisvgm.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/etex.yaml b/Master/texmf-dist/scripts/arara/rules/etex.yaml
index 6145fad1122..0411915ef76 100644
--- a/Master/texmf-dist/scripts/arara/rules/etex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/etex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/fig2dev.yaml b/Master/texmf-dist/scripts/arara/rules/fig2dev.yaml
new file mode 100644
index 00000000000..fd36069205c
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/fig2dev.yaml
@@ -0,0 +1,66 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: fig2dev
+name: fig2dev
+authors:
+- Island of TeX
+commands:
+- name: The fig2dev program
+ command: >
+ @{
+ input = getBasename(reference).concat('.fig');
+ return getCommand('fig2dev', language, magnification, font, size,
+ options, input, output);
+ }
+arguments:
+- identifier: language
+ flag: >
+ @{
+ if ([ 'box', 'cgm', 'epic', 'eepic', 'eepicemu', 'emf', 'eps', 'gif',
+ 'ibmgl', 'jpeg', 'latex', 'map', 'mf', 'mp', 'mmp', 'pcx',
+ 'pdf', 'pdftex', 'pdftex_t', 'pic', 'pictex', 'png', 'ppm',
+ 'ps', 'pstex', 'pstex_t', 'ptk', 'shape', 'sld', 'svg',
+ 'textyl', 'tiff', 'tk', 'tpic', 'xbm',
+ 'xpm' ].contains(parameters.language)) {
+ return [ '-L', parameters.language ];
+ }
+ else {
+ throwError('Invalid language, please refer to the manual.');
+ }
+ }
+ required: true
+- identifier: output
+ flag: >
+ @{
+ return parameters.output;
+ }
+ required: true
+- identifier: magnification
+ flag: >
+ @{
+ return [ '-m', parameters.magnification ];
+ }
+- identifier: font
+ flag: >
+ @{
+ return [ '-f', parameters.font ];
+ }
+- identifier: size
+ flag: >
+ @{
+ return [ '-s', parameters.size ];
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.')
+ }
+ }
diff --git a/Master/texmf-dist/scripts/arara/rules/frontespizio.yaml b/Master/texmf-dist/scripts/arara/rules/frontespizio.yaml
index a4637ff9f88..3b0ab0a853d 100644
--- a/Master/texmf-dist/scripts/arara/rules/frontespizio.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/frontespizio.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/halt.yaml b/Master/texmf-dist/scripts/arara/rules/halt.yaml
index 1c14644bcbe..3ac9106e909 100644
--- a/Master/texmf-dist/scripts/arara/rules/halt.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/halt.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/indent.yaml b/Master/texmf-dist/scripts/arara/rules/indent.yaml
index 5ef623c5dbf..4471d3728c9 100644
--- a/Master/texmf-dist/scripts/arara/rules/indent.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/indent.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/knitr.yaml b/Master/texmf-dist/scripts/arara/rules/knitr.yaml
index feb6b1847c8..3a3d5dfead1 100644
--- a/Master/texmf-dist/scripts/arara/rules/knitr.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/knitr.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/latex.yaml b/Master/texmf-dist/scripts/arara/rules/latex.yaml
index b79c051c1de..268ff1f7076 100644
--- a/Master/texmf-dist/scripts/arara/rules/latex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/latex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/latexmk.yaml b/Master/texmf-dist/scripts/arara/rules/latexmk.yaml
index 61f0ff9d7be..0f39e9d7098 100644
--- a/Master/texmf-dist/scripts/arara/rules/latexmk.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/latexmk.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/luahbtex.yaml b/Master/texmf-dist/scripts/arara/rules/luahbtex.yaml
index 3f851fad9ee..1557fa06145 100644
--- a/Master/texmf-dist/scripts/arara/rules/luahbtex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/luahbtex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/lualatex.yaml b/Master/texmf-dist/scripts/arara/rules/lualatex.yaml
index d9870976d1a..68f14d78e9e 100644
--- a/Master/texmf-dist/scripts/arara/rules/lualatex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/lualatex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/luatex.yaml b/Master/texmf-dist/scripts/arara/rules/luatex.yaml
index 86c7556993f..91099219f64 100644
--- a/Master/texmf-dist/scripts/arara/rules/luatex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/luatex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/make.yaml b/Master/texmf-dist/scripts/arara/rules/make.yaml
index 0298ae95bee..afc83a6e9ca 100644
--- a/Master/texmf-dist/scripts/arara/rules/make.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/make.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/makeglossaries.yaml b/Master/texmf-dist/scripts/arara/rules/makeglossaries.yaml
index 34c1c07002f..861330045e8 100644
--- a/Master/texmf-dist/scripts/arara/rules/makeglossaries.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/makeglossaries.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -32,11 +32,11 @@ commands:
lines = readFromFile(base.concat('.').concat('aux'));
- java.util.regex.Pattern glsPattern =
+ java.util.regex.Pattern glsPattern =
java.util.regex.Pattern.compile(
"\\\\@newglossary\\{.*\\}\\{(.*)\\}\\{(.*)\\}\\{(.*)\\}");
- java.util.regex.Pattern istPattern =
+ java.util.regex.Pattern istPattern =
(clean == 'partial' ? null :
java.util.regex.Pattern.compile("\\\\@istfilename\\{(.*)\\}"));
diff --git a/Master/texmf-dist/scripts/arara/rules/makeglossarieslite.yaml b/Master/texmf-dist/scripts/arara/rules/makeglossarieslite.yaml
index d716e97b4ab..177ba6971fb 100644
--- a/Master/texmf-dist/scripts/arara/rules/makeglossarieslite.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/makeglossarieslite.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/makeindex.yaml b/Master/texmf-dist/scripts/arara/rules/makeindex.yaml
index 795075bce2a..319ef71438b 100644
--- a/Master/texmf-dist/scripts/arara/rules/makeindex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/makeindex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/metapost.yaml b/Master/texmf-dist/scripts/arara/rules/metapost.yaml
index b72ff48b5c0..b3a58645ddd 100644
--- a/Master/texmf-dist/scripts/arara/rules/metapost.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/metapost.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/nomencl.yaml b/Master/texmf-dist/scripts/arara/rules/nomencl.yaml
index a2c3acf468a..f859f728813 100644
--- a/Master/texmf-dist/scripts/arara/rules/nomencl.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/nomencl.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/pbibtex.yaml b/Master/texmf-dist/scripts/arara/rules/pbibtex.yaml
index 9b39451d4d3..1a0347da760 100644
--- a/Master/texmf-dist/scripts/arara/rules/pbibtex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/pbibtex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/pdfcsplain.yaml b/Master/texmf-dist/scripts/arara/rules/pdfcsplain.yaml
index 6dc6d287f49..88d2f7b31e7 100644
--- a/Master/texmf-dist/scripts/arara/rules/pdfcsplain.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/pdfcsplain.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/pdflatex.yaml b/Master/texmf-dist/scripts/arara/rules/pdflatex.yaml
index 3df1135dfa9..385e99b9972 100644
--- a/Master/texmf-dist/scripts/arara/rules/pdflatex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/pdflatex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/pdftex.yaml b/Master/texmf-dist/scripts/arara/rules/pdftex.yaml
index 8b10bc02f56..45a7e32f244 100644
--- a/Master/texmf-dist/scripts/arara/rules/pdftex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/pdftex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/pdftk.yaml b/Master/texmf-dist/scripts/arara/rules/pdftk.yaml
index 67e81f0bd4d..73ee784417d 100644
--- a/Master/texmf-dist/scripts/arara/rules/pdftk.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/pdftk.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/platex.yaml b/Master/texmf-dist/scripts/arara/rules/platex.yaml
index 3a592687539..0c1d62cacd3 100644
--- a/Master/texmf-dist/scripts/arara/rules/platex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/platex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/ps2pdf.yaml b/Master/texmf-dist/scripts/arara/rules/ps2pdf.yaml
index fe5684d1c2b..db220f30376 100644
--- a/Master/texmf-dist/scripts/arara/rules/ps2pdf.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/ps2pdf.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/ptex.yaml b/Master/texmf-dist/scripts/arara/rules/ptex.yaml
index 3771981e7f6..cb5103fa365 100644
--- a/Master/texmf-dist/scripts/arara/rules/ptex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/ptex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/qpdf.yaml b/Master/texmf-dist/scripts/arara/rules/qpdf.yaml
new file mode 100644
index 00000000000..c2cb852a7d9
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/qpdf.yaml
@@ -0,0 +1,28 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: qpdf
+name: QPDF
+authors:
+- Island of TeX
+commands:
+- name: The QPDF program
+ command: >
+ @{
+ return getCommand('qpdf', options);
+ }
+arguments:
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
+ required: true
diff --git a/Master/texmf-dist/scripts/arara/rules/sketch.yaml b/Master/texmf-dist/scripts/arara/rules/sketch.yaml
index ca3d22834a2..0970d2e5b8f 100644
--- a/Master/texmf-dist/scripts/arara/rules/sketch.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/sketch.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/songidx.yaml b/Master/texmf-dist/scripts/arara/rules/songidx.yaml
index ff4a27e6b8f..a1cadae4310 100644
--- a/Master/texmf-dist/scripts/arara/rules/songidx.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/songidx.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/tex.yaml b/Master/texmf-dist/scripts/arara/rules/tex.yaml
index 701d2000962..c682ea6b919 100644
--- a/Master/texmf-dist/scripts/arara/rules/tex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/tex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/texcount.yaml b/Master/texmf-dist/scripts/arara/rules/texcount.yaml
new file mode 100644
index 00000000000..79506c806c9
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/texcount.yaml
@@ -0,0 +1,74 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: texcount
+name: TeXcount
+authors:
+- Island of TeX
+commands:
+- name: The TeXcount program
+ command: >
+ @{
+ return getCommand('texcount', rules, verbosity, strict, html,
+ total, unicode, options, output, reference);
+ }
+arguments:
+- identifier: rules
+ flag: >
+ @{
+ if ([ 'relaxed', 'restricted' ].contains(parameters.rules)) {
+ return '-'.concat(parameters.rules);
+ }
+ else {
+ throwError('Invalid value, use either relaxed or restricted.');
+ }
+ }
+- identifier: verbosity
+ flag: >
+ @{
+ if ([ '0', '1', '2', '3', '4' ].contains(parameters.verbosity)) {
+ return '-v'.concat(parameters.verbosity);
+ }
+ else {
+ throwError('Invalid value, use an integer range from 0 to 4.');
+ }
+ }
+- identifier: strict
+ flag: >
+ @{
+ return isTrue(parameters.strict, '-strict');
+ }
+- identifier: html
+ flag: >
+ @{
+ return isTrue(parameters.html, '-html');
+ }
+- identifier: total
+ flag: >
+ @{
+ return isTrue(parameters.total, '-total');
+ }
+- identifier: unicode
+ flag: >
+ @{
+ return isTrue(parameters.unicode, '-unicode');
+ }
+- identifier: output
+ flag: >
+ @{
+ return '-out='.concat(parameters.output);
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
+
diff --git a/Master/texmf-dist/scripts/arara/rules/texindy.yaml b/Master/texmf-dist/scripts/arara/rules/texindy.yaml
index 54b468d42ac..6d747f7217c 100644
--- a/Master/texmf-dist/scripts/arara/rules/texindy.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/texindy.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/tikzmake.yaml b/Master/texmf-dist/scripts/arara/rules/tikzmake.yaml
index 97942aaa3ba..0569ba9a650 100644
--- a/Master/texmf-dist/scripts/arara/rules/tikzmake.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/tikzmake.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/upbibtex.yaml b/Master/texmf-dist/scripts/arara/rules/upbibtex.yaml
index eb0f5fba9db..d6593dea57f 100644
--- a/Master/texmf-dist/scripts/arara/rules/upbibtex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/upbibtex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/uplatex.yaml b/Master/texmf-dist/scripts/arara/rules/uplatex.yaml
index 0fd1d575f9a..c0f2cdf3cd0 100644
--- a/Master/texmf-dist/scripts/arara/rules/uplatex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/uplatex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/uptex.yaml b/Master/texmf-dist/scripts/arara/rules/uptex.yaml
index b2c9c90fe70..6163e0ae699 100644
--- a/Master/texmf-dist/scripts/arara/rules/uptex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/uptex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/xdvipdfmx.yaml b/Master/texmf-dist/scripts/arara/rules/xdvipdfmx.yaml
index bf67572fc34..75bf182a4df 100644
--- a/Master/texmf-dist/scripts/arara/rules/xdvipdfmx.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/xdvipdfmx.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/xelatex.yaml b/Master/texmf-dist/scripts/arara/rules/xelatex.yaml
index ef1e1a8f0a0..b94e35f7970 100644
--- a/Master/texmf-dist/scripts/arara/rules/xelatex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/xelatex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/xetex.yaml b/Master/texmf-dist/scripts/arara/rules/xetex.yaml
index 0d13768a285..faefd9ca173 100644
--- a/Master/texmf-dist/scripts/arara/rules/xetex.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/xetex.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/scripts/arara/rules/xindy.yaml b/Master/texmf-dist/scripts/arara/rules/xindy.yaml
index 2efc37daf5d..f1c12f0c1d6 100644
--- a/Master/texmf-dist/scripts/arara/rules/xindy.yaml
+++ b/Master/texmf-dist/scripts/arara/rules/xindy.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
diff --git a/Master/texmf-dist/source/support/arara/arara-5.1.0-src.zip b/Master/texmf-dist/source/support/arara/arara-5.1.0-src.zip
new file mode 100644
index 00000000000..ec051291b6e
--- /dev/null
+++ b/Master/texmf-dist/source/support/arara/arara-5.1.0-src.zip
Binary files differ
diff --git a/Master/texmf-dist/source/support/arara/build.gradle.kts b/Master/texmf-dist/source/support/arara/build.gradle.kts
deleted file mode 100644
index 4276ef7394f..00000000000
--- a/Master/texmf-dist/source/support/arara/build.gradle.kts
+++ /dev/null
@@ -1,257 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-
-import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
-import org.gradle.api.internal.project.ProjectInternal
-import org.gradle.api.java.archives.internal.DefaultManifest
-import org.gradle.api.tasks.testing.logging.TestExceptionFormat
-import org.gradle.api.tasks.testing.logging.TestLogEvent
-import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-
-plugins {
- application
- `maven-publish`
- kotlin("jvm")
- id("org.jetbrains.kotlin.plugin.serialization")
- id("com.github.johnrengelman.shadow")
- id("org.jetbrains.dokka")
- id("com.diffplug.gradle.spotless")
- jacoco
-}
-
-val kotlinVersion = project.getKotlinPluginVersion()
-dependencies {
- implementation(kotlin("stdlib", kotlinVersion))
- implementation(kotlin("reflect", kotlinVersion))
- implementation("com.uchuhimo:konf-core:0.22.1")
- implementation("com.github.ajalt:clikt:2.4.0")
- implementation("ch.qos.cal10n:cal10n-api:0.8.1")
- implementation("ch.qos.logback:logback-classic:1.2.3")
- implementation("ch.qos.logback:logback-core:1.2.3")
- implementation("org.mvel:mvel2:2.4.5.Final")
- implementation("org.slf4j:slf4j-api:1.7.30")
- implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.2")
- implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.+")
- implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
- implementation("com.charleskorn.kaml:kaml:0.15.0")
- implementation("org.zeroturnaround:zt-exec:1.11")
-
- testImplementation("io.kotlintest:kotlintest-runner-junit5:3.4.2")
-}
-
-status = "development"
-val projectName = project.name.toLowerCase()
-val moduleName = group
-val mainClass = "$moduleName.Arara"
-
-java {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = sourceCompatibility
-}
-
-sourceSets {
- main {
- java { setSrcDirs(listOf("src/main/java", "src/main/kotlin")) }
- resources { setSrcDirs(listOf("src/main/resources")) }
- }
- test {
- java { setSrcDirs(listOf("src/test/kotlin")) }
- resources { setSrcDirs(listOf("src/test/resources")) }
- }
-}
-
-application {
- applicationName = project.name
- mainClassName = mainClass
-}
-
-spotless {
- java {
- removeUnusedImports()
- licenseHeader("// SPDX-License-Identifier: BSD-3-Clause")
- trimTrailingWhitespace()
- endWithNewline()
- }
- kotlin {
- ktlint()
- licenseHeader("// SPDX-License-Identifier: BSD-3-Clause")
- trimTrailingWhitespace()
- endWithNewline()
- }
-}
-
-val mainManifest: Manifest = DefaultManifest((project as ProjectInternal).fileResolver)
- .apply {
- attributes["Implementation-Title"] = project.name
- attributes["Implementation-Version"] = version
- attributes["Main-Class"] = mainClass
- if (java.sourceCompatibility < JavaVersion.VERSION_1_9) {
- attributes["Automatic-Module-Name"] = moduleName
- }
- }
-
-tasks {
- register<Jar>("dokkaJar") {
- group = JavaBasePlugin.DOCUMENTATION_GROUP
- description = "Create JAR with dokka documentation"
- archiveClassifier.set("dokka")
- from(dokka)
- }
- register<Jar>("sourcesJar") {
- group = JavaBasePlugin.DOCUMENTATION_GROUP
- description = "Assembles sources JAR"
- archiveClassifier.set("sources")
- from(sourceSets["main"].allSource)
- }
-
- named<JavaCompile>("compileJava") {
- if (java.sourceCompatibility > JavaVersion.VERSION_1_8) {
- inputs.property("moduleName", moduleName)
- options.compilerArgs = listOf(
- // include Gradle dependencies as modules
- "--module-path", sourceSets["main"].compileClasspath.asPath)
- }
- }
- withType<KotlinCompile> {
- kotlinOptions {
- freeCompilerArgs = listOf("-Xuse-experimental=kotlin.Experimental,kotlinx.serialization.ImplicitReflectionSerializer")
- jvmTarget = "1.8"
- }
- }
-
- withType<Jar> {
- archiveBaseName.set("arara")
- manifest.attributes.putAll(mainManifest.attributes)
- }
- named<ShadowJar>("shadowJar") {
- manifest.attributes.putAll(mainManifest.attributes)
- archiveAppendix.set("with-deps")
- archiveClassifier.set("")
- }
- named<JavaExec>("run") {
- if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
- doFirst {
- jvmArgs = listOf(
- "--module-path", classpath.asPath
- )
- }
- }
- }
-
- withType<Test> {
- useJUnitPlatform()
-
- testLogging {
- exceptionFormat = TestExceptionFormat.FULL
- events(TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR,
- TestLogEvent.SKIPPED, TestLogEvent.PASSED, TestLogEvent.FAILED)
- }
- }
-}
-tasks.named<Task>("assembleDist").configure {
- dependsOn("shadowJar", "jacocoTestReport")
-}
-
-publishing {
- publications {
- create<MavenPublication>("GitLab") {
- groupId = project.group.toString()
- artifactId = "arara"
- version = project.version.toString()
-
- pom {
- name.set("arara")
- description.set("arara is a TeX automation tool based on " +
- "rules and directives. It gives you a way to enhance " +
- "your TeX experience.")
- inceptionYear.set("2012")
- url.set("https://gitlab.com/islandoftex/arara")
- organization {
- name.set("Island of TeX")
- url.set("https://gitlab.com/islandoftex")
- }
- licenses {
- license {
- name.set("New BSD License")
- url.set("http://www.opensource.org/licenses/bsd-license.php")
- distribution.set("repo")
- }
- }
- developers {
- developer {
- name.set("Paulo Roberto Massa Cereda")
- email.set("cereda@users.sf.net")
- id.set("cereda")
- url.set("https://tex.stackexchange.com/users/3094")
- roles.set(listOf("Lead developer", "Creator", "Duck enthusiast"))
- }
- developer {
- name.set("Ben Frank")
- id.set("benfrank")
- url.set("https://gitlab.com/benfrank")
- roles.set(listOf("Release coordinator v5"))
- }
- developer {
- name.set("Marco Daniel")
- email.set("marco.daniel@mada-nada.de")
- id.set("marcodaniel")
- url.set("https://tex.stackexchange.com/users/5239")
- roles.set(listOf("Contributor", "Tester", "Fast driver"))
- }
- developer {
- name.set("Brent Longborough")
- email.set("brent@longborough.org")
- id.set("brent")
- url.set("https://tex.stackexchange.com/users/344")
- roles.set(listOf("Developer", "Contributor", "Tester",
- "Haskell fanatic"))
- }
- developer {
- name.set("Nicola Talbot")
- email.set("nicola.lc.talbot@gmail.com")
- id.set("nlct")
- url.set("https://tex.stackexchange.com/users/19862")
- roles.set(listOf("Developer", "Contributor", "Tester",
- "Hat enthusiast"))
- }
- }
- scm {
- connection.set("scm:git:https://gitlab.com/islandoftex/arara.git")
- developerConnection.set("scm:git:https://gitlab.com/islandoftex/arara.git")
- url.set("https://gitlab.com/islandoftex/arara")
- }
- ciManagement {
- system.set("GitLab")
- url.set("https://gitlab.com/islandoftex/arara/pipelines")
- }
- issueManagement {
- system.set("GitLab")
- url.set("https://gitlab.com/islandoftex/arara/issues")
- }
- }
-
- from(components["java"])
- artifact(tasks["sourcesJar"])
- artifact(tasks["dokkaJar"])
- }
- }
-
- repositories {
- maven {
- url = uri("https://gitlab.com/api/v4/projects/14349047/packages/maven")
- credentials(HttpHeaderCredentials::class) {
- if (project.hasProperty("jobToken")) {
- name = "Job-Token"
- value = project.property("jobToken").toString()
- } else {
- logger.warn("Will be unable to publish (jobToken missing)\n" +
- "Ignore this warning if you are not running the publish task " +
- "for the GitLab package repository.")
- }
- }
- authentication {
- create<HttpHeaderAuthentication>("header")
- }
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/java/org/islandoftex/arara/utils/Methods.java b/Master/texmf-dist/source/support/arara/src/main/java/org/islandoftex/arara/utils/Methods.java
deleted file mode 100644
index bbc46be4a02..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/java/org/islandoftex/arara/utils/Methods.java
+++ /dev/null
@@ -1,1222 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils;
-
-import kotlin.Pair;
-import org.islandoftex.arara.Arara;
-import org.islandoftex.arara.configuration.AraraSpec;
-import org.islandoftex.arara.filehandling.FileHandlingUtils;
-import org.islandoftex.arara.filehandling.FileSearchingUtils;
-import org.islandoftex.arara.localization.LanguageController;
-import org.islandoftex.arara.localization.Messages;
-import org.islandoftex.arara.model.AraraException;
-import org.islandoftex.arara.model.Session;
-import org.islandoftex.arara.ruleset.Command;
-
-import java.io.File;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Stream;
-
-/**
- * Implements some auxiliary methods for runtime evaluation.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@SuppressWarnings("unused")
-public class Methods {
-
- // the language controller
- private static final LanguageController messages =
- LanguageController.INSTANCE;
-
- // the session controller
- private static final Session session = Session.INSTANCE;
-
- /**
- * Get rule methods.
- *
- * @return A map of method names to method pointers.
- */
- public static Map<String, Object> getRuleMethods() {
- Map<String, Object> map = new HashMap<>(getConditionalMethods());
- try {
- Method[] methods = Methods.class.getMethods();
- Arrays.asList("getOriginalFile", "getOriginalReference", "isEmpty",
- "isNotEmpty", "isTrue", "isFalse", "trimSpaces",
- "getBasename", "getFiletype", "throwError", "getSession",
- "isWindows", "isLinux", "isMac", "isUnix", "isCygwin",
- "replicatePattern", "buildString", "getCommand",
- "checkClass", "isString", "isList", "isMap", "isBoolean",
- "isVerboseMode", "showMessage", "isOnPath",
- "unsafelyExecuteSystemCommand",
- "getCommandWithWorkingDirectory", "listFilesByExtensions",
- "listFilesByPatterns", "writeToFile", "readFromFile",
- "isSubdirectory", "halt").forEach(name ->
- map.put(name, Stream.of(methods).filter(
- m -> m.getName().equals(name)).findFirst().get()));
- } catch (Exception exception) {
- // quack, quack, quack
- }
- return map;
- }
-
- /**
- * Get conditional methods.
- *
- * @return A map of method names to method pointers.
- */
- public static Map<String, Object> getConditionalMethods() {
- Map<String, Object> map = new HashMap<>();
- try {
- Method[] methods = Methods.class.getMethods();
- Arrays.asList("exists", "missing", "changed", "unchanged", "found",
- "toFile", "showDropdown", "showInput", "showOptions",
- "currentFile", "loadClass", "loadObject").forEach(name ->
- map.put(name, Stream.of(methods).filter(
- m -> m.getName().equals(name)).findFirst().get()));
- } catch (Exception exception) {
- // quack, quack, quack
- }
- return map;
- }
-
- /**
- * Exit the application normally
- */
- public static void halt() {
- halt(0);
- }
-
- /**
- * Exit the application with status code.
- *
- * @param status The exit value
- */
- public static void halt(int status) {
- session.put("arara:" + getOriginalFile() + ":halt", status);
- }
-
- /**
- * Gets the original file.
- *
- * @return The original file.
- */
- public static String getOriginalFile() {
- File file = Arara.INSTANCE.getConfig()
- .get(AraraSpec.Execution.INSTANCE.getReference());
- return file.getName();
- }
-
- /**
- * Gets the original reference.
- *
- * @return The original reference.
- */
- public static File getOriginalReference() {
- return Arara.INSTANCE.getConfig()
- .get(AraraSpec.Execution.INSTANCE.getReference());
- }
-
- /**
- * Checks if the string is empty.
- *
- * @param string The string.
- * @return A boolean value.
- */
- public static boolean isEmpty(String string) {
- return string.equals("");
- }
-
- /**
- * Checks if the string is not empty.
- *
- * @param string The string.
- * @return A boolean value.
- */
- public static boolean isNotEmpty(String string) {
- return !isEmpty(string);
- }
-
- /**
- * Checks if the string is empty.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or empty string.
- */
- public static Object isEmpty(String string, Object yes) {
- return isEmpty(string) ? yes : "";
- }
-
- /**
- * Checks if the string is not empty.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or empty string.
- */
- public static Object isNotEmpty(String string, Object yes) {
- return isNotEmpty(string) ? yes : "";
- }
-
- /**
- * Checks if the string is empty.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isEmpty(String string, Object yes, Object no) {
- return isEmpty(string) ? yes : no;
- }
-
- /**
- * Checks if the string is not empty.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isNotEmpty(String string, Object yes, Object no) {
- return isNotEmpty(string) ? yes : no;
- }
-
- /**
- * Checks if the string holds a true value.
- *
- * @param string The string.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isTrue(String string) throws AraraException {
- return !isEmpty(string) && CommonUtils.INSTANCE.checkBoolean(string);
- }
-
- /**
- * Checks if the string holds a false value.
- *
- * @param string The string.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isFalse(String string) throws AraraException {
- return !isEmpty(string) && !CommonUtils.INSTANCE.checkBoolean(string);
- }
-
- /**
- * Checks if the string holds a true value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes)
- throws AraraException {
- return isTrue(string) ? yes : "";
- }
-
- /**
- * Checks if the string holds a false value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes)
- throws AraraException {
- return (isFalse(string) ? yes : "");
- }
-
- /**
- * Checks if the string holds a true value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes, Object no)
- throws AraraException {
- return (isTrue(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a false value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes, Object no)
- throws AraraException {
- return (isFalse(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a true value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @param fallback Object to return if string is empty.
- * @return One of the three options.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes, Object no,
- Object fallback) throws AraraException {
- return isEmpty(string) ? fallback : (isTrue(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a false value.
- *
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @param fallback Object to return if string is empty.
- * @return One of the three options.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes, Object no,
- Object fallback) throws AraraException {
- return isEmpty(string) ? fallback : (isFalse(string) ? yes : no);
- }
-
- /**
- * Trim spaces from the string.
- *
- * @param string The string.
- * @return A trimmed string.
- */
- public static String trimSpaces(String string) {
- return string.trim();
- }
-
- /**
- * Checks if the expression resolves to true.
- *
- * @param value The expression.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- */
- public static Object isTrue(boolean value, Object yes) {
- return value ? yes : "";
- }
-
- /**
- * Checks if the expression resolves to false.
- *
- * @param value The expression.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- */
- public static Object isFalse(boolean value, Object yes) {
- return !value ? yes : "";
- }
-
- /**
- * Checks if the expression resolves to true.
- *
- * @param value The expression.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isTrue(boolean value, Object yes, Object no) {
- return value ? yes : no;
- }
-
- /**
- * Checks if the expression resolves to false.
- *
- * @param value The expression.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isFalse(boolean value, Object yes, Object no) {
- return !value ? yes : no;
- }
-
- /**
- * Gets the basename.
- *
- * @param file The file.
- * @return The basename of the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getBasename(File file) throws AraraException {
- if (file.isFile()) {
- return FileHandlingUtils.INSTANCE.getBasename(file);
- } else {
- throw new AraraException(
- CommonUtils.INSTANCE.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_BASENAME_NOT_A_FILE,
- file.getName()
- )
- )
- );
- }
- }
-
- /**
- * Gets the basename.
- *
- * @param filename The string.
- * @return The basename.
- */
- public static String getBasename(String filename) {
- return FileHandlingUtils.INSTANCE.getBasename(new File(filename));
- }
-
- /**
- * Gets the file type.
- *
- * @param file The provided file.
- * @return The file type.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getFiletype(File file) throws AraraException {
- if (file.isFile()) {
- return FileHandlingUtils.INSTANCE.getFileExtension(file);
- } else {
- throw new AraraException(
- CommonUtils.INSTANCE.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_FILETYPE_NOT_A_FILE,
- file.getName()
- )
- )
- );
- }
- }
-
- /**
- * Gets the file type.
- *
- * @param filename The provided string.
- * @return The file type.
- */
- public static String getFiletype(String filename) {
- return FileHandlingUtils.INSTANCE.getFileExtension(new File(filename));
- }
-
- /**
- * Replicates the pattern to each element of a list.
- *
- * @param pattern The pattern.
- * @param values The list.
- * @return A list of strings containing the pattern applied to the list.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<Object> replicatePattern(String pattern,
- List<Object> values)
- throws AraraException {
- return CommonUtils.INSTANCE.replicateList(pattern, values);
- }
-
- /**
- * Throws an exception.
- *
- * @param text The text to be thrown as the exception message.
- * @throws AraraException The exception to be thrown by this method.
- */
- public static void throwError(String text) throws AraraException {
- throw new AraraException(text);
- }
-
- /**
- * Gets the session.
- *
- * @return The session.
- */
- public static Session getSession() {
- return session;
- }
-
- /**
- * Checks if Windows is the underlying operating system.
- *
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isWindows() throws AraraException {
- return CommonUtils.INSTANCE.checkOS("windows");
- }
-
- /**
- * Checks if we are inside a Cygwin environment.
- *
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isCygwin() throws AraraException {
- return CommonUtils.INSTANCE.checkOS("cygwin");
- }
-
- /**
- * Checks if Linux is the underlying operating system.
- *
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isLinux() throws AraraException {
- return CommonUtils.INSTANCE.checkOS("linux");
- }
-
- /**
- * Checks if Mac is the underlying operating system.
- *
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isMac() throws AraraException {
- return CommonUtils.INSTANCE.checkOS("mac");
- }
-
- /**
- * Checks if Unix is the underlying operating system.
- *
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isUnix() throws AraraException {
- return CommonUtils.INSTANCE.checkOS("unix");
- }
-
- /**
- * Checks if Windows is the underlying operating system.
- *
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isWindows(Object yes, Object no)
- throws AraraException {
- return CommonUtils.INSTANCE.checkOS("windows") ? yes : no;
- }
-
- /**
- * Checks if we are inside a Cygwin environment.
- *
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isCygwin(Object yes, Object no) throws AraraException {
- return CommonUtils.INSTANCE.checkOS("cygwin") ? yes : no;
- }
-
- /**
- * Checks if Linux is the underlying operating system.
- *
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isLinux(Object yes, Object no) throws AraraException {
- return CommonUtils.INSTANCE.checkOS("linux") ? yes : no;
- }
-
- /**
- * Checks if Mac is the underlying operating system.
- *
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isMac(Object yes, Object no) throws AraraException {
- return CommonUtils.INSTANCE.checkOS("mac") ? yes : no;
- }
-
- /**
- * Checks if Unix is the underlying operating system.
- *
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isUnix(Object yes, Object no) throws AraraException {
- return CommonUtils.INSTANCE.checkOS("unix") ? yes : no;
- }
-
- /**
- * Checks if the file exists according to its extension.
- *
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean exists(String extension) throws AraraException {
- return FileHandlingUtils.INSTANCE.exists(extension);
- }
-
- /**
- * Checks if the file is missing according to its extension.
- *
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean missing(String extension) throws AraraException {
- return !exists(extension);
- }
-
- /**
- * Checks if the file has changed, according to its extension.
- *
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean changed(String extension) throws AraraException {
- return FileHandlingUtils.INSTANCE.hasChanged(extension);
- }
-
- /**
- * Checks if the file is unchanged according to its extension.
- *
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean unchanged(String extension) throws AraraException {
- return !changed(extension);
- }
-
- /**
- * Checks if the file exists.
- *
- * @param filename The file.
- * @return A boolean value.
- */
- public static boolean exists(File filename) {
- return filename.exists();
- }
-
- /**
- * Checks if the file is missing.
- *
- * @param filename The file.
- * @return A boolean value.
- */
- public static boolean missing(File filename) {
- return !exists(filename);
- }
-
- /**
- * Checks if the file has changed.
- *
- * @param filename The file.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean changed(File filename) throws AraraException {
- return FileHandlingUtils.INSTANCE.hasChanged(filename);
- }
-
- /**
- * Checks if the file is unchanged.
- *
- * @param filename The file.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean unchanged(File filename) throws AraraException {
- return !changed(filename);
- }
-
- /**
- * Build a string based on an array of objects.
- *
- * @param objects Array of objects.
- * @return A string built from the array.
- */
- public static String buildString(Object... objects) {
- return CommonUtils.INSTANCE.generateString(objects);
- }
-
- /**
- * Checks if the file contains the regex, based on its extension.
- *
- * @param extension The extension.
- * @param regex The regex.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean found(String extension, String regex)
- throws AraraException {
- return CommonUtils.INSTANCE.checkRegex(extension, regex);
- }
-
- /**
- * Checks if the file contains the provided regex.
- *
- * @param file The file.
- * @param regex The regex.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean found(File file, String regex)
- throws AraraException {
- return CommonUtils.INSTANCE.checkRegex(file, regex);
- }
-
- /**
- * Gets the command based on a list of strings.
- *
- * @param elements The list of strings.
- * @return A command.
- */
- public static Command getCommand(List<String> elements) {
- return new Command(elements);
- }
-
- /**
- * Gets the command based on an array of objects.
- *
- * @param elements Array of objects.
- * @return A command.
- */
- public static Command getCommand(Object... elements) {
- return new Command(elements);
- }
-
- /**
- * Gets the command based on an array of objects and with the provided
- * working directory as string.
- *
- * @param path String path representing the working directory.
- * @param elements Array of elements.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(String path,
- Object... elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(new File(path));
- return command;
- }
-
- /**
- * Gets the command based on an array of objects and with the provided
- * working directory as file.
- *
- * @param file File representing the working directory.
- * @param elements Array of elements.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(File file,
- Object... elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(file);
- return command;
- }
-
- /**
- * Gets the command based on a list of strings and with the provided
- * working directory as string.
- *
- * @param path String path representing the working directory.
- * @param elements List of strings.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(String path,
- List<String> elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(new File(path));
- return command;
- }
-
- /**
- * Gets the command based on a list of strings and with the provided
- * working directory as file.
- *
- * @param file File representing the working directory.
- * @param elements List of strings.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(File file,
- List<String> elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(file);
- return command;
- }
-
- /**
- * Checks if the object is an instance of the provided class.
- *
- * @param clazz The class.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean checkClass(Class<?> clazz, Object object) {
- return clazz.isInstance(object);
- }
-
- /**
- * Checks if the object is a string.
- *
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isString(Object object) {
- return checkClass(String.class, object);
- }
-
- /**
- * Checks if the object is a list.
- *
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isList(Object object) {
- return checkClass(List.class, object);
- }
-
- /**
- * Checks if the object is a map.
- *
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isMap(Object object) {
- return checkClass(Map.class, object);
- }
-
- /**
- * Checks if the object is a boolean.
- *
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isBoolean(Object object) {
- return checkClass(Boolean.class, object);
- }
-
- /**
- * Checks if the execution is in verbose mode.
- *
- * @return A boolean value indicating if the execution is in verbose mode.
- */
- public static boolean isVerboseMode() {
- return Arara.INSTANCE.getConfig()
- .get(AraraSpec.Execution.INSTANCE.getVerbose());
- }
-
- /**
- * Returns a file object based on the provided name.
- *
- * @param name The file name.
- * @return A file object.
- */
- public static File toFile(String name) {
- return new File(name);
- }
-
- /**
- * Shows the message.
- *
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int width, int type,
- String title, String text) {
- MessageUtils.INSTANCE.showMessage(width, type, title, text);
- }
-
- /**
- * Shows the message. It relies on the default width.
- *
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int type, String title, String text) {
- MessageUtils.INSTANCE.showMessage(type, title, text);
- }
-
- /**
- * Shows a message with options presented as an array of buttons.
- *
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int width, int type, String title,
- String text, Object... buttons) {
- return MessageUtils.INSTANCE.showOptions(width, type, title, text, buttons);
- }
-
- /**
- * Shows a message with options presented as an array of buttons. It relies
- * on the default width.
- *
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int type, String title,
- String text, Object... buttons) {
- return MessageUtils.INSTANCE.showOptions(type, title, text, buttons);
- }
-
- /**
- * Shows a message with a text input.
- *
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int width, int type,
- String title, String text) {
- return MessageUtils.INSTANCE.showInput(width, type, title, text);
- }
-
- /**
- * Shows a message with a text input. It relies on the default width.
- *
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int type, String title, String text) {
- return MessageUtils.INSTANCE.showInput(type, title, text);
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements.
- *
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int width, int type, String title,
- String text, Object... elements) {
- return MessageUtils.INSTANCE.showDropdown(width, type, title, text, elements);
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements. It
- * relies on the default width.
- *
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int type, String title,
- String text, Object... elements) {
- return MessageUtils.INSTANCE.showDropdown(type, title, text, elements);
- }
-
- /**
- * Checks if the provided command name is reachable from the system path.
- *
- * @param command A string representing the command.
- * @return A logic value.
- */
- public static boolean isOnPath(String command) {
- return CommonUtils.INSTANCE.isOnPath(command);
- }
-
- /**
- * Unsafely executes a system command from the underlying operating system
- * and returns a pair containing the exit status and the command output as a
- * string.
- *
- * @param command The system command to be executed.
- * @return A pair containing the exit status and the system command output
- * as a string.
- */
- public static Pair<Integer, String> unsafelyExecuteSystemCommand(Command command) {
- return SystemCallUtils.INSTANCE.executeSystemCommand(command);
- }
-
- /**
- * Gets the file reference for the current directive. It is important to
- * observe that version 4.0 of arara replicates the directive when 'files'
- * is detected amongst the parameters, so each instance will have a
- * different reference.
- *
- * @return A file reference for the current directive.
- */
- public static File currentFile() {
- return Arara.INSTANCE.getConfig().get(AraraSpec.Execution
- .INSTANCE.getFile());
- }
-
- /**
- * Loads a class from the provided file, potentially a Java archive.
- *
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- // TODO: refactor to use the enum
- public static Pair<Integer, Class<?>> loadClass(File file, String name) {
- Pair<ClassLoadingUtils.ClassLoadingStatus, Class<?>> pair =
- ClassLoadingUtils.INSTANCE.loadClass(file, name);
- return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
- }
-
- /**
- * Loads a class from the provided string reference, representing a file.
- *
- * @param ref String reference representing a file.
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- // TODO: refactor to use the enum
- public static Pair<Integer, Class<?>> loadClass(String ref, String name) {
- Pair<ClassLoadingUtils.ClassLoadingStatus, Class<?>> pair =
- ClassLoadingUtils.INSTANCE.loadClass(new File(ref), name);
- return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
- }
-
- /**
- * Loads a class from the provided file, instantiating it.
- *
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- // TODO: refactor to use the enum
- public static Pair<Integer, Object> loadObject(File file, String name) {
- Pair<ClassLoadingUtils.ClassLoadingStatus, Object> pair =
- ClassLoadingUtils.INSTANCE.loadObject(file, name);
- return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
- }
-
- /**
- * Loads a class from the provided string reference, instantiating it.
- *
- * @param ref String reference representing a file.
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- // TODO: refactor to use the enum
- public static Pair<Integer, Object> loadObject(String ref, String name) {
- Pair<ClassLoadingUtils.ClassLoadingStatus, Object> pair =
- ClassLoadingUtils.INSTANCE.loadObject(new File(ref), name);
- return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
- }
-
- /**
- * List all files from the provided directory according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- *
- * @param directory The provided directory.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByExtensions(File directory,
- List<String> extensions, boolean recursive) {
- return FileSearchingUtils.INSTANCE.listFilesByExtensions(
- directory,
- extensions,
- recursive
- );
- }
-
- /**
- * List all files from the provided string path according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- *
- * @param path The provided path as plain string.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByExtensions(String path,
- List<String> extensions, boolean recursive) {
- return FileSearchingUtils.INSTANCE.listFilesByExtensions(
- new File(path),
- extensions,
- recursive
- );
- }
-
- /**
- * List all files from the provided directory matching the list of file
- * name patterns. Such list can contain wildcards.
- *
- * @param directory The provided directory.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByPatterns(File directory,
- List<String> patterns, boolean recursive) {
- return FileSearchingUtils.INSTANCE.listFilesByPatterns(
- directory,
- patterns,
- recursive
- );
- }
-
- /**
- * List all files from the provided path matching the list of file
- * name patterns. Such list can contain wildcards.
- *
- * @param path The provided path as plain string.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByPatterns(String path,
- List<String> patterns, boolean recursive) {
- return FileSearchingUtils.INSTANCE.listFilesByPatterns(
- new File(path),
- patterns,
- recursive
- );
- }
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- *
- * @param file The file.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, String text, boolean append) {
- return FileHandlingUtils.INSTANCE.writeToFile(file, text, append);
- }
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- *
- * @param path The path.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(String path, String text,
- boolean append) {
- return FileHandlingUtils.INSTANCE.writeToFile(new File(path), text, append);
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- *
- * @param file The file.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, List<String> lines,
- boolean append) {
- return FileHandlingUtils.INSTANCE.writeToFile(file, lines, append);
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- *
- * @param path The path.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(String path, List<String> lines,
- boolean append) {
- return FileHandlingUtils.INSTANCE.writeToFile(new File(path), lines, append);
- }
-
- /**
- * Reads the provided file into a list of strings.
- *
- * @param file The file.
- * @return A list of strings.
- */
- public static List<String> readFromFile(File file) {
- return FileHandlingUtils.INSTANCE.readFromFile(file);
- }
-
- /**
- * Reads the provided file into a list of strings.
- *
- * @param path The path.
- * @return A list of strings.
- */
- public static List<String> readFromFile(String path) {
- return FileHandlingUtils.INSTANCE.readFromFile(new File(path));
- }
-
- /**
- * Checks whether a directory is under the project directory.
- *
- * @param directory The directory to be inspected.
- * @return Logical value indicating whether the directoy is under root.
- * @throws AraraException There was a problem with path retrieval.
- */
- public static boolean isSubdirectory(File directory)
- throws AraraException {
- return FileHandlingUtils.INSTANCE.isSubDirectory(
- directory, getOriginalReference());
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/Arara.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/Arara.kt
deleted file mode 100644
index 2b4efbf8dba..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/Arara.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara
-
-import com.github.ajalt.clikt.parameters.options.versionOption
-import com.uchuhimo.konf.Config
-import java.time.LocalDate
-import kotlin.time.ExperimentalTime
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.configuration.Configuration
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.model.Extractor
-import org.islandoftex.arara.model.Interpreter
-import org.islandoftex.arara.ruleset.DirectiveUtils
-import org.islandoftex.arara.utils.DisplayUtils
-
-/**
- * arara's main entry point
- *
- * @author Island of TeX
- * @version 5.0
- * @since 5.0
- */
-object Arara {
- // TODO: watch config files
- val baseconfig = Config { addSpec(AraraSpec) }
- .from.env()
- .from.systemProperties()
- var config = baseconfig.withLayer("initial")
-
- /**
- * Main method. This is the application entry point.
- * @param args A string array containing all command line arguments.
- */
- @ExperimentalTime
- @JvmStatic
- fun main(args: Array<String>) {
- // print the arara logo in the terminal; I just
- // hope people use this tool in a good terminal with
- // fixed-width fonts, otherwise the logo will be messed
- DisplayUtils.printLogo()
-
- val version = config[AraraSpec.Application.version]
- CLI().versionOption(version, names = setOf("-V", "--version"),
- message = {
- "arara $version\n" +
- "Copyright (c) ${LocalDate.now().year}, Island of TeX\n" +
- LanguageController.getMessage(Messages
- .INFO_PARSER_NOTES) + "\n\n" +
- "New features in version $version:\n" +
- Arara::class.java
- .getResource("/org/islandoftex/arara/configuration/release-notes")
- .readText()
- })
- .main(args)
- }
-
- @ExperimentalTime
- fun run() {
- try {
- // first of all, let's try to load a potential
- // configuration file located at the current
- // user's home directory; if there's a bad
- // configuration file, arara will panic and
- // end the execution
- Configuration.load()
-
- // let's print the current file information; it is a
- // basic display, just the file name, the size properly
- // formatted as a human readable format, and the last
- // modification date; also, in this point, the logging
- // feature starts to collect data (of course, if enabled
- // either through the configuration file or manually
- // in the command line)
- DisplayUtils.printFileInformation()
-
- // time to read the file and try to extract the directives;
- // extract() brings us a list of directives properly parsed
- // and almost ready to be handled; note that no directives
- // in the provided file will raise an exception; this is
- // by design and I opted to not include a default fallback
- // (although it wouldn't be so difficult to write one,
- // I decided not to take the risk)
- val extracted = Extractor.extract(config[AraraSpec.Execution
- .reference])
-
- // it is time to validate the directives (for example, we have
- // a couple of keywords that cannot be used as directive
- // parameters); another interesting feature of the validate()
- // method is to replicate a directive that has the 'files'
- // keyword on it, since it's the whole point of having 'files'
- // in the first place; if you check the log file, you will see
- // that the list of extracted directives might differ from
- // the final list of directives to be effectively processed
- // by arara
- val directives = DirectiveUtils.process(extracted)
-
- // time to shine, now the interpreter class will interpret
- // one directive at a time, get the corresponding rule,
- // set the parameters, evaluate it, get the tasks, run them,
- // evaluate the result and print the status; note that
- // arara, from this version on, will try to evaluate things
- // progressively, so in case of an error, the previous tasks
- // were already processed and potentially executed
- Interpreter(directives).execute()
- } catch (exception: AraraException) {
- // something bad just happened, so arara will print the proper
- // exception and provide details on it, if available; the idea
- // here is to propagate an exception throughout the whole
- // application and catch it here instead of a local treatment
- DisplayUtils.printException(exception)
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/CLI.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/CLI.kt
deleted file mode 100644
index 9de0f1bd3f8..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/CLI.kt
+++ /dev/null
@@ -1,171 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara
-
-import com.github.ajalt.clikt.core.CliktCommand
-import com.github.ajalt.clikt.parameters.arguments.argument
-import com.github.ajalt.clikt.parameters.arguments.multiple
-import com.github.ajalt.clikt.parameters.options.default
-import com.github.ajalt.clikt.parameters.options.flag
-import com.github.ajalt.clikt.parameters.options.option
-import com.github.ajalt.clikt.parameters.types.int
-import com.github.ajalt.clikt.parameters.types.path
-import com.github.ajalt.clikt.parameters.types.restrictTo
-import kotlin.system.exitProcess
-import kotlin.time.ClockMark
-import kotlin.time.ExperimentalTime
-import kotlin.time.MonoClock
-import kotlin.time.milliseconds
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.filehandling.FileSearchingUtils
-import org.islandoftex.arara.localization.Language
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.model.Session
-import org.islandoftex.arara.utils.CommonUtils
-import org.islandoftex.arara.utils.DisplayUtils
-import org.islandoftex.arara.utils.LoggingUtils
-
-/**
- * arara's command line interface
- *
- * @author Island of TeX
- * @version 5.0
- * @since 5.0
- */
-class CLI : CliktCommand(name = "arara", printHelpOnEmptyArgs = true) {
- private val log by option("-l", "--log",
- help = "Generate a log output")
- .flag(default = AraraSpec.Execution.logging.default)
- private val verbose by option("-v", "--verbose",
- help = "Print the command output")
- .flag("-s", "--silent",
- default = AraraSpec.Execution.verbose.default)
- private val dryrun by option("-n", "--dry-run",
- help = "Go through all the motions of running a command, but " +
- "with no actual calls")
- .flag(default = AraraSpec.Execution.dryrun.default)
- private val onlyheader by option("-H", "--header",
- help = "Extract directives only in the file header")
- .flag(default = AraraSpec.Execution.onlyHeader.default)
- private val timeout by option("-t", "--timeout",
- help = "Set the execution timeout (in milliseconds)")
- .int().restrictTo(min = 1)
- private val language by option("-L", "--language",
- help = "Set the application language")
- .default(AraraSpec.Application.defaultLanguageCode.default)
- private val maxLoops by option("-m", "--max-loops",
- help = "Set the maximum number of loops (> 0)")
- .int().restrictTo(min = 1)
- .default(AraraSpec.Execution.maxLoops.default)
- private val preamble by option("-p", "--preamble",
- help = "Set the file preamble based on the configuration file")
- private val workingDirectory by option("-d", "--working-directory",
- help = "Set the working directory for all tools")
- .path(exists = true, fileOkay = false, readable = true)
- .default(AraraSpec.Execution.workingDirectory.default)
-
- private val reference by argument("file",
- help = "The file(s) to evaluate and process")
- .multiple(required = true)
-
- /**
- * Update the default configuration with the values parsed from the
- * command line.
- */
- @ExperimentalTime
- private fun updateConfigurationFromCommandLine() {
- Arara.config[AraraSpec.Execution.language] = Language(language)
- LanguageController.setLocale(Arara.config[AraraSpec.Execution.language]
- .locale)
-
- Arara.config[AraraSpec.Execution.logging] = log
- Arara.config[AraraSpec.Execution.verbose] = verbose
- Arara.config[AraraSpec.Execution.dryrun] = dryrun
- Arara.config[AraraSpec.Execution.onlyHeader] = onlyheader
- Arara.config[AraraSpec.Execution.maxLoops] = maxLoops
- Arara.config[AraraSpec.Execution.workingDirectory] = workingDirectory
- preamble?.let {
- val preambles = Arara.config[AraraSpec.Execution.preambles]
- if (preambles.containsKey(it)) {
- Arara.config[AraraSpec.Execution.preamblesActive] = true
- Arara.config[AraraSpec.Execution.preamblesContent] =
- // will never throw (see check above)
- preambles.getValue(it)
- } else {
- throw AraraException(
- LanguageController.getMessage(
- Messages.ERROR_PARSER_INVALID_PREAMBLE, it)
- )
- }
- }
- timeout?.let {
- Arara.config[AraraSpec.Execution.timeout] = true
- Arara.config[AraraSpec.Execution.timeoutValue] = it.milliseconds
- }
-
- Arara.config[AraraSpec.UserInteraction.displayTime] = true
- }
-
- /**
- * The actual main method of arara (when run in command-line mode)
- */
- @ExperimentalTime
- override fun run() {
- // the first component to be initialized is the
- // logging controller; note init() actually disables
- // the logging, so early exceptions won't generate
- // a lot of noise in the terminal
- LoggingUtils.init()
-
- // arara features a stopwatch, so we can see how much time has passed
- // since everything started; internally, this class makes use of
- // nano time, so we might get an interesting precision here
- // (although timing is not a serious business in here, it's
- // just a cool addition)
- val executionStart: ClockMark = MonoClock.markNow()
-
- // arara stores the environment variables accessible at the start
- // of the execution in the session object for the user
- Session.updateEnvironmentVariables()
-
- // logging has to be initialized only once and for all because
- // context resets lead to missing output
- LoggingUtils.enableLogging(log)
-
- try {
- // TODO: this will have to change for parallelization
- reference.forEach {
- // TODO: do we have to reset some more file-specific config?
- // especially the working directory will have to be set and
- // changed
- Arara.config = Arara.baseconfig.withLayer(it)
- // next, update the configuration
- updateConfigurationFromCommandLine()
- FileSearchingUtils.discoverFile(it)
- Arara.run()
- // add an empty line between file executions
- println()
- }
-
- // this is the last command from arara; once the execution time is
- // available, print it; note that this notification is suppressed
- // when the command line parsing returns false as result (it makes
- // no sense to print the execution time for a help message, I guess)
- DisplayUtils.printTime(executionStart.elapsedNow().inSeconds)
- } catch (ex: AraraException) {
- DisplayUtils.printException(ex)
- Arara.config[AraraSpec.Execution.status] = 2
- }
-
- // gets the application exit status; the rule here is:
- // 0 : everything went just fine (note that the dry-run mode always
- // makes arara exit with 0, unless it is an error in the directive
- // builder itself).
- // 1 : one of the tasks failed, so the execution ended abruptly. This
- // means the error relies on the command line call, not with arara.
- // 2 : arara just handled an exception, meaning that something bad
- // just happened and might require user intervention.
- exitProcess(CommonUtils.exitStatus)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
deleted file mode 100644
index 14100ec98b1..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
+++ /dev/null
@@ -1,90 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.configuration
-
-import com.uchuhimo.konf.ConfigSpec
-import java.io.File
-import java.nio.file.Paths
-import kotlin.time.ExperimentalTime
-import kotlin.time.milliseconds
-import org.islandoftex.arara.localization.Language
-
-/**
- * Configuration hierarchy for arara
- *
- * @author Island of TeX
- * @version 5.0
- * @since 5.0
- */
-@Suppress("MagicNumber")
-object AraraSpec : ConfigSpec() {
- object Application : ConfigSpec() {
- val defaultLanguageCode by optional("en")
- val version by optional(AraraSpec::class.java.`package`.implementationVersion
- ?: "DEVELOPMENT BUILD")
- val namePattern by optional("arara:\\s")
- val width by optional(65)
- }
-
- object Execution : ConfigSpec() {
- val maxLoops by optional(10)
- val timeout by optional(false)
- @ExperimentalTime
- val timeoutValue by optional(0.milliseconds)
- val haltOnErrors by optional(true)
-
- val databaseName by optional("arara")
- val logName by optional("arara")
-
- val verbose by optional(false)
- val language by optional(Language(Application.defaultLanguageCode.default))
- val logging by optional(false)
- val dryrun by optional(false)
- val status by optional(0)
- val fileTypes by optional(ConfigurationUtils.defaultFileTypes)
- val rulePaths by optional(setOf(
- ConfigurationUtils.applicationPath.resolve("rules")
- .toString()
- ))
- val preambles by optional(mapOf<String, String>())
- val preamblesActive by optional(false)
- val preamblesContent by optional("")
-
- val workingDirectory by optional(Paths.get(""))
- val configurationName by optional("[none]")
- val onlyHeader by optional(false)
-
- // TODO: these are runtime values, they should be properly
- // initialized and tested (maybe move them into their own
- // Spec or session)
- val reference by optional(File("/tmp/"))
- val file by optional(File("/tmp/"))
-
- object InfoSpec : ConfigSpec() {
- val ruleId by optional<String?>(null)
- val rulePath by optional<String?>(null)
- }
-
- object DirectiveSpec : ConfigSpec() {
- val lines by optional(listOf<Int>())
- }
-
- val filePattern by optional("")
- }
-
- object Directive : ConfigSpec() {
- val linebreakPattern by optional("^\\s*-->\\s(.*)$")
-
- private const val directivestart = """^\s*(\w+)\s*(:\s*(\{.*\})\s*)?"""
- private const val pattern = """(\s+(if|while|until|unless)\s+(\S.*))?$"""
- val directivePattern by optional(directivestart + pattern)
- }
-
- object UserInteraction : ConfigSpec() {
- val lookAndFeel by optional("none")
- val displayTime by optional(false)
- val displayLine by optional(true)
- val displayResult by optional(false)
- val displayRolling by optional(false)
- val displayException by optional(false)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
deleted file mode 100644
index 06abeeb6dbf..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.configuration
-
-import kotlin.time.ExperimentalTime
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.filehandling.FileHandlingUtils
-import org.islandoftex.arara.localization.Language
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-
-/**
- * Implements the configuration model, which holds the default settings and can
- * load the configuration file. The idea here is to provide a map that holds
- * all configuration settings used by model and utilitary classes throughout
- * the execution. This controller is implemented as a singleton.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object Configuration {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Loads the application configuration.
- *
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @ExperimentalTime
- @Throws(AraraException::class)
- fun load() {
- // initialize both file type and language models,
- // since we can track errors from there instead
- // of relying on a check on this level
-
- // get the configuration file, if any
- val file = ConfigurationUtils.configFile
- if (file != null) {
- // set the configuration file name for
- // logging purposes
- Arara.config[AraraSpec.Execution.configurationName] =
- FileHandlingUtils.getCanonicalPath(file)
-
- // then validate it and update the
- // configuration accordingly
- val resource = ConfigurationUtils.loadLocalConfiguration(file)
- update(resource)
- }
-
- // just to be sure, update the
- // current locale in order to
- // display localized messages
- val locale = Arara.config[AraraSpec.Execution.language].locale
- LanguageController.setLocale(locale)
- }
-
- /**
- * Update the configuration based on the provided map.
- *
- * @param resource Map containing the new configuration settings.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun update(resource: LocalConfiguration) {
- if (resource.paths.isNotEmpty())
- Arara.config[AraraSpec.Execution.rulePaths] =
- ConfigurationUtils.normalizePaths(resource.paths)
-
- if (resource.filetypes.isNotEmpty()) {
- Arara.config[AraraSpec.Execution.fileTypes] = ConfigurationUtils.normalizeFileTypes(resource.filetypes)
- }
-
- Arara.config[AraraSpec.Execution.verbose] = resource.isVerbose
- Arara.config[AraraSpec.Execution.logging] = resource.isLogging
- Arara.config[AraraSpec.Execution.onlyHeader] = resource.isHeader
- Arara.config[AraraSpec.Execution.language] =
- Language(resource.language)
- Arara.config[AraraSpec.UserInteraction.lookAndFeel] = resource.laf
-
- Arara.config[AraraSpec.Execution.databaseName] =
- ConfigurationUtils.cleanFileName(resource.dbname)
- Arara.config[AraraSpec.Execution.logName] =
- ConfigurationUtils.cleanFileName(resource.logname)
-
- val loops = resource.loops
- if (loops <= 0) {
- throw AraraException(messages.getMessage(Messages
- .ERROR_CONFIGURATION_LOOPS_INVALID_RANGE))
- } else {
- Arara.config[AraraSpec.Execution.maxLoops] = loops
- }
-
- if (resource.preambles.isNotEmpty())
- Arara.config[AraraSpec.Execution.preambles] = resource.preambles
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
deleted file mode 100644
index a48a6d0d3fc..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
+++ /dev/null
@@ -1,157 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.configuration
-
-import com.charleskorn.kaml.Yaml
-import java.io.File
-import java.io.UnsupportedEncodingException
-import java.net.URLDecoder
-import java.nio.file.Path
-import java.nio.file.Paths
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.model.FileType
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements configuration utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object ConfigurationUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * This map contains all file types that arara accepts
- * and their corresponding search patterns (for comments).
- */
- val defaultFileTypePatterns = mapOf(
- "tex" to "^\\s*%\\s+",
- "dtx" to "^\\s*%\\s+",
- "ltx" to "^\\s*%\\s+",
- "drv" to "^\\s*%\\s+",
- "ins" to "^\\s*%\\s+"
- )
-
- /**
- * Set of default file types provided by arara.
- * Initialization may throw AraraException if file types are wrong
- */
- val defaultFileTypes: Set<FileType> by lazy {
- defaultFileTypePatterns
- .map { (extension, pattern) -> FileType(extension, pattern) }
- .toSet()
- }
-
- /**
- * The configuration file in use.
- *
- * Look for configuration files in the user's working directory first
- * if no configuration files are found in the user's working directory,
- * try to look up in a global directory, that is, the user home.
- */
- val configFile: File?
- get() {
- val names = listOf(".araraconfig.yaml",
- "araraconfig.yaml", ".arararc.yaml", "arararc.yaml")
- Arara.config[AraraSpec.Execution.workingDirectory]
- .let { workingDir ->
- val first = names
- .map { workingDir.resolve(it).toFile() }
- .firstOrNull { it.exists() }
- if (first != null)
- return first
- }
- CommonUtils.getSystemPropertyOrNull("user.home")?.let { userHome ->
- return names.map { File(userHome).resolve(it) }
- .firstOrNull { it.exists() }
- }
- return null
- }
-
- /**
- * The canonical absolute application path.
- *
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- val applicationPath: Path
- @Throws(AraraException::class)
- get() {
- try {
- var path = Arara::class.java.protectionDomain.codeSource
- .location.path
- path = URLDecoder.decode(path, "UTF-8")
- return Paths.get(File(path).toURI()).parent.toAbsolutePath()
- } catch (exception: UnsupportedEncodingException) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION
- ),
- exception
- )
- }
- }
-
- /**
- * Validates the configuration file.
- *
- * @param file The configuration file.
- * @return The configuration file as a resource.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun loadLocalConfiguration(file: File): LocalConfiguration {
- return file.runCatching {
- val text = readText()
- if (!text.startsWith("!config"))
- throw Exception("Configuration should start with !config")
- Yaml.default.parse(LocalConfiguration.serializer(),
- text)
- }.getOrElse {
- throw AraraException(messages.getMessage(
- Messages.ERROR_CONFIGURATION_GENERIC_ERROR), it)
- }
- }
-
- /**
- * Normalize a list of rule paths, removing all duplicates.
- *
- * @param paths The list of rule paths.
- * @return A list of normalized paths, without duplicates.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun normalizePaths(paths: Iterable<String>): Set<String> =
- paths.union(AraraSpec.Execution.rulePaths.default)
-
- /**
- * Normalize a list of file types, removing all duplicates.
- *
- * @param types The list of file types.
- * @return A list of normalized file types, without duplicates.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun normalizeFileTypes(types: Iterable<FileType>): Set<FileType> =
- types.union(defaultFileTypes)
-
- /**
- * Cleans the file name to avoid invalid entries.
- *
- * @param name The file name.
- * @return A cleaned file name.
- */
- fun cleanFileName(name: String): String {
- val result = File(name).name.trim()
- return if (result.isEmpty()) "arara" else result.trim()
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
deleted file mode 100644
index 959f2a9ab84..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.configuration
-
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.model.FileType
-import org.islandoftex.arara.utils.CommonUtils
-import org.mvel2.templates.TemplateRuntime
-
-/**
- * A local configuration which resembles configuration files in the working
- * directory.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-class LocalConfiguration {
- // rule paths
- var paths: List<String> = listOf()
- get() {
- val user = mapOf(
- "home" to (CommonUtils.getSystemPropertyOrNull("user.home")
- ?: ""),
- "name" to (CommonUtils.getSystemPropertyOrNull("user.name")
- ?: ""))
- val application = mapOf(
- "workingDirectory" to Arara.config[AraraSpec.Execution.workingDirectory].toAbsolutePath().toString()
- )
-
- return field.map { input ->
- var path = CommonUtils.removeKeywordNotNull(input)
- try {
- path = TemplateRuntime.eval(path, mapOf(
- "user" to user, "application" to application
- )) as String
- } catch (_: RuntimeException) {
- // do nothing, gracefully fallback to
- // the default, unparsed path
- }
- path
- }
- }
-
- // file types
- var filetypes: List<FileType> = listOf()
-
- // the application language
- // default to English
- var language: String = Arara.config[AraraSpec.Application.defaultLanguageCode]
- get() = CommonUtils.removeKeywordNotNull(field)
-
- // maximum number of loops
- var loops: Int = Arara.config[AraraSpec.Execution.maxLoops]
-
- // verbose flag
- @SerialName("verbose")
- var isVerbose: Boolean = Arara.config[AraraSpec.Execution.verbose]
-
- // logging flag
- @SerialName("logging")
- var isLogging: Boolean = Arara.config[AraraSpec.Execution.logging]
-
- // header flag
- @SerialName("header")
- var isHeader: Boolean = Arara.config[AraraSpec.Execution.onlyHeader]
-
- // database name
- var dbname: String = Arara.config[AraraSpec.Execution.databaseName]
- get() = CommonUtils.removeKeywordNotNull(field)
-
- // log name
- var logname: String = Arara.config[AraraSpec.Execution.logName]
- get() = CommonUtils.removeKeywordNotNull(field)
-
- // map of preambles
- var preambles: Map<String, String> = Arara.config[AraraSpec.Execution.preambles]
-
- // look and feel
- // default to none
- var laf: String = Arara.config[AraraSpec.UserInteraction.lookAndFeel]
- get() = CommonUtils.removeKeywordNotNull(field)
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
deleted file mode 100644
index e4b98cd1940..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import kotlinx.serialization.Serializable
-
-/**
- * The database model, which keeps track on file changes.
- *
- * This database is a map because it maps files to hashes. So the key will
- * always be a file representation and the value always a string.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-data class Database(
- /**
- * The whole database is implemented as a map, where
- * the key is the absolute canonical file and the value
- * is its corresponding CRC32 hash.
- */
- val map: MutableMap<String, String> = mutableMapOf()
-) : MutableMap<String, String> by map
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
deleted file mode 100644
index f4728c93662..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
+++ /dev/null
@@ -1,97 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import com.charleskorn.kaml.Yaml
-import java.io.File
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-
-/**
- * Implements database utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object DatabaseUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Gets the file representing the YAML file (database).
- *
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private val file: File
- @Throws(AraraException::class)
- get() {
- val reference = Arara.config[AraraSpec.Execution.reference]
- val name = "${Arara.config[AraraSpec.Execution.databaseName]}.yaml"
- val path = FileHandlingUtils.getParentCanonicalFile(reference)
- return path.resolve(name)
- }
-
- /**
- * Loads the YAML file representing the database.
- *
- * @return The database object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun load(): Database {
- return if (!exists()) {
- Database()
- } else {
- file.runCatching {
- val text = readText()
- if (!text.startsWith("!database"))
- throw Exception("Database should start with !database")
- Yaml.default.parse(Database.serializer(), text)
- }.getOrElse {
- it.printStackTrace()
- throw AraraException(messages.getMessage(Messages
- .ERROR_LOAD_COULD_NOT_LOAD_XML, file.name), it)
- }
- }
- }
-
- /**
- * Saves the database on a YAML file.
- *
- * @param database The database object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun save(database: Database) {
- file.runCatching {
- val content = "!database\n" +
- Yaml.default.stringify(Database.serializer(), database)
- writeText(content)
- }.getOrElse {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_SAVE_COULD_NOT_SAVE_XML,
- file.name
- ), it)
- }
- }
-
- /**
- * Checks if the YAML file representing the database exists.
- *
- * @return A boolean value indicating if the YAML file exists.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun exists(): Boolean {
- return file.exists()
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
deleted file mode 100644
index 07f1ecfab97..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
+++ /dev/null
@@ -1,319 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import java.io.File
-import java.io.IOException
-import java.text.SimpleDateFormat
-import java.util.zip.CRC32
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-
-/**
- * Implements file handling utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object FileHandlingUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Gets the reference of the current file in execution. Note that this
- * method might return a value different than the main file provided in
- * the command line.
- *
- * @return A reference of the current file in execution. Might be different
- * than the main file provided in the command line.
- */
- private val currentFile: File
- get() = Arara.config[AraraSpec.Execution.file]
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- fun writeToFile(file: File, text: String, append: Boolean): Boolean {
- return try {
- // try to write the provided
- // string to the file, with
- // UTF-8 as encoding
- if (append)
- file.appendText(text, Charsets.UTF_8)
- else
- file.writeText(text, Charsets.UTF_8)
- true
- } catch (_: IOException) {
- // if something bad happens,
- // gracefully fallback to
- // reporting the failure
- false
- }
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- fun writeToFile(
- file: File,
- lines: List<String>,
- append: Boolean
- ): Boolean =
- try {
- writeToFile(file, lines.joinToString(System.lineSeparator()),
- append)
- } catch (_: IOException) {
- false
- }
-
- /**
- * Reads the provided file (UTF-8) into a list of strings.
- * @param file The file.
- * @return A list of strings.
- */
- fun readFromFile(file: File): List<String> {
- return try {
- // returns the contents of
- // the provided file as
- // a list of strings
- file.readLines(Charsets.UTF_8)
- } catch (_: IOException) {
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- listOf()
- }
- }
-
- /**
- * Checks if a file exists based on its extension.
- *
- * @param extension The extension.
- * @return A boolean value indicating if the file exists.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun exists(extension: String): Boolean {
- val file = File(getPath(extension))
- return file.exists()
- }
-
- /**
- * Gets the parent canonical path of a file.
- *
- * @param file The file.
- * @return The parent canonical path of a file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun getParentCanonicalPath(file: File): String {
- return getParentCanonicalFile(file).toString()
- }
-
- /**
- * Gets the parent canonical file of a file.
- *
- * @param file The file.
- * @return The parent canonical file of a file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun getParentCanonicalFile(file: File): File {
- return file.runCatching {
- this.canonicalFile.parentFile
- }.getOrElse {
- // it is IOException || is is SecurityException
- throw AraraException(messages.getMessage(
- Messages.ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION), it)
- }
- }
-
- /**
- * Gets the full file path based on the provided extension.
- *
- * @param extension The extension.
- * @return A string containing the full file path.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun getPath(extension: String): String {
- val name = currentFile.nameWithoutExtension + ".$extension"
- val path = getParentCanonicalFile(currentFile)
- return path.resolve(name).toString()
- }
-
- /**
- * Gets the canonical path from the provided file.
- *
- * @param file The file.
- * @return The canonical path from the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun getCanonicalPath(file: File): String {
- return getCanonicalFile(file).toString()
- }
-
- /**
- * Gets the canonical file from the provided file.
- *
- * @param file The file.
- * @return The canonical file from the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun getCanonicalFile(file: File): File {
- try {
- return file.canonicalFile
- } catch (exception: IOException) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_GETCANONICALFILE_IO_EXCEPTION
- ),
- exception
- )
- }
- }
-
- /**
- * Gets the date the provided file was last modified.
- *
- * @param file The file.
- * @return A string representation of the date the provided file was last
- * modified.
- */
- fun getLastModifiedInformation(file: File): String {
- return SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
- .format(file.lastModified())
- }
-
- /**
- * Calculates the CRC32 checksum of the provided file.
- *
- * @param file The file.
- * @return A string containing the CRC32 checksum of the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun calculateHash(file: File): String {
- try {
- return String.format("%08x", CRC32().run {
- update(file.readBytes())
- value
- })
- } catch (exception: IOException) {
- throw AraraException(messages.getMessage(Messages
- .ERROR_CALCULATEHASH_IO_EXCEPTION), exception)
- }
- }
-
- /**
- * Gets the extension of a file.
- *
- * @param file The file.
- * @return The corresponding file type.
- */
- fun getFileExtension(file: File): String = file.extension
-
- /**
- * Gets the base name of a file.
- *
- * @param file The file.
- * @return The corresponding base name.
- */
- fun getBasename(file: File): String = file.nameWithoutExtension
-
- /**
- * Checks if a file has changed since the last verification.
- *
- * @param file The file.
- * @return A boolean value indicating if the file has changed since the last
- * verification.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun hasChanged(file: File): Boolean {
- val database = DatabaseUtils.load()
- val path = getCanonicalPath(file)
- return if (!file.exists()) {
- if (database.containsKey(path)) {
- database.remove(path)
- DatabaseUtils.save(database)
- true
- } else {
- false
- }
- } else {
- val hash = calculateHash(file)
- if (database.containsKey(path)) {
- val value = database[path]
- if (hash == value) {
- false
- } else {
- database[path] = hash
- DatabaseUtils.save(database)
- true
- }
- } else {
- database[path] = hash
- DatabaseUtils.save(database)
- true
- }
- }
- }
-
- /**
- * Checks if the file has changed since the last verification based on the
- * provided extension.
- *
- * @param extension The provided extension.
- * @return A boolean value indicating if the file has changed since the last
- * verification.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun hasChanged(extension: String): Boolean =
- hasChanged(File(getPath(extension)))
-
- /**
- * Checks whether a directory is under a root directory.
- *
- * @param child Directory to be inspected.
- * @param parent Root directory.
- * @return Logical value indicating whether the directoy is under root.
- * @throws AraraException There was a problem with path retrieval.
- */
- @Throws(AraraException::class)
- fun isSubDirectory(child: File, parent: File): Boolean {
- return if (child.isDirectory && parent.isDirectory) {
- getCanonicalPath(child).startsWith(
- getParentCanonicalPath(parent) + File.separator
- )
- } else {
- throw AraraException(messages.getMessage(
- Messages.ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
- child.name))
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
deleted file mode 100644
index 5c61bdb2db3..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
+++ /dev/null
@@ -1,158 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import java.io.File
-import java.io.FileFilter
-import java.nio.file.FileSystems
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements file searching utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object FileSearchingUtils {
- /**
- * List all files from the provided directory according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- * @param directory The provided directory.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- fun listFilesByExtensions(
- directory: File,
- extensions: List<String>,
- recursive: Boolean
- ):
- List<File> = try {
- // return the result of the
- // provided search
- if (recursive)
- directory.walkTopDown().asSequence()
- .filter { !it.isDirectory }
- .filter { extensions.contains(it.extension) }
- .toList()
- else
- directory.listFiles(
- FileFilter { extensions.contains(it.extension) })!!
- .toList()
- } catch (_: Exception) {
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- listOf()
- }
-
- /**
- * List all files from the provided directory matching the list of file
- * name patterns. Such list can contain wildcards.
- * @param directory The provided directory.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- fun listFilesByPatterns(
- directory: File,
- patterns: List<String>,
- recursive: Boolean
- ):
- List<File> = try {
- // return the result of the provided
- // search, with the wildcard filter
- // and a potential recursive search
- val pathMatcher = patterns.map {
- FileSystems.getDefault().getPathMatcher("glob:$it")
- }
- if (recursive)
- directory.walkTopDown().asSequence()
- .filter { !it.isDirectory }
- .filter { file ->
- pathMatcher.any { it.matches(file.toPath().fileName) }
- }.toList()
- else
- directory.listFiles { file: File ->
- pathMatcher.any { it.matches(file.toPath().fileName) }
- }!!.toList()
- } catch (_: Exception) {
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- listOf()
- }
-
- /**
- * Discovers the file through string reference lookup and sets the
- * configuration accordingly.
- *
- * @param reference The string reference.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun discoverFile(reference: String) {
- lookupFile(reference)
- ?: throw AraraException(
- LanguageController.getMessage(
- Messages.ERROR_DISCOVERFILE_FILE_NOT_FOUND,
- reference,
- CommonUtils.fileTypesList
- )
- )
- }
-
- /**
- * Performs a file lookup based on a string reference.
- *
- * @param reference The file reference as a string.
- * @return The file as result of the lookup operation.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun lookupFile(reference: String): File? {
- val types = Arara.config[AraraSpec.Execution.fileTypes]
- val file = Arara.config[AraraSpec.Execution.workingDirectory]
- .resolve(reference).toFile()
- val name = file.name
- val parent = FileHandlingUtils.getParentCanonicalFile(file)
-
- // direct search, so we are considering
- // the reference as a complete name
- val testFile = parent.resolve(name)
- if (testFile.exists() && testFile.isFile) {
- types.firstOrNull {
- testFile.toString().endsWith("." + it.extension)
- }?.let {
- Arara.config[AraraSpec.Execution.filePattern] =
- it.pattern
- Arara.config[AraraSpec.Execution.reference] = testFile
- return testFile
- }
- }
-
- // indirect search; in this case, we are considering
- // that the file reference has an implicit extension,
- // so we need to add it and look again
- // TODO: disable this step in safe mode
- return types.map { parent.resolve("$name.${it.extension}") to it }
- .union(types.map {
- parent.resolve("${name.removeSuffix(".").trim()}.${it.extension}") to it
- })
- .firstOrNull { it.first.exists() && it.first.isFile }
- ?.let {
- Arara.config[AraraSpec.Execution.filePattern] =
- it.second.pattern
- Arara.config[AraraSpec.Execution.reference] = it.first
- file
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Language.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
deleted file mode 100644
index 2afa77c41ed..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import java.util.Locale
-import org.islandoftex.arara.model.AraraException
-
-/**
- * Implements the language model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class Language(code: String) {
- // the language code, based on
- // ISO 639-1 and language variants
- private val code: String
-
- /**
- * Gets the language name.
- *
- * @return A string representing the language name.
- */
- val name: String
- get() = languages.getValue(code).first
-
- /**
- * Gets the language locale.
- *
- * @return The language locale.
- */
- val locale: Locale
- get() = languages.getValue(code).second
-
- // throws an exception on invalid language
- init {
- if (languages.containsKey(code)) {
- this.code = code
- } else {
- throw AraraException(
- LanguageController.getMessage(
- Messages.ERROR_LANGUAGE_INVALID_CODE,
- languagesList
- )
- )
- }
- }
-
- companion object {
- // map containing all languages
- // supported by arara
- private val languages = mapOf(
- "en" to Pair("English", Locale("en")),
- "de" to Pair("German", Locale("de")),
- "nl" to Pair("Dutch", Locale("nl")),
- "qn" to Pair("Broad Norfolk", Locale("en", "QN")),
- "ptbr" to Pair("Brazilian Portuguese", Locale("pt", "BR")),
- "it" to Pair("Italian", Locale("it"))
- )
-
- /**
- * String representing the list of available languages
- * because they don't change initialized with the string
- */
- val languagesList: String = "(" + languages.map { (key, value) ->
- value.first + ": " + key
- }.joinToString(", ") + ")"
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
deleted file mode 100644
index e000ab4d63b..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import ch.qos.cal10n.IMessageConveyor
-import ch.qos.cal10n.MessageConveyor
-import java.util.Locale
-import org.islandoftex.arara.configuration.AraraSpec
-
-/**
- * Implements the language controller. This controller provides a singleton
- * object that holds the application messages, easily available to all model
- * and utilitary classes.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object LanguageController {
- // the message conveyor helps us to get localized messages
- // according to the provided locale
- // The fallback language is set to English for all
- // messages in arara.
- private var conveyor: IMessageConveyor = MessageConveyor(Locale(
- AraraSpec.Application.defaultLanguageCode.default))
-
- /**
- * Sets the current locale. This method actually resets the language
- * conveyor in order to use the new locale. It's quite simple.
- * @param locale The new locale for localized messages through the language
- * conveyor.
- */
- fun setLocale(locale: Locale) {
- conveyor = MessageConveyor(locale)
- }
-
- /**
- * Gets the localized message indexed by the provided enumeration key,
- * applying an array of objects as parameters. This method is a wrapper to
- * the conveyor's method of the same name.
- * @param E Enumeration type that represents the conveyor messages.
- * @param key Key set in the provided enumeration type.
- * @param parameters Array of objects to be used as parameters.
- * @return A string containing a localized message indexed by the provided
- * enumeration key and applied the array of objects as parameters.
- */
- @Suppress("SpreadOperator")
- fun <E : Enum<*>> getMessage(key: E, vararg parameters: Any): String =
- conveyor.getMessage(key, *parameters)
-
- /**
- * Gets the localized message indexed by the provided enumeration key. This
- * method is a wrapper to the conveyor's method of the same name.
- * @param E Enumeration type that represents the conveyor messages.
- * @param key Key set in the provided enumeration type.
- * @return A string containing a localized message indexed by the provided
- * enumeration key.
- */
- fun <E : Enum<*>> getMessage(key: E): String = conveyor.getMessage(key)
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
deleted file mode 100644
index 75d957e1dfa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import ch.qos.cal10n.BaseName
-import ch.qos.cal10n.Locale
-import ch.qos.cal10n.LocaleData
-
-/**
- * This enumeration contains all application messages.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@BaseName("org.islandoftex.arara.localization.messages")
-@LocaleData(Locale(value = "de", charset = "UTF-8"),
- Locale(value = "en", charset = "UTF-8"),
- Locale(value = "en_QN", charset = "UTF-8"),
- Locale(value = "it", charset = "UTF-8"),
- Locale(value = "nl", charset = "UTF-8"),
- Locale(value = "pt_BR", charset = "UTF-8"))
-enum class Messages {
- ERROR_BASENAME_NOT_A_FILE,
- ERROR_CALCULATEHASH_IO_EXCEPTION,
- ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
- ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
- ERROR_CHECKREGEX_IO_EXCEPTION,
- ERROR_CONFIGURATION_GENERIC_ERROR,
- ERROR_CONFIGURATION_LOOPS_INVALID_RANGE,
- ERROR_DISCOVERFILE_FILE_NOT_FOUND,
- ERROR_EVALUATE_COMPILATION_FAILED,
- ERROR_EVALUATE_NOT_BOOLEAN_VALUE,
- ERROR_EXTRACTOR_IO_ERROR,
- ERROR_FILETYPE_NOT_A_FILE,
- ERROR_FILETYPE_UNKNOWN_EXTENSION,
- ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION,
- ERROR_GETCANONICALFILE_IO_EXCEPTION,
- ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION,
- ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
- ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR,
- ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR,
- ERROR_INTERPRETER_EXIT_RUNTIME_ERROR,
- ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION,
- ERROR_INTERPRETER_RULE_NOT_FOUND,
- ERROR_INTERPRETER_UNKNOWN_KEYS,
- ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN,
- ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
- ERROR_LANGUAGE_INVALID_CODE,
- ERROR_LOAD_COULD_NOT_LOAD_XML,
- ERROR_PARSER_INVALID_PREAMBLE,
- ERROR_PARSERULE_GENERIC_ERROR,
- ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION,
- ERROR_RULE_IDENTIFIER_AND_PATH,
- ERROR_RUN_GENERIC_EXCEPTION,
- ERROR_RUN_INTERRUPTED_EXCEPTION,
- ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION,
- ERROR_RUN_IO_EXCEPTION,
- ERROR_RUN_TIMEOUT_EXCEPTION,
- ERROR_RUN_TIMEOUT_INVALID_RANGE,
- ERROR_SAVE_COULD_NOT_SAVE_XML,
- ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
- ERROR_SESSION_REMOVE_UNKNOWN_KEY,
- ERROR_VALIDATE_EMPTY_FILES_LIST,
- ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
- ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
- ERROR_VALIDATE_NO_DIRECTIVES_FOUND,
- ERROR_VALIDATE_ORPHAN_LINEBREAK,
- ERROR_VALIDATE_REFERENCE_IS_RESERVED,
- ERROR_VALIDATE_YAML_EXCEPTION,
- ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
- ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS,
- ERROR_VALIDATEBODY_MISSING_KEYS,
- ERROR_VALIDATEBODY_NULL_ARGUMENT_ID,
- ERROR_VALIDATEBODY_NULL_COMMAND,
- ERROR_VALIDATEHEADER_NULL_ID,
- ERROR_VALIDATEHEADER_NULL_NAME,
- ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
- INFO_DISPLAY_EXCEPTION_MORE_DETAILS,
- INFO_DISPLAY_EXECUTION_TIME,
- INFO_DISPLAY_FILE_INFORMATION,
- INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
- INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
- INFO_LABEL_AUTHOR,
- INFO_LABEL_AUTHORS,
- INFO_LABEL_CONDITIONAL,
- INFO_LABEL_NO_AUTHORS,
- INFO_LABEL_ON_DETAILS,
- INFO_LABEL_ON_ERROR,
- INFO_LABEL_ON_FAILURE,
- INFO_LABEL_ON_SUCCESS,
- INFO_LABEL_UNNAMED_TASK,
- INFO_PARSER_NOTES,
- LOG_INFO_BEGIN_BUFFER,
- LOG_INFO_BOOLEAN_MODE,
- LOG_INFO_DIRECTIVES_BLOCK,
- LOG_INFO_END_BUFFER,
- LOG_INFO_INTERPRET_RULE,
- LOG_INFO_INTERPRET_TASK,
- LOG_INFO_POTENTIAL_DIRECTIVE_FOUND,
- LOG_INFO_POTENTIAL_PATTERN_FOUND,
- LOG_INFO_RULE_LOCATION,
- LOG_INFO_SYSTEM_COMMAND,
- LOG_INFO_TASK_RESULT,
- LOG_INFO_VALIDATED_DIRECTIVES,
- LOG_INFO_WELCOME_MESSAGE
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
deleted file mode 100644
index 6bf2d1e6172..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-/**
- * Implements the specific exception model for arara.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class AraraException : Exception {
- /**
- * The underlying exception, used to hold more details
- * on what really happened
- */
- val exception: Exception?
-
- /**
- * Constructor. Takes the exception message.
- * @param message The exception message.
- */
- constructor(message: String) : super(message) {
- this.exception = null
- }
-
- /**
- * Constructor. Takes the exception message and the underlying exception.
- * @param message The exception message.
- * @param exception The underlying exception object.
- */
- constructor(message: String, exception: Exception) : super(message) {
- this.exception = exception
- }
-
- /**
- * Constructor. Takes the exception message and the underlying exception.
- * @param message The exception message.
- * @param throwable The underlying exception as generic throwable.
- */
- constructor(message: String, throwable: Throwable) : super(message) {
- this.exception = RuntimeException(throwable)
- }
-
- /**
- * Checks if there is an underlying exception defined in the current object.
- * @return A boolean value indicating if the current object has an
- * underlying exception.
- */
- fun hasException(): Boolean = exception?.message != null
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
deleted file mode 100644
index 78b98e709ac..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
+++ /dev/null
@@ -1,122 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.ruleset.Conditional
-import org.islandoftex.arara.utils.Methods
-import org.mvel2.templates.TemplateRuntime
-
-/**
- * Implements the evaluator model, on which a conditional can be analyzed and
- * processed.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class Evaluator {
- // this attribute holds the maximum number of
- // loops arara will accept; it's like
- // reaching infinity
- private val loops: Int = Arara.config[AraraSpec.Execution.maxLoops]
-
- // the counter for the current execution, it
- // helps us keep track of the number of times
- // this evaluation has happened, and also to
- // prevent potential infinite loops
- private var counter: Int = 0
-
- // a flag that indicates the
- // evaluation to halt regardless
- // of the the result
- private var halt: Boolean = false
-
- /**
- * Check if a condition is of type if or unless and whether halt
- * is set.
- * @param type The type to check.
- * @param haltCheck The value [halt] should have.
- * @return `(type == if || type == unless) && haltCheck`
- */
- private fun isIfUnlessAndHalt(
- type: Conditional.ConditionalType,
- haltCheck: Boolean = true
- ): Boolean =
- (type == Conditional.ConditionalType.IF ||
- type == Conditional.ConditionalType.UNLESS) &&
- halt == haltCheck
-
- /**
- * Only run the evaluation of the conditional including a check whether
- * the result needs to be inverted.
- * @param conditional The conditional.
- * @return The result of the evaluation.
- */
- @Throws(AraraException::class, RuntimeException::class)
- private fun evaluateCondition(conditional: Conditional): Boolean {
- val result = TemplateRuntime.eval("@{ " + conditional.condition + " }",
- Methods.getConditionalMethods())
- return if (result is Boolean) {
- if (conditional.type == Conditional.ConditionalType.UNLESS ||
- conditional.type == Conditional.ConditionalType.UNTIL)
- !result
- else
- result
- } else {
- throw AraraException(messages.getMessage(
- Messages.ERROR_EVALUATE_NOT_BOOLEAN_VALUE))
- }
- }
-
- /**
- * Evaluate the provided conditional.
- *
- * @param conditional The conditional object.
- * @return A boolean value indicating if the conditional holds.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- @Suppress("TooGenericExceptionCaught")
- fun evaluate(conditional: Conditional): Boolean {
- // when in dry-run mode or not evaluating a
- // conditional, arara always ignores conditional
- // evaluations
- if (conditional.type == Conditional.ConditionalType.NONE ||
- Arara.config[AraraSpec.Execution.dryrun] ||
- isIfUnlessAndHalt(conditional.type, true))
- return false
- else if (isIfUnlessAndHalt(conditional.type, false)) {
- halt = true
- }
-
- // check counters and see if the execution
- // has reached our concept of infinity,
- // thus breaking the cycles
- counter++
- return when {
- conditional.type === Conditional.ConditionalType.WHILE
- && counter > loops -> false
- conditional.type === Conditional.ConditionalType.UNTIL
- && counter >= loops -> false
- else -> {
- try {
- evaluateCondition(conditional)
- } catch (exception: RuntimeException) {
- throw AraraException(messages.getMessage(Messages
- .ERROR_EVALUATE_COMPILATION_FAILED),
- exception)
- }
- }
- }
- }
-
- companion object {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
deleted file mode 100644
index ed4d811d229..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import java.io.File
-import java.io.IOException
-import java.nio.charset.Charset
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.ruleset.Directive
-import org.islandoftex.arara.ruleset.DirectiveUtils
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Extractor for directives from the provided main file.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object Extractor {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Extracts a list of directives from the provided main file, obtained from
- * the configuration controller.
- * @param file The file to extract the directives from.
- * @param charset The charset of the file.
- * @return A list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun extract(file: File, charset: Charset = Charsets.UTF_8):
- List<Directive> {
- try {
- val content = CommonUtils.preambleContent.toMutableList()
- content.addAll(file.readLines(charset))
- return DirectiveUtils.extractDirectives(content)
- } catch (ioexception: IOException) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_EXTRACTOR_IO_ERROR
- ),
- ioexception
- )
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/FileType.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
deleted file mode 100644
index e6ed27d51af..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
+++ /dev/null
@@ -1,110 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import java.util.regex.PatternSyntaxException
-import kotlinx.serialization.Serializable
-import org.islandoftex.arara.configuration.ConfigurationUtils
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements the file type model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-class FileType {
- // string representing the
- // file extension
- var extension: String = INVALID_EXTENSION
- get() = CommonUtils.removeKeywordNotNull(field)
- private set
- // string representing the
- // file pattern to be used
- // as directive lookup
- var pattern: String = INVALID_PATTERN
- @Throws(AraraException::class)
- get() {
- CommonUtils.removeKeywordNotNull(field)
- if (field == INVALID_PATTERN) {
- field = ConfigurationUtils.defaultFileTypePatterns[extension]
- ?: throw AraraException(
- LanguageController.getMessage(
- Messages.ERROR_FILETYPE_UNKNOWN_EXTENSION,
- extension,
- CommonUtils.fileTypesList
- )
- )
- }
- return field
- }
- private set
-
- constructor(extension: String, pattern: String) {
- this.extension = extension
- this.pattern = pattern
-
- try {
- pattern.toPattern()
- } catch (e: PatternSyntaxException) {
- if (!ConfigurationUtils.defaultFileTypePatterns.containsKey(extension))
- throw AraraException(
- LanguageController.getMessage(
- Messages.ERROR_FILETYPE_UNKNOWN_EXTENSION,
- extension,
- CommonUtils.fileTypesList
- )
- )
- }
- }
-
- companion object {
- /**
- * This constant identifies an invalid extension. As unices do not
- * allow a forward and Windows does not allow a backward slash, this
- * should suffice.
- */
- const val INVALID_EXTENSION = "/\\"
- /**
- * This constant identifies an invalid pattern. This is a opening
- * character class which is invalid.
- */
- const val INVALID_PATTERN = "["
- }
-
- /**
- * Provides a textual representation of the current file type object.
- * @return A string containing a textual representation of the current file
- * type object.
- */
- override fun toString(): String {
- return ".$extension"
- }
-
- /**
- * Implements the file type equals method, checking if one file type is
- * equal to another. Note that only the file extension is considered.
- * @param other The object to be analyzed.
- * @return A boolean value indicating if those two objects are equal.
- */
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as FileType
- if (extension != other.extension) return false
- return true
- }
-
- /**
- * Implements the file type hash code. Note that only the file extension is
- * considered.
- * @return An integer representing the file type hash code.
- */
- override fun hashCode(): Int {
- return extension.hashCode()
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
deleted file mode 100644
index 49cf40f1a2f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
+++ /dev/null
@@ -1,375 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import java.io.File
-import kotlin.time.ExperimentalTime
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.ruleset.Argument
-import org.islandoftex.arara.ruleset.Command
-import org.islandoftex.arara.ruleset.Conditional
-import org.islandoftex.arara.ruleset.Directive
-import org.islandoftex.arara.ruleset.Rule
-import org.islandoftex.arara.ruleset.RuleCommand
-import org.islandoftex.arara.ruleset.RuleUtils
-import org.islandoftex.arara.utils.CommonUtils
-import org.islandoftex.arara.utils.DisplayUtils
-import org.islandoftex.arara.utils.InterpreterUtils
-import org.islandoftex.arara.utils.Methods
-import org.mvel2.templates.TemplateRuntime
-import org.slf4j.LoggerFactory
-
-/**
- * Interprets the list of directives.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class Interpreter(
- /**
- * The list of directives to be interpreted and evaluated.
- */
- val directives: List<Directive>
-) {
- /**
- * Exception class to represent that the interpreter should stop for some
- * reason
- */
- private class HaltExpectedException(msg: String) : Exception(msg)
-
- /**
- * Gets the rule according to the provided directive.
- *
- * @param directive The provided directive.
- * @return The absolute canonical path of the rule, given the provided
- * directive.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun getRule(directive: Directive): File {
- return InterpreterUtils.buildRulePath(directive.identifier)
- ?: throw AraraException(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_RULE_NOT_FOUND,
- directive.identifier,
- "(" + CommonUtils.allRulePaths
- .joinToString("; ") + ")"
- )
- )
- }
-
- // TODO: in the following, extract the printing into the higher level
- // function
- /**
- * "Run" a boolean return value
- * @param value The boolean.
- * @param conditional The conditional to print in dry-run mode.
- * @param authors The authors of the rule.
- * @return Returns [value]
- */
- private fun runBoolean(
- value: Boolean,
- conditional: Conditional,
- authors: List<String>
- ): Boolean {
- logger.info(messages.getMessage(Messages.LOG_INFO_BOOLEAN_MODE,
- value.toString()))
-
- if (Arara.config[AraraSpec.Execution.dryrun]) {
- DisplayUtils.printAuthors(authors)
- DisplayUtils.wrapText(messages.getMessage(Messages
- .INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
- value))
- DisplayUtils.printConditional(conditional)
- }
-
- return value
- }
-
- /**
- * Run a command
- * @param command The command to run.
- * @param conditional The conditional applied to the run (only for printing).
- * @param authors The rule authors (only for printing).
- * @param ruleCommandExitValue The exit value of the rule command.
- * @return Success of the execution.
- * @throws AraraException Execution failed.
- */
- @ExperimentalTime
- @Throws(AraraException::class)
- @Suppress("TooGenericExceptionCaught")
- private fun runCommand(
- command: Command,
- conditional: Conditional,
- authors: List<String>,
- ruleCommandExitValue: String?
- ): Boolean {
- logger.info(messages.getMessage(Messages.LOG_INFO_SYSTEM_COMMAND,
- command))
- var success = true
-
- if (!Arara.config[AraraSpec.Execution.dryrun]) {
- val code = InterpreterUtils.run(command)
- val check: Any = try {
- val context = mapOf<String, Any>("value" to code)
- TemplateRuntime.eval(
- "@{ " + (ruleCommandExitValue ?: "value == 0") + " }",
- context)
- } catch (exception: RuntimeException) {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(Messages
- .ERROR_INTERPRETER_EXIT_RUNTIME_ERROR),
- exception)
- }
-
- success = if (check is Boolean) {
- check
- } else {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN
- )
- )
- }
- } else {
- DisplayUtils.printAuthors(authors)
- DisplayUtils.wrapText(messages.getMessage(
- Messages.INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
- command))
- DisplayUtils.printConditional(conditional)
- }
-
- return success
- }
-
- /**
- * Converts the command evaluation result to a flat list.
- * @param result The result
- * @return A flat list.
- */
- private fun resultToList(result: Any) = if (result is List<*>) {
- CommonUtils.flatten(result)
- } else {
- listOf(result)
- }
-
- /**
- * Execute a command.
- * @param command The command to evaluate.
- * @param conditional Under which condition to execute.
- * @param rule The rule (only passed for output purposes).
- * @param parameters The parameters for evaluation
- * @throws AraraException Running the command failed.
- */
- @ExperimentalTime
- @Throws(AraraException::class)
- @Suppress("TooGenericExceptionCaught", "ThrowsCount")
- private fun executeCommand(
- command: RuleCommand,
- conditional: Conditional,
- rule: Rule,
- parameters: Map<String, Any>
- ) {
- val result: Any = try {
- TemplateRuntime.eval(command.command!!, parameters)
- } catch (exception: RuntimeException) {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(Messages
- .ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR),
- exception)
- }
-
- // TODO: check nullability
- resultToList(result).filter { it.toString().isNotBlank() }
- .forEach { current ->
- DisplayUtils.printEntry(rule.name, command.name
- ?: messages.getMessage(Messages
- .INFO_LABEL_UNNAMED_TASK))
-
- val success = when (current) {
- is Boolean -> runBoolean(current, conditional,
- rule.authors)
- is Command -> runCommand(current, conditional,
- rule.authors, command.exit)
- else -> TODO("error: this should not happen" +
- "we are only supporting boolean + command")
- }
-
- DisplayUtils.printEntryResult(success)
-
- if (Arara.config[AraraSpec.Execution.haltOnErrors] && !success)
- // TODO: localize
- throw HaltExpectedException("Command failed")
-
- // TODO: document this key
- val haltKey = "arara:${Arara.config[AraraSpec
- .Execution.reference].name}:halt"
- if (Session.contains(haltKey)) {
- Arara.config[AraraSpec.Execution.status] =
- Session[haltKey].toString().toInt()
- // TODO: localize
- throw HaltExpectedException("User requested halt")
- }
- }
- }
-
- /**
- * Executes each directive, throwing an exception if something bad has
- * happened.
- *
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @ExperimentalTime
- @Throws(AraraException::class)
- @Suppress("NestedBlockDepth")
- fun execute() {
- for (directive in directives) {
- logger.info(messages.getMessage(Messages.LOG_INFO_INTERPRET_RULE,
- directive.identifier))
-
- Arara.config[AraraSpec.Execution.file] =
- directive.parameters.getValue("reference") as File
- val file = getRule(directive)
-
- logger.info(messages.getMessage(Messages.LOG_INFO_RULE_LOCATION,
- file.parent))
-
- Arara.config[AraraSpec.Execution.InfoSpec.ruleId] =
- directive.identifier
- Arara.config[AraraSpec.Execution.InfoSpec.rulePath] =
- file.parent
- Arara.config[AraraSpec.Execution.DirectiveSpec.lines] =
- directive.lineNumbers
-
- // parse the rule identified by the directive
- // (may throw an exception)
- val rule = RuleUtils.parseRule(file, directive.identifier)
- val parameters = parseArguments(rule, directive)
- .plus(Methods.getRuleMethods())
-
- val evaluator = Evaluator()
-
- var available = true
- if (InterpreterUtils.runPriorEvaluation(directive.conditional)) {
- available = evaluator.evaluate(directive.conditional)
- }
-
- // if this directive is conditionally disabled, skip
- if (!available) continue
- // if not execute the commands associated with the directive
- do {
- rule.commands.forEach { command ->
- try {
- executeCommand(command, directive.conditional, rule, parameters)
- } catch (_: HaltExpectedException) {
- // if the user uses the halt rule to trigger
- // a halt, this will be raised
- return
- }
- }
- } while (evaluator.evaluate(directive.conditional))
- }
- }
-
- /**
- * Parses the rule arguments against the provided directive.
- *
- * @param rule The rule object.
- * @param directive The directive.
- * @return A map containing all arguments resolved according to the
- * directive parameters.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun parseArguments(rule: Rule, directive: Directive):
- Map<String, Any> {
- val arguments = rule.arguments
- val unknown = CommonUtils.getUnknownKeys(directive.parameters,
- arguments).minus("reference")
- if (unknown.isNotEmpty())
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(
- Messages.ERROR_INTERPRETER_UNKNOWN_KEYS,
- "(" + unknown.joinToString(", ") + ")"))
-
- val resolvedArguments = mutableMapOf<String, Any>()
- resolvedArguments["reference"] = directive.parameters
- .getValue("reference")
-
- val context = mapOf(
- "parameters" to directive.parameters,
- "reference" to directive.parameters.getValue("reference")
- ).plus(Methods.getRuleMethods())
-
- arguments.forEach { argument ->
- resolvedArguments[argument.identifier!!] = processArgument(argument,
- directive.parameters.containsKey(argument.identifier!!),
- context)
- }
-
- return resolvedArguments
- }
-
- /**
- * Process a single argument and return the evaluated result.
- * @param argument The argument to process.
- * @param idInDirectiveParams Whether the argument's identifier is
- * contained in the directive's parameters field.
- * @param context The context for the evaluation.
- * @return The result of the evaluation.
- * @throws AraraException The argument could not be processed.
- */
- @Throws(AraraException::class)
- @Suppress("TooGenericExceptionCaught", "ThrowsCount")
- private fun processArgument(
- argument: Argument,
- idInDirectiveParams: Boolean,
- context: Map<String, Any>
- ): Any {
- if (argument.isRequired && !idInDirectiveParams)
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(
- Messages.ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
- argument.identifier!!))
-
- var ret = argument.default?.let {
- try {
- TemplateRuntime.eval(it, context)
- } catch (exception: RuntimeException) {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(Messages
- .ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR),
- exception)
- }
- } ?: ""
-
- if (argument.flag != null && idInDirectiveParams) {
- ret = try {
- TemplateRuntime.eval(argument.flag!!, context)
- } catch (exception: RuntimeException) {
- throw AraraException(CommonUtils.ruleErrorHeader + messages
- .getMessage(Messages
- .ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION),
- exception)
- }
- }
-
- return ret
- }
-
- companion object {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- // the class logger obtained from
- // the logger factory
- private val logger = LoggerFactory.getLogger(Interpreter::class.java)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Session.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Session.kt
deleted file mode 100644
index c2093429e18..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/model/Session.kt
+++ /dev/null
@@ -1,119 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-
-/**
- * Implements the session.
- *
- * This class wraps a map that holds the execution session, that is, a dirty
- * maneuver to exchange pretty much any data between commands and even rules.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object Session {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- // the session map which holds the execution session;
- // the idea here is to provide wrappers to the map
- // methods, so it could be easily manipulated
- private val map = mutableMapOf<String, Any>()
-
- /**
- * Gets the object indexed by the provided key from the session. This method
- * holds the map method of the very same name.
- *
- * @param key The provided key.
- * @return The object indexed by the provided key.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- operator fun get(key: String): Any {
- return if (contains(key)) {
- map.getValue(key)
- } else {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
- key
- )
- )
- }
- }
-
- /**
- * Inserts (or overwrites) the object indexed by the provided key into the
- * session. This method holds the map method of the very same name.
- *
- * @param key The provided key.
- * @param value The value to be inserted.
- */
- fun put(key: String, value: Any) {
- map[key] = value
- }
-
- /**
- * Removes the entry indexed by the provided key from the session. This method
- * holds the map method of the same name.
- *
- * @param key The provided key.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun remove(key: String) {
- if (contains(key)) {
- map.remove(key)
- } else {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_SESSION_REMOVE_UNKNOWN_KEY,
- key
- )
- )
- }
- }
-
- /**
- * Checks if the provided key exists in the session.
- *
- * @param key The provided key.
- * @return A boolean value indicating if the provided key exists in the
- * session.
- */
- operator fun contains(key: String): Boolean = map.containsKey(key)
-
- /**
- * Clears the session (map). This method, as usual, holds the map method of
- * the same name.
- */
- fun clear() = map.clear()
-
- /**
- * Update the environment variables stored in the session.
- *
- * @param additionFilter Which environment variables to include. You can
- * filter their names (the string parameter) but not their values. By
- * default all values will be added.
- * @param removalFilter Which environment variables to remove beforehand.
- * By default all values will be removed.
- */
- fun updateEnvironmentVariables(
- additionFilter: (String) -> Boolean = { true },
- removalFilter: (String) -> Boolean = { true }
- ) {
- // remove all current environment variables to clean up the session
- map.filterKeys { it.startsWith("environment:") }
- .filterKeys(removalFilter)
- .forEach { remove(it.key) }
- // add all relevant new environment variables
- System.getenv().filterKeys(additionFilter)
- .forEach { map["environment:${it.key}"] = it.value }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
deleted file mode 100644
index dfd2b99403b..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * The rule argument model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-class Argument {
- /**
- * The argument identifier
- */
- var identifier: String? = null
- get() = CommonUtils.removeKeyword(field)
-
- /**
- * Boolean indicating if the current argument is required
- */
- @SerialName("required")
- var isRequired: Boolean = false
-
- /**
- * Flag to hold the argument value manipulation
- */
- var flag: String? = null
- get() = CommonUtils.removeKeyword(field)
-
- /**
- * The argument fallback if it is not defined in the directive
- */
- var default: String? = null
- get() = CommonUtils.removeKeyword(field)
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
deleted file mode 100644
index df1ce802f5a..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import java.io.File
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements a command model, containing a list of strings.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class Command {
- /**
- * A list of elements which are components
- * of a command and represented as strings
- */
- val elements: List<String>
-
- /**
- * An optional file acting as a reference for
- * the default working directory
- */
- var workingDirectory: File = Arara.config[AraraSpec.Execution
- .workingDirectory].toFile()
-
- /**
- * Constructor.
- * @param values An array of objects.
- */
- constructor(vararg values: Any) {
- elements = mutableListOf()
- val result = CommonUtils.flatten(values.toList())
- result.map { it.toString() }.filter { it.isNotEmpty() }
- .forEach { elements.add(it) }
- }
-
- /**
- * Constructor.
- * @param elements A list of strings.
- */
- constructor(elements: List<String>) {
- this.elements = elements
- }
-
- /**
- * Provides a textual representation of the current command.
- * @return A string representing the current command.
- */
- override fun toString(): String {
- return "[ " + elements.joinToString(", ") + " ]" +
- " @ $workingDirectory"
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
deleted file mode 100644
index 8a4ec6cb35c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-/**
- * The conditional class, it represents the type of conditional available
- * for a directive and its corresponding expression to be evaluated.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-data class Conditional(
- /**
- * The type of the condition indicates the meaning when evaluated.
- * Defaults to [ConditionalType.NONE].
- */
- val type: ConditionalType = ConditionalType.NONE,
- /**
- * The expression to be evaluated according to its type. Defaults
- * to no evaluation (empty string).
- */
- val condition: String = ""
-) {
- /**
- * The types of conditionals arara is able to recognize.
- */
- enum class ConditionalType {
- /**
- * Evaluated beforehand, directive is interpreted if and only if the
- * result is true.
- */
- IF,
- /**
- * There is no evaluation, directive is interpreted, no extra effort is
- * needed.
- */
- NONE,
- /**
- * Evaluated beforehand, directive is interpreted if and only if the
- * result is false.
- */
- UNLESS,
- /**
- * Directive is interpreted the first time, then the evaluation is
- * done; while the result is false, the directive is interpreted again
- * and again.
- */
- UNTIL,
- /**
- * Evaluated beforehand, directive is interpreted if and only if the
- * result is true, and the process is repeated while the result still
- * holds true.
- */
- WHILE
- }
-
- /**
- * Provides a textual representation of the conditional object.
- * @return A string representation of this object.
- */
- override fun toString(): String {
- return "{ $type" +
- if (type != ConditionalType.NONE)
- ", expression: ${condition.trim()}"
- else "" + " }"
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
deleted file mode 100644
index 33f84317445..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-/**
- * Implements the directive model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-data class Directive(
- /**
- * The directive identifier, it is resolved to the rule identifier
- * later on.
- */
- val identifier: String,
- /**
- * A map containing the parameters; they are validated later on in
- * order to ensure they are valid.
- */
- val parameters: Map<String, Any>,
- /**
- * A conditional containing the type and the expression to be evaluated
- * later on.
- */
- val conditional: Conditional,
- /**
- * A list contained all line numbers from the main file which built the
- * current directive.
- */
- val lineNumbers: List<Int>
-)
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
deleted file mode 100644
index a431df6ae29..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-/**
- * Implements a directive assembler in order to help build a directive from a
- * list of strings.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class DirectiveAssembler {
- // this variable holds a list of
- // line numbers indicating which
- // lines composed the resulting
- // potential directive
- private val lineNumbers = mutableListOf<Int>()
-
- // this variable holds the textual
- // representation of the directive
- private var text: String = ""
-
- /**
- * Checks if an append operation is allowed.
- * @return A boolean value indicating if an append operation is allowed.
- */
- val isAppendAllowed: Boolean
- get() = lineNumbers.isNotEmpty()
-
- /**
- * Adds a line number to the assembler.
- * @param line An integer representing the line number.
- */
- fun addLineNumber(line: Int) = lineNumbers.add(line)
-
- /**
- * Appends the provided line to the assembler text.
- * @param line The provided line.
- */
- fun appendLine(line: String) {
- text = text + " " + line.trim()
- }
-
- /**
- * Gets the list of line numbers.
- * @return The list of line numbers.
- */
- fun getLineNumbers(): List<Int> = lineNumbers
-
- /**
- * Gets the text.
- * @return The assembler text, properly trimmed.
- */
- fun getText(): String = text.trim()
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
deleted file mode 100644
index e901e25fcfb..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
+++ /dev/null
@@ -1,312 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
-import com.fasterxml.jackson.module.kotlin.readValue
-import com.fasterxml.jackson.module.kotlin.registerKotlinModule
-import java.io.File
-import java.util.regex.Pattern
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.filehandling.FileHandlingUtils
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.utils.DisplayUtils
-import org.slf4j.LoggerFactory
-
-/**
- * Implements directive utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@UseExperimental(kotlinx.serialization.ImplicitReflectionSerializer::class)
-object DirectiveUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- // get the logger context from a factory
- private val logger = LoggerFactory.getLogger(DirectiveUtils::class.java)
-
- /**
- * This function filters the lines of a file to identify the potential
- * directives.
- *
- * @param lines The lines of the file.
- * @return A map containing the line number and the line's content.
- */
- private fun getPotentialDirectiveLines(lines: List<String>):
- Map<Int, String> {
- val header = Arara.config[AraraSpec.Execution.onlyHeader]
- val validLineRegex = Arara.config[AraraSpec.Execution.filePattern]
- val validLinePattern = validLineRegex.toPattern()
- val validLineStartPattern = (validLineRegex + Arara.config[AraraSpec
- .Application.namePattern]).toPattern()
- val map = mutableMapOf<Int, String>()
- for ((i, text) in lines.withIndex()) {
- val validLineMatcher = validLineStartPattern.matcher(text)
- if (validLineMatcher.find()) {
- val line = text.substring(validLineMatcher.end())
- map[i + 1] = line
-
- logger.info(messages.getMessage(
- Messages.LOG_INFO_POTENTIAL_PATTERN_FOUND,
- i + 1, line.trim()))
- } else if (header && !checkLinePattern(validLinePattern, text)) {
- // if we should only look within the file's header and reached
- // a point where the line pattern does not match anymore, we
- // assume we have left the header and break
- break
- }
- }
- return map
- }
-
- /**
- * Extracts a list of directives from a list of strings.
- *
- * @param lines List of strings.
- * @return A list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- @Suppress("MagicNumber")
- fun extractDirectives(lines: List<String>): List<Directive> {
- val pairs = getPotentialDirectiveLines(lines)
- .takeIf { it.isNotEmpty() }
- ?: throw AraraException(messages.getMessage(
- Messages.ERROR_VALIDATE_NO_DIRECTIVES_FOUND))
-
- val assemblers = mutableListOf<DirectiveAssembler>()
- var assembler = DirectiveAssembler()
- val linebreakPattern = Arara.config[AraraSpec.Directive
- .linebreakPattern].toPattern()
- for ((lineno, content) in pairs) {
- val linebreakMatcher = linebreakPattern.matcher(content)
- if (linebreakMatcher.find()) {
- if (!assembler.isAppendAllowed) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_ORPHAN_LINEBREAK,
- lineno
- )
- )
- } else {
- assembler.addLineNumber(lineno)
- assembler.appendLine(linebreakMatcher.group(1))
- }
- } else {
- if (assembler.isAppendAllowed) {
- assemblers.add(assembler)
- }
- assembler = DirectiveAssembler()
- assembler.addLineNumber(lineno)
- assembler.appendLine(content)
- }
- }
- if (assembler.isAppendAllowed) {
- assemblers.add(assembler)
- }
-
- return assemblers.map { generateDirective(it) }
- }
-
- /**
- * Generates a directive from a directive assembler.
- *
- * @param assembler The directive assembler.
- * @return The corresponding directive.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- @Suppress("MagicNumber")
- fun generateDirective(assembler: DirectiveAssembler): Directive {
- val matcher = Arara.config[AraraSpec.Directive.directivePattern]
- .toPattern().matcher(assembler.getText())
- if (matcher.find()) {
- val directive = Directive(
- identifier = matcher.group(1)!!,
- parameters = getParameters(matcher.group(3),
- assembler.getLineNumbers()),
- conditional = Conditional(
- type = getType(matcher.group(5)),
- condition = matcher.group(6) ?: ""
- ),
- lineNumbers = assembler.getLineNumbers()
- )
-
- logger.info(messages.getMessage(
- Messages.LOG_INFO_POTENTIAL_DIRECTIVE_FOUND, directive))
-
- return directive
- } else {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
- "(" + assembler.getLineNumbers()
- .joinToString(", ") + ")"
- )
- )
- }
- }
-
- /**
- * Gets the conditional type based on the input string.
- *
- * @param text The input string.
- * @return The conditional type.
- */
- private fun getType(text: String?): Conditional.ConditionalType {
- return when (text) {
- null -> Conditional.ConditionalType.NONE
- "if" -> Conditional.ConditionalType.IF
- "while" -> Conditional.ConditionalType.WHILE
- "until" -> Conditional.ConditionalType.UNTIL
- else -> Conditional.ConditionalType.UNLESS
- }
- }
-
- /**
- * Gets the parameters from the input string.
- *
- * @param text The input string.
- * @param numbers The list of line numbers.
- * @return A map containing the directive parameters.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- private fun getParameters(
- text: String?,
- numbers: List<Int>
- ): Map<String, Any> {
- if (text == null)
- return mapOf()
-
- /* Before using kotlinx.serialization, there has been a dedicated
- * directive resolver which instructed SnakeYAML to do the following:
- *
- * addImplicitResolver(Tag.MERGE, MERGE, "<")
- * addImplicitResolver(Tag.NULL, NULL, "~nN\u0000")
- * addImplicitResolver(Tag.NULL, EMPTY, null)
- *
- * This has been removed.
- */
- return ObjectMapper(YAMLFactory()).registerKotlinModule().runCatching {
- readValue<Map<String, Any>>(text)
- }.getOrElse {
- throw AraraException(messages.getMessage(
- Messages.ERROR_VALIDATE_YAML_EXCEPTION,
- "(" + numbers.joinToString(", ") + ")"),
- it)
- }
- }
-
- /**
- * Replicate a directive for given files.
- *
- * @param holder The list of files.
- * @param parameters The parameters for the directive.
- * @param directive The directive to clone.
- * @return List of cloned directives.
- * @throws AraraException If there is an error validating the [holder]
- * object.
- */
- @Throws(AraraException::class)
- private fun replicateDirective(
- holder: Any,
- parameters: Map<String, Any>,
- directive: Directive
- ): List<Directive> {
- return if (holder is List<*>) {
- // we received a file list, so we map that list to files
- holder.filterIsInstance<Any>()
- .asSequence()
- .map { File(it.toString()) }
- .map(FileHandlingUtils::getCanonicalFile)
- // and because we want directives, we replicate our
- // directive to be applied to that file
- .map { reference ->
- directive.copy(parameters = parameters
- .plus("reference" to reference))
- }
- .toList()
- // we take the result if and only if we have at least one
- // file and we did not filter out any invalid argument
- .takeIf { it.isNotEmpty() && holder.size == it.size }
- // TODO: check exception according to condition
- ?: throw AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_EMPTY_FILES_LIST,
- "(" + directive.lineNumbers
- .joinToString(", ") + ")"
- )
- )
- } else {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
- "(" + directive.lineNumbers.joinToString(", ") + ")"
- )
- )
- }
- }
-
- /**
- * Validates the list of directives, returning a new list.
- *
- * @param directives The list of directives.
- * @return A new list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun process(directives: List<Directive>): List<Directive> {
- val result = mutableListOf<Directive>()
- directives.forEach { directive ->
- val parameters = directive.parameters
-
- if (parameters.containsKey("reference"))
- throw AraraException(messages.getMessage(
- Messages.ERROR_VALIDATE_REFERENCE_IS_RESERVED,
- "(" + directive.lineNumbers.joinToString(", ") + ")"))
-
- if (parameters.containsKey("files")) {
- result.addAll(replicateDirective(parameters.getValue("files"),
- parameters.minus("files"), directive))
- } else {
- result.add(directive.copy(parameters = parameters
- .plus("reference" to
- Arara.config[AraraSpec.Execution.reference])))
- }
- }
-
- logger.info(messages.getMessage(
- Messages.LOG_INFO_VALIDATED_DIRECTIVES))
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(Messages.LOG_INFO_DIRECTIVES_BLOCK)))
- result.forEach { logger.info(it.toString()) }
- logger.info(DisplayUtils.displaySeparator())
-
- return result
- }
-
- /**
- * Checks if the provided line contains the corresponding pattern, based on
- * the file type, or an empty line.
- *
- * @param pattern Pattern to be matched, based on the file type.
- * @param line Provided line.
- * @return Logical value indicating if the provided line contains the
- * corresponding pattern, based on the file type, or an empty line.
- */
- private fun checkLinePattern(pattern: Pattern, line: String): Boolean {
- return line.isBlank() || pattern.matcher(line).find()
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
deleted file mode 100644
index 53ac2aa8b10..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import kotlinx.serialization.Serializable
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements the rule model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-class Rule {
- /**
- * The rule identifier
- */
- var identifier: String = INVALID_RULE_IDENTIFIER
- get() = CommonUtils.removeKeywordNotNull(field)
-
- /**
- * The rule name
- */
- var name: String = INVALID_RULE_NAME
- get() = CommonUtils.removeKeywordNotNull(field)
-
- /**
- * The list of authors
- */
- var authors: List<String> = listOf()
- get() = field.mapNotNull { CommonUtils.removeKeyword(it) }
-
- /**
- * The list of commands
- */
- var commands: List<RuleCommand> = listOf()
-
- /**
- * The list of arguments
- */
- var arguments: List<Argument> = listOf()
-
- companion object {
- const val INVALID_RULE_IDENTIFIER = "INVALID_RULE"
- const val INVALID_RULE_NAME = "INVALID_RULE"
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
deleted file mode 100644
index 901718d4128..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import kotlinx.serialization.Serializable
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements the rule command model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-@Serializable
-class RuleCommand {
- /**
- * The command name
- */
- var name: String? = null
- get() = CommonUtils.removeKeyword(field)
-
- /**
- * The command instruction
- */
- var command: String? = null
- get() = CommonUtils.removeKeyword(field)
-
- /**
- * The exit status expression
- */
- var exit: String? = null
- get() = CommonUtils.removeKeyword(field)
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
deleted file mode 100644
index e823e4e598f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
+++ /dev/null
@@ -1,140 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.ruleset
-
-import com.charleskorn.kaml.Yaml
-import java.io.File
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.utils.CommonUtils
-
-/**
- * Implements rule utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object RuleUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Parses the provided file, checks the identifier and returns a rule
- * representation.
- *
- * @param file The rule file.
- * @param identifier The directive identifier.
- * @return The rule object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun parseRule(file: File, identifier: String): Rule {
- val rule = file.runCatching {
- val text = readText()
- if (!text.startsWith("!config"))
- throw Exception("Rule should start with !config")
- Yaml.default.parse(Rule.serializer(), text)
- }.getOrElse {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_PARSERULE_GENERIC_ERROR
- ), it)
- }
-
- validateHeader(rule, identifier)
- validateBody(rule)
- return rule
- }
-
- /**
- * Validates the rule header according to the directive identifier.
- *
- * @param rule The rule object.
- * @param identifier The directive identifier.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- @Suppress("ThrowsCount")
- private fun validateHeader(rule: Rule, identifier: String) {
- if (rule.identifier != Rule.INVALID_RULE_IDENTIFIER) {
- if (rule.identifier != identifier) {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(
- Messages.ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
- rule.identifier,
- identifier))
- }
- } else {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(Messages.ERROR_VALIDATEHEADER_NULL_ID))
- }
- if (rule.name == Rule.INVALID_RULE_NAME) {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_VALIDATEHEADER_NULL_NAME
- )
- )
- }
- }
-
- /**
- * Validates the rule body.
- *
- * @param rule The rule object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- @Suppress("ThrowsCount")
- private fun validateBody(rule: Rule) {
- if (rule.commands.any { it.command == null }) {
- throw AraraException(CommonUtils.ruleErrorHeader +
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_NULL_COMMAND))
- }
-
- val arguments = mutableListOf<String>()
- for (argument in rule.arguments) {
- if (argument.identifier != null) {
- if (argument.flag != null || argument.default != null) {
- arguments.add(argument.identifier!!)
- } else {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_VALIDATEBODY_MISSING_KEYS
- )
- )
- }
- } else {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_VALIDATEBODY_NULL_ARGUMENT_ID
- )
- )
- }
- }
-
- arguments.intersect(listOf("files", "reference")).forEach {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
- it
- )
- )
- }
-
- val expected = arguments.size
- val found = arguments.toSet().size
- if (expected != found) {
- throw AraraException(
- CommonUtils.ruleErrorHeader + messages.getMessage(
- Messages.ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS
- )
- )
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
deleted file mode 100644
index 05a1031a8a2..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import java.io.File
-import java.lang.reflect.InvocationTargetException
-import java.net.MalformedURLException
-import java.net.URLClassLoader
-
-/**
- * Implements utilitary methods for classloading and object instantiation.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object ClassLoadingUtils {
- /**
- * Indicator of success or failure of class loading.
- */
- enum class ClassLoadingStatus {
- SUCCESS,
- FILE_NOT_FOUND,
- MALFORMED_URL,
- CLASS_NOT_FOUND,
- ILLEGAL_ACCESS,
- INSTANTIATION_EXCEPTION
- }
-
- /**
- * Loads a class from the provided file, potentially a Java archive.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- fun loadClass(file: File, name: String):
- Pair<ClassLoadingStatus, Class<*>> {
- // status and class to be returned,
- // it defaults to an object class
- var value: Class<*> = Any::class.java
-
- // if file does not exist, nothing
- // can be done, status is changed
- val status = if (!file.exists()) {
- ClassLoadingStatus.FILE_NOT_FOUND
- } else {
- // classloading involves defining
- // a classloader and fetching the
- // desired class from it, based on
- // the provided file archive
- try {
- // creates a new classloader with
- // the provided file (potentially
- // a JAR file)
- val classloader = URLClassLoader(arrayOf(file.toURI().toURL()),
- ClassLoadingUtils::class.java.classLoader)
-
- // fetches the class from the
- // instantiated classloader
- value = Class.forName(name, true, classloader)
- ClassLoadingStatus.SUCCESS
- } catch (_: MalformedURLException) {
- ClassLoadingStatus.MALFORMED_URL
- } catch (_: ClassNotFoundException) {
- ClassLoadingStatus.CLASS_NOT_FOUND
- }
- }
-
- // return a new pair based on the
- // current status and class holder
- return status to value
- }
-
- /**
- * Loads a class from the provided file, instantiating it.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- fun loadObject(file: File, name: String): Pair<ClassLoadingStatus, Any> {
- // load the corresponding class
- // based on the qualified name
- val pair = loadClass(file, name)
-
- // status and object to be returned,
- // it defaults to an object
- var status = pair.first
- var value = Any()
-
- // checks if the class actually
- // exists, otherwise simply
- // ignore instantiation
- if (status == ClassLoadingStatus.SUCCESS) {
- // object instantiation relies
- // on the default constructor
- // (without arguments), class
- // must implement it
-
- // OBS: constructors with arguments
- // must be invoked through reflection
- try {
- // get the class reference from
- // the pair and instantiate it
- // by invoking the default
- // constructor (without arguments)
- value = pair.second.getDeclaredConstructor().newInstance()
- } catch (_: IllegalAccessException) {
- status = ClassLoadingStatus.ILLEGAL_ACCESS
- } catch (_: InstantiationException) {
- // the user wanted to instantiate an abstract class
- status = ClassLoadingStatus.INSTANTIATION_EXCEPTION
- } catch (_: InvocationTargetException) {
- // the underlying constructor caused an exception
- status = ClassLoadingStatus.INSTANTIATION_EXCEPTION
- }
- }
-
- // return a new pair based on the
- // current status and object holder
- return status to value
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
deleted file mode 100644
index 6887cd4e84d..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
+++ /dev/null
@@ -1,422 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import java.io.File
-import java.io.IOException
-import java.util.MissingFormatArgumentException
-import java.util.regex.Pattern
-import kotlin.math.ln
-import kotlin.math.pow
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.filehandling.FileHandlingUtils
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.ruleset.Argument
-
-/**
- * Implements common utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object CommonUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- /**
- * Gets the list of file types as string, in order.
- *
- * @return A string representation of the list of file types, in order.
- */
- val fileTypesList: String
- get() = "[ " + Arara.config[AraraSpec.Execution.fileTypes]
- .joinToString(" | ") + " ]"
-
- /**
- * Gets the rule error header, containing the identifier and the path, if
- * any.
- *
- * @return A string representation of the rule error header, containing the
- * identifier and the path, if any.
- */
- val ruleErrorHeader: String
- get() {
- return if (Arara.config[AraraSpec.Execution.InfoSpec.ruleId] != null &&
- Arara.config[AraraSpec.Execution.InfoSpec.rulePath] != null) {
- val id = Arara.config[AraraSpec.Execution.InfoSpec.ruleId]!!
- val path = Arara.config[AraraSpec.Execution.InfoSpec.rulePath]!!
- messages.getMessage(
- Messages.ERROR_RULE_IDENTIFIER_AND_PATH,
- id,
- path
- ) + " "
- } else {
- ""
- }
- }
-
- /**
- * Gets a list of all rule paths.
- *
- * @return A list of all rule paths.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- val allRulePaths: List<String>
- @Throws(AraraException::class)
- get() = Arara.config[AraraSpec.Execution.rulePaths].map {
- val location = File(InterpreterUtils.construct(it, "quack"))
- FileHandlingUtils.getParentCanonicalPath(location)
- }
-
- /**
- * Returns the exit status of the application.
- *
- * @return An integer representing the exit status of the application.
- */
- val exitStatus: Int
- get() = Arara.config[AraraSpec.Execution.status]
-
- /**
- * Gets the preamble content, converting a single string into a list of
- * strings, based on new lines.
- *
- * @return A list of strings representing the preamble content.
- */
- val preambleContent: List<String>
- get() = if (Arara.config[AraraSpec.Execution.preamblesActive]) {
- Arara.config[AraraSpec.Execution.preamblesContent]
- .split("\n")
- .dropLastWhile { it.isEmpty() }
- .toList()
- } else {
- listOf()
- }
-
- /**
- * Checks if the input string is equal to a valid boolean value.
- *
- * @param value The input string.
- * @return A boolean value represented by the provided string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun checkBoolean(value: String): Boolean {
- val yes = listOf("yes", "true", "1", "on")
- val no = listOf("no", "false", "0", "off")
- return if (!yes.union(no).contains(value.toLowerCase())) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
- value
- )
- )
- } else {
- yes.contains(value.toLowerCase())
- }
- }
-
- /**
- * Removes the keyword from the beginning of the provided string.
- *
- * @param line A string to be analyzed.
- * @return The provided string without the keyword.
- */
- fun removeKeyword(line: String?): String? {
- return if (line == null) null
- else removeKeywordNotNull(line)
- }
-
- /**
- * Removes the keyword from the beginning of the provided string.
- *
- * @param line A string to be analyzed.
- * @return The provided string without the keyword.
- */
- fun removeKeywordNotNull(line: String): String {
- var tempLine = line
- val pattern = "^(\\s)*<arara>\\s".toPattern()
- val matcher = pattern.matcher(tempLine)
- if (matcher.find()) {
- tempLine = tempLine.substring(matcher.end())
- }
- return tempLine.trim()
- }
-
- /**
- * Flattens a potential list of lists into a list of objects.
- *
- * @param list The list to be flattened.
- * @return The flattened list.
- */
- // TODO: check nullity
- fun flatten(list: List<*>): List<Any> {
- val result = mutableListOf<Any>()
- list.forEach { item ->
- if (item is List<*>)
- result.addAll(flatten(item))
- else
- result.add(item as Any)
- }
- return result
- }
-
- /**
- * Gets a set of strings containing unknown keys from a map and a list. It
- * is a set difference from the keys in the map and the entries in the list.
- *
- * @param parameters The map of parameters.
- * @param arguments The list of arguments.
- * @return A set of strings representing unknown keys from a map and a list.
- */
- fun getUnknownKeys(
- parameters: Map<String, Any>,
- arguments: List<Argument>
- ): Set<String> {
- val found = parameters.keys
- val expected = arguments.mapNotNull { it.identifier }
- return found.subtract(expected)
- }
-
- /**
- * Gets a human readable representation of a size.
- *
- * @param size The byte size to be converted.
- * @return A string representation of the size.
- */
- @Suppress("MagicNumber")
- fun byteSizeToString(size: Long): String {
- val language = Arara.config[AraraSpec.Execution.language]
- val conversionFactor = 1000.0
- return if (size < conversionFactor) "$size B"
- else
- (ln(size.toDouble()) / ln(conversionFactor)).toInt().let { exp ->
- "%.1f %sB".format(language.locale,
- size / conversionFactor.pow(exp.toDouble()),
- "kMGTPE"[exp - 1])
- }
- }
-
- /**
- * Generates a string based on a list of objects, separating each one of
- * them by one space.
- *
- * @param objects A list of objects.
- * @return A string based on the list of objects, separating each one of
- * them by one space. Empty values are not considered.
- */
- fun generateString(vararg objects: Any): String = objects
- .map { it.toString() }.filter { it.isNotEmpty() }
- .joinToString(" ")
-
- /**
- * Checks if the file based on the provided extension contains the provided
- * regex.
- *
- * @param extension The file extension.
- * @param regex The regex.
- * @return A boolean value indicating if the file contains the provided
- * regex.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun checkRegex(extension: String, regex: String): Boolean {
- val file = File(FileHandlingUtils.getPath(extension))
- return checkRegex(file, regex)
- }
-
- /**
- * Checks if the file contains the provided regex.
- *
- * As we use [File.readText] this should not be called on files > 2GB.
- *
- * @param file The file.
- * @param regex The regex.
- * @return A boolean value indicating if the file contains the provided
- * regex.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun checkRegex(file: File, regex: String): Boolean {
- try {
- val text = file.readText()
- val pattern = Pattern.compile(regex)
- val matcher = pattern.matcher(text)
- return matcher.find()
- } catch (exception: IOException) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKREGEX_IO_EXCEPTION,
- file.name
- ),
- exception
- )
- }
- }
-
- /**
- * Replicates a string pattern based on a list of objects, generating a list
- * as result.
- *
- * @param pattern The string pattern.
- * @param values The list of objects to be merged with the pattern.
- * @return A list containing the string pattern replicated to each object
- * from the list.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun replicateList(
- pattern: String,
- values: List<Any>
- ): List<Any> {
- return try {
- values.map { String.format(pattern, it) }
- } catch (exception: MissingFormatArgumentException) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION
- ),
- exception
- )
- }
- }
-
- /**
- * Checks if the provided operating system string holds according to the
- * underlying operating system.
- *
- * Supported operating systems:
- *
- * * Windows
- * * Linux
- * * Mac OS X
- * * Unix (Linux || Mac OS)
- * * Cygwin
- *
- * @param value A string representing an operating system.
- * @return A boolean value indicating if the provided string refers to the
- * underlying operating system.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun checkOS(value: String): Boolean {
- fun checkOSProperty(key: String): Boolean =
- getSystemPropertyOrNull("os.name")
- ?.toLowerCase()?.startsWith(key.toLowerCase()) ?: false
-
- val values = mutableMapOf<String, Boolean>()
- values["windows"] = checkOSProperty("Windows")
- values["linux"] = checkOSProperty("Linux")
- values["mac"] = checkOSProperty("Mac OS X")
- values["unix"] = checkOSProperty("Mac OS X") ||
- checkOSProperty("Linux")
- values["cygwin"] = SystemCallUtils["cygwin"] as Boolean
- if (!values.containsKey(value.toLowerCase())) {
- throw AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
- value
- )
- )
- }
- // will never throw, see check above
- return values.getValue(value.toLowerCase())
- }
-
- /**
- * Gets the system property according to the provided key, or resort to the
- * fallback value if an exception is thrown or if the key is invalid.
- *
- * @param key The system property key.
- * @param fallback The fallback value.
- * @return A string containing the system property value or the fallback.
- */
- fun getSystemProperty(key: String, fallback: String): String =
- System.getProperties().runCatching {
- getOrDefault(key, fallback).toString().takeIf { it != "" }
- }.getOrNull() ?: fallback
-
- /**
- * Access a system property.
- *
- * @param key The key of the property.
- * @return The value of the system property or null if there is an
- * exception.
- */
- fun getSystemPropertyOrNull(key: String): String? =
- System.getProperties().runCatching { getValue(key).toString() }
- .getOrNull()
-
- /**
- * Generates a list of filenames from the provided command based on a list
- * of extensions for each underlying operating system.
- *
- * @param command A string representing the command.
- * @return A list of filenames.
- */
- private fun appendExtensions(command: String): List<String> {
- // list of extensions, specific for
- // each operating system (in fact, it
- // is more Windows specific)
- val extensions = if (checkOS("windows")) {
- // the application is running on
- // Windows, so let's look for the
- // following extensions in order
-
- // this list is actually a sublist from
- // the original Windows PATHEXT environment
- // variable which holds the list of executable
- // extensions that Windows supports
- listOf(".com", ".exe", ".bat", ".cmd")
- } else {
- // no Windows, so the default
- // extension will be just an
- // empty string
- listOf("")
- }
-
- // return the resulting list holding the
- // filenames generated from the
- // provided command
- return extensions.map { "$command$it" }
- }
-
- /**
- * Checks if the provided command name is reachable from the system path.
- *
- * @param command A string representing the command.
- * @return A logic value.
- */
- fun isOnPath(command: String): Boolean {
- // first and foremost, let's build the list
- // of filenames based on the underlying
- // operating system
- val filenames = appendExtensions(command)
- return kotlin.runCatching {
- // break the path into several parts
- // based on the path separator symbol
- System.getenv("PATH").split(File.pathSeparator)
- .asSequence()
- .mapNotNull { File(it).listFiles() }
- // if the search does not return an empty
- // list, one of the filenames got a match,
- // and the command is available somewhere
- // in the system path
- .firstOrNull {
- it.any { file ->
- filenames.contains(file.name) && !file.isDirectory
- }
- }?.let { true }
- }.getOrNull() ?: false
- // otherwise (and in case of an exception) it is not in the path
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
deleted file mode 100644
index 213a9a21c3d..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
+++ /dev/null
@@ -1,415 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.configuration.ConfigurationUtils
-import org.islandoftex.arara.filehandling.FileHandlingUtils
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.ruleset.Conditional
-import org.slf4j.LoggerFactory
-
-/**
- * Implements display utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object DisplayUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- // get the logger context from a factory
- private val logger = LoggerFactory.getLogger(DisplayUtils::class.java)
-
- /**
- * The length of the longest result match as integer.
- */
- private val longestMatch: Int = listOf(
- messages.getMessage(Messages.INFO_LABEL_ON_SUCCESS),
- messages.getMessage(Messages.INFO_LABEL_ON_FAILURE),
- messages.getMessage(Messages.INFO_LABEL_ON_ERROR))
- .map { it.length }.max()!!
- /**
- * If the longest match is longer than the width, then it will be truncated
- * to this length.
- */
- private const val shortenedLongestMatch = 10
-
- /**
- * The default terminal width defined in the settings.
- */
- private val width: Int
- get() = Arara.config[AraraSpec.Application.width]
-
- /**
- * Checks if the execution is in dry-run mode.
- */
- private val isDryRunMode: Boolean
- get() = Arara.config[AraraSpec.Execution.dryrun]
-
- /**
- * Checks if the execution is in verbose mode.
- */
- private val isVerboseMode: Boolean
- get() = Arara.config[AraraSpec.Execution.verbose]
-
- /**
- * The application path.
- */
- private val applicationPath: String
- get() = try {
- ConfigurationUtils.applicationPath.toString()
- } catch (ae: AraraException) {
- "[unknown application path]"
- }
-
- /**
- * Displays the short version of the current entry in the terminal.
- *
- * @param name Rule name.
- * @param task Task name.
- */
- private fun buildShortEntry(name: String, task: String) {
- val result = if (longestMatch >= width)
- shortenedLongestMatch
- else
- longestMatch
- val space = width - result - 1
- val line = "($name) $task ".abbreviate(space - "... ".length)
- print(line.padEnd(space, '.') + " ")
- }
-
- /**
- * Displays the short version of the current entry result in the terminal.
- *
- * @param value The boolean value to be displayed.
- */
- private fun buildShortResult(value: Boolean) {
- val result = longestMatch
- println(getResult(value).padStart(result))
- }
-
- /**
- * Displays the current entry result in the terminal.
- *
- * @param value The boolean value to be displayed.
- */
- fun printEntryResult(value: Boolean) {
- Arara.config[AraraSpec.UserInteraction.displayLine] = false
- Arara.config[AraraSpec.UserInteraction.displayResult] = true
- Arara.config[AraraSpec.Execution.status] = if (value) 0 else 1
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_TASK_RESULT
- ) + " " + getResult(value)
- )
- if (!isDryRunMode) {
- if (!isVerboseMode) {
- buildShortResult(value)
- } else {
- buildLongResult(value)
- }
- }
- }
-
- /**
- * Displays a long version of the current entry result in the terminal.
- *
- * @param value The boolean value to be displayed
- */
- private fun buildLongResult(value: Boolean) {
- val width = width
- println("\n" + (" " + getResult(value)).padStart(width, '-'))
- }
-
- /**
- * Displays the current entry in the terminal.
- *
- * @param name The rule name.
- * @param task The task name.
- */
- fun printEntry(name: String, task: String) {
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_INTERPRET_TASK,
- task,
- name
- )
- )
- Arara.config[AraraSpec.UserInteraction.displayLine] = true
- Arara.config[AraraSpec.UserInteraction.displayResult] = false
- if (!isDryRunMode) {
- if (!isVerboseMode) {
- buildShortEntry(name, task)
- } else {
- buildLongEntry(name, task)
- }
- } else {
- buildDryRunEntry(name, task)
- }
- }
-
- /**
- * Displays a long version of the current entry in the terminal.
- *
- * @param name Rule name.
- * @param task Task name.
- */
- private fun buildLongEntry(name: String, task: String) {
- if (Arara.config[AraraSpec.UserInteraction.displayRolling]) {
- addNewLine()
- } else {
- Arara.config[AraraSpec.UserInteraction.displayRolling] = true
- }
- println(displaySeparator())
- println("($name) $task".abbreviate(width))
- println(displaySeparator())
- }
-
- /**
- * Displays a dry-run version of the current entry in the terminal.
- *
- * @param name The rule name.
- * @param task The task name.
- */
- private fun buildDryRunEntry(name: String, task: String) {
- if (Arara.config[AraraSpec.UserInteraction.displayRolling]) {
- addNewLine()
- } else {
- Arara.config[AraraSpec.UserInteraction.displayRolling] = true
- }
- println("[DR] ($name) $task".abbreviate(width))
- println(displaySeparator())
- }
-
- /**
- * Displays the exception in the terminal.
- *
- * @param exception The exception object.
- */
- fun printException(exception: AraraException) {
- Arara.config[AraraSpec.UserInteraction.displayException] = true
- Arara.config[AraraSpec.Execution.status] = 2
-
- val display = Arara.config[AraraSpec.UserInteraction.displayLine]
- if (Arara.config[AraraSpec.UserInteraction.displayResult])
- addNewLine()
- if (display) {
- if (!isDryRunMode) {
- if (!isVerboseMode) {
- buildShortError()
- } else {
- buildLongError()
- }
- addNewLine()
- }
- }
- val text = (if (exception.hasException())
- exception.message + " " + messages.getMessage(
- Messages.INFO_DISPLAY_EXCEPTION_MORE_DETAILS)
- else
- exception.message) ?: "EXCEPTION PROVIDES NO MESSAGE"
- // TODO: check null handling
- logger.error(text)
- wrapText(text)
- if (exception.hasException()) {
- addNewLine()
- displayDetailsLine()
- val details = exception.exception!!.message!!
- logger.error(details)
- wrapText(details)
- }
- }
-
- /**
- * Gets the string representation of the provided boolean value.
- *
- * @param value The boolean value.
- * @return The string representation.
- */
- private fun getResult(value: Boolean): String {
- return if (value)
- messages.getMessage(
- Messages.INFO_LABEL_ON_SUCCESS
- )
- else
- messages.getMessage(Messages.INFO_LABEL_ON_FAILURE)
- }
-
- /**
- * Displays the short version of an error in the terminal.
- */
- private fun buildShortError() {
- val result = longestMatch
- println(messages.getMessage(Messages.INFO_LABEL_ON_ERROR)
- .padStart(result))
- }
-
- /**
- * Displays the long version of an error in the terminal.
- */
- private fun buildLongError() {
- println((" " + messages.getMessage(Messages.INFO_LABEL_ON_ERROR))
- .padStart(width, '-'))
- }
-
- /**
- * Displays the provided text wrapped nicely according to the default
- * terminal width.
- *
- * @param text The text to be displayed.
- */
- fun wrapText(text: String) = println(text.wrap(width))
-
- /**
- * Displays the rule authors in the terminal.
- *
- * @param authors The list of authors.
- */
- fun printAuthors(authors: List<String>) {
- val line = if (authors.size == 1)
- messages.getMessage(Messages.INFO_LABEL_AUTHOR)
- else
- messages.getMessage(Messages.INFO_LABEL_AUTHORS)
- val text = if (authors.isEmpty())
- messages.getMessage(Messages.INFO_LABEL_NO_AUTHORS)
- else
- authors.joinToString(", ") { it.trim() }
- wrapText("$line $text")
- }
-
- /**
- * Displays the current conditional in the terminal.
- *
- * @param conditional The conditional object.
- */
- fun printConditional(conditional: Conditional) {
- if (conditional.type !== Conditional.ConditionalType.NONE) {
- wrapText(messages.getMessage(Messages.INFO_LABEL_CONDITIONAL) +
- " (" + conditional.type + ") " +
- conditional.condition)
- }
- }
-
- /**
- * Displays the file information in the terminal.
- */
- fun printFileInformation() {
- val file = Arara.config[AraraSpec.Execution.reference]
- val version = Arara.config[AraraSpec.Application.version]
- val line = messages.getMessage(
- Messages.INFO_DISPLAY_FILE_INFORMATION,
- file.name,
- CommonUtils.byteSizeToString(file.length()),
- FileHandlingUtils.getLastModifiedInformation(file)
- )
- logger.info(messages.getMessage(
- Messages.LOG_INFO_WELCOME_MESSAGE,
- version
- ))
- logger.info(displaySeparator())
- logger.debug("::: arara @ $applicationPath")
- logger.debug("::: Java %s, %s".format(
- CommonUtils.getSystemProperty("java.version",
- "[unknown version]"),
- CommonUtils.getSystemProperty("java.vendor",
- "[unknown vendor]")
- ))
- logger.debug("::: %s".format(
- CommonUtils.getSystemProperty("java.home",
- "[unknown location]")
- ))
- logger.debug("::: %s, %s, %s".format(
- CommonUtils.getSystemProperty("os.name",
- "[unknown OS name]"),
- CommonUtils.getSystemProperty("os.arch",
- "[unknown OS arch]"),
- CommonUtils.getSystemProperty("os.version",
- "[unknown OS version]")
- ))
- logger.debug("::: user.home @ %s".format(
- CommonUtils.getSystemProperty("user.home",
- "[unknown user's home directory]")
- ))
- logger.debug("::: CF @ %s".format(Arara.config[AraraSpec.Execution
- .configurationName]))
- logger.debug(displaySeparator())
- logger.info(line)
- wrapText(line)
- addNewLine()
- }
-
- /**
- * Displays the elapsed time in the terminal.
- *
- * @param seconds The elapsed seconds.
- */
- fun printTime(seconds: Double) {
- val language = Arara.config[AraraSpec.Execution.language]
-
- if (Arara.config[AraraSpec.UserInteraction.displayTime]) {
- if (Arara.config[AraraSpec.UserInteraction.displayLine] ||
- Arara.config[AraraSpec.UserInteraction.displayException])
- addNewLine()
-
- val text = messages.getMessage(
- Messages.INFO_DISPLAY_EXECUTION_TIME,
- "%1.2f".format(language.locale, seconds))
- logger.info(text)
- wrapText(text)
- }
- }
-
- /**
- * Displays the application logo in the terminal.
- */
- fun printLogo() {
- println("""
- __ _ _ __ __ _ _ __ __ _
- / _` | '__/ _` | '__/ _` |
- | (_| | | | (_| | | | (_| |
- \__,_|_| \__,_|_| \__,_|
- """.trimIndent())
- addNewLine()
- }
-
- /**
- * Adds a new line in the terminal.
- */
- private fun addNewLine() {
- println()
- }
-
- /**
- * Displays a line containing details.
- */
- private fun displayDetailsLine() {
- val line = messages.getMessage(
- Messages.INFO_LABEL_ON_DETAILS) + " "
- println(line.abbreviate(width).padEnd(width, '-'))
- }
-
- /**
- * Gets the output separator with the provided text.
- *
- * @param message The provided text.
- * @return A string containing the output separator with the provided text.
- */
- fun displayOutputSeparator(message: String): String {
- return " $message ".center(width, '-')
- }
-
- /**
- * Gets the line separator.
- *
- * @return A string containing the line separator.
- */
- fun displaySeparator(): String {
- return "-".repeat(width)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
deleted file mode 100644
index 10ace0b7f11..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import kotlin.math.ceil
-
-/**
- * Abbreviate a String to a maximal width.
- *
- * @param maxWidth The maximal width to truncate to.
- * @param ellipsis The string to use to indicate an ellipsis.
- * @throws IllegalArgumentException If the string would consist only of the
- * ellipsis after shortening.
- * @return The abbreviated string.
- */
-@Throws(IllegalArgumentException::class)
-fun String.abbreviate(maxWidth: Int, ellipsis: String = "…"): String {
- return when {
- maxWidth < ellipsis.length + 1 ->
- throw IllegalArgumentException("Can't abbreviate text further")
- this.length < maxWidth -> this
- else -> this.substring(0, maxWidth - ellipsis.length) + ellipsis
- }
-}
-
-/**
- * Center a string within a specified number of columns.
- *
- * This does not center anything if the string is longer than the specified
- * width.
- *
- * @param width The number of columns.
- * @param padChar The char to pad with.
- * @return The padded string.
- */
-fun String.center(width: Int, padChar: Char): String {
- return if (this.length > width) this
- else {
- val charsLeft = width - this.length
- padChar.toString().repeat(charsLeft / 2) + this +
- padChar.toString().repeat(ceil(charsLeft.toDouble() / 2.0).toInt())
- }
-}
-
-/**
- * Wrap text at a specified width.
- *
- * Algorithm from Wikipedia:
- * https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap#Minimum_number_of_lines
- *
- * @param width The width to wrap at.
- * @return Wrapped text.
- */
-fun String.wrap(width: Int): String {
- val words = this.split(" ")
- var wrapped = words[0]
- var spaceLeft = width - wrapped.length
- words.drop(1).forEach {
- val len = it.length
- wrapped += if (len + 1 > spaceLeft) {
- spaceLeft = width - len
- "\n$it"
- } else {
- spaceLeft -= len + 1
- " $it"
- }
- }
- return wrapped
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
deleted file mode 100644
index 00313a77148..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
+++ /dev/null
@@ -1,164 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import java.io.ByteArrayOutputStream
-import java.io.File
-import java.io.IOException
-import java.io.OutputStream
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.TimeoutException
-import kotlin.time.Duration
-import kotlin.time.ExperimentalTime
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.LanguageController
-import org.islandoftex.arara.localization.Messages
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.ruleset.Command
-import org.islandoftex.arara.ruleset.Conditional
-import org.slf4j.LoggerFactory
-import org.zeroturnaround.exec.InvalidExitValueException
-import org.zeroturnaround.exec.ProcessExecutor
-import org.zeroturnaround.exec.listener.ShutdownHookProcessDestroyer
-
-/**
- * Implements interpreter utilitary methods.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object InterpreterUtils {
- // the application messages obtained from the
- // language controller
- private val messages = LanguageController
-
- // get the logger context from a factory
- private val logger = LoggerFactory.getLogger(InterpreterUtils::class.java)
-
- /**
- * Checks if the current conditional has a prior evaluation.
- *
- * @param conditional The current conditional object.
- * @return A boolean value indicating if the current conditional has a prior
- * evaluation.
- */
- fun runPriorEvaluation(conditional: Conditional): Boolean {
- return if (Arara.config[AraraSpec.Execution.dryrun]) {
- false
- } else {
- when (conditional.type) {
- Conditional.ConditionalType.IF,
- Conditional.ConditionalType.WHILE,
- Conditional.ConditionalType.UNLESS -> true
- else -> false
- }
- }
- }
-
- @ExperimentalTime
- private fun getProcessExecutorForCommand(
- command: Command,
- buffer: OutputStream
- ):
- ProcessExecutor {
- val timeOutValue = Arara.config[AraraSpec.Execution.timeoutValue]
- var executor = ProcessExecutor().command((command).elements)
- .directory(command.workingDirectory.absoluteFile)
- .addDestroyer(ShutdownHookProcessDestroyer())
- if (Arara.config[AraraSpec.Execution.timeout]) {
- if (timeOutValue == Duration.ZERO) {
- throw AraraException(messages.getMessage(Messages
- .ERROR_RUN_TIMEOUT_INVALID_RANGE))
- }
- executor = executor.timeout(timeOutValue.toLongNanoseconds(),
- TimeUnit.NANOSECONDS)
- }
- val tee = if (Arara.config[AraraSpec.Execution.verbose]) {
- executor = executor.redirectInput(System.`in`)
- TeeOutputStream(System.out, buffer)
- } else {
- TeeOutputStream(buffer)
- }
- executor = executor.redirectOutput(tee).redirectError(tee)
- return executor
- }
-
- /**
- * Runs the command in the underlying operating system.
- *
- * @param command An object representing the command.
- * @return An integer value representing the exit code.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @ExperimentalTime
- @Throws(AraraException::class)
- fun run(command: Command): Int {
- val buffer = ByteArrayOutputStream()
- val executor = getProcessExecutorForCommand(command, buffer)
- return executor.runCatching {
- val exit = execute().exitValue
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(Messages.LOG_INFO_BEGIN_BUFFER)))
- logger.info(buffer.toString())
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(Messages.LOG_INFO_END_BUFFER)))
- exit
- }.getOrElse {
- throw AraraException(messages.getMessage(
- when (it) {
- is IOException -> Messages.ERROR_RUN_IO_EXCEPTION
- is InterruptedException ->
- Messages.ERROR_RUN_INTERRUPTED_EXCEPTION
- is InvalidExitValueException ->
- Messages.ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION
- is TimeoutException ->
- Messages.ERROR_RUN_TIMEOUT_EXCEPTION
- else -> Messages.ERROR_RUN_GENERIC_EXCEPTION
- }), it)
- }
- }
-
- /**
- * Builds the rule path based on the rule name and returns the corresponding
- * file location.
- *
- * @param name The rule name.
- * @return The rule file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun buildRulePath(name: String): File? {
- Arara.config[AraraSpec.Execution.rulePaths].forEach { path ->
- val location = File(construct(path, name))
- if (location.exists())
- return location
- }
- return null
- }
-
- /**
- * Constructs the path given the current path and the rule name.
- *
- * @param path The current path.
- * @param name The rule name.
- * @return The constructed path.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- @Throws(AraraException::class)
- fun construct(path: String, name: String): String {
- val fileName = "$name.yaml"
- val location = File(path)
- return if (location.isAbsolute) {
- location.resolve(fileName).toString()
- } else {
- Arara.config[AraraSpec.Execution.workingDirectory]
- // first resolve the path (rule path) against the working
- // directory, then the rule name we want to resolve
- .resolve(path).resolve(fileName).toAbsolutePath().toString()
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
deleted file mode 100644
index f9719fa31f6..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import ch.qos.logback.classic.LoggerContext
-import ch.qos.logback.classic.joran.JoranConfigurator
-import ch.qos.logback.core.joran.spi.JoranException
-import java.io.InputStream
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.slf4j.LoggerFactory
-
-/**
- * Implements the logging controller. This class actually sets the logging
- * configuration in order to allow appending results to a file.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object LoggingUtils {
- // configuration resource as an input stream
- // the configuration is actually a XML file.
- private val resource: InputStream by lazy {
- LoggingUtils::class.java
- .getResourceAsStream("/org/islandoftex/arara/configuration/logback.xml")
- }
-
- /**
- * Sets the logging configuration according to the provided boolean value.
- * If the value is set to true, the log entries will be appended to a file,
- * otherwise the logging feature will keep silent.
- * @param enable A boolean value that indicates the logging behaviour
- * throughout the application.
- */
- fun enableLogging(enable: Boolean) {
- // get the logger context from a factory, set a
- // new context and reset it
- val loggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
-
- try {
- // get a new configuration and set
- // the context
- val configurator = JoranConfigurator()
- configurator.context = loggerContext
- loggerContext.reset()
-
- // if enabled, the log entries will be
- // appended to a file, otherwise it will
- // remain silent
- if (enable) {
- // set the file name and configure
- // the logging controller to append
- // entries to the file
- val name = Arara.config[AraraSpec.Execution.logName]
- loggerContext.putProperty("name", name)
- configurator.doConfigure(resource)
- }
- } catch (_: JoranException) {
- // quack, quack, quack!
- }
- }
-
- /**
- * Initializes the logging controller by disabling it. I don't want an odd
- * behaviour out of the box.
- */
- fun init() {
- enableLogging(false)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
deleted file mode 100644
index ae695c44fb0..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
+++ /dev/null
@@ -1,266 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import javax.swing.JOptionPane
-import javax.swing.UIManager
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-
-/**
- * Implements utilitary methods for displaying messages.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object MessageUtils {
- // holds the default width for the
- // message body, in pixels
- private const val WIDTH = 250
-
- // let's start the UI manager and set
- // the default look and feel to be as
- // close as possible to the system
- init {
- // get the current look and feel
- var laf = Arara.config[AraraSpec.UserInteraction.lookAndFeel]
-
- // check if one is actually set
- if (laf != "none") {
- // use a special keyword to indicate
- // the use of a system look and feel
- if (laf == "system") {
- laf = UIManager.getSystemLookAndFeelClassName()
- }
-
- // let's try it, in case it fails,
- // rely to the default look and feel
- try {
- // get the system look and feel name
- // and try to set it as default
- UIManager.setLookAndFeel(laf)
- } catch (_: Exception) {
- // quack, quack, quack
- }
- }
- }
-
- /**
- * Normalizes the icon type to one of the five available icons.
- * @param value An integer value.
- * @return The normalized integer value.
- */
- @Suppress("MagicNumber")
- private fun normalizeIconType(value: Int): Int {
- // do the normalization according to the available
- // icons in the underlying message implementation
- return when (value) {
- 1 -> JOptionPane.ERROR_MESSAGE
- 2 -> JOptionPane.INFORMATION_MESSAGE
- 3 -> JOptionPane.WARNING_MESSAGE
- 4 -> JOptionPane.QUESTION_MESSAGE
- else -> JOptionPane.PLAIN_MESSAGE
- }
- }
-
- /**
- * Normalizes the message width, so only valid nonzero values are accepted.
- * @param value An integer value corresponding to the message width.
- * @return The normalized width.
- */
- private fun normalizeMessageWidth(value: Int): Int {
- return if (value > 0) value else WIDTH
- }
-
- /**
- * Shows the message.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- fun showMessage(
- width: Int,
- type: Int,
- title: String,
- text: String
- ) {
- // effectively shows the message based
- // on the provided parameters
- JOptionPane.showMessageDialog(null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text),
- title,
- normalizeIconType(type)
- )
- }
-
- /**
- * Shows the message. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- fun showMessage(type: Int, title: String, text: String) {
- showMessage(WIDTH, type, title, text)
- }
-
- /**
- * Shows a message with options presented as an array of buttons.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- fun showOptions(
- width: Int,
- type: Int,
- title: String,
- text: String,
- vararg buttons: Any
- ): Int {
- // returns the index of the selected button,
- // zero if nothing is selected
- return JOptionPane.showOptionDialog(null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text),
- title,
- JOptionPane.DEFAULT_OPTION,
- normalizeIconType(type), null,
- buttons,
- buttons[0]
- ) + 1
- }
-
- /**
- * Shows a message with options presented as an array of buttons. It relies
- * on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- @Suppress("SpreadOperator")
- fun showOptions(
- type: Int,
- title: String,
- text: String,
- vararg buttons: Any
- ): Int {
- return showOptions(WIDTH, type, title, text, *buttons)
- }
-
- /**
- * Shows a message with a text input.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- fun showInput(
- width: Int,
- type: Int,
- title: String,
- text: String
- ): String {
- // get the string from the
- // input text, if any
- val input = JOptionPane.showInputDialog(null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text),
- title,
- normalizeIconType(type))
-
- // if the input is not null, that is,
- // the user actually typed something
- // return the trimmed string otherwise
- // an empty string
- return input?.trim() ?: ""
- }
-
- /**
- * Shows a message with a text input. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- fun showInput(type: Int, title: String, text: String): String {
- return showInput(WIDTH, type, title, text)
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- fun showDropdown(
- width: Int,
- type: Int,
- title: String,
- text: String,
- vararg elements: Any
- ): Int {
- // show the dropdown list and get
- // the selected object, if any
- val index = JOptionPane.showInputDialog(null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text),
- title,
- normalizeIconType(type), null,
- elements,
- elements[0])
-
- // if it's not a null object, let's
- // find the corresponding index
- if (index != null) {
- elements.forEachIndexed { i, value ->
- // if the element is found, simply
- // return the index plus 1, as zero
- // corresponds to no selection at all
- if (value == index) {
- return i + 1
- }
- }
- }
-
- // nothing was selected,
- // simply return zero
- return 0
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements. It
- * relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- @Suppress("SpreadOperator")
- fun showDropdown(
- type: Int,
- title: String,
- text: String,
- vararg elements: Any
- ): Int {
- return showDropdown(WIDTH, type, title, text, *elements)
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
deleted file mode 100644
index 9b443736a1f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.ruleset.Command
-import org.zeroturnaround.exec.ProcessExecutor
-
-/**
- * Implements a system call controller.
- *
- * This class wraps a map that holds the result of system specific variables
- * not directly available at runtime and makes unsafe calling of system
- * commands available to rules.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-object SystemCallUtils {
- /**
- * When executing a system call goes wrong, this status code is returned.
- */
- const val errorExitStatus = -99
- /**
- * When executing a system call goes wrong and the caller asked for output,
- * this output will be returned.
- */
- const val errorCommandOutput = ""
-
- // the system call map which holds the result of
- // system specific variables not directly available
- // at runtime; the idea here is to provide wrappers
- // to the map getter, so it could be easily manipulated
- // create the new map instance to be
- // populated on demand
- private val map: MutableMap<String, Any> = mutableMapOf()
-
- // the commands map will allow the system call map being
- // populated only on demand, that is, if the key is not
- // found, this map will provide the corresponding method
- // and update the value
- // create the new map of commands and
- // add the corresponding system calls
- private val commands: MutableMap<String, () -> Any> = mutableMapOf(
- "cygwin" to {
- // Implements the body of the command. In this particular
- // instance, it checks if we are inside a Cygwin environment.
- // Returns a boolean value indicating if we are inside a Cygwin
- // environment.
-
- // execute a new system call to 'uname -s', read the output
- // as an UTF-8 string, lowercase it and check if it starts
- // with the 'cygwin' string; if so, we are inside Cygwin
- executeSystemCommand(Command("uname", "-s"))
- .second.toLowerCase().startsWith("cygwin")
- })
-
- /**
- * Gets the object indexed by the provided key. This method actually holds
- * the map method of the very same name.
- *
- * @param key The provided map key.
- * @return The object indexed by the provided map key.
- */
- @Throws(NoSuchElementException::class, AraraException::class)
- operator fun get(key: String): Any {
- // if key is not found, meaning that
- // the value wasn't required before
- if (!map.containsKey(key)) {
- if (commands.containsKey(key))
- // perform the system call and
- // populate the corresponding value
- map[key] = commands[key]!!.invoke()
- else
- throw AraraException("The requested key could not be " +
- "translated into a command to get the call value.")
- }
-
- // simply return the corresponding
- // value based on the provided key
- return map.getValue(key)
- }
-
- /**
- * Executes a system command from the underlying operating system and
- * returns a pair containing the exit status and the command output as a
- * string.
- * @param command The system command to be executed.
- * @return A pair containing the exit status and the system command output
- * as a string.
- */
- fun executeSystemCommand(command: Command): Pair<Int, String> {
- return ProcessExecutor(command.elements).runCatching {
- directory(command.workingDirectory)
- readOutput(true)
- execute().run {
- exitValue to outputUTF8()
- }
- }.getOrElse {
- // quack, quack, do nothing, just
- // return a default error code
- errorExitStatus to errorCommandOutput
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt b/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
deleted file mode 100644
index dee15176f24..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import java.io.IOException
-import java.io.OutputStream
-
-/**
- * Implements a stream splitter.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 4.0
- */
-class TeeOutputStream(
- /**
- * The array of output streams holds every output stream that will be
- * written to.
- */
- vararg outputStreams: OutputStream
-) : OutputStream() {
- /**
- * An array of streams in which an object of this class will split data.
- */
- private val streams: List<OutputStream> = outputStreams.toList()
-
- /**
- * Writes the provided integer to each stream.
- *
- * @param b The provided integer
- * @throws IOException An IO exception.
- */
- @Throws(IOException::class)
- override fun write(b: Int) = streams.forEach { it.write(b) }
-
- /**
- * Writes the provided byte array to each stream, with the provided offset
- * and length.
- *
- * @param b The byte array.
- * @param offset The offset.
- * @param length The length.
- * @throws IOException An IO exception.
- */
- @Throws(IOException::class)
- override fun write(b: ByteArray, offset: Int, length: Int) =
- streams.forEach { it.write(b, offset, length) }
-
- /**
- * Flushes every stream.
- *
- * @throws IOException An IO exception.
- */
- @Throws(IOException::class)
- override fun flush() = streams.forEach { it.flush() }
-
- /**
- * Closes every stream silently.
- */
- override fun close() = streams.forEach {
- try {
- it.close()
- } catch (ignored: IOException) {
- // do nothing on purpose
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/logback.xml b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/logback.xml
deleted file mode 100644
index 03572873ebd..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/logback.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
- - Arara, the cool TeX automation tool
- - Copyright (c) 2012, 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.
--->
-
-<configuration>
-
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <file>${name}.log</file>
- <append>false</append>
- <encoder>
- <charset>UTF-8</charset>
- <pattern>%date{dd MMM yyyy HH:mm:ss.SSS} %-5level - %msg%n</pattern>
- </encoder>
- </appender>
-
- <logger name="org.zeroturnaround.exec" level="OFF"/>
-
- <root level="ALL">
- <appender-ref ref="FILE"/>
- </root>
-
-</configuration> \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/release-notes b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/release-notes
deleted file mode 100644
index 002c277ecdf..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/configuration/release-notes
+++ /dev/null
@@ -1,5 +0,0 @@
-* Introduced working directory support.
-* Reorganized code base for more speed.
-* Removed triggers and introduced session namespaces.
-* Removed the velocity templating language and several outdated methods.
-* Removed string-based commands (return "command";).
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages.properties
deleted file mode 100644
index f802f04b0d3..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: English
-# Translators: Paulo Roberto Massa Cereda
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=The ''basename'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
-ERROR_CALCULATEHASH_IO_EXCEPTION=For whatever reason, I could not calculate the hash. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=It looks like ''{0}'' is not a valid boolean value. This should be an easy fix. Make sure to use a valid string that represents boolean values (yes and no, true and false, 1 and 0, and on and off).
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=I could not check your operating system. The provided value ''{0}'' does not look like a valid operating system entry in my list (I might also be wrong, of course). Please correct the value and try again.
-ERROR_CHECKREGEX_IO_EXCEPTION=I could not read the contents of the file ''{0}'', I got an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CONFIGURATION_GENERIC_ERROR=I could not parse the configuration file, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=The value defined in the 'loops' key in the configuration file in order to denote the maximum number of loops has an invalid range. Please make sure to use a positive long value.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=I could not find the provided file ''{0}'' {1}. Please make sure the file exists and it has a valid extension.
-ERROR_EVALUATE_COMPILATION_FAILED=For whatever reason, I could not compile the expression in the provided conditional. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=The conditional evaluation was expecting a boolean value as result. This should be an easy fix. Just make sure the conditional evaluation resolves to a boolean value in the end.
-ERROR_EXTRACTOR_IO_ERROR=There was an IO error while I was trying to extract the directives. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the extraction operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_FILETYPE_NOT_A_FILE=The ''filetype'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=I cannot recognize ''{0}'' as a default extension. If you want to define a new file type, make sure to provide the extension and pattern. These are the default extensions: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=There was an encoding problem while trying to obtain the application path. There is nothing much I can do about it.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=I could not get the canonical file due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=I could not get the parent canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=It seems that ''{0}'' is marked as required in the rule, but I could not find it in the directive parameters. Please make sure to add it as parameter for your directive and try again.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=I could not evaluate one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=I could not evaluate the default value expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=I could not evaluate the exit status expression of one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=I could not evaluate the flag expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_RULE_NOT_FOUND=I could not find a rule named ''{0}'' in the provided rule paths. Perhaps a misspelled word? I was looking for a file named ''{0}.yaml'' in the following paths in order of priority: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=I found these unknown keys in the directive: {0}. This should be an easy fix, just remove them from your map.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=The 'exit' expression must always return a boolean value (even if there is no computation in the closure body). This should be an easy fix: make sure to correct the type return statement and try again.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
-ERROR_LANGUAGE_INVALID_CODE=The provided language code is invalid. Currently, I know how to speak the following languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the YAML file is well-formed.
-ERROR_PARSER_INVALID_PREAMBLE=I am sorry, but the preamble ''{0}'' could not be found. Please make sure this key exists in the configuration file.
-ERROR_PARSERULE_GENERIC_ERROR=I could not parse the rule, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=I could not replicate the list due to a missing format argument. My guess is that there are less (or more) parameters than expected. Make sure to correct the number of parameters and try again.
-ERROR_RULE_IDENTIFIER_AND_PATH=I have spotted an error in rule ''{0}'' located at ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=I could not run the provided system command, something bad happened. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_RUN_INTERRUPTED_EXCEPTION=The provided system command execution was suddenly interrupted. Maybe there was an external interruption that forced the command to end abruptly.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=The provided system command execution has returned an invalid exit value.
-ERROR_RUN_IO_EXCEPTION=The system command execution has failed due to an IO error. Are you sure the provided system command exists in your path? It might be a good idea to check the path and see if the command is available.
-ERROR_RUN_TIMEOUT_EXCEPTION=The system command execution reached the provided timeout value and was aborted. If the time was way too short, make sure to provide a longer value.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=The timeout value is probably missing (although timeout is enabled). This should be an easy fix. Please make sure to provide a positive long value.
-ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the YAML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''get'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=The ''remove'' method has found an unknown key ''{0}'' in the session scope. I could not remove something I do not have in the first place. Please enter a valid key and try again.
-ERROR_VALIDATE_EMPTY_FILES_LIST=I read a directive {0} and found out that the provided ''files'' list is empty. This is an easy fix: make sure the list has at least one element and try again.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=I read a directive {0} and found out that ''files'' requires a list. Please make sure to correct the type to a proper list and try again.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=I spotted an invalid directive {0} in the provided file. Make sure to fix the directive and try again.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=It looks like no directives were found in the provided file. Make sure to include at least one directive and try again.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Apparently there is an orphan directive line break in line {0}. I cannot proceed. Please correct the directive and try again.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=I read a directive {0} and found out that the key ''reference'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
-ERROR_VALIDATE_YAML_EXCEPTION=There was a problem with the provided YAML map in a directive {0}. This part is quite tricky, since it involves aspects of the underlying data serialization format.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=The argument identifier ''{0}'' is reserved, so you cannot use it. This should be an easy fix. Just replace it by another name.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Apparently you have duplicate argument identifiers in your rule. Make sure to fix this issue and try again.
-ERROR_VALIDATEBODY_MISSING_KEYS=When defining a rule argument scope, at least 'flag' or 'default' must be used. Please, make sure to use at least one of them.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=I found out that one of the arguments has no identifier. Please, make sure to add a valid identifier to the argument and try again.
-ERROR_VALIDATEBODY_NULL_COMMAND=I found a null command in the provided rule. This should be an easy fix. Make sure to add a valid command to the rule.
-ERROR_VALIDATEHEADER_NULL_ID=The provided rule has no identifier. This is a crucial information, please make sure to fix this issue and try again. Make sure the identifier has the same name of the rule file (without the extension, of course).
-ERROR_VALIDATEHEADER_NULL_NAME=The provided rule has no name. This should be an easy fix. Make sure to add a valid name and try again.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=The rule has a wrong identifier. I was expecting ''{0}'', but found ''{1}''. This should be an easy fix: just replace the wrong identifier by the correct one.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=There are more details available on this exception:
-INFO_DISPLAY_EXECUTION_TIME=Total: {0} seconds
-INFO_DISPLAY_FILE_INFORMATION=Processing ''{0}'' (size: {1}, last modified: {2}), please wait.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=About to run: {0}
-INFO_LABEL_AUTHOR=Author:
-INFO_LABEL_AUTHORS=Authors:
-INFO_LABEL_CONDITIONAL=Conditional:
-INFO_LABEL_NO_AUTHORS=No authors provided
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=ERROR
-INFO_LABEL_ON_FAILURE=FAILURE
-INFO_LABEL_ON_SUCCESS=SUCCESS
-INFO_LABEL_UNNAMED_TASK=Unnamed task
-INFO_PARSER_NOTES=arara is released under the New BSD license.
-LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
-LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
-LOG_INFO_END_BUFFER=END OUTPUT BUFFER
-LOG_INFO_INTERPRET_RULE=I am ready to interpret rule ''{0}''.
-LOG_INFO_INTERPRET_TASK=I am ready to interpret task ''{0}'' from rule ''{1}''.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=I found a potential directive: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=I found a potential pattern in line {0}: {1}
-LOG_INFO_RULE_LOCATION=Rule location: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=System command: {0}
-LOG_INFO_TASK_RESULT=Task result:
-LOG_INFO_VALIDATED_DIRECTIVES=All directives were validated. We are good to go.
-LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0}!
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_de.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
deleted file mode 100644
index e0edb70443a..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: German
-# Translators: Marco Daniel
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=Die Methode des ''Dateinamens'' (''basename'') benötigt eine Datei und kein Verzeichnis. Es scheint, als sei ''{0}'' keine Datei. Falls du Aufgaben auf ein Verzeichnis bzw. Ordner anwenden willst, kannst du eine Vielzahl von JAVA API-Methoden verwenden.
-ERROR_CALCULATEHASH_IO_EXCEPTION=Aus was für einem Grund auch immer kann ich die Prüfziffer (checksum) nicht berechnen. Ich habe keine Idee, warum es fehlschlägt. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Es scheint, als sei ''{0}'' kein logischer Ausdruck (boolean value). Das sollte leicht zu beheben sein. Stelle sicher, dass der Eingabestring ein zugelassener logischer Ausdruck ist (''yes'' oder ''no'', ''true'' oder ''false'', ''1'' oder ''0'' sowie ''on'' oder ''off'').
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Ich konnte dein Betriebssystem nicht überprüfen. Der ermittelte Wert ''{0}'' sieht nicht wie ein gültiges Betriebssystem in meiner Liste aus. (Ich kann natürlich auch falsch liegen.) Bitte korrigiere den Wert und versuche es erneut.
-ERROR_CHECKREGEX_IO_EXCEPTION=Ich konnte den Inhalt der Datei ''{0}'' nicht lesen. Ich erhielt einen IO-Fehler. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während des Leseprozesses bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_CONFIGURATION_GENERIC_ERROR=Ich konnte die Konfigurationsdatei nicht analysieren, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht das zugrundeliegende Datenserialisierungsformat mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=In der Konfigurationsdatei hat der eingegebenen Wert 'loops' zur Festlegung der maximalen Anzahl an Schleifendurchgängen einen ungültigen Bereich. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=Ich konnte die vorausgesetzte Datei ''{0}'' {1} nicht finden. Bitte stelle sicher, dass die Datei existiert und eine gültige Dateiendung hat.
-ERROR_EVALUATE_COMPILATION_FAILED=Aus was für einen Grund auch immer kann ich den Ausdruck in der bereitgestellten Bedingung nicht kompilieren. Dieser Teil ist ziemlich knifflig, denn er bezieht die zugrundeliegende Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=Die Auswertung der Bedingung (conditional) hat einen boolschen Ausdruck als Ergebnis erwartet. Das sollte leicht zu beheben sein. Stelle einfach sicher, dass die Bedingung einen booleschen Ausdruck ('yes' oder 'no', 'true' oder 'false', '1' oder '0' sowie 'on' oder 'off') als Ergebnis erhält.
-ERROR_EXTRACTOR_IO_ERROR=Es gab einen IO-Fehler während ich versuchte, die Direktive zu extrahieren. Ich habe keine Idee, warum es fehlschlug. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_FILETYPE_NOT_A_FILE=Die Methode der Dateitypen ''filetype'' fordert als Eingabe eine Datei und kein Verzeichnis. Es scheint, als sei ''{0}'' keine Datei. Falls du Aufgaben auf ein Verzeichnis bzw. Ordner anwenden willst, kannst du eine Vielzahl von JAVA API-Methoden verwenden.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=Ich kann ''{0}'' als keine vorgegebene Dateiendung erkennen. Falls du einen neuen Dateitypen definieren möchtest, stelle sich, dass die Dateiendung sowie die entsprechende Struktur bereitgestellt wird. Das sind die vordefinierten Dateiendungen: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Es gab ein Kodierungsproblem während ich versuchte den Anwendungspfad zu erhalten. Es gibt leider nicht viel, was ich tun kann.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=Ich konnte die vorschriftsmäßige Datei auf Grund eines IO-Fehlers nicht bekommen. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während des Suchvorganges bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Ich konnte den vorschriftsmäßigen Elternpfad auf Grund eines IO-Fehlers nicht bekommen. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Es scheint, als sei ''{0}'' eine geforderte Eingabe in der Regel, aber ich kann sie in den Eingabeparametern nicht finden. Bitte stelle sicher, dass der Parameter in deiner Direktive ergänzt wird und versuche es erneut.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Ich konnte eines der genutzten Kommandos nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Ich konnte den Standardwert eines Argumentes nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Ich kann den Status der Fertigmeldung (exit status) von einer der genutzten Anweisungen nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Ich kann den Statusindikator (flag expression) eines Argumentes nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_INTERPRETER_RULE_NOT_FOUND=Ich konnte keine Regel mit dem Namen ''{0}'' in den hinterlegten Regelverzeichnissen finden. Vielleicht ein falsch geschriebenes Wort? Ich habe nach dem Dateinamen ''{0}.yaml'' in den nachstehenden Verzeichnissen mit entsprechender Priorität gesucht: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=Ich habe folgende unbekannte Keys in der Direktive gefunden: {0}. Das sollte leicht zu beheben sein, entferne sie einfach.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=Der Ausdruck 'exit' muss immer einen logischen Wert (boolean value) zurückgeben (sogar wenn es keine Berechnung in der Prozedur gibt). Das sollte leicht zu beheben sein: Stelle einen korrekten Rückgabewert sicher und versuche es erneut.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=Die ''isSubdirectory'' Methode erwartet als Argument einen Ordner, nicht eine Datei. ''{0}'' scheint kein Ordner zu sein.
-ERROR_LANGUAGE_INVALID_CODE=Der bereitgestellte Sprachauswahlcode ist ungültig. Derzeit kann ich folgende Sprachen sprechen: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Ich konnte die YAML-Datenbank mit dem Namen ''{0}'' nicht laden. Ich habe keine Idee für die Fehlerursache, obwohl? Vielleicht wurde die Datei bevor oder während der Leseoperation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_PARSER_INVALID_PREAMBLE=Leider konnte die Präambel ''{0}'' nicht gefunden werden. Bitte stelle sicher, dass dieser Schlüssel in der Konfigurationsdatei existiert.
-ERROR_PARSERULE_GENERIC_ERROR=Ich konnte die Regel nicht auswerten, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Serialisierung mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Ich konnte die Liste auf Grund eines fehlendes Formatargumentes nicht replizieren. Meine Vermutung ist, dass es weniger (oder mehr) Parameter als erwartet gibt. Stelle sicher, dass die korrekte Anzahl an Parametern übergeben wird und versuche es erneut.
-ERROR_RULE_IDENTIFIER_AND_PATH=Ich habe einen Fehler in der Regel ''{0}'' an der Stellte ''{1}'' entdeckt.
-ERROR_RUN_GENERIC_EXCEPTION=Ich konnte das geforderte Systemkommando nicht ausführen, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_RUN_INTERRUPTED_EXCEPTION=Das aufgerufene Systemkommando ist plötzlich unterbrochen worden. Vielleicht gab es eine externe Unterbrechung, die das Kommando abrupt zur Beendigung zwang.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Das aufgerufene Systemkommando hat einen ungültigen Abschluss gemeldet.
-ERROR_RUN_IO_EXCEPTION=Der Aufruf des Systemkommandos misslang auf Grund eines IO-Fehlers. Bist du dir sicher, dass das Systemkommando in deinem Pfad existiert? Es sollte eine gute Idee sein, die Systempfade sowie die Verfügbarkeit des Kommandos zu prüfen.
-ERROR_RUN_TIMEOUT_EXCEPTION=Die Ausführung des Systemkommandos hat die Zeitbegrenzung erreicht und wurde abgebrochen. Falls die Zeit etwas zu kurz war, kannst du diese erhöhen.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=Der Wert für die Zeitbegrenzung ('timeout') fehlt vermutlich (obwohl die Zeitbegrenzung aktiviert ist). Das sollte leicht zu beheben sein. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Ich konnte die YAML-Datenbank mit dem Namen ''{0}'' nicht speichern. Ich habe keine Idee für die Fehlerursache, obwohl? Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei YAML-Datei auf der Festplatte zu speichern.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Die ''get'' Methode hat den unbekannten Eintrag (key) ''{0}'' in der Session gefunden. Ich konnte nichts erhalten, was ich nicht bereits habe. Bitte gebe einen gültigen Key ein und versuche es erneut.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=Die ''remove'' Methode hat den unbekannten Eintrag (key) ''{0}'' in der Session gefunden. Ich konnte nichts erhalten, was ich nicht bereits habe. Bitte gebe einen gültigen Key ein und versuche es erneut.
-ERROR_VALIDATE_EMPTY_FILES_LIST=Ich habe die Direktive {0} gelesen und fand heraus, dass die bereitgestellte Dateienliste leer ist. Das sollte leicht zu beheben sein. Bitte stelle sicher, dass die Liste mindestens ein Element hat und versuche es erneut.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ich habe die Direktive {0} gelesen und fand heraus, dass der Eintrag ''files'' keine Liste übergeben bekommen hat. Bitte stelle sicher, dass du eine passende Liste verwendest und versuche es erneut.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ich entdecke eine ungültige Direktive namens {0} in der bereitgestellten Datei. Stellte sicher, dass die Direktive gültig ist und versuche es erneut.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Es sieht so aus, als wurden keine Direktiven in der bereitgestellten Datei gefunden. Bitte stelle sicher, dass wenigstens eine Direktive enthalten ist und versuche es erneut.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Anscheinend gibt es einen verwaisten Zeilenumbruch in der Direktive in der Zeile {0}. Ich kann nicht fortfahren. Bitte korrigiere die Direktive und versuche es erneut.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ich las die Direktive {0} und fand heraus, dass der Key ''reference'' genutzt wurde. Dieser Key ist reserviert, deshalb kannst du ihn nicht nutzen. Aber keine Sorge, das sollte einfach zu beheben sein. Du musst nur einen anderen Namen verwenden.
-ERROR_VALIDATE_YAML_EXCEPTION=Es gab ein Problem mit dem bereitgestellten YAML-Ausdruck in der Direktive {0}. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Serialisierung mit ein.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=Die Argumentenbezeichnung ''{0}'' ist reserviert, somit kannst du sie nicht nutzen. Dies sollte einfach zu beheben sein. Du musst nur einen anderen Namen verwenden.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Anscheinend hast du Duplikate von Bezeichnern in deiner Regel. Bitte behebe diesen Fehler und versuche es erneut.
-ERROR_VALIDATEBODY_MISSING_KEYS=Wenn du ein Argument einer Regel definierst, musst du mindestens 'flag' oder 'default' nutzen. Stelle bitte sicher, dass du mindestens eines nutzt.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ich habe herausgefunden, dass eines der Argumente keinen Bezeichner hat. Bitte ergänze einen gültigen Bezeichner im Argument und versuche es erneut.
-ERROR_VALIDATEBODY_NULL_COMMAND=Ich habe eine Nullanweisung in der vorgegebenen Regel gefunden. Bitte stelle sicher, dass ein gültiges Kommando zur Regel hinzugefügt wird.
-ERROR_VALIDATEHEADER_NULL_ID=Die geforderte Regel hat keinen Bezeichner. Das ist eine wesentliche Information, bitte stelle sicher, dass du dies behebst und versuche es erneut. Beachte hierbei, dass der Bezeichner identisch zum Dateinamen (ohne Dateiendung natürlich) sein muss.
-ERROR_VALIDATEHEADER_NULL_NAME=Die gewünschte Regel hat keinen Namen. Das sollte leicht zu beheben sein. Ergänze einen gültigen Namen und versuche es erneut.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=Die Regel hat einen falschen Bezeichner. Ich erwartete ''{0}'' fand aber ''{1}''. Das solle leicht zu beheben sein: Ersetze einfach den falschen durch einen korrekten Bezeichner.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Es sind mehr Details für diese Ausnahme verfügbar.
-INFO_DISPLAY_EXECUTION_TIME=Gesamt: {0} Sekunden
-INFO_DISPLAY_FILE_INFORMATION=Verarbeitung ''{0}'' (Größe: {1}, letzte Modifikation: {2}), bitte warten.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Trotz dry-run Modus wurde dieser Eintrag wahrscheinlich bereits verarbeitet, da er den boolschen Wert {0} zurückgegeben hat.
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Los geht''s: {0}
-INFO_LABEL_AUTHOR=Autor:
-INFO_LABEL_AUTHORS=Autoren:
-INFO_LABEL_CONDITIONAL=Bedingung:
-INFO_LABEL_NO_AUTHORS=Kein Autor berücksichtigt
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=FEHLER
-INFO_LABEL_ON_FAILURE=MISSERFOLG
-INFO_LABEL_ON_SUCCESS=ERFOLGREICH
-INFO_LABEL_UNNAMED_TASK=Namenlose Aufgabe
-INFO_PARSER_NOTES=arara ist unter der New BSD license veröffentlicht.
-LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
-LOG_INFO_BOOLEAN_MODE=Boolscher Wert: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIREKTIVEN
-LOG_INFO_END_BUFFER=END OUTPUT BUFFER
-LOG_INFO_INTERPRET_RULE=Ich bin bereit, die Regel ''{0}'' zu interpretieren.
-LOG_INFO_INTERPRET_TASK=Ich bin bereit, die Aufgabe ''{0}'' von der Regel ''{1}'' zu interpretieren.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=Ich habe eine potentielle Direktive gefunden: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=Ich habe ein potentielles Muster in der Linie {0} gefunden: {1}
-LOG_INFO_RULE_LOCATION=Verzeichnis der Regel: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=Systemkommando: {0}
-LOG_INFO_TASK_RESULT=Resultat der Aufgabe:
-LOG_INFO_VALIDATED_DIRECTIVES=Alle Direktiven sind gültig. Wir sind guter Dinge.
-LOG_INFO_WELCOME_MESSAGE=Willkommen bei arara {0}!
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
deleted file mode 100644
index f802f04b0d3..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: English
-# Translators: Paulo Roberto Massa Cereda
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=The ''basename'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
-ERROR_CALCULATEHASH_IO_EXCEPTION=For whatever reason, I could not calculate the hash. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=It looks like ''{0}'' is not a valid boolean value. This should be an easy fix. Make sure to use a valid string that represents boolean values (yes and no, true and false, 1 and 0, and on and off).
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=I could not check your operating system. The provided value ''{0}'' does not look like a valid operating system entry in my list (I might also be wrong, of course). Please correct the value and try again.
-ERROR_CHECKREGEX_IO_EXCEPTION=I could not read the contents of the file ''{0}'', I got an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CONFIGURATION_GENERIC_ERROR=I could not parse the configuration file, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=The value defined in the 'loops' key in the configuration file in order to denote the maximum number of loops has an invalid range. Please make sure to use a positive long value.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=I could not find the provided file ''{0}'' {1}. Please make sure the file exists and it has a valid extension.
-ERROR_EVALUATE_COMPILATION_FAILED=For whatever reason, I could not compile the expression in the provided conditional. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=The conditional evaluation was expecting a boolean value as result. This should be an easy fix. Just make sure the conditional evaluation resolves to a boolean value in the end.
-ERROR_EXTRACTOR_IO_ERROR=There was an IO error while I was trying to extract the directives. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the extraction operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_FILETYPE_NOT_A_FILE=The ''filetype'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=I cannot recognize ''{0}'' as a default extension. If you want to define a new file type, make sure to provide the extension and pattern. These are the default extensions: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=There was an encoding problem while trying to obtain the application path. There is nothing much I can do about it.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=I could not get the canonical file due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=I could not get the parent canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=It seems that ''{0}'' is marked as required in the rule, but I could not find it in the directive parameters. Please make sure to add it as parameter for your directive and try again.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=I could not evaluate one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=I could not evaluate the default value expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=I could not evaluate the exit status expression of one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=I could not evaluate the flag expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_RULE_NOT_FOUND=I could not find a rule named ''{0}'' in the provided rule paths. Perhaps a misspelled word? I was looking for a file named ''{0}.yaml'' in the following paths in order of priority: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=I found these unknown keys in the directive: {0}. This should be an easy fix, just remove them from your map.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=The 'exit' expression must always return a boolean value (even if there is no computation in the closure body). This should be an easy fix: make sure to correct the type return statement and try again.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
-ERROR_LANGUAGE_INVALID_CODE=The provided language code is invalid. Currently, I know how to speak the following languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the YAML file is well-formed.
-ERROR_PARSER_INVALID_PREAMBLE=I am sorry, but the preamble ''{0}'' could not be found. Please make sure this key exists in the configuration file.
-ERROR_PARSERULE_GENERIC_ERROR=I could not parse the rule, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=I could not replicate the list due to a missing format argument. My guess is that there are less (or more) parameters than expected. Make sure to correct the number of parameters and try again.
-ERROR_RULE_IDENTIFIER_AND_PATH=I have spotted an error in rule ''{0}'' located at ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=I could not run the provided system command, something bad happened. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_RUN_INTERRUPTED_EXCEPTION=The provided system command execution was suddenly interrupted. Maybe there was an external interruption that forced the command to end abruptly.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=The provided system command execution has returned an invalid exit value.
-ERROR_RUN_IO_EXCEPTION=The system command execution has failed due to an IO error. Are you sure the provided system command exists in your path? It might be a good idea to check the path and see if the command is available.
-ERROR_RUN_TIMEOUT_EXCEPTION=The system command execution reached the provided timeout value and was aborted. If the time was way too short, make sure to provide a longer value.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=The timeout value is probably missing (although timeout is enabled). This should be an easy fix. Please make sure to provide a positive long value.
-ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the YAML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''get'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=The ''remove'' method has found an unknown key ''{0}'' in the session scope. I could not remove something I do not have in the first place. Please enter a valid key and try again.
-ERROR_VALIDATE_EMPTY_FILES_LIST=I read a directive {0} and found out that the provided ''files'' list is empty. This is an easy fix: make sure the list has at least one element and try again.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=I read a directive {0} and found out that ''files'' requires a list. Please make sure to correct the type to a proper list and try again.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=I spotted an invalid directive {0} in the provided file. Make sure to fix the directive and try again.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=It looks like no directives were found in the provided file. Make sure to include at least one directive and try again.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Apparently there is an orphan directive line break in line {0}. I cannot proceed. Please correct the directive and try again.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=I read a directive {0} and found out that the key ''reference'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
-ERROR_VALIDATE_YAML_EXCEPTION=There was a problem with the provided YAML map in a directive {0}. This part is quite tricky, since it involves aspects of the underlying data serialization format.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=The argument identifier ''{0}'' is reserved, so you cannot use it. This should be an easy fix. Just replace it by another name.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Apparently you have duplicate argument identifiers in your rule. Make sure to fix this issue and try again.
-ERROR_VALIDATEBODY_MISSING_KEYS=When defining a rule argument scope, at least 'flag' or 'default' must be used. Please, make sure to use at least one of them.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=I found out that one of the arguments has no identifier. Please, make sure to add a valid identifier to the argument and try again.
-ERROR_VALIDATEBODY_NULL_COMMAND=I found a null command in the provided rule. This should be an easy fix. Make sure to add a valid command to the rule.
-ERROR_VALIDATEHEADER_NULL_ID=The provided rule has no identifier. This is a crucial information, please make sure to fix this issue and try again. Make sure the identifier has the same name of the rule file (without the extension, of course).
-ERROR_VALIDATEHEADER_NULL_NAME=The provided rule has no name. This should be an easy fix. Make sure to add a valid name and try again.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=The rule has a wrong identifier. I was expecting ''{0}'', but found ''{1}''. This should be an easy fix: just replace the wrong identifier by the correct one.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=There are more details available on this exception:
-INFO_DISPLAY_EXECUTION_TIME=Total: {0} seconds
-INFO_DISPLAY_FILE_INFORMATION=Processing ''{0}'' (size: {1}, last modified: {2}), please wait.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=About to run: {0}
-INFO_LABEL_AUTHOR=Author:
-INFO_LABEL_AUTHORS=Authors:
-INFO_LABEL_CONDITIONAL=Conditional:
-INFO_LABEL_NO_AUTHORS=No authors provided
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=ERROR
-INFO_LABEL_ON_FAILURE=FAILURE
-INFO_LABEL_ON_SUCCESS=SUCCESS
-INFO_LABEL_UNNAMED_TASK=Unnamed task
-INFO_PARSER_NOTES=arara is released under the New BSD license.
-LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
-LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
-LOG_INFO_END_BUFFER=END OUTPUT BUFFER
-LOG_INFO_INTERPRET_RULE=I am ready to interpret rule ''{0}''.
-LOG_INFO_INTERPRET_TASK=I am ready to interpret task ''{0}'' from rule ''{1}''.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=I found a potential directive: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=I found a potential pattern in line {0}: {1}
-LOG_INFO_RULE_LOCATION=Rule location: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=System command: {0}
-LOG_INFO_TASK_RESULT=Task result:
-LOG_INFO_VALIDATED_DIRECTIVES=All directives were validated. We are good to go.
-LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0}!
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
deleted file mode 100644
index 7b88fd3e863..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
+++ /dev/null
@@ -1,120 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: Broad Norfolk
-# Translators: Nicola Talbot
-# ---------------------------------------------------------------------
-# With thanks to Keith Skipper for suggestions!
-ERROR_BASENAME_NOT_A_FILE=Yew''re gotta hev a file for the ''basename'', not a directory. That ''{0}'' yew give me ent a file. Do yew need ter do jarbs on a directory, yew myte try the Java API.
-ERROR_CALCULATEHASH_IO_EXCEPTION=Thass a rum ole dew, bor, I can't work out th' hash. I ent got no idea why thass gorn wrong. Praps the file was hulled abowt afore or time the hashing operation was doing else maybe I're gotta he'some proper permissions to snout abowt in the file.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=That look like ''{0}'' ent a proper boolean value but dunt yew git yerself inta a rite ole puckaterry. Do yew jist make sure to use proper boolean values (yes and no, true and false, 1 and 0, and on and off).
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Thass a rum un. I hent got no idear whass yar operating system. Wuh, that ole value ''{0}'' I got dunt look like thass a proper operating system (howsomever I might be sorft in the head and got that wrong). Do yew fix that value and try agin.
-ERROR_CHECKREGEX_IO_EXCEPTION=Cor blast me, but I feel a bit ona tewl. I can''t read any ona file ''{0}'', thass giving me an IO error. I''re got no idear but praps the file was hulled abowt afore or time the reading operation was doing else maybe I''re gotta he''some proper permissions to snout abowt the file.
-ERROR_CONFIGURATION_GENERIC_ERROR=Thass hully gone wrong, ole partner. I coont unnerstand the configuration file. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=Atwin me, yew an' the geartepust that 'loops' key value ent rite. Yew're gotta giv' a number thass bigger than nuffin.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=Dunt yew git yarself inta a rite ole puckaterry, but I can''t find yar file ''{0}'' {1}. Yew''re gotta find the file and do yew see that has a proper extension on the end onnit, tergether.
-ERROR_EVALUATE_COMPILATION_FAILED=Wuh, I ent got no idear wass gorn on but I coont git the hang o'that conditional. Yew're gotta he'sum idear wot this is orl abowt else yew mite be in a rite ole puckaterry but I'll help yew git it done if I can, ole partner.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=That ent a yis or no answer for that conditional evaluation but dunt yew git in a puckaterry. Do yew jist git that conditional to giv a boolean value, my bewty.
-ERROR_EXTRACTOR_IO_ERROR=Wuh, I was trying to get a hold onnem directives when suffin went hully wrong, howsomever I hent got no idear why thass gone wrong. Praps the file was hulled abowt afore or time the hashing operation was doing else maybe I're gotta he'sum proper permissions to read the file.
-ERROR_FILETYPE_NOT_A_FILE=Yew gotta hev a file for the ''filetype'', not a directory. That ''{0}'' yew giv me dunt look like a file to me. Do yew need to do jarbs on a directory, yew myte try the Java API
-ERROR_FILETYPE_UNKNOWN_EXTENSION=Cor blast me, ole partner, but I ent never heard of ''{0}'' as a default extension. Yew''re gotta giv me yer know about the match and that ole extension on the end onnit do you want a new file type. I ony know abowt the default extensions: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Dunt yew git yarself inta a rite ole puckaterry, my bewty, cos there's nuffin I can dew abowt it but I're gotta mobbing abowt th'encoding time I was trying to get the application path.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=Cor blast me, my bewty, I ent got no idear wass gorn on but I coont get the canonical file. Praps the file was hulled abowt afore or time the lookup operation was doing else maybe I're gotta he'sum proper permissions.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Cor blast me, my bewty, I ent got no idear wass gorn on but I coont get the parent canonical path. Praps the file was hulled abowt afore or time the hashing operation was doing else maybe I're gotta he'sum proper permissions.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=That seem like the rule say yew gotta have ''{0}'', but I coont find it in the directive parameters. Dew yew add it as a parameter for yar directive and try agin.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=That ent gorn right wi' one onnem commands you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=That ent gorn right wi' ter default value of one onnem arguments you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=That ent gorn right wi' th' exit status of onnem commands you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=That ent gorn right wi' th' flag for onnem arguments you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_INTERPRETER_RULE_NOT_FOUND=Thass a rum ole dew but there ent no ''{0}'' in any onnem rule paths. Praps you ent spelled that right. I coont find ''{0}.yaml'' in any onner paths: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=Atwin me, yew an'' the geartepost I ent got no idear abowt these keys in the directive: {0}. Howsomever, dunt you git yarself inta a rite ole puckaterry. Do you jist hull them outta yar map.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=Wuh, ole partner, that 'exit' expression ent givin' me a yis or no answer. Thass allus got to dew that even if there ent nuffin else to dew. Howsomever, dunt you git yarself inta a rite ole puckaterry, dew you jist tricolate the return statement and try agin.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
-ERROR_LANGUAGE_INVALID_CODE=Cor blast me, my bewty, but you hully copped me there wi'' that language code. I can ony mardle in these languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Cor blast me, ole partner, but that YAML database ''{0}'' ent half puttin'' on its parts but I ent got no idear wass gone wrong. Praps the file was hulled abowt afore or time the reading operation was doing else maybe I''re gotta he''sum proper permissions to snout abowt the file. Atwin yew, me an'' the geartepost, do yew make sure the YAML is in good kelter.
-ERROR_PARSER_INVALID_PREAMBLE=Thass a rum ole dew, ole partner, but I can''t find the preamble ''{0}''. Do yew make sure that key exist in the configuration file.
-ERROR_PARSERULE_GENERIC_ERROR=Thass a rum ole dew, that rule is hully puttin' on its parts. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Blast, bor, but I coont replicate that duzzy ole list cors you ent giv' me a format argument. I rackon there's a slight more or less parameters than yew giv' me. Dew yew go an' check it and try agin.
-ERROR_RULE_IDENTIFIER_AND_PATH=Wuh, that ent right, ole partner. That rule ''{0}'' have gone on the slosh at ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=Thass a rum ole dew, my bewty, but I coont dew the system command but I ent got no idear wass gone wrong. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
-ERROR_RUN_INTERRUPTED_EXCEPTION=Thass a rum ole dew, ole partner, suffin's hully thacked that system command aside the lug and thass croaked.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=That system command is hully puttin' on its parts. That ent a proper exit value.
-ERROR_RUN_IO_EXCEPTION=I rackon that system command have blundered over the troschel. Are yew sure that exist in yar path? Dew yew check the path, ole partner, to see where thass hidin'. Maybe thass gorn in the backus for some bread an' pullet.
-ERROR_RUN_TIMEOUT_EXCEPTION=That slummockun gret system command have run on for too long so I gev it a clout round the lug. If thass hully short for yew, dew yew giv' me a longer timeout value.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=Hold yew hard, that timeout value ent here. I rackon thass gorn for some fourses. Dew yew giv' me a number wot I can count to.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Thass a rum ole dew, ole partner. I coont save that ole YAML database that oughta be called ''{0}''. Howsomever I hent got no idea why thass gone wrong. Praps I''re gotta he''sum proper permissions to write the YAML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Cor blast me, my bewty, but I hent got no idear wass that ''{0}'' key is dewun in that ''get'' method. I can''t giv'' you suffin I ent got. Dew yew ax for suffin I can git yew.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=Cor blast me, ole partner, but I hent got no idear wass that ''{0}'' key is dewin in that ''remove'' method. I can''t remove suffin that ent there. Dew yew ax for suffin else.
-ERROR_VALIDATE_EMPTY_FILES_LIST=Cor blast me, my bewty. I read a directive {0} but there ent nuffin in the provided ''files'' list. Do yew just make sure there''s at least one element in the list and try agin.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=That ent rite, ole partner. I read a directive {0} and found out that ''files'' require a list. Do yew fix the type to a proper list and try agin.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=That directive {0} in the provided file ent rite. But dunt git yarself into a puckaterry. Do yew just fix the directive and try agin.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=That look like no directives were found in the provided file. Do yew include at least one directive and try agin.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Thass a rum ole dew, ole partner. There''s an orphan directive line break in line {0}. I can''t do nuffin abowt that. Dew yew giv'' that directive a bit o'' tricolatin'' and try agin.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=That ain''t right, my bewty. You can''t use the key ''reference'' in {0}. Thass a reserved key, but there ain''t no use you gittin'' in a rite ole puckaterry abowt it. Dew yew giv'' it another name.
-ERROR_VALIDATE_YAML_EXCEPTION=Thass a rum ole dew, my bewty. Suffin''s gone wrong in the YAML map in a directive {0}. Wuh, yew''re gotta he''sum idear wot this is orl abowt ter git th'' hang o''this bit else yew myte be in a rite ole puckaterry.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=That ent rite, ole partner. Yew can''t use ''{0}''. Thass reserved, but dunt yew git yarself into a rite ole puckaterry, dew yew jist giv'' it another name.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Thass a rum ole dew, ole partner. You've got duplicate argument identifiers in yar rule. Dew you fix that and try agin.
-ERROR_VALIDATEBODY_MISSING_KEYS=That ent rite, ole partner. You gotta use at least 'flag' or 'default' when you define a rule argument scope. Do yew make sure to use at least one onnem.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=That ent rite, my bewty. You gotta hev an identifier but one onnem arguments ent for one. Dew yew add a valid identifier to the argument and try agin.
-ERROR_VALIDATEBODY_NULL_COMMAND=Thass a rum dew, ole partner. Thass a null command in that ole rule. Do you add a proper command there.
-ERROR_VALIDATEHEADER_NULL_ID=Wuh, ole partner, I'm gornta hev to mob that rule o' yars. That ent got no identifier. Thass hully important and there ent no use putting on yar parts abowt it. That slummockin' gret rule oughta hev' an identifier what have the same name as that ole rule file (without the extension, dew yew dunt know that).
-ERROR_VALIDATEHEADER_NULL_NAME=Cor blast me, bor, but that rule ent got no name, but dunt yew git yarself in a puckaterry, dew you jist giv' it a proper name and try agin.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=My heart alive, my bewty, but that rule ent got the right identifier. That oughta be ''{0}'', not ''{1}'', but dunt yew git yarself in a puckaterry. Dew you jist fix that.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Hear's orl my know on that aggraweartin' exception:
-INFO_DISPLAY_EXECUTION_TIME=Wuh that took {0} seconds but if thass a slight longer than you expected, dunt yew go mobbing me abowt it cors that ent my fault. My grandf''ar dint have none of these pearks. He had to use a pen and a bit o'' pearper, but thass bin nice mardling wi'' yew. Dew yew keep a troshin''!
-INFO_DISPLAY_FILE_INFORMATION=Hold yew hard, ole partner, I''m gornta hev a look at ''{0}'' (thass {1} big, that is, and that was last chearnged on {2} in case yew dunt remember).
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=This is what I''m abowt to dew: {0}
-INFO_LABEL_AUTHOR=Thass the one wot wrote this masterous jarb:
-INFO_LABEL_AUTHORS=Here's the ones wot wrote this masterous jarb:
-INFO_LABEL_CONDITIONAL=Conditional (thass a yis or no thing):
-INFO_LABEL_NO_AUTHORS=Wuh thass a rum ole dew. There ent no names here. Yew're gotta guess who wrote this masterous jarb
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=SUFFIN'S GORN WRONG
-INFO_LABEL_ON_FAILURE=THAT ENT GORN RIGHT, OLE PARTNER
-INFO_LABEL_ON_SUCCESS=THASS A MASTERLY JOB, MY BEWTY
-INFO_LABEL_UNNAMED_TASK=That task ent got no name
-INFO_PARSER_NOTES=arara is released under the New BSD license.
-LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
-LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
-LOG_INFO_END_BUFFER=END OUTPUT BUFFER
-LOG_INFO_INTERPRET_RULE=I''m orl ready, ole parter, to dew the rule ''{0}''.
-LOG_INFO_INTERPRET_TASK=I''m orl ready, my bewty, to dew ''{0}'' from that ole rule ''{1}''.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=I''re found what might be a directive: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=I''re found what might be a pattern in line {0}: {1}
-LOG_INFO_RULE_LOCATION=That ole rule come from: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=System command: {0}
-LOG_INFO_TASK_RESULT=Here's what that jarb say:
-LOG_INFO_VALIDATED_DIRECTIVES=Thass a masterous jarb, orl the directives are in good kelter. We can git troshin'.
-LOG_INFO_WELCOME_MESSAGE=Hello, my bewty. Welcome to arara {0}! (Thass one onnem hully big birds they git in Brazil.)
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_it.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
deleted file mode 100644
index 1a9117c2413..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: Italian
-# Translators: Enrico Gregorio
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=Il metodo ''basename'' richiede un file, non una directory. ''{0}'' non sembra proprio essere un file. Se devi eseguire un compito su una directory, puoi adoperare uno dei metodi delle API Java.
-ERROR_CALCULATEHASH_IO_EXCEPTION=Per qualche motivo, non ho potuto calcolare un hash. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Sembra che ''{0}'' non sia un valore booleano valido. Penso che sia facile correggerlo. Assicurati di adoperare una stringa valida che rappresenti un valore booleano (yes e no, true e false, 1 e 0, oppure on e off).
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Non sono riuscito a distinguere il tuo sistema operativo. Il valore dichiarato ''{0}'' non compare nella mia lista di sistemi operativi (potrei sbagliarmi, però). Per favore, correggi il valore e riprova.
-ERROR_CHECKREGEX_IO_EXCEPTION=Non sono riuscito a leggere il contenuto del file ''{0}'' e ho ricevuto in errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato durante l''operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_CONFIGURATION_GENERIC_ERROR=Non sono riuscito a leggere il file di configurazione, è successo qualcosa che non va. Questa parte è un po' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=Il valore definito nella chiave 'loops' del file di configurazione per stabilire il massimo numero di cicli ha un intervallo non valido. Assicurati che sia un valore 'lungo' e positivo.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=Non sono riuscito a trovare il file ''{0}'' {1}. Assicurati che il file esista e abbia un''estensione valida.
-ERROR_EVALUATE_COMPILATION_FAILED=Per qualche ragione, non sono riuscito a compilare l'espressione del condizionale fornito. Questa parte è un po' complicata, perché riguarda aspetti del linguaggio interno per le espressioni. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=La valutazione del condizionale si aspettava un valore booleano come risultato. Dovrebbe essere facile correggerlo. Assicurati che la valutazione del condizionale fornisca alla fine un valore booleano.
-ERROR_EXTRACTOR_IO_ERROR=C'è stato un errore di I/O mentre provavo a estrarre le direttive. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_FILETYPE_NOT_A_FILE=Il metodo ''filetype'' richiede un file, non una directory. ''{0}'' non sembra proprio essere un file. Se devi eseguire un compito su una directory, puoi adoperare uno dei metodi delle API Java.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=Non riconosco ''{0}'' come un''estensione standard. Se vuoi definire un nuovo tipo di file, assicurati di fornire l''estensione e lo schema. Queste sono le estensioni standard: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=C'è stato un problema di codifica mentre tentavo di ottenere il percorso dell'applicazione. Non c'è molto che possa fare al riguardo.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=Non sono riuscito ad accedere al file canonico per via di un errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Non sono riuscito a ottenere il percorso canonico progenitore per via di un errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Sembra che ''{0}'' sia contrassegnato come obbligatorio nella regola, ma non l''ho trovato nei parametri della direttiva. Assicurati di aggiungerlo come parametro nella direttiva e riprova.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Non ho potuto valutare uno dei comandi forniti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Non ho potuto valutare il valore di default dell'espressione in uno degli argomenti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Non sono riuscito a valutare lo stato di uscita di uno dei comandi forniti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Non ho potuto valutare la flag di uno degli argomenti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_INTERPRETER_RULE_NOT_FOUND=Non sono riuscito a trovare una regola chiamata ''{0}'' nei percorsi per le regole impostati. Forse una parola scritta sbagliata? Stavo cercando un file con il nome ''{0}.yaml'' nei seguenti percorsi in ordine di priorità: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=Ho trovato queste chiavi sconosciute nella direttiva: {0}. Dovrebbbe essere facile correggere, toglile dalla mappa.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=L'espressione di 'uscita' deve essere sempre un valore booleano (anche se non c'è alcun calcolo nella parte di chiusura). Dovrebbe essere facile correggere: assicurati che l'asserzione del 'type return' sia giusta e riprova.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=Il metodo ''isSubdirectory'' richiede una directory, non un file. Sembra proprio che ''{0}'' non sia una directory.
-ERROR_LANGUAGE_INVALID_CODE=La lingua richiesta non è valida. Al momento, so parlare le seguenti lingue: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Non ho potuto caricare il database YAML di nome ''{0}''. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l''operazione di lettura. O forse non ho i permessi necessari per leggere il file. Già che ci siamo, assicurati che il file YAML sia ben formato.
-ERROR_PARSER_INVALID_PREAMBLE=Mi dispiace, ma non è stato possibile trovare il preambolo ''{0}''. Assicurati che questa chiave esista nel file di configurazione.
-ERROR_PARSERULE_GENERIC_ERROR=Non ho potuto analizzare la regola, qualcosa è andato storto. Questa parte è un po' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Non sono riuscito a replicare la lista perché manca un argomento per il formato. Penso che si tratti di un numero sbagliato di parametri. Assicurati che il numero di parametri sia corretto e riprova.
-ERROR_RULE_IDENTIFIER_AND_PATH=Ho trovato un errore nella regola ''{0}'' alla posizione ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=Non ho potuto lanciare il comando di sistema richiesto, qualcosa è andato storto. Questa parte è un po' complicata, perché riguarda aspetti del linguaggio interno per le espressioni. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_RUN_INTERRUPTED_EXCEPTION=L'esecuzione del comando di sistema richiesto si è interrotta inaspettatamente. Forse un'interruzione esterna ha forzato il comando a terminare.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Il comando di sistema richiesto ha restituito un valore di uscita non valido.
-ERROR_RUN_IO_EXCEPTION=L'esecuzione del comando di sistema è fallita per via di un errore di I/O. Sei sicuro che il programma esista nei tuoi percorsi? Meglio controllare se il programma è davvero disponibile.
-ERROR_RUN_TIMEOUT_EXCEPTION=L'esecuzione del comando di sistema ha raggiunto il valore di timeout impostato ed è stata interrotta. Se il tempo è troppo breve, assicurati di impostarne uno più lungo.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=Il valore di timeout probabilmente manca (sebbene il timeout sia abilitato). È facile correggerlo: assicurati di adoperare un valore 'lungo' e positivo.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Non ho potuto salvare il database YAML con il nome ''{0}''. Purtroppo non ho idea del perché sia successo. Forse non ho i permessi appropriati per scrivere il file YAML sul disco.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Il metodo ''get'' ha trovato una chiave sconosciuta ''{0}'' nell''ambito della sessione. Non posso ottenere qualcosa che non ho da nessuna parte. Specifica una chiave valida e riprova.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=Il metodo ''remove'' ha trovato una chiave sconosciuta ''{0}'' nell''ambito della sessione. Non posso ottenere qualcosa che non ho da nessuna parte. Specifica una chiave valida e riprova.
-ERROR_VALIDATE_EMPTY_FILES_LIST=Ho letto la direttiva {0}, ma la lista ''files'' fornita è vuota. Puoi correggerlo facilmente assicurandoti che la lista abbia almeno un elemento, poi riprova.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ho letto la direttiva {0} e ho scoperto che ''files'' richiede una lista. Assicurati di correggere il tipo a una lista appropriata e riprova.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ho visto nel file fornito la direttiva {0} che non è valida. Assicurati di correggere la direttiva e riprova.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Sembra che nel file fornito non ci siano direttive. Assicurati che ce ne sia almeno una e riprova.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Sembra che ci sia un fine riga che lascia orfana una direttiva alla riga {0}. Non posso andare avanti. Correggi la direttiva e riprova.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ho letto la direttiva {0} dove è stata usata la chiave ''reference''. Questa chiave è riservata e non puoi usarla. Non preoccuparti, lo metti facilmente a posto dando un altro nome.
-ERROR_VALIDATE_YAML_EXCEPTION=C''è stato un problema con la mappa YAML fornita con la direttiva {0}. Questa parte è un po'' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=L''identificatore dell''argomento ''{0}'' è riservato, quindi non puoi adoperarlo. È facile correggerlo: chiamalo in modo diverso.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Sembra che tu abbia identificatori di argomenti duplicati nella tua regola. Correggi e riprova.
-ERROR_VALIDATEBODY_MISSING_KEYS=Quando si definisce un ambito per l'argomento in una regola bisogna adoperare almeno 'flag' o 'default'. Assicurati che ci sia uno di questi.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ho trovato che uno degli argomenti non ha identificatore. Assicurati di assegnare un identificatore all'argomento e riprova.
-ERROR_VALIDATEBODY_NULL_COMMAND=Ho trovato un comando 'nullo' nella regola fornita. Dovrebbe essere facile correggere: aggiungi un comando valido alla regola.
-ERROR_VALIDATEHEADER_NULL_ID=La regola fornita non ha un identificatore. Quest'informazione è cruciale, assicurati di sistemarla e riprova. L'identificatore deve avere lo stesso nome della regola (senza estensione, ovviamente).
-ERROR_VALIDATEHEADER_NULL_NAME=La regola fornita non ha nome. È facile correggere: specifica un nome valido e riprova.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=La regola ha un identificatore sbagliato. Mi sarei aspettato ''{0}'', ma ho trovato ''{1}''. È facile correggere: correggi l''identificatore sbagliato con quello giusto.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Ci sono altri dettagli riguardo a questa eccezione:
-INFO_DISPLAY_EXECUTION_TIME=Totale: {0} secondi
-INFO_DISPLAY_FILE_INFORMATION=Elaborazione ''{0}'' (totale: {1}, modificato il: {2}), attendere.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Sebbene stia eseguendo in modo ''dry-run'', questo elemento potrebbe essere già stato elaborato, perché ha restituito un valore booleano: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Sto per lanciare: {0}
-INFO_LABEL_AUTHOR=Autore:
-INFO_LABEL_AUTHORS=Autori:
-INFO_LABEL_CONDITIONAL=Condizionale:
-INFO_LABEL_NO_AUTHORS=Nessun autore specificato
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=ERROR
-INFO_LABEL_ON_FAILURE=FAILURE
-INFO_LABEL_ON_SUCCESS=SUCCESS
-INFO_LABEL_UNNAMED_TASK=Compito senza nome
-INFO_PARSER_NOTES=arara stesso è rilasciato in accordo con la licenza New BSD.
-LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
-LOG_INFO_BOOLEAN_MODE=Valore booleano: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
-LOG_INFO_END_BUFFER=END OUTPUT BUFFER
-LOG_INFO_INTERPRET_RULE=Sono pronto a interpretare la regola ''{0}''.
-LOG_INFO_INTERPRET_TASK=Sono pronto a interpretare il compito ''{0}'' della regola ''{1}''.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=Ho trovato una potenziale direttiva: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=Ho trovato un potenziale schema alla riga {0}: {1}
-LOG_INFO_RULE_LOCATION=Posizione della regola: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=Comando di sistema: {0}
-LOG_INFO_TASK_RESULT=Risultato del compito:
-LOG_INFO_VALIDATED_DIRECTIVES=Tutte le direttive erano valide. Pronti a partire.
-LOG_INFO_WELCOME_MESSAGE=Benvenuto in arara {0}!
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
deleted file mode 100644
index 1f6e1b8a99f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: Dutch
-# Translators: Marijn Schraagen
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=De ''basename''-methode vereist een bestand, geen directory. Het lijkt erop dat ''{0}'' geen bestand is. Als je taken wil uitvoeren met een directory kan je een aantal methodes uit de Java API gebruiken.
-ERROR_CALCULATEHASH_IO_EXCEPTION=Om een of andere reden kan ik de hash niet berekenen. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd voor of tijdens de hashing, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Het lijkt erop dat ''{0}'' geen boolean-waarde is. Dit zou makkelijk op te lossen moeten zijn. Gebruik een geldige representatie voor een boolean (yes en no, true en false, 1 en 0, on en off).
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Ik kon het besturingssysteem niet achterhalen. De opgegeven waarde ''{0}'' staat niet in mijn lijst van geldige besturingssystemen (ik kan het natuurlijk mishebben). Controleer de waarde alsjeblieft en probeer het opnieuw.
-ERROR_CHECKREGEX_IO_EXCEPTION=Ik kon de inhoud van het bestand ''{0}'' niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd voor of tijdens de leesoperatie, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_CONFIGURATION_GENERIC_ERROR=Ik kon het configuratiebestand niet verwerken, er is iets verkeerd gegaan. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende serialisatiesyntax. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=De waarde gedefinieerd in de 'loops'-optie in het configuratiebestand om het maximumaantal herhalingen te specificeren heeft een ongeldig bereik. Geef alsjeblieft een positieve long integer-waarde op.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=Ik kon het opgegeven bestand ''{0}'' {1} niet vinden. Zorg ervoor dat het bestand bestaat en dat het een geldige extensie heeft.
-ERROR_EVALUATE_COMPILATION_FAILED=Om een of andere reden kon ik de expressie in de opgegeven voorwaarde niet compileren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=De evaluatie van de voorwaarde verwachtte een boolean als resultaat. Dit zou makkelijk op te lossen moeten zijn. Zorg ervoor dat de evaluatie uiteindelijk een boolean oplevert.
-ERROR_EXTRACTOR_IO_ERROR=Er was een IO-probleem bij het verwerken van de directives. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd voor of tijdens het hashen, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_FILETYPE_NOT_A_FILE=De ''filetype''-methode vereist een bestand, geen directory. Het lijkt erop dat ''{0}'' geen bestand is. Als je taken wil uitvoeren met een directory kan je een aantal methodes uit de Java API gebruiken.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=De extensie ''{0}'' is niet herkend als een standaardextensie. Als je een nieuw bestandstype wil definiëren zorg dan dat de extensie en het patroon zijn opgegeven. De volgende extensies zijn standaard: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Er was een coderingsprobleem bij het verkrijgen van het applicatiepad. Daar kan ik niet zo veel aan doen.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=Ik kon het canonical-pad niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Ik kon het canonical ouderpad niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het pad veranderd, of misschien heb ik niet de juiste leesrechten.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Het argument ''{0}'' is gemarkeerd als verplicht in de regel, maar ik kon het niet vinden in de parameters van de directive. Zorg ervoor dat het als parameter voor de directive wordt toegevoegd en probeer het opnieuw.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Ik kon een van de opgegeven opdrachten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Ik kon de standaardwaarde van een van de argumenten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Ik kon de exitwaardemelding van een van de opgegeven opdrachten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Ik kon de optie-expressie van een van de argumenten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_INTERPRETER_RULE_NOT_FOUND=Ik kon de regel met de naam ''{0}'' niet vinden in de opgegeven regelpaden. Misschien een spelfout? Ik heb geprobeerd het bestand ''{0}.yaml'' te vinden in de volgende paden in volgorde van prioriteit: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=Ik heb de volgende onbekende verwijzingen gevonden in de directive: {0}. Dit zou makkelijk op te lossen moeten zijn: verwijder deze uit de verwijzingstabel.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=De 'exit'-expressie moet altijd een boolean waarde teruggeven (zelfs als er geen berekening heeft plaatsgevonden). Dit zou makkelijk op te lossen moeten zijn: pas het type van de return-regel aan en probeer het opnieuw.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=De ''isSubdirectory''-methode vereist een mapje, geen bestand. Het lijkt erop dat ''{0}'' geen mapje is.
-ERROR_LANGUAGE_INVALID_CODE=De opgegeven taalcode is ongeldig. Op het moment accepteer ik de volgende talen: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Ik kon de YAML-database met de naam ''{0}'' niet laden. Ik weet niet waarom het precies fout ging. Misschien was het bestand verplaatst of verwijderd tijdens de leesoperatie. Of misschien heb ik niet de juiste rechten om het bestand te lezen. Overigens: zorg ervoor dat het YAML-bestand welgevormd is.
-ERROR_PARSER_INVALID_PREAMBLE=Het spijt me, maar de preamble ''{0}'' is niet gevonden. Zorg ervoor dat deze verwijzing bestaat in het configuratiebestand.
-ERROR_PARSERULE_GENERIC_ERROR=Ik kon de regel niet verwerken, er is iets verkeerd gegaan. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende dataserialisatiesyntax. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Ik kon de lijst niet genereren vanwege een ontbrekend format-argument. Ik denk dat er minder (of meer) parameters zijn dan verwacht. Geef het juiste aantal argumenten op en probeer het opnieuw.
-ERROR_RULE_IDENTIFIER_AND_PATH=Ik heb een fout gevonden in regel ''{0}'' op positie ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=Ik kon het opgegeven systeemcommando niet uitvoeren, er is iets misgegaan. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_RUN_INTERRUPTED_EXCEPTION=Het uitvoeren van het opgegeven systeemcommando is onverwacht onderbroken. Misschien was er een externe onderbreking die ervoor gezorgd heeft dat het commando gestopt is.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Het opgegeven systeemcommando heeft een ongeldige exit-waarde teruggegeven.
-ERROR_RUN_IO_EXCEPTION=Het uitvoeren van het systeemcommando is mislukt vanwege een IO-fout. Weet je zeker dat het commando bestaat in het pad? Het is misschien een goed idee om het pad te controleren en te kijken of het commando beschikbaar is.
-ERROR_RUN_TIMEOUT_EXCEPTION=Het uitvoeren van het systeemcommando is onderbroken omdat de maximale uitvoeringsduur overschreden is. Als de tijd te kort was, pas dan de maximale uitvoeringsduur aan.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=De maximale uitvoeringsduur ontbreekt (hoewel deze optie wel actief is). Dit zou makkelijk op te lossen moeten zijn. Zorg ervoor dat je een positieve long integer-waarde opgeeft.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Ik kon de YAML-database met de naam ''{0}'' niet opslaan. Ik weet niet precies waarom het fout ging. Misschien heb ik niet de juiste schrijfrechten om het YAML-bestand op te slaan.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=De ''get''-methode heeft een onbekende verwijzing gevonden in de sessie: ''{0}''. Als ik iets niet heb kan ik het ook niet gebruiken. Geef een bestaande verwijzing op en probeer het opnieuw.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=De ''remove''-methode heeft een onbekende verwijzing gevonden in de sessie: ''{0}''. Als ik iets niet heb kan ik het ook niet verwijderen. Geef een bestaande verwijzing op en probeer het opnieuw.
-ERROR_VALIDATE_EMPTY_FILES_LIST=Ik heb een directive {0} gelezen en kwam erachter dat de opgegeven ''files''-lijst leeg is. Dit zou makkelijk op te lossen moeten zijn: zorg ervoor dat de lijst tenminste een element heeft en probeer het opnieuw.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ik heb een directive {0} gelezen en kwam erachter dat ''files'' een lijst nodig heeft. Zorg dat je het type aanpast naar een lijst en probeer het opnieuw.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ik heb een ongeldige directive {0} gevonden in het opgegeven bestand. Pas de directive aan en probeer het opnieuw.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Er zijn geen directives gevonden in het opgegeven bestand. Zorg ervoor dat er tenminste een directive in het bestand staat en probeer het opnieuw.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Er is een ongeldig directive-regeleinde in regel {0}. Ik kan niet verder. Pas de directive aan en probeer het opnieuw.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ik heb een directive {0} gelezen en kwam erachter dat de verwijzing ''reference'' gebruikt is. Deze verwijzing is gereserveerd, en kan dus niet gebruikt worden. Maar maak je geen zorgen, dit zou makkelijk op te lossen moeten zijn: gebruik een andere naam.
-ERROR_VALIDATE_YAML_EXCEPTION=Er is een probleem met de opgegeven YAML-omzetting in directive {0}. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende serialisatiesyntax.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=De argumentverwijzing ''{0}'' is gereserveerd, en kan dus niet gebruikt worden. Dit zou makkelijk op te lossen moeten zijn: gebruik een andere naam.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Blijkbaar zijn er dubbele argumentnamen in de regel. Pas dit aan en probeer het opnieuw.
-ERROR_VALIDATEBODY_MISSING_KEYS=Bij het definiëren van het argumentbereik van een regel moet tenminste 'flag' of 'default' worden gebruikt. Zorg ervoor dat je in ieder geval een van deze gebruikt.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ik kwam erachter dat een van de argumenten geen verwijsnaam heeft. Zorg ervoor dat een geldige naam aan het argument wordt toegewezen en probeer het opnieuw.
-ERROR_VALIDATEBODY_NULL_COMMAND=Ik heb een null-opdracht in de opgegeven regel gevonden. Dit zou makkelijk op te lossen moeten zijn: geef een geldige opdracht op voor deze regel.
-ERROR_VALIDATEHEADER_NULL_ID=De opgegeven regel heeft geen verwijsnaam. Dit is cruciale informatie, pas dit aan en probeer het opnieuw. Zorg ervoor dat de naam hetzelfde is als de bestandsnaam (zonder extensie).
-ERROR_VALIDATEHEADER_NULL_NAME=De opgegeven regel heeft geen naam. Dit zou makkelijk op te lossen moeten zijn: geef een geldige naam op en probeer het opnieuw.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=De regel heeft een verkeerde verwijsnaam. Ik verwachtte ''{0}'', maar vond ''{1}''. Dit zou makkelijk op te lossen moeten zijn: vervang de verkeerde verwijsnaam met de correcte naam.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Er zijn meer details beschikbaar voor deze exception:
-INFO_DISPLAY_EXECUTION_TIME=Totaal: {0} seconden
-INFO_DISPLAY_FILE_INFORMATION=Verwerken van ''{0}'' (grootte: {1}, laatst gewijzigd: {2}), een ogenblik geduld.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Ondanks het uitvoeren in dry-runmodus is dit item mogelijk al verwerkt omdat het de booleaanse waarde terug heeft gegeven: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Begin met uitvoeren: {0}
-INFO_LABEL_AUTHOR=Auteur:
-INFO_LABEL_AUTHORS=Auteurs:
-INFO_LABEL_CONDITIONAL=Voorwaarde:
-INFO_LABEL_NO_AUTHORS=Geen auteurs opgegeven
-INFO_LABEL_ON_DETAILS=DETAILS
-INFO_LABEL_ON_ERROR=FOUT
-INFO_LABEL_ON_FAILURE=MISLUKT
-INFO_LABEL_ON_SUCCESS=SUCCESVOL
-INFO_LABEL_UNNAMED_TASK=Naamloze taak
-INFO_PARSER_NOTES=arara is uitgebracht onder de New BSD licentie.
-LOG_INFO_BEGIN_BUFFER=OPEN UITVOER
-LOG_INFO_BOOLEAN_MODE=Booleaanse waarde: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
-LOG_INFO_END_BUFFER=SLUIT UITVOER
-LOG_INFO_INTERPRET_RULE=Ik ben klaar om regel ''{0}'' te verwerken.
-LOG_INFO_INTERPRET_TASK=Ik ben klaar om taak ''{0}'' uit regel ''{1}'' te verwerken.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=Ik heb een mogelijke directive gevonden: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=Ik heb een mogelijk patroon gevonden in regel {0}: {1}
-LOG_INFO_RULE_LOCATION=Regellocatie: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=Systeemopdracht: {0}
-LOG_INFO_TASK_RESULT=Taakresultaat:
-LOG_INFO_VALIDATED_DIRECTIVES=Alle directives zijn gevalideerd, we kunnen beginnen.
-LOG_INFO_WELCOME_MESSAGE=Welkom bij arara {0} (revisie {1})!
diff --git a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties b/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
deleted file mode 100644
index a5b046e9097..00000000000
--- a/Master/texmf-dist/source/support/arara/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
+++ /dev/null
@@ -1,119 +0,0 @@
-# Arara, the cool TeX automation tool
-# Copyright (c) 2012 -- 2018, 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.
-#
-# ---------------------------------------------------------------------
-# Language: Brazilian Portuguese
-# Translators: Paulo Roberto Massa Cereda
-# ---------------------------------------------------------------------
-ERROR_BASENAME_NOT_A_FILE=O método ''basename'' requer um arquivo, não um diretório. Observe que ''{0}'' não parece ser um arquivo. Se você precisa realizar alguma tarefa em um diretório, experimente os métodos disponíveis na API Java.
-ERROR_CALCULATEHASH_IO_EXCEPTION=Por alguma razão, eu não pude calcular o hash. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de hash. Ou talvez eu não tenha as permissões corretas para leitura do arquivo.
-ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Observe que ''{0}'' não é um valor lógico. Isso é fácil de resolver. Certifique-se de usar uma palavra válida que represente valores lógicos (''yes'' e ''no'', ''true'' e ''false'', ''1'' e ''0'', e ''on'' e ''off'').
-ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Não consegui descobrir qual é o seu sistema operacional. O valor ''{0}'' não parece ser uma entrada válida de sistema operacional na minha lista (Eu posso também estar errado, é claro). Por favor, corrija o valor e tente novamente.
-ERROR_CHECKREGEX_IO_EXCEPTION=Não consegui ler o conteúdo do arquivo ''{0}'', houve um erro de entrada e saída. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de leitura. Ou talvez eu não tenha as permissões corretas para leitura do arquivo.
-ERROR_CONFIGURATION_GENERIC_ERROR=Não consegui analisar o arquivo de configuração, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=O valor definido na chave 'loops' no arquivo de configuração, que define o número máximo de iterações, possui um intervalo inválido. Por favor, certifique-se de especificar um valor inteiro positivo.
-ERROR_DISCOVERFILE_FILE_NOT_FOUND=Não consegui encontrar o arquivo especificado ''{0}'' {1}. Por favor, certifique-se de que o arquivo existe e que possui uma extensão válida.
-ERROR_EVALUATE_COMPILATION_FAILED=Por alguma razão, eu não consegui compilar a expressão condicional especificada. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=A avaliação da expressão condicional deveria retornar um valor lógico como resultado. Isso é fácil de resolver. Apenas certifique-se de que a avaliação da expressão condicional retorne um valor lógico no final.
-ERROR_EXTRACTOR_IO_ERROR=Ocorreu um erro de entrada e saída enquanto eu tentava extrair as diretivas. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de extração. Ou talvez eu não tenha as permissões corretas para leitura do arquivo.
-ERROR_FILETYPE_NOT_A_FILE=O método ''filetype'' requer um arquivo, não um diretório. Observe que ''{0}'' não parece ser um arquivo. Se você precisa realizar alguma tarefa em um diretório, experimente os métodos disponíveis na API Java.
-ERROR_FILETYPE_UNKNOWN_EXTENSION=Não consegui reconhecer ''{0}'' como uma extensão padrão. Se você quiser definir um novo tipo de arquivo, certifique-se de especificar a extensão e o padrão. Estas são as extensões definidas por padrão: {1}
-ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Houve um problema de codificação enquanto eu tentava obter o caminho da aplicação. Não há muito o que eu possa fazer sobre isso.
-ERROR_GETCANONICALFILE_IO_EXCEPTION=Não consegui obter o arquivo canônico por causa de um erro de entrada e saída. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de busca. Ou talvez eu não tenha as permissões corretas.
-ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Não consegui obter o caminho canônico ascendente por causa de um erro de entrada e saída. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de busca. Ou talvez eu não tenha as permissões corretas.
-ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Parece que o argumento ''{0}'' está marcado como obrigatório na regra, mas eu não consegui encontrá-lo nos parâmetros da diretiva correspondente. Por favor, certifique-se de adicioná-lo como parâmetro em sua diretiva e tente novamente.
-ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Não consegui avaliar um dos comandos disponibilizados. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Não consegui avaliar a expressão associada ao valor padrão de um dos argumentos. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Não consegui avaliar a expressão associada ao código de saída de um dos comandos disponibilizados. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Não consegui avaliar a expressão associada à presença de um dos argumentos. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_INTERPRETER_RULE_NOT_FOUND=Não consegui encontrar uma regra chamada ''{0}'' nos caminhos de regras especificados. Talvez uma palavra digitada incorretamente? Eu estava procurando por um arquivo chamado ''{0}.yaml'' nos seguintes caminhos, em ordem de prioridade: {1}
-ERROR_INTERPRETER_UNKNOWN_KEYS=Encontrei as seguintes chaves desconhecidas na diretiva: {0}. Isso é fácil de resolver, apenas remova essas chaves do seu mapa.
-ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=A expressão 'exit' referente ao código de saída deve sempre retornar um valor lógico (mesmo se não há computação propriamente dita). Isso é fácil de resolver: apenas certifique-se de corrigir o tipo de retorno e tente novamente.
-ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=O método ''isSubdirectory'' requer um diretório, não um arquivo. Observe que ''{0}'' não parece ser um diretório.
-ERROR_LANGUAGE_INVALID_CODE=O código de idioma especificado é inválido. No momento, eu sei falar os seguintes idiomas: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Não consegui carregar o banco de dados YAML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de leitura. Ou talvez eu não tenha as permissões corretas para leitura do arquivo. A propósito, certifique-se de que o arquivo YAML esteja correto.
-ERROR_PARSER_INVALID_PREAMBLE=Sinto muito, mas o preâmbulo ''{0}'' não foi encontrado. Por favor, certifique-se de que esta chave existe no arquivo de configuração.
-ERROR_PARSERULE_GENERIC_ERROR=Não consegui analisar a regra, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Não consegui replicar a lista por causa de um formato de argumento faltante. Meu palpite é que existem menos (ou mais) parâmetros do que o esperado. Certifique-se de corrigir o número de parâmetros e tente novamente.
-ERROR_RULE_IDENTIFIER_AND_PATH=Encontrei um erro na regra ''{0}'' localizada em ''{1}''.
-ERROR_RUN_GENERIC_EXCEPTION=Não consegui executar o comando de sistema disponibilizado, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_RUN_INTERRUPTED_EXCEPTION=A execução do comando de sistema disponibilizado foi inesperadamente interrompida. Talvez tenha ocorrido uma interrupção externa que forçou o comando a encerrar abruptamente.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=A execução do comando de sistema retornou um código de saída inválido.
-ERROR_RUN_IO_EXCEPTION=A execução do comando de sistema falhou por causa de um erro de entrada e saída. Você tem certeza de que o comando de sistema especificado existe no seu caminho? Pode ser uma boa ideia verificar o caminho do sistema e confirmar se o comando realmente está disponível.
-ERROR_RUN_TIMEOUT_EXCEPTION=A execução do comando de sistema atingiu o timeout especificado e foi abortada. Se o tempo foi muito curto, certifique-se de especificar um valor maior.
-ERROR_RUN_TIMEOUT_INVALID_RANGE=O valor de timeout provavelmente está faltando (apesar de estar habilitado). Isso é fácil de resolver. Por favor, certifique-se de especificar um valor positivo inteiro.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Não consegui salvar o banco de dados YAML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez eu não tenha as permissões corretas para escrever o arquivo YAML no disco.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=O método ''get'' encontrou a chave desconhecida ''{0}'' no escopo de sessão. Não posso obter um valor que não existe na sessão. Por favor, especifique uma chave válida e tente novamente.
-ERROR_SESSION_REMOVE_UNKNOWN_KEY=O método ''remove'' encontrou a chave desconhecida ''{0}'' no escopo de sessão. Não posso remover um valor que não existe na sessão. Por favor, especifique uma chave válida e tente novamente.
-ERROR_VALIDATE_EMPTY_FILES_LIST=Li uma diretiva {0} e descobri que a lista ''files'' especificada está vazia. Isso é fácil de resolver: certifique-se de que a lista possua, pelo menos, um elemento e tente novamente.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Li uma diretiva {0} e descobri que ''files'' requer uma lista. Por favor, certifique-se de corrigir o tipo para uma lista adequada e tente novamente.
-ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Encontrei uma diretiva inválida {0} no arquivo especificado. Certifique-se de corrigir a diretiva e tente novamente.
-ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Parece que o arquivo especificado não possui diretivas! Certifique-se de incluir, pelo menos, uma diretiva e tente novamente.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Aparentemente, existe uma quebra de linha de uma diretiva órfã na linha {0}. Não posso continuar. Por favor, corrija a diretiva e tente novamente.
-ERROR_VALIDATE_REFERENCE_IS_RESERVED=Li uma diretiva {0} e descobri que a chave ''reference'' foi utilizada. Esta chave é reservada, portanto você não pode utilizá-la! Mas não se preocupe, isso é fácil de resolver. Apenas substitua esse nome por outro.
-ERROR_VALIDATE_YAML_EXCEPTION=Ocorreu um problema com o mapa YAML especificado em uma diretiva {0}. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente.
-ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=O identificador de argumento ''{0}'' está reservado, portanto você não pode utilizá-lo. Isso é fácil de resolver. Apenas substitua esse nome por outro.
-ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Aparentemente, você possui identificadores de argumentos duplicados em sua regra. Certifique-se de corrigir esse erro e tente novamente.
-ERROR_VALIDATEBODY_MISSING_KEYS=Ao definir um escopo de argumento de regra, ao menos a chave 'flag' ou 'default' deve ser utilizada. Por favor, certifique-se de utilizar, pelo menos, uma delas.
-ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Descobri que um dos argumentos não possui identificador associado. Por favor, certifique-se de adicionar um identificador válido ao argumento e tente novamente.
-ERROR_VALIDATEBODY_NULL_COMMAND=Encontrei um comando nulo na regra especificada. Isso é fácil de resolver. Certifique-se de adicionar um comando válido na regra.
-ERROR_VALIDATEHEADER_NULL_ID=A regra especificada não possui identificador. É uma informação crucial, portanto, certifique-se de corrigir esse erro e tente novamente. Lembre-se de que o identificador deve possuir o mesmo nome do arquivo da regra (sem a extensão, é claro).
-ERROR_VALIDATEHEADER_NULL_NAME=A regra especificada não possui nome. Isso é fácil de resolver. Certifique-se de adicionar um nome válido e tente novamente.
-ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=A regra possui um identificador incorreto. Eu estava esperando ''{0}'', mas encontrei ''{1}''. Isso é fácil de resolver: apenas substitua o identificador incorreto pelo valor correto.
-INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Detalhes adicionais estão disponíveis para esta exceção:
-INFO_DISPLAY_EXECUTION_TIME=Total: {0} segundos
-INFO_DISPLAY_FILE_INFORMATION=Processando ''{0}'' (tamanho: {1}, última modificação: {2}), por favor, aguarde.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Apesar da execução em modo dry-run, é provável que esta entrada já foi processada, dado que o seguinte valor lógico foi retornado: {0}
-INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=A executar: {0}
-INFO_LABEL_AUTHOR=Autor:
-INFO_LABEL_AUTHORS=Autores:
-INFO_LABEL_CONDITIONAL=Expressão condicional:
-INFO_LABEL_NO_AUTHORS=Nenhum autor informado
-INFO_LABEL_ON_DETAILS=DETALHES
-INFO_LABEL_ON_ERROR=ERRO
-INFO_LABEL_ON_FAILURE=FRACASSO
-INFO_LABEL_ON_SUCCESS=SUCESSO
-INFO_LABEL_UNNAMED_TASK=Tarefa sem nome
-INFO_PARSER_NOTES=arara é distribuída sob a licença New BSD.
-LOG_INFO_BEGIN_BUFFER=INÍCIO DO BUFFER DE SAÍDA
-LOG_INFO_BOOLEAN_MODE=Valor lógico: {0}
-LOG_INFO_DIRECTIVES_BLOCK=DIRETIVAS
-LOG_INFO_END_BUFFER=FINAL DO BUFFER DE SAÍDA
-LOG_INFO_INTERPRET_RULE=Estou pronto para interpretar a regra ''{0}''.
-LOG_INFO_INTERPRET_TASK=Estou pronto para interpretar a tarefa ''{0}'' da regra ''{1}''.
-LOG_INFO_POTENTIAL_DIRECTIVE_FOUND=Encontrei uma diretiva em potencial: {0}
-LOG_INFO_POTENTIAL_PATTERN_FOUND=Encontrei um padrão em potencial na linha {0}: {1}
-LOG_INFO_RULE_LOCATION=Localização da regra: ''{0}''
-LOG_INFO_SYSTEM_COMMAND=Comando de sistema: {0}
-LOG_INFO_TASK_RESULT=Resultado da tarefa:
-LOG_INFO_VALIDATED_DIRECTIVES=Todas as diretivas foram validadas. Estamos prontos para continuar.
-LOG_INFO_WELCOME_MESSAGE=Olá, eu sou o arara {0} (revisão {1})!
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
deleted file mode 100644
index 55b13a8fe53..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-import java.io.File
-import java.nio.file.Files
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.model.AraraException
-
-class FileHandlingUtilsTest : ShouldSpec({
- should("fail generating CRC sums on inexistent files") {
- shouldThrow<AraraException> {
- FileHandlingUtils.calculateHash(File("QUACK"))
- }
- }
- should("generate correct CRC sums") {
- FileHandlingUtils.calculateHash(File("../LICENSE")) shouldBe "2396b4e2"
- FileHandlingUtils.calculateHash(File("../CODE_OF_CONDUCT.md")) shouldBe "536c426f"
- }
-
- should("find correct extension") {
- FileHandlingUtils.getFileExtension(File("QUACK")) shouldBe ""
- FileHandlingUtils.getFileExtension(File("a.tex")) shouldBe "tex"
- FileHandlingUtils.getFileExtension(File(".tex")) shouldBe "tex"
- }
- should("find correct basename") {
- FileHandlingUtils.getBasename(File("QUACK")) shouldBe "QUACK"
- FileHandlingUtils.getBasename(File("a.tex")) shouldBe "a"
- FileHandlingUtils.getBasename(File(".tex")) shouldBe ""
- }
-
- should("get subdirecotry relationship right") {
- FileHandlingUtils.isSubDirectory(File("../docs"), File("..")) shouldBe true
- FileHandlingUtils.isSubDirectory(File(".."), File("../docs")) shouldBe false
- shouldThrow<AraraException> {
- FileHandlingUtils.isSubDirectory(File("../LICENSE"), File(".."))
- }
- shouldThrow<AraraException> {
- FileHandlingUtils.isSubDirectory(File(".."), File("../LICENSE"))
- }
- }
-
- should("detect changes on file") {
- val file = Files.createTempFile(null, null).toFile()
- val referenceBackup = Arara.config[AraraSpec.Execution.reference]
- Arara.config[AraraSpec.Execution.reference] = file.parentFile.resolve("reference")
- FileHandlingUtils.hasChanged(file) shouldBe true
- FileHandlingUtils.hasChanged(file) shouldBe false
- file.writeText("QUACK")
- FileHandlingUtils.hasChanged(file) shouldBe true
- FileHandlingUtils.hasChanged(file) shouldBe false
- file.writeText("QUACK2")
- FileHandlingUtils.hasChanged(file) shouldBe true
- file.delete()
- FileHandlingUtils.hasChanged(file) shouldBe true
- FileHandlingUtils.hasChanged(file) shouldBe false
- Arara.config[AraraSpec.Execution.reference] = referenceBackup
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
deleted file mode 100644
index 47f9916c436..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.filehandling
-
-import io.kotlintest.shouldBe
-import io.kotlintest.specs.ShouldSpec
-import java.nio.file.Files
-import java.nio.file.Path
-import kotlin.reflect.full.declaredMemberFunctions
-import kotlin.reflect.jvm.isAccessible
-
-class FileSearchingUtilsTest : ShouldSpec({
- // TODO: test implicit extensions
-
- fun prepareFileSystem(): Path {
- val tempDir = Files.createTempDirectory(System.nanoTime().toString())
- tempDir.resolve("quack/quack").toFile().mkdirs()
- listOf("quack", "quack/quack", "quack/quack/quack").forEach {
- tempDir.resolve("$it.tex").toFile().writeText(" ")
- tempDir.resolve("$it.txt").toFile().writeText(" ")
- }
- return tempDir
- }
-
- should("fail looking up inexistent file") {
- val lookupFile = FileSearchingUtils::class.declaredMemberFunctions
- .first { it.name == "lookupFile" }
- lookupFile.isAccessible = true
- lookupFile.call(FileSearchingUtils, "QUACK") shouldBe null
- }
-
- should("fail on existing directory") {
- val lookupFile = FileSearchingUtils::class.declaredMemberFunctions
- .first { it.name == "lookupFile" }
- lookupFile.isAccessible = true
- lookupFile.call(FileSearchingUtils, "../buildSrc") shouldBe null
- }
-
- should("find file by extension") {
- val tempDir = prepareFileSystem()
- FileSearchingUtils.listFilesByExtensions(tempDir.toFile(),
- listOf("tex"), false).toSet() shouldBe
- setOf(tempDir.resolve("quack.tex").toFile())
- FileSearchingUtils.listFilesByExtensions(tempDir.toFile(),
- listOf("tex"), true).toSet() shouldBe
- listOf("quack", "quack/quack", "quack/quack/quack")
- .map { tempDir.resolve("$it.tex").toFile() }.toSet()
- }
- should("find file by pattern") {
- val tempDir = prepareFileSystem()
- FileSearchingUtils.listFilesByPatterns(tempDir.toFile(),
- listOf("*q*.txt"), false).toSet() shouldBe
- setOf(tempDir.resolve("quack.txt").toFile())
- FileSearchingUtils.listFilesByPatterns(tempDir.toFile(),
- listOf("q*.txt"), true).toSet() shouldBe
- listOf("quack", "quack/quack", "quack/quack/quack")
- .map { tempDir.resolve("$it.txt").toFile() }.toSet()
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
deleted file mode 100644
index 704d3e319d1..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
+++ /dev/null
@@ -1,102 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import ch.qos.cal10n.verifier.MessageKeyVerifier
-import io.kotlintest.inspectors.forAll
-import io.kotlintest.matchers.collections.shouldNotBeEmpty
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-import java.io.File
-import java.io.IOException
-import java.nio.file.Files
-import java.nio.file.Path
-import java.nio.file.Paths
-import java.util.Locale
-import java.util.stream.Collectors
-import org.islandoftex.arara.model.AraraException
-
-class LanguageCoverageTest : ShouldSpec({
- "locale definitions" {
- /**
- * Helper method, checks the provided locale (all keys set?).
- *
- * @param locale The locale.
- * @return The size of the error list.
- */
- fun check(locale: Locale): Int {
- val errors = MessageKeyVerifier(Messages::class.java).verify(locale)
- errors.forEach(System.err::println)
- return errors.size
- }
-
- should("succeed instantiating known locale") {
- Language("en").locale.language shouldBe "en"
- }
- should("throw on unknown locale instantiation") {
- shouldThrow<AraraException> {
- Language("quack")
- }
- }
-
- should("not error on known localizations") {
- listOf("en", "de", "nl", "it").forAll {
- check(Locale(it)) shouldBe 0
- }
- check(Locale("en", "QN")) shouldBe 0
- check(Locale("pt", "BR")) shouldBe 0
- }
- }
- "language coverage" {
- /*
- * Tests the localized messages, checking if all messages are properly
- * quoted (but not necessarily whether they are loadable).
- */
- should("get all strings from every language") {
- // get all files
- val files = Files.list(
- Paths.get("src/main/resources/org/islandoftex/arara/localization"))
- .map { p: Path ->
- val f = p.toFile()
- if (f.name.endsWith("properties") && !f.isDirectory) f
- else null
- }
- .collect(Collectors.toList())
- .toList()
- .filterNotNull()
- files.shouldNotBeEmpty()
-
- // for each report, print
- // the corresponding entry
- files.map { file: File ->
- try {
- LanguageReport.analyze(file)
- } catch (exception: IOException) {
- throw AssertionError(
- "Fatal exception: an error was raised while " +
- "trying to read one of the languages. Please " +
- "make sure all languages in the provided " +
- "directory have read permission.")
- }
- }.forEach { report ->
- // debug output
- println(report.reference.name +
- "\t" + String.format(" %2.2f%%", report.coverage))
-
- // if there are problematic lines,
- // add the current language report
- if (report.lines.isNotEmpty()) {
- // legend: S = Simple message, single quotes should not be doubled
- // P = Parametrized message, single quotes must be doubled
-
- // build the beginning of the line
- println(report.reference.name)
- // print error lines
- println(report.lines)
- }
-
- report.coverage shouldBe 100.0f
- }
- }
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
deleted file mode 100644
index addcd0262cc..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
+++ /dev/null
@@ -1,143 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import java.io.File
-
-/**
- * Implements the language report model.
- *
- * @author Island of TeX
- * @version 5.0
- * @since 5.0
- */
-data class LanguageReport(
- /**
- * The file reference.
- */
- val reference: File,
- /**
- * Total of checked lines.
- */
- val total: Int,
- /**
- * List of problematic lines and their corresponding error types.
- */
- val lines: Map<Int, Char>
-) {
- /**
- * Language coverage of the file.
- */
- val coverage: Float
- get() = if (lines.isEmpty()) {
- 100f
- } else {
- (1f - lines.size.toFloat() / total) * 100f
- }
-
- companion object {
- /**
- * Analyzes the list of lines.
- *
- * @param file The file to read.
- * @return The language report.
- */
- internal fun analyze(file: File): LanguageReport {
- // holds the current line number
- var number = 1
- // holds the number of checked lines
- var checked = 0
-
- // flag that holds the
- // current analysis
- var check: Int
-
- val reportLines = mutableMapOf<Int, Char>()
-
- // check every line of the language file
- file.forEachLine { line ->
- // let's only analyze lines
- // that are not comments
- if (!line.trim().startsWith("#")) {
- // increment the checked
- // line counter
- checked++
-
- // line is a parametrized message
- check = if (line.contains("{0}")) {
- // check the corresponding pattern
- checkParametrizedMessage(line)
- } else {
- // check the corresponding pattern
- checkMessage(line)
- }
-
- // we found an error,
- // report it
- if (check != 0) {
- // add line and error type to the report
- reportLines[number] = if (check == 1) 'P' else 'S'
- }
- }
-
- // let's move to the next line
- number++
- }
-
- // return the language report
- return LanguageReport(
- reference = file,
- total = checked,
- lines = reportLines)
- }
-
- /**
- * Checks if the provided message follows the simple format.
- *
- * @param text Message.
- * @return An integer value.
- */
- private fun checkMessage(text: String): Int {
- var i = 0
- var c: Char
- for (element in text) {
- c = element
- i = if (c == '\'') {
- if (i == 1) {
- return 2
- } else {
- 1
- }
- } else {
- 0
- }
- }
- return 0
- }
-
- /**
- * Checks if the provided message follows the parametrized format.
- *
- * @param text Message.
- * @return An integer value.
- */
- private fun checkParametrizedMessage(text: String): Int {
- var i = 0
- var c: Char
- for (element in text) {
- c = element
- if (c == '\'') {
- i += 1
- } else {
- if (i != 0) {
- if (i != 2) {
- return 1
- } else {
- i = 0
- }
- }
- }
- }
- return 0
- }
- }
-}
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
deleted file mode 100644
index 92d38ebc9b8..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.localization
-
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-import java.util.Locale
-import org.islandoftex.arara.model.AraraException
-
-class LanguageTest : ShouldSpec({
- should("instantiate with known code") {
- Language("en").locale shouldBe Locale.ENGLISH
- }
-
- should("throw on unknown language") {
- shouldThrow<AraraException> {
- Language("quack")
- }
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
deleted file mode 100644
index 7580d8c81e2..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.model
-
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldNotThrow
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-
-class SessionTest : ShouldSpec({
- should("include all environment variables") {
- Session.clear()
- Session.updateEnvironmentVariables()
- Session.contains("environment:PATH") shouldBe true
- }
-
- should("properly check existence") {
- Session.clear()
- Session.put("A", "B")
- Session.contains("A") shouldBe true
- Session.contains("C") shouldBe false
- }
-
- should("support insertion") {
- Session.clear()
- Session.put("A", "B")
- Session.contains("A") shouldBe true
- }
-
- should("support get") {
- Session.clear()
- Session.put("A", "B")
- Session["A"] shouldBe "B"
- }
-
- should("support removal") {
- Session.clear()
- Session.put("A", "B")
- Session.put("C", "D")
- Session.contains("A") shouldBe true
- Session.contains("C") shouldBe true
- Session.remove("A")
- Session.contains("A") shouldBe false
- Session.contains("C") shouldBe true
- }
-
- should("clear itself") {
- Session.clear()
- Session.put("A", "B")
- Session.put("C", "D")
- Session.contains("A") shouldBe true
- Session.contains("C") shouldBe true
- Session.clear()
- Session.contains("A") shouldBe false
- Session.contains("C") shouldBe false
- }
-
- should("throw on unknown removal") {
- Session.clear()
- Session.put("A", "B")
- shouldNotThrow<AraraException> {
- Session.remove("A")
- }
- shouldThrow<AraraException> {
- Session.remove("C")
- }
- }
-
- should("throw on unknown getter") {
- Session.clear()
- Session.put("A", "B")
- Session["A"] shouldBe "B"
- shouldThrow<AraraException> {
- Session["C"]
- }
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
deleted file mode 100644
index b77b901ef6c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import io.kotlintest.shouldBe
-import io.kotlintest.specs.ShouldSpec
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.localization.Language
-
-class CommonUtilsTest : ShouldSpec({
- should("format bytes correctly") {
- Arara.config[AraraSpec.Execution.language] = Language("en")
- mapOf(800 to "800 B",
- 1000 to "1.0 kB",
- 1024 to "1.0 kB",
- 1000000 to "1.0 MB").forEach { (key, value) ->
- CommonUtils.byteSizeToString(key.toLong()) shouldBe value
- }
- }
-
- should("find system utils") {
- CommonUtils.isOnPath("echo") shouldBe true
- }
- should("not find utils with fantasy name") {
- // hopefully no one will have such a command in the path…
- CommonUtils.isOnPath("echoQuackForArara") shouldBe false
- }
-
- should("flatten lists correctly") {
- CommonUtils.flatten(listOf(1, 2, listOf(3, 4, listOf(5, 6))))
- .toSet() shouldBe (setOf(1, 2, 3, 4, 5, 6) as Set<Any>)
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
deleted file mode 100644
index a0cc52145a8..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
+++ /dev/null
@@ -1,139 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import io.kotlintest.DoNotParallelize
-import io.kotlintest.matchers.string.shouldContain
-import io.kotlintest.matchers.string.shouldNotContain
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldNotBe
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-import java.io.ByteArrayOutputStream
-import java.io.File
-import java.io.PrintStream
-import java.nio.file.Paths
-import kotlin.time.ExperimentalTime
-import org.islandoftex.arara.Arara
-import org.islandoftex.arara.configuration.AraraSpec
-import org.islandoftex.arara.configuration.Configuration
-import org.islandoftex.arara.filehandling.FileSearchingUtils
-import org.islandoftex.arara.model.AraraException
-import org.islandoftex.arara.model.Extractor
-import org.islandoftex.arara.model.Interpreter
-import org.islandoftex.arara.ruleset.DirectiveUtils
-
-@ExperimentalTime
-@DoNotParallelize
-class ExecutionTest : ShouldSpec({
- fun getPathForTest(name: String): String = "src/test/resources/executiontests/$name"
- fun outputForTest(testName: String, fileName: String = "$testName.tex"):
- String {
- val sysout = System.out
- val output = ByteArrayOutputStream()
- try {
- System.setOut(PrintStream(output))
- Arara.config[AraraSpec.Execution.workingDirectory] =
- Paths.get(getPathForTest(testName))
- Configuration.load()
- Arara.config[AraraSpec.Execution.verbose] = true
- FileSearchingUtils.discoverFile(fileName)
- val directives = DirectiveUtils.process(Extractor.extract(
- File("${getPathForTest(testName)}/$fileName")))
- Interpreter(directives).execute()
- return output.toByteArray().toString(Charsets.UTF_8)
- } catch (ex: Exception) {
- throw ex
- } finally {
- System.setOut(sysout)
- output.close()
- }
- }
-
- should("be able to store variables sessions") {
- outputForTest("sessions") shouldContain "MeowQuack"
- }
-
- should("honor falsy existence test") {
- val file = File(getPathForTest("conditionals") + "/conditionals.quack")
- if (file.exists()) file.delete()
- val output = outputForTest("conditionals")
- output shouldContain "QuackOne"
- output shouldContain "QuackFour"
- output shouldNotContain "QuackTwo"
- output shouldNotContain "QuackThree"
- }
- should("honor truthy existence (falsy contains) test") {
- val file = File(getPathForTest("conditionals") + "/conditionals.quack")
- file.writeText("Meow")
- val output = outputForTest("conditionals")
- file.delete()
- output shouldContain "QuackOne"
- output shouldContain "QuackFour"
- output shouldContain "QuackTwo"
- output shouldNotContain "QuackThree"
- }
- should("honor truthy contains test") {
- val file = File(getPathForTest("conditionals") + "/conditionals.quack")
- file.writeText("Duck")
- val output = outputForTest("conditionals")
- file.delete()
- output shouldContain "QuackOne"
- output shouldContain "QuackFour"
- output shouldContain "QuackTwo"
- output shouldContain "QuackThree"
- }
-
- should("track changes") {
- val file = File(getPathForTest("changes") + "/arara.yaml")
- if (file.exists()) file.delete()
- outputForTest("changes") shouldContain "QuackOne"
- outputForTest("changes") shouldNotContain "QuackOne"
- }
-
- should("gracefully halt on halt rule") {
- val output = outputForTest("halt")
- output shouldContain "QuackOne"
- output shouldNotContain "QuackTwo"
- CommonUtils.exitStatus shouldBe 0
- }
- should("forcefully halt on halt error rule") {
- val output = outputForTest("halt-error")
- output shouldContain "QuackOne"
- output shouldNotContain "QuackTwo"
- CommonUtils.exitStatus shouldNotBe 0
- }
-
- should("fail on invalid config") {
- val exception = shouldThrow<AraraException> {
- outputForTest("invalid-config")
- }
- exception.message shouldContain "could not parse the configuration"
- }
-
- should("read foreign extension") {
- val output = outputForTest("foreign-extension", "foreign-extension.my")
- output shouldContain "QuackOne"
- }
- should("fail on unknown extension") {
- shouldThrow<AraraException> {
- outputForTest("foreign-extension", "foreign-extension.xy")
- }
- }
- should("accept empty pattern on known extension") {
- val output = outputForTest("known-extension")
- output shouldContain "QuackOne"
- }
-
- should("execute option-less directives") {
- val output = outputForTest("simple-directive")
- output shouldContain "The echoer"
- output shouldContain "SUCCESS"
- }
- should("execute directive with options") {
- val output = outputForTest("directive-with-options")
- output shouldContain "The echoer"
- output shouldContain "batchmode"
- output shouldContain "SUCCESS"
- output shouldNotContain "FAILURE"
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt b/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
deleted file mode 100644
index cd41545ee9f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-package org.islandoftex.arara.utils
-
-import io.kotlintest.shouldBe
-import io.kotlintest.shouldThrow
-import io.kotlintest.specs.ShouldSpec
-
-class ExtensionTest : ShouldSpec({
- should("abbreviate strings correctly") {
- "Quack quack".abbreviate(6) shouldBe "Quack…"
- "Quack Quack".abbreviate(80) shouldBe "Quack Quack"
- shouldThrow<IllegalArgumentException> { "Quack".abbreviate(1) }
- }
-
- should("center strings correctly") {
- "Quack".center(3, '-') shouldBe "Quack"
- "Quack".center(9, '-') shouldBe "--Quack--"
- }
-
- should("wrap strings correctly") {
- "This text should be wrapped".wrap(10) shouldBe "This text\nshould be\nwrapped"
- }
-})
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arara.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arara.yaml
deleted file mode 100644
index 3014ff9662c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arara.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!database
-map:
- "/home/paulo/Projetos/arara/application/src/test/resources/executiontests/changes/changes.tex": "404aaef6" \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/changes.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/changes.tex
deleted file mode 100644
index 10646cc4123..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/changes.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: echoone if changed('tex')
-Quack
-\bye
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/changes/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/conditionals.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/conditionals.tex
deleted file mode 100644
index 35a3208e12f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/conditionals.tex
+++ /dev/null
@@ -1,6 +0,0 @@
-% arara: echoone
-% arara: echotwo if exists('quack')
-% arara: echothree if (exists('quack') && found('quack', 'Duck'))
-% arara: echofour
-Quack
-\bye
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echofour.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echofour.yaml
deleted file mode 100644
index 17db18947cf..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echofour.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echofour
-name: Test rule for conditionals 4
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackFour');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echothree.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echothree.yaml
deleted file mode 100644
index 4f718723217..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echothree.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echothree
-name: Test rule for conditionals 3
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackThree');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echotwo.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echotwo.yaml
deleted file mode 100644
index 61915393b52..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/conditionals/echotwo.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echotwo
-name: Test rule for conditionals 2
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackTwo');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/directive-with-options.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
deleted file mode 100644
index db521b5ce16..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
+++ /dev/null
@@ -1,6 +0,0 @@
-% arara: echoone: { interaction: batchmode }
-% arara: echoone: { synctex: 1 }
-% arara: echoone: { synctex: yes }
-% arara: echoone: { extensions: [aux, log, pdf] }
-Quack
-\bye
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/echoone.yaml
deleted file mode 100644
index 825edea9bba..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/directive-with-options/echoone.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne', interaction, synctex);
- }
-arguments:
-- identifier: interaction
- flag: >
- @{
- if ([ 'batchmode', 'nonstopmode', 'scrollmode',
- 'errorstopmode' ].contains(parameters.interaction)) {
- return '--interaction='.concat(parameters.interaction);
- }
- else {
- throwError('The provided interaction value is not valid.');
- }
- }
-- identifier: synctex
- flag: >
- @{
- isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
- }
-- identifier: extensions
- flag: >
- @{
- if (isList(parameters.extensions)) {
- return parameters.extensions;
- }
- else {
- throwError('I was expecting a list of extensions.');
- }
- }
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/arararc.yaml
deleted file mode 100644
index f1b78d5861f..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/arararc.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-!config
-paths:
- - './'
-filetypes:
- - extension: my
- pattern: ^\s*%\s+ \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.my b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.my
deleted file mode 100644
index 9947e30964c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.my
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: echoone
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.xy b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
deleted file mode 100644
index 9947e30964c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: echoone
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echotwo.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echotwo.yaml
deleted file mode 100644
index 61915393b52..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/echotwo.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echotwo
-name: Test rule for conditionals 2
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackTwo');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt-error.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt-error.tex
deleted file mode 100644
index cf8d291ccfb..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt-error.tex
+++ /dev/null
@@ -1,5 +0,0 @@
-% arara: echoone
-% arara: halt
-% arara: echotwo
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt.yaml
deleted file mode 100644
index 53df1a295b0..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt-error/halt.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-!config
-# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
-# All rights reserved.
-#
-# This rule is part of arara.
-identifier: halt
-name: Halt
-commands:
- - name: The halt trigger
- command: >
- @{
- halt(1);
- return true;
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echotwo.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echotwo.yaml
deleted file mode 100644
index 61915393b52..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/echotwo.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echotwo
-name: Test rule for conditionals 2
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackTwo');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.tex
deleted file mode 100644
index cf8d291ccfb..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.tex
+++ /dev/null
@@ -1,5 +0,0 @@
-% arara: echoone
-% arara: halt
-% arara: echotwo
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.yaml
deleted file mode 100644
index 1c14644bcbe..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/halt/halt.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-!config
-# Arara, the cool TeX automation tool
-# Copyright (c) 2020, Island of TeX
-# All rights reserved.
-#
-# This rule is part of arara.
-identifier: halt
-name: Halt
-authors:
-- Heiko Oberdiek
-- Island of TeX
-commands:
-- name: The halt trigger
- command: >
- @{
- halt(0);
- return true;
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/arararc.yaml
deleted file mode 100644
index e6edd71dba8..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/arararc.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/invalid-config.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/invalid-config.tex
deleted file mode 100644
index 24b11d5eb3d..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/invalid-config/invalid-config.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: pdftex
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/arararc.yaml
deleted file mode 100644
index 5342ec007e5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/arararc.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-!config
-paths:
- - './'
-filetypes:
- - extension: tex \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/known-extension.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/known-extension.tex
deleted file mode 100644
index 9947e30964c..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/known-extension/known-extension.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: echoone
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessionrule.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessionrule.yaml
deleted file mode 100644
index 9b26f740d71..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessionrule.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-!config
-identifier: sessionrule
-name: Test rule for sessions
-commands:
- - name: The echoer
- command: >
- @{
- getSession().put('quack', 'Quack');
- return getCommand('echo', 'Quack');
- }
- - name: The echoer mark II
- command: >
- @{
- return getCommand('echo', 'Meow' + getSession().get('quack'));
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessions.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessions.tex
deleted file mode 100644
index 9cfb354cdfd..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/sessions/sessions.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: sessionrule
-Quack
-\bye \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/arararc.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/arararc.yaml
deleted file mode 100644
index 54afa4c5fc5..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/arararc.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-!config
-paths:
- - './' \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/echoone.yaml b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/echoone.yaml
deleted file mode 100644
index 7c304b991fa..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/echoone.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-!config
-identifier: echoone
-name: Test rule for conditionals 1
-commands:
- - name: The echoer
- command: >
- @{
- return getCommand('echo', 'QuackOne');
- }
-arguments: []
diff --git a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/simple-directive.tex b/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/simple-directive.tex
deleted file mode 100644
index 8d8f2cf6972..00000000000
--- a/Master/texmf-dist/source/support/arara/src/test/resources/executiontests/simple-directive/simple-directive.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-% arara: echoone
-Quack
-\bye