!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.');
        }
    }
