!config
# Arara, the cool TeX automation tool
# Copyright (c) 2023, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: bib2gls
name: Bib2Gls
authors:
- Island of TeX
commands:
- name: The Bib2Gls software
command: >
@{
if (!clean.isEmpty())
{
prefix = [];
if (isUnix()) {
prefix = [ 'rm', '-f', '-v' ];
}
else {
prefix = [ 'cmd', '/c', 'del' ];
}
base = getBasename(reference);
removals = [];
lines = readFromFile(base.concat('.').concat('aux'));
java.util.regex.Pattern resourcePattern =
java.util.regex.Pattern.compile(
"\\\\glsxtr@resource\\{.*\\}\\{([^\\}]+)\\}");
if (!trans.isEmpty())
{
if (trans[0] == getOriginalFile())
{
throwError('I cannot remove the main file reference.');
}
removals.add(getCommand(prefix, trans));
}
else
{
removals.add(getCommand(prefix, base.concat('.glg')));
}
foreach (line: lines)
{
matcher = resourcePattern.matcher(line);
if (matcher.matches())
{
removals.add(getCommand(prefix, matcher.group(1).concat('.glstex')));
}
}
return removals;
}
else
{
return getCommand('bib2gls', dir, trans, group, interpret,
breakspace, trimfields, recordcount, recordcountunit,
cite, verbose, merge, locale, uniscript, packages,
ignore, custom, mapformats, options,
getBasename(reference.fileName));
}
}
arguments:
- identifier: dir
flag: >
@{
return ['--dir', parameters.dir]
}
- identifier: trans
flag: >
@{
if ([ 'tex', 'ltx', 'cls', 'sty', 'bib',
'dtx', 'ins', 'def', 'ldf' ].contains(parameters.trans)) {
throwError('Forbidden transcript extension');
}
return ['--log-file', getBasename(reference.fileName)+"."+parameters.trans]
}
- identifier: locale
flag: >
@{
return ['--locale', parameters.locale]
}
- identifier: group
flag: >
@{
isTrue(parameters.group, '--group', '--no-group')
}
- identifier: interpret
flag: >
@{
isTrue(parameters.interpret, '--interpret', '--no-interpret')
}
- identifier: breakspace
flag: >
@{
isTrue(parameters.breakspace, '--break-space', '--no-break-space')
}
- identifier: trimfields
flag: >
@{
isTrue(parameters.trimfields, '--trim-fields', '--no-trim-fields')
}
- identifier: recordcount
flag: >
@{
isTrue(parameters.recordcount, '--record-count', '--no-record-count')
}
- identifier: recordcountunit
flag: >
@{
isTrue(parameters.recordcountunit, '--record-count-unit',
'--no-record-count-unit')
}
- identifier: cite
flag: >
@{
isTrue(parameters.cite, '--cite-as-record', '--no-cite-as-record')
}
- identifier: verbose
flag: >
@{
isTrue(parameters.verbose, '--verbose', '--no-verbose')
}
- identifier: merge
flag: >
@{
isTrue(parameters.merge, '--merge-wrglossary-records',
'--no-merge-wrglossary-records')
}
- identifier: uniscript
flag: >
@{
isTrue(parameters.uniscript, '--support-unicode-script',
'--no-support-unicode-script')
}
- identifier: packages
flag: >
@{
if (isList(parameters.packages)) {
elements = [];
foreach (element : parameters.packages) {
elements.add('--packages');
elements.add(element);
}
return elements;
}
else {
throwError('I was expecting a list of package names.');
}
}
- identifier: ignore
flag: >
@{
if (isList(parameters.ignore)) {
elements = [];
foreach (element : parameters.ignore) {
elements.add('--ignore-packages');
elements.add(element);
}
return elements;
}
else {
throwError('I was expecting a list of package names.');
}
}
- identifier: custom
flag: >
@{
if (isList(parameters.custom)) {
elements = [];
foreach (element : parameters.custom) {
elements.add('--custom-packages');
elements.add(element);
}
return elements;
}
else {
throwError('I was expecting a list of package names.');
}
}
- identifier: mapformats
flag: >
@{
if (isList(parameters.mapformats)) {
elements = [];
foreach (element : parameters.mapformats) {
if (isList(element) && element.size() == 2) {
elements.add('--map-format');
elements.add(element.get(0) + ':' + element.get(1));
}
else {
throwError('I was expecting a map ' +
'format list [<key>, <value>] ');
}
}
return elements;
}
else {
throwError('I was expecting mapformats: [ [<key>, <value>], ' +
'..., [<key>, <value>] ].');
}
}
- identifier: options
flag: >
@{
if (isList(parameters.options)) {
return parameters.options;
}
else {
throwError('I was expecting a list of options.');
}
}
- identifier: clean
flag: >
@{
return isTrue(parameters.clean, 'true', '');
}