diff --git a/compile.py b/compile.py new file mode 100644 index 0000000..93bb4f3 --- /dev/null +++ b/compile.py @@ -0,0 +1,28 @@ +from subprocess import run +import sys +import json + +from common import format_timestamp + +journal = json.load(open('journal.json')) + +matches = [] +keywords = sys.argv[1:] + +for day, obj in journal.items(): + for entry in obj['entries']: + for block in entry['blocks']: + if isinstance(block, str): + words = block.lower().split() + if any(kw in words for kw in keywords): + matches.append(( + format_timestamp(entry['timestamp']), + '\n\n'.join([b for b in entry if isinstance(b, str)]) + )) + +buf = '' + +for (ts, c) in matches: + buf += f'{ts}\n\n{c}\n\n' + +run(['nvim', '-'], input=buf.encode('utf-8')) diff --git a/foods b/foods index a43e5c0..85f8a41 100644 --- a/foods +++ b/foods @@ -1,4 +1,218 @@ +Popcorn +Energy 375kcal +Fat 4.3g +SaturatedFat 0.6g +Carbs 74g +Fiber 13g +Sugar 0.9g +Protein 11g + +Kompot +Energy 60kcal +Carbs 15g +Sugar 14g + +WhippedCream +Energy 252kcal +Fat 23g +SaturatedFat 18g +Carbs 9.5g +Sugar 3.2g + +GrandinoCookies +Energy 513kcal +Fat 27.2g +SaturatedFat 12.5g +Carbs 60g +Sugar 40.2g +Protein 5.4g +Salt 0.6g + +FourCheesePizza +Energy 215kcal +Fat 9.4g +SaturatedFat 5.5g +Carbs 20.7g +Sugar 3.3g +Protein 10.9g +Salt 1g + +TeriyakiSauce +Energy 150kcal +Fat 0g +Carbs 40g +Sugar 37g +Protein 3g +Salt 5.1g + +ChowMeinNoodles +Energy 364kcal +Fat 1g +SaturatedFat 0.4g +Carbs 75.6g +Sugar 1.7g +Protein 11.8g +Salt 0.43g + +MaggiBuljong +Energy 5kcal + +RedLentil +Energy 350kcal +Fat 1.8g +SaturatedFat 0.3g +Carbs 51g +Sugar 1.3g +Fiber 11g +Protein 26g +Salt 0.1g + +KauraRieskanen +Energy 161kcal +Fat 2.7g +SaturatedFat 0.5g +Carbs 25.4g +Sugar 1.9g +Fiber 6.6g +Protein 5.4g +Salt 1.6g + +Margarita +Energy 60kcal + +Mayonnaise +Energy 328kcal +Fat 30g +SaturatedFat 2.4g +Carbs 12.2g +Sugar 8.2g +Protein 0.6g +Salt 1.81g + +CannedPeas +Energy 79kcal +Fat 1.1g +SaturatedFat 0.3g +Carbs 7.3g +Sugar 2.2g +Protein 5.2g +Salt 0.46g + +Carrot +Energy 40kcal +Fat 0.2g +Carbs 9.6g +Fiber 2.8g +Sugar 4.7g +Protein 0.9g + +Cucumber +Energy 10kcal +Fat 0.2g +Carbs 2.2g +Fiber 0.7g +Sugar 1.4g +Protein 0.6g + +TatraHelbed +Energy 365kcal +Fat 2.6g +SaturatedFat 0.4g +Carbs 74g +Sugar 1.2g +Fiber 4.5g +Protein 9.6g + +SoySauce +Energy 77kcal +Carbs 3.2g +Sugar 0.6g +Protein 10g +Salt 16.9g + +Pear +Energy 57kcal +Fat 0.1g +Carbs 15g +Fiber 3.1g +Sugar 10g +Protein 0.4g + +AlmondMilk +Energy 26kcal +Fat 1.3g +SaturatedFat 0.1g +Carbs 3.1g +Protein 0.5g +Salt 0.13g + +NyhtoKaura +Energy 213kcal +Fat 5.9g +SaturatedFat 0.8g +Carbs 10g +Sugar 3.4g +Fiber 3g +Protein 28g +Salt 1.5g + +HamburgerSauce +Energy 333kcal +Fat 31.2g +SaturatedFat 2.4g +Carbs 10g +Carbs 7.2g +Protein 1.8g +Salt 1.24g + +AmericanCheese +Energy 247kcal +Fat 17g +SaturatedFat 11g +Carbs 6.5g +Sugar 6.5g +Protein 17g +Salt 3.25g + +Cheese +Energy 329kcal +Fat 24g +SaturatedFat 14g +Protein 27g +Salt 1.5g + +HalloumiCheese +Energy 319kcal +Fat 25g +SaturatedFat 16g +Carbs 1.5g +Protein 22.0g +Salt 2.7g + +HamburgerBread +Energy 284kcal +Fat 5.9g +SaturatedFat 0.6g +Carbs 46.3g +Sugar 6.9g +Fiber 3.4g +Protein 10.6g +Salt 1.2g + +Tomato +Energy 18kcal +Fat 0.2g +Carbs 3.9g +Fiber 1.2g +Sugar 2.6g +Protein 0.9g + +Pepsi +Energy 41kcal +Carbs 11g +Sugar 11g + KauraPasta Energy 359kcal Fat 3.5g @@ -277,13 +491,6 @@ Salt Energy 0kcal Salt 100g -Cheese -Energy 329kcal -Fat 24g -SaturatedFat 14g -Protein 27g -Salt 1.5g - Potato Energy 68kcal Fat 0.2g @@ -480,9 +687,9 @@ Carbs 4.7g Sugar 3.7g Honey -Energy 64kcal -Carbs 17g -Sugar 17g +Energy 305kcal +Carbs 80g +Sugar 80g Coffee Energy 0kcal @@ -551,6 +758,15 @@ Sugar 7.2g Fiber 4.7g Protein 0.95g +OrangeIcecream +Energy 197kcal +Fat 8.4g +SaturatedFat 5.6g +Carbs 27.8g +Sugar 25.6g +Protein 2.6g +Salt 0.07g + VanilliIceCream Energy 160kcal Fat 6.3g @@ -700,14 +916,6 @@ Sugar 3.4g Protein 21.4g Salt 0.05 -HalloumiCheese -Energy 319kcal -Fat 25g -SaturatedFat 16g -Carbs 1.5g -Protein 22.0g -Salt 2.7g - Salmon Energy 208kcal Fat 13g @@ -772,6 +980,12 @@ SojaRouha 300g PeasCornPepper 225g TOTAL 2460g +RiceAndVeggies +BrownRice 700g +PeasCornPepper 450g +Oil 40g +TOTAL 1960g + MilkSoup Margarine 30g Milk 500g @@ -821,6 +1035,10 @@ BakedPotatoes Potato 1440g Oil 40g +BakedPotatoes2 +Potato 1150g +Oil 60g + SeedAndOilSalad Salad 120g Cucumber 120g @@ -868,6 +1086,12 @@ Milk 450g WholeGrainBread 50g Flour 90g +VegeKotlet3 +HarkisRouheseos 200g +Milk 400g +Egg 195g +Flour 70g + RoastedVeggies2 Broccoli 300g Oil 70g @@ -906,3 +1130,42 @@ Oil 40g KauraPasta 500g PeasCornPepper 450g TOTAL 1720g + +Smoothie +AlmondMilk 500g +Banana 144g +Pear 210g +Apple 90g +Sugar 10g + +TatraHelbedDone +TatraHelbed 290g +Margarine 60g +TOTAL 1440g + +PotatoSalad +Potato 1060g +PickleSlices 280g +CannedPeas 250g +Carrot 390g +Cucumber 300g +SourCream 600g +Mayonnaise 400g +Sugar 15g + +LentilSoup +RedLentil 400g +MaggiBuljong 20g +Oil 35g +Carrot 350g +Potato 400g +TOTAL 2635g + +BreadEgg +WholeGrainBread 40g +Oil 20g +Egg 130g + +PopcornDone +Popcorn 150g +Oil 40g diff --git a/generate.py b/generate.py new file mode 100644 index 0000000..027b068 --- /dev/null +++ b/generate.py @@ -0,0 +1,65 @@ +from common import format_timestamp +import json + +def generate_godword(value): + return f"{' '.join(value[:10])}\n{' '.join(value[10:])}" + +def generate_habits(value): + return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items()) + +header_modules = { + 'godword': generate_godword, + 'habits': generate_habits, +} + +def generate_diet(block): + _, amount, food = block.values() + return f'@diet {amount}g {food}' + +def generate_exercise(block): + if block['kind'] == 'walk': + return f'@exercise {block["minutes"]}min {block["distance"]}km {block["steps"]}steps' + +def generate_default(block): + return f'@{block["type"]} {block["value"]}' + +def generate_timer(block): + return f'@{block["type"]} {format_timestamp(block["timestamp"])}' + +entry_modules = { + 'diet': generate_diet, + 'exercise': generate_exercise, + 'hide': lambda _: '@hide', + 'post': generate_timer, +} + +journal = json.load(open('journal.json')) + +for curr_day in journal: + header, entries = journal[curr_day].values() + + result = f'# {curr_day}\n' + + for name, value in header.items(): + result += f'\n{name.title()}:\n' + result += header_modules[name](value) + result += '\n' + + def format_block(block): + if isinstance(block, str): + return block + else: + return entry_modules[block['type']](block) + + for entry in entries: + result += f'\n{format_timestamp(entry["timestamp"])} ' + if len(entry['blocks']) == 1: + result += f'{format_block(entry["blocks"][0])}\n' + else: + result += '\n' + for block in entry['blocks']: + result += f'\n{format_block(block)}\n' + + print(result) + + diff --git a/parse.py b/parse.py index 3a9ba17..023e3ea 100644 --- a/parse.py +++ b/parse.py @@ -50,8 +50,15 @@ def parse_post(block): block = block[19:] except: timestamp = None - content = block - return {'timestamp': timestamp, 'content': content} + + content = block.strip() + + result = {} + if content: + result['content'] = content + if timestamp: + result['timestamp'] = timestamp + return result def parse_notes(block): tag, source, title = block.splitlines() @@ -59,7 +66,7 @@ def parse_notes(block): def parse_diet(block): tag, amount, food = block.split() - amount = float(amount.removesuffix('g')) + amount = int(amount.removesuffix('g')) return {'amount': amount, 'food': food} def parse_timer(block):