Menu files for Haldis, in the HLDS format
Go to file
topvennie 8a5238de86 Merge pull request 'feat: add pasta zaak' (#15) from add-la-bicyclette into master
Reviewed-on: #15
2024-02-27 10:28:45 +00:00
LICENSE Add license 2020-09-18 19:52:22 +02:00 Rename indentation section and fix small issue in example 2021-06-21 00:14:04 +02:00
fitchen.hlds Initial commit 2020-09-18 19:41:59 +02:00
fritoloog.hlds Veggie zonder meat -.- 2023-10-09 19:07:10 +00:00
gouden_sate.hlds Fix met suggesties van Midgard 2022-05-02 12:21:38 +00:00
hawaiian_poke_bowl.hlds Syntax change: :: changed to double space and is required 2021-06-20 23:58:08 +02:00
la_bicylette.hlds feat: add pasta zaak 2024-02-20 18:33:16 +01:00
ocean_garden.hlds Inflatie 2023-01-17 19:13:54 +01:00
patrick_foleys_drinks.hlds little fixes 2022-05-18 22:46:05 +02:00
patrick_foleys_food.hlds fix: add pies to menu 2023-05-08 12:04:26 +02:00
pita_uniq.hlds Inflatie 2023-06-23 22:50:25 +02:00
pizza_roma.hlds spaces to tabs 2023-11-09 19:38:27 +00:00
pizza_santa.hlds Syntax change: :: changed to double space and is required 2021-06-20 23:58:08 +02:00
prima_donna.hlds Syntax change: :: changed to double space and is required 2021-06-20 23:58:08 +02:00
prima_donna_lan.hlds fix lookbrood lan 2022-10-21 15:10:58 +00:00
s5.hlds Syntax change: :: changed to double space and is required 2021-06-20 23:58:08 +02:00 Syntax change: :: changed to double space and is required 2021-06-20 23:58:08 +02:00
simpizza.hlds Hot & Cheesy is echt niet lekker, niet bestellen 2022-06-06 18:46:20 +02:00

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. For VSCode there is a plug-in in the standard repository.

Tabs and spaces

Indentation at the beginning of the line requires hard tabs (spaces will not work).

For alignment (putting things in the same column between lines) spaces are required (tabs will not work). Example ( for tab and · for space):

↦   single_choice·size:·Formaat
↦   ↦   extra_small:·Extra small··€·1.8
↦   ↦   small:·······Small········€·2
↦   ↦   medium:······Medium·······€·2.5
↦   ↦   large:·······Large········€·3.3


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é


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.

ocean_garden: Ocean Garden
	phone   +32 9 222 72 74
	address Zwijnaardsesteenweg 399, 9000 Gent
	# Comments are allowed too!


A location consists of dishes. Spaces can be used to align the elements of your dish (but that's not required).

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.
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.

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


You can add descriptions to dishes, choices and options. Separate name and description with --.

dish dishid: Name -- This is a description  € 3

Tags and price

Note: Only the {no_text} tag is supported at this moment. You can ignore other tags for now.

The tag and price part starts with at least two spaces: .

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).

dish dishid: Name -- This is a description  {has_meat} € 3

The special {no_text} tag signals that an option is to be hidden when showing a dish in an order's list of dishes. This is useful for choices that have an implicit default that need not be read by the person making the order.

veggie: Vegetarische opties
	meat:    Niet vegetarisch  {has_meat} {no_text}
	tofu:    Vegetarisch met tofu
	falafel: Vegetarisch met falafel
	vegan:   Veganistisch