#+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