KiBot/docs/source/configuration/substitution.rst

117 lines
3.4 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. index::
single: preprocessing
single: definitions
pair: configuration; substitution
.. _yaml-substitution:
Doing YAML substitution or preprocessing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sometimes you could want to change values in the YAML depending on
external stuff, or just want to be able to change something for each
variant run.
In this case you can use external tools to create various YAML files
using a template, but you can also use KiBots definitions.
The definitions allows you to replace tags like ``@VARIABLE@`` by some
specified value. These definitions can be specified at the command line
using the ``-E`` option. As an example: ``-E UNITS=millimeters`` will
replace all ``@UNITS@`` markers by ``millimeters``. This is applied to
all YAML files loaded, so this propagates to all the imported YAML
files.
You can use ``-E`` as many times as you need.
Also note that the ``--def-from-env`` option adds all the environment
variables as definitions.
.. index::
pair: definitions; default
Default definitions
^^^^^^^^^^^^^^^^^^^
A configuration file using the ``@VARIABLE@`` tags wont be usable
unless you provide proper values for **all** de used variables. When
using various tags this could be annoying. KiBot supports defining
default values for the tags. Here is an example:
.. code:: yaml
kibot:
version: 1
outputs:
- name: 'gerbers_@ID@'
comment: "Gerbers with definitions"
type: gerber
output_id: '_@ID@'
layers: '@LAYERS@'
...
definitions:
ID: def_id
LAYERS: F.Cu
Note that from the YAML point this is two documents in the same file.
The second document is used to provide default values for the
definitions. As defaults they have the lowest precedence.
.. index::
pair: definitions; during import
.. _definitions-during-import:
Definitions during import
^^^^^^^^^^^^^^^^^^^^^^^^^
When importing a configuration you can specify values for the
``@VARIABLE@`` tags. This enables the creation of parametrizable
imports. Using the example depicted in `Default
definitions <#default-definitions>`__ saved to a file named
*simple.kibot.yaml* you can use:
.. code:: yaml
kibot:
version: 1
import:
- file: simple.kibot.yaml
definitions:
ID: external_copper
LAYERS: "[F.Cu, B.Cu]"
This will import *simple.kibot.yaml* and use these particular values.
Note that they have more precedence than the definitions found in
*simple.kibot.yaml*, but less precedence than any value passed from the
command line.
.. index::
pair: definitions; recursive expansion
Recursive definitions expansion
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When KiBot expands the ``@VARIABLE@`` tags it first applies all the
replacements defined in the command line, and then all the values
collected from the ``definitions``. After doing a round of replacements
KiBot tries to do another. This process is repeated until nothing is
replaced or we reach 20 iterations. So you can define a tag that
contains another tag.
As an example, if the configuration shown in `Definitions during
import <#definitions-during-import>`__ is stored in a file named
*top.kibot.yaml* you could use:
.. code:: shell
kibot -v -c top.kibot.yaml -E ID=@LAYERS@
This will generate gerbers for the front/top and bottom layers using
*[F.Cu, B.Cu]* as output id. So youll get *light_control-B_Cu_[F.Cu,
B.Cu].gbr* and *light_control-F_Cu_[F.Cu, B.Cu].gbr*.