110 lines
3.4 KiB
Markdown
110 lines
3.4 KiB
Markdown
# HLDS data format
|
|
|
|
HLDS is the Haldis Language for Describing Servings. It defines the menu you see when ordering in
|
|
Haldis.
|
|
|
|
There is syntax highlighting support for editors in `etc/` in the Haldis repository.
|
|
|
|
## Indentation
|
|
Indentation requires hard **tabs**. Spaces will not work.
|
|
|
|
## Identifiers
|
|
You must choose an identifier for each location, dish, choice, option and tag. Identifiers may
|
|
consist of numbers, hyphens, underscores and lowercase letters of the alphabet (a through z).
|
|
|
|
* Allowed: `0-my_identifier`
|
|
* Disallowed: ~~`0 My Identifié`~~
|
|
|
|
## Locations
|
|
|
|
A HLDS file consists of one or more locations. Each location starts with a header, which is enclosed
|
|
in "fences" of at least three equal signs. The first line of the header contains the ID and name of
|
|
the location. Further lines contain the metadata of the location, such as the phone number and
|
|
OpenStreetMap element. In the future, the phone number and such will be fetched from OpenStreetMap.
|
|
|
|
```hlds
|
|
==========================
|
|
ocean_garden: Ocean Garden
|
|
osm https://www.openstreetmap.org/node/2275105003
|
|
phone +32 9 222 72 74
|
|
address Zwijnaardsesteenweg 399, 9000 Gent
|
|
website http://oceangarden.byethost3.com/
|
|
# Comments are allowed too!
|
|
==========================
|
|
```
|
|
|
|
## Dishes
|
|
|
|
A location consists of dishes. Spaces can be used to align the elements of your dish (but that's
|
|
not required).
|
|
|
|
```hlds
|
|
dish cheeseburger: Cheeseburger € 2.9
|
|
dish assortment: Twijfelaar € 3
|
|
```
|
|
|
|
## Inline choices
|
|
Dishes can contain choices. There are two types:
|
|
* `single_choice` is a required choice where the user must choose one option.
|
|
* `multi_choice` is an optional choice where the user can choose zero or more options.
|
|
|
|
```hlds
|
|
dish fries: Frietjes
|
|
single_choice size: Formaat
|
|
extra_small: Extra small € 1.8
|
|
small: Small € 2
|
|
medium: Medium € 2.5
|
|
large: Large € 3.3
|
|
multi_choice sauce: Saus
|
|
ketchup: Ketchup € 1.4
|
|
mayo: Mayonaise € 1.4
|
|
bicky: Bickysaus € 1.4
|
|
stew: Stoofvleessaus € 1.9
|
|
```
|
|
|
|
## Common choices
|
|
Choices that are used more than once, can be declared once and referenced in multiple dishes.
|
|
|
|
```hlds
|
|
bami_nasi: Bami of nasi
|
|
bami: Bami
|
|
nasi: Nasi
|
|
|
|
dish wok3: Studentenwok 3 kip bami/nasi zonder saus € 6
|
|
single_choice bami_nasi
|
|
|
|
dish wok5: Studentenwok 5 babi pangang € 6
|
|
single_choice bami_nasi
|
|
```
|
|
|
|
## Descriptions
|
|
You can add descriptions to dishes, choices and options. Separate name and description with ` -- `.
|
|
|
|
```hlds
|
|
dish dishid: Name -- This is a description € 3
|
|
```
|
|
|
|
## Tags
|
|
|
|
**Note:** Only the `{no_text}` tag is supported at this moment. You can ignore other tags for now.
|
|
|
|
You can add tags after ` :: `. Tags are `{identifier}`. You can use tags to attach more information
|
|
about a dish or option in a structured way. For example: `{has_meat}` signals to vegetarians that
|
|
they should avoid this.
|
|
|
|
The order is always id, name, description, tags, price (not all have to be present of course).
|
|
|
|
```hlds
|
|
dish dishid: Name -- This is a description :: {has_meat} € 3
|
|
```
|
|
|
|
The `{no_text}` tag signals that an option is not to be shown in a dish's description. This is
|
|
useful for choices that have a default that needs not be read when ordering.
|
|
|
|
```hlds
|
|
veggie: Vegetarische opties
|
|
meat: Niet vegetarisch :: {has_meat} {no_text}
|
|
tofu: Vegetarisch met tofu
|
|
falafel: Vegetarisch met falafel
|
|
vegan: Veganistisch
|
|
```
|