summaryrefslogtreecommitdiffstats
path: root/README.org
blob: 8d4f97325fd1bf8bf12f0b10d31c026d866731b5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#+STARTUP: hidestars

* example
#+begin_src conf
  # title
  @ fried onion

  ## INGREDIENTS
  # `!/path/to/rcp` to include it
  # `2!/path/to/rcp` to include two of it
  #  `a = b` set ingredient a to quantity b
  onion = 2
  salt = 1tsp
  sugar = 1/2tsp
  butter = 3tbsp

  # sep
  ---

  ## STEPS
  # `-` means preping step
  # `>` means cooking step
  # `+` means serving step
  # in a step you can add a time range in `[]`
  # each step might produce some new ingredients `=>`

  - chop $onion to thin stripes => sliced onion
  > melt $butter in pan
  > add ${sliced onion} and $salt
  > cook while stirring [for 10 minutes]
  > add $sugar
  > continue cooking [until onion caramelises]
  + serve cold
#+end_src

* cmd

  cmd [-switches] path/to/file ...

  I should be able to:
  - list ingredients of recipies (to buy)
  - pretty print steps for recipe (prep/cook/both)
  - search for KEY in ingredients and show availiable recipes with KEY as ingredient
  - should accept multiple keys and a switch for AND or OR between them
    + or a custom syntax like =cmd -s"eggs & (tomatoes | potatoes)" lib/*.rcp=
    + or =cmd -[A|O] -stomatoes -stomatoes -seggs lib/*rcp= (And/Or)
  - *ls* ???
    + list recipies with path
    + or with title
    + or both

* parse
** Input
   Recipe file [[example]]
** Output
   Struct with raw steps and subrecipes

* eval

** Input
   parser output
** Output
   Struct with
   - finalised ingredients
   - resolved steps
   - subrecipes still remain

** EvalSteps

   Step also has:
   - duration :: string or null
   - result? :: string or null
   - variables? :: list of strings or null
   
   #+begin_src C
     struct resolved_step {
       char * text;
       char * duration;
       char * result;
       char ** ingredients;
     }
   #+end_src


* Food compiler

  recipes are text files defined above

  ingredients and results from steps are variables linking back to the quantity or the step that produced them

  the food compiler parses these files into internal C structures, the errors reported are syntax ones

  then they can be eval'd which merges any subrecipe ingredients and steps into one plain recipe