!config
# Arara, the cool TeX automation tool
# Copyright (c) 2023, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: pdfcrop
name: PDFCrop
authors:
- Island of TeX
commands:
- name: The cropping tool
 command: >
   @{
       base = getBasename(reference.fileName);
       input = base.concat('.pdf');
       return getCommand('pdfcrop', verbose, debug, engine,
              margins, clip, hires, ini, restricted, papersize,
              resolution, bbox, uncompress, options, input, output);
   }
arguments:
- identifier: output
 flag: >
   @{
       return isEmpty(parameters.output,
              getBasename(reference.fileName).
              concat('-crop.pdf'),
              parameters.output);
   }
 default: ''
- identifier: verbose
 flag: >
   @{
       return isTrue(parameters.verbose, '--verbose', '--noverbose');
   }
- identifier: debug
 flag: >
   @{
       return isTrue(parameters.debug, '--debug', '--nodebug');
   }
- identifier: engine
 flag: >
   @{
       engines = [ 'pdftex', 'xetex', 'luatex' ];
       if (engines.contains(parameters.engine)) {
           return '--'.concat(parameters.engine);
       }
       else {
           throwError('The provided engine is invalid.');
       }
   }
- identifier: margins
 flag: >
   @{
       if (isList(parameters.margins)) {
           if (parameters.margins.size() != 4) {
               throwError('Margins require 4 elements.');
           }
           else {
               ms = [];
               foreach (m : parameters.margins)
                   ms.add(m.toString());
               return [ '--margins', String.join(' ', ms) ];
           }
       }
       else {
         throwError('I was expecting a list.');
       }
   }
- identifier: clip
 flag: >
   @{
       return isTrue(parameters.clip, '--clip', '--noclip');
   }
- identifier: hires
 flag: >
   @{
       return isTrue(parameters.hires, '--hires', '--nohires');
   }
- identifier: ini
 flag: >
   @{
       return isTrue(parameters.ini, '--ini', '--noini');
   }
- identifier: restricted
 flag: >
   @{
       return isTrue(parameters.restricted, '--restricted');
   }
- identifier: papersize
 flag: >
   @{
       return [ '--papersize', parameters.papersize ];
   }
- identifier: resolution
 flag: >
   @{
       return [ '--resolution', parameters.resolution ];
   }
- identifier: bbox
 flag: >
   @{
       if (isList(parameters.bbox)) {
           if (parameters.bbox.size() != 4) {
               throwError('Bounding box require 4 elements.');
           }
           else {
               ms = [];
               foreach (m : parameters.bbox)
                   ms.add(m.toString());
               return [ '--margins', String.join(' ', ms) ];
           }
       }
       else {
         throwError('I was expecting a list.');
       }
   }
- identifier: uncompress
 flag: >
   @{
       return isTrue(parameters.uncompress, '--uncompress');
   }
- identifier: options
 flag: >
   @{
       if (isList(parameters.options)) {
           return parameters.options;
       }
       else {
           throwError('I was expecting a list of options.');
       }
   }