diff options
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.yaml | 90 |
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.'); + } + } |