!config
# Arara, the cool TeX automation tool
# Copyright (c) 2023, 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.fileName);
   }
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 partial, result 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.');
       }
   }