diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2020-09-15 15:49:13 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2020-09-15 15:49:13 +0200 |
| commit | c98bd12f93961d1105b25b70fb7fe534fec1edd0 (patch) | |
| tree | f605244856a95784ab17c862a686ee19a0d119f6 /scripts | |
| parent | 7b3fb2a9d8d1caf5e3f081b479c1f04ce04841c0 (diff) | |
| download | muhqs-game-c98bd12f93961d1105b25b70fb7fe534fec1edd0.tar.gz muhqs-game-c98bd12f93961d1105b25b70fb7fe534fec1edd0.zip | |
add python script to generate latex from card data
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/generate_latex.py | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/scripts/generate_latex.py b/scripts/generate_latex.py new file mode 100755 index 00000000..5ca439a9 --- /dev/null +++ b/scripts/generate_latex.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +import argparse +import configparser +import pathlib +from typing import MutableMapping + +COLLECTION_TEMPLATE = \ +"""\\documentclass[a4paper,landscape]{{article}} + +% Ränder des Dokuments anpassen +\\usepackage[margin=6mm,top=5mm]{{geometry}} + +% Pakete dazuladen +\\input{{libs.tex}} +% Farbdefinitionen laden +\\input{{colors.tex}} +% \card-Commands laden +\\input{{tikzcards.tex}} + +\\usepackage{{standalone}} + +\\begin{{document}} +\\begin{{center}} +\\pagestyle{{empty}} +{0} +\\end{{center}} +\\end{{document}} +""" + +CARD_TEMPLATE = \ +"""\\documentclass[]{{standalone}} + +% Pakete dazuladen +\\input{{libs.tex}} +% Farbdefinitionen laden +\\input{{colors.tex}} +% \card-Commands laden +\\input{{tikzcards.tex}} + +\\begin{{document}} +\\begin{{tikzpicture}} +{0} +\\cardborder +\\end{{tikzpicture}} +\\end{{document}} +""" + +def file_for_card(card_name: str) -> pathlib.Path: + return pathlib.Path(f'{card_name.lower().replace(" ", "_")}.tex') + +def generate_card(card_name: str, card: MutableMapping): + """Generate a standalone tikz picture with the card data""" + + print(f'# {card_name} #') + for attr in card: + print(f'{attr}: {card[attr]}') + + card_content = f'\cardtype{card["type"].capitalize()}\n' + card_content += f'\cardtitle{{{card_name}}}\n' + card_content += f'\cardbuycost{{{card["buy"]}}}\n' + + if card['type'] == 'unit': + health = card['health'] + movement = card['movement'] + + # stats = f'\\faHeart: {health}\\\\ Movement: {movement}' + stats = f'Health: {health}\\\\ Movement: {movement}' + + attack = card.get('attack', None) + if attack: + attack_sym = '\\faSword' + if "Range" in attack: + attack_sym = '\\faBowArrow' + # stats += f'\\\\ {attack_sym}: {attack}' + stats += f'\\\\ Attack: {attack}' + + if 'effect' in card or 'full_action' in card: + ability_block = "" + + effect = card.get('effect', None) + if effect: + ability_block += f'Effect: {effect}' + + full_action = card.get('full_action', None) + if full_action: + if ability_block: + ability_block += '\\\\ ' + ability_block += f'\\faRotateRight: {full_action}' + + card_content += f'\cardsplitcontent{{{stats}}}{{{ability_block}}}' + else: + card_content += f'\cardcontent{{{stats}}}' + + + card_content += '\n' + + card_content += f'\cardplaycost{{{card["upkeep"]}}}' + elif card['type'] == 'spell': + card_content += f'\cardcontent{{{card["effect"]}}}\n' + card_content += f'\cardplaycost{{{card["play"]}}}' + elif card['type'] == 'artifact': + card_content += f'\cardcontent{{{card["effect"]}}}\n' + card_content += f'\cardplaycost{{{card["play"]}}}\n' + elif card['type'] == 'equipment': + card_content += f'\cardsplitcontent{{Durability: {card["durability"]}}}{{{card["effect"]}}}' + card_content += f'\cardplaycost{{{card["play"]}}}\n' + else: + print('WARNING: unknown card type {card["type"]}!') + + with open(file_for_card(card_name), 'w') as tex_file: + print(CARD_TEMPLATE.format(card_content), file=tex_file) + + +def main(): + """Generate one standalone tikz picture for each card in the input data""" + + parser = argparse.ArgumentParser(description='generate latex standalone cards') + parser.add_argument("datafile") + + args = parser.parse_args() + + data = configparser.ConfigParser() + data.read(args.datafile) + + collection_inputs = "" + cards = [card for card in data if card != 'DEFAULT'] + for i, card in enumerate(cards): + generate_card(card, data[card]) + collection_inputs += f'\\input{{cards/{file_for_card(card)}}}\n' + if i == 0 or i % 4 < 3: + collection_inputs += f'\\hspace{{5mm}}\n' + else: + collection_inputs += f'\\vspace{{5mm}}\n\n' + + collection_path = pathlib.Path(args.datafile) + with open(f'{collection_path.stem}.tex', 'w') as collection_file: + print(COLLECTION_TEMPLATE.format(collection_inputs), file=collection_file) + +if __name__ == '__main__': + main() |
