#!/usr/bin/env python3 import argparse from pathlib import Path from data import name2set 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}}""" def generate_markdown(deck: list[str], language='en', indentation=0): # pylint: disable=W0613 """Output a markdown enumeration""" m = [] for line in deck: line = line.strip() amount, card = line.split(' ', maxsplit=1) m += [f'{indentation}* {card}'] * int(amount) return ''.join(m) 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 = name2set(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 = 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()