266 lines
5.5 KiB
Markdown
266 lines
5.5 KiB
Markdown
# KiPlot YAML
|
|
|
|
You can find a lot of information about YAML format on internet. This document doesn't pretend to be a complete YAML
|
|
reference, just a complement to understand how to use it for the configuration files.
|
|
|
|
YAML files are structured data arranged in a way that's easy to understand.
|
|
|
|
## The basic idea
|
|
|
|
You associate data with labels. After a label you put a colon (**:**) and then the data:
|
|
|
|
```.{yaml}
|
|
version: 1
|
|
```
|
|
|
|
Here so associate the label **version** with the data value **1**.
|
|
|
|
## Basic data types
|
|
|
|
We use three basic data types:
|
|
|
|
- **number**: can be integer, floating point, positive and negative.
|
|
- **boolean**: can take only two values *true* and *false*.
|
|
- **string**: almost anything else.
|
|
|
|
Here are some examples for numbers:
|
|
|
|
```.{yaml}
|
|
v1: 1
|
|
v2: 5.3
|
|
v3: -3
|
|
```
|
|
|
|
Note that the decimal point is always a point, no matters what your locale settings indicate.
|
|
|
|
Here are some examples for booleans:
|
|
|
|
```.{yaml}
|
|
v1: true
|
|
v2: false
|
|
```
|
|
|
|
And here are some examples for strings:
|
|
|
|
```.{yaml}
|
|
v1: Hi!
|
|
v2: '3'
|
|
v3: "true"
|
|
v4: " I have spaces "
|
|
```
|
|
|
|
Note that quotes are optional and can be used to disambiguate.
|
|
|
|
## Compound data types
|
|
|
|
We use two types:
|
|
|
|
- **list**: just a list of data elements. Each element start with a hyphen (**-**).
|
|
- **dict**: dictionaries or maps. Just a bunch of label with associated data.
|
|
|
|
Here is an example for a list of strings (**list(string)** in our case):
|
|
|
|
```.{yaml}
|
|
- abc
|
|
- '3'
|
|
- "true"
|
|
- " I have spaces "
|
|
```
|
|
|
|
And here an example for a dict:
|
|
|
|
```.{yaml}
|
|
v1: Hi!
|
|
v2: '3'
|
|
v3: "true"
|
|
v4: " I have spaces "
|
|
```
|
|
|
|
The list and dict elements can also be other lists and/or dicts.
|
|
To understand how this is achieved we need one more thing.
|
|
|
|
## Indentation
|
|
|
|
YAML uses the indentation to group data that belongs to a label.
|
|
|
|
Here is an example of a list associated to a label:
|
|
|
|
```.{yaml}
|
|
people:
|
|
- John
|
|
- Cindy
|
|
- Luca
|
|
- Laura
|
|
```
|
|
|
|
We use two spaces, other values are possible, but you must keep coherence in the indentation.
|
|
And here we have a dict:
|
|
|
|
```.{yaml}
|
|
John:
|
|
age: 25
|
|
gender: male
|
|
```
|
|
|
|
And here is a mix of both:
|
|
|
|
```.{yaml}
|
|
people:
|
|
- John:
|
|
age: 25
|
|
gender: male
|
|
- Cindy
|
|
- Luca
|
|
- Laura
|
|
```
|
|
|
|
The indentation shows that `age` and `gender` are attached to `John`, not directly applied to `people`.
|
|
|
|
Note that lists can be nested, here is a list of lists (**list(list(string))**):
|
|
|
|
```.{yaml}
|
|
list_of_lists:
|
|
- - a
|
|
- b
|
|
- c
|
|
- - 1
|
|
- 2
|
|
- 3
|
|
- 4
|
|
```
|
|
|
|
In this example we have a list with two elements, the first is a list with three elements and the second a list with four
|
|
elements.
|
|
|
|
## Compact notation
|
|
|
|
You can use a more compat notation for small lists and dicts.
|
|
The following list:
|
|
|
|
```.{yaml}
|
|
list_of_lists:
|
|
- - a
|
|
- b
|
|
- c
|
|
- - 1
|
|
- 2
|
|
- 3
|
|
- 4
|
|
```
|
|
|
|
Can be defined in the following way:
|
|
|
|
```.{yaml}
|
|
list_of_lists:
|
|
- [ a, b, c ]
|
|
- [ 1, 2, 3, 4 ]
|
|
```
|
|
|
|
And this example:
|
|
|
|
```.{yaml}
|
|
people:
|
|
- John:
|
|
age: 25
|
|
gender: male
|
|
- Cindy
|
|
- Luca
|
|
- Laura
|
|
```
|
|
|
|
Can be defined as:
|
|
|
|
```.{yaml}
|
|
people:
|
|
- John: { age: 25, gender: male }
|
|
- Cindy
|
|
- Luca
|
|
- Laura
|
|
```
|
|
|
|
## Putting all together
|
|
|
|
So a **.kiplot.yaml** file is basically a dict containing the following labels:
|
|
|
|
- `kiplot`: contains a dict with special global options. Currently the format version used.
|
|
- `preflight`: contains a dict with pre-flight (or pre-run) actions.
|
|
- `outputs`: contains a list of outputs (or targets).
|
|
|
|
## Advanced tricks
|
|
|
|
If you have various similar outputs with repeating options you can use *anchors*.
|
|
This a nice YAML feature that allows to memorize a value and reuse it.
|
|
|
|
Here is an example:
|
|
|
|
```.{yaml}
|
|
kiplot:
|
|
version: 1
|
|
|
|
outputs:
|
|
- name: PcbDraw 1
|
|
comment: "PcbDraw test top"
|
|
type: pcbdraw
|
|
dir: PcbDraw
|
|
options: &pcb_draw_ops
|
|
format: svg
|
|
style:
|
|
board: "#1b1f44"
|
|
copper: "#00406a"
|
|
silk: "#d5dce4"
|
|
pads: "#cfb96e"
|
|
clad: "#72786c"
|
|
outline: "#000000"
|
|
vcut: "#bf2600"
|
|
highlight_on_top: false
|
|
highlight_style: "stroke:none;fill:#ff0000;opacity:0.5;"
|
|
highlight_padding: 1.5
|
|
libs:
|
|
- default
|
|
- eagle-default
|
|
remap:
|
|
L_G1: "LEDs:LED-5MM_green"
|
|
L_B1: "LEDs:LED-5MM_blue"
|
|
L_Y1: "LEDs:LED-5MM_yellow"
|
|
PHOTO1: "yaqwsx:R_PHOTO_7mm"
|
|
J8: "yaqwsx:Pin_Header_Straight_1x02_circle"
|
|
'REF**': "dummy:dummy"
|
|
G***: "dummy:dummy"
|
|
svg2mod: "dummy:dummy"
|
|
JP1: "dummy:dummy"
|
|
JP2: "dummy:dummy"
|
|
JP3: "dummy:dummy"
|
|
JP4: "dummy:dummy"
|
|
no_drillholes: False
|
|
mirror: False
|
|
highlight:
|
|
- L_G1
|
|
- L_B1
|
|
- R10
|
|
- RV1
|
|
show_components: all
|
|
vcuts: True
|
|
warnings: visible
|
|
dpi: 600
|
|
|
|
- name: PcbDraw 2
|
|
comment: "PcbDraw test bottom"
|
|
type: pcbdraw
|
|
dir: PcbDraw
|
|
options:
|
|
<<: *pcb_draw_ops
|
|
style: set-red-enig
|
|
bottom: True
|
|
show_components:
|
|
- L_G1
|
|
- L_B1
|
|
remap:
|
|
```
|
|
|
|
Here we have two outputs: 'PcbDraw 1' and 'PcbDraw 2'. The options for are big because we are including a custom color style
|
|
and a list of component remappings. In this case 'PcbDraw 2' wants to use the same options, but with some changes.
|
|
So we use an anchor in the first options list (`&pcb_draw_ops`) and then we copy the data with `<<: *pcb_draw_ops`.
|
|
The good thing is that we can overwrite options. Here we choose another `style` (ridiculous example), the bottom side
|
|
(good example), a different list of components to show and we eliminate the `remap` dict.
|
|
|