aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2021-12-06 16:26:57 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2021-12-06 16:26:57 +0100
commit2799c4584f3555157561982660fc2d97ef3509ab (patch)
tree5b8b6ed05d075f002d24dfc43b2fc416ece07272 /scripts
parent97f1beada92fd0b0896add4070a9ac496faadf8d (diff)
downloadmuhqs-game-2799c4584f3555157561982660fc2d97ef3509ab.tar.gz
muhqs-game-2799c4584f3555157561982660fc2d97ef3509ab.zip
add deck support and three decks
Add script to geenrate latex file containing all cards in a deck. Add make rules to generate and build the deck latex. Add decks: * spell slinger * recruiter rush * approach
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/generate_deck.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/scripts/generate_deck.py b/scripts/generate_deck.py
new file mode 100755
index 00000000..18c73cc5
--- /dev/null
+++ b/scripts/generate_deck.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+import argparse
+import pathlib
+from pathlib import Path
+from typing import MutableMapping, Tuple
+
+DECK_TEMPLATE = \
+"""\\documentclass[a4paper,landscape]{{article}}
+\\usepackage[margin=6mm,top=5mm]{{geometry}}
+\\input{{libs.tex}}
+\\input{{colors.tex}}
+\\input{{tikzcards.tex}}
+\\usepackage{{standalone}}
+\\begin{{document}}
+\\begin{{center}}
+\\pagestyle{{empty}}
+{CARDS}
+\\end{{center}}
+\\end{{document}}"""
+
+GAME_ROOT = Path(__file__).parent.parent
+CARDS_DATA_DIR = GAME_ROOT / 'data' / 'cards'
+
+CARDS_TO_SETS = {}
+SETS_TO_CARDS = {}
+
+
+# build up the card lookup dictionaries
+for set_dir in CARDS_DATA_DIR.iterdir():
+ set_name = set_dir.name
+ SETS_TO_CARDS[set_name] = []
+ for card in set_dir.iterdir():
+ SETS_TO_CARDS[set_name].append(card.stem)
+ CARDS_TO_SETS[card.stem] = set_name
+
+
+def generate_markdown(deck: list[str], language='en', indentation=3):
+ """Output a markdown enumeration"""
+ return ''
+
+
+
+def generate_latex(deck: list[str], language='en'):
+ """Generate a document containing all included cards"""
+
+ cards = []
+ for line in deck:
+ line = line.strip()
+ amount, card = line.split(' ', maxsplit=1)
+ card = card.replace(' ', '_').lower()
+ containing_set = CARDS_TO_SETS[card]
+ for _ in range(int(amount)):
+ cards.append(f'\\includestandalone{{cards/{language}/{containing_set}/{card}}}')
+ print(DECK_TEMPLATE.format(CARDS='\n'.join(cards)))
+
+
+def main():
+ """Generate one standalone tikz picture for each card in the input data"""
+
+ parser = argparse.ArgumentParser(
+ description='generate decks from deck descriptions')
+ parser.add_argument(
+ 'deck',
+ help=
+ 'deck file or directory containing deck files defining the decks to generate'
+ )
+ parser.add_argument('--format',
+ choices=['latex', 'markdown'],
+ default='latex',
+ help='output format')
+ parser.add_argument('--language',
+ choices=['en', 'de'],
+ default='en',
+ help='the language of the cards to output')
+
+ args = parser.parse_args()
+
+ data_files = [args.deck]
+ data_path = pathlib.Path(args.deck)
+ if data_path.is_dir():
+ data_files = data_path.glob('*.deck')
+
+ for data_file in data_files:
+ with open(data_file, 'r', encoding="utf8") as deck_file:
+ deck = deck_file.readlines()
+
+ if args.format == 'latex':
+ generate_latex(deck, language=args.language)
+ elif args.format == 'markdown':
+ generate_markdown(deck, language=args.language)
+
+
+if __name__ == '__main__':
+ main()