summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml')
-rw-r--r--Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml90
1 files changed, 90 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml b/Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml
new file mode 100644
index 00000000000..fe39fa534a7
--- /dev/null
+++ b/Master/texmf-dist/scripts/arara/rules/arara-rule-makeglossaries.yaml
@@ -0,0 +1,90 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: makeglossaries
+name: MakeGlossaries
+authors:
+- Island of TeX
+commands:
+- name: The MakeGlossaries software
+ command: >
+ @{
+ if (clean.isEmpty())
+ {
+ return getCommand('makeglossaries', options,
+ getBasename(reference.getName()));
+ }
+ else {
+ prefix = [];
+ if (isUnix()) {
+ prefix = [ 'rm', '-f' ];
+ }
+ else {
+ prefix = [ 'cmd', '/c', 'del' ];
+ }
+
+ base = getBasename(reference);
+ removals = [];
+
+ removals.add(getCommand(prefix, base.concat(".glsdefs")));
+
+ lines = readFromFile(base.concat('.').concat('aux'));
+
+ java.util.regex.Pattern glsPattern =
+ java.util.regex.Pattern.compile(
+ "\\\\@newglossary\\{.*\\}\\{(.*)\\}\\{(.*)\\}\\{(.*)\\}");
+
+ java.util.regex.Pattern istPattern =
+ (clean[0] == 'partial' ? null :
+ java.util.regex.Pattern.compile("\\\\@istfilename\\{(.*)\\}"));
+
+ foreach (line: lines)
+ {
+ matcher = glsPattern.matcher(line);
+
+ if (matcher.matches())
+ {
+ foreach(extension: [matcher.group(1), matcher.group(2), matcher.group(3)])
+ {
+ removals.add(getCommand(prefix, base.concat('.').concat(extension)));
+ }
+ }
+ else if (istPattern != null)
+ {
+ matcher = istPattern.matcher(line);
+
+ if (matcher.matches())
+ {
+ removals.add(getCommand(prefix, matcher.group(1)));
+ istPattern = null;
+ }
+ }
+ }
+
+ return removals;
+ }
+ }
+arguments:
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
+- identifier: clean
+ flag: >
+ @{
+ if ([ 'all', 'partial' ].contains(parameters.clean)) {
+ return parameters.clean;
+ }
+ else {
+ throwError('The provided clean value is not valid.');
+ }
+ }