#!/usr/bin/env python3 """ Used as a tool by the Makefile. Updates only those files whose contents are changed by changes to the given yaml file. """ import sys from textwrap import dedent import yaml def read_cards(filename=None): """ Reads the given file as yaml into card information data. """ if filename is not None: with open(filename, 'r') as yaml_file: data = yaml.load(yaml_file, Loader=yaml.FullLoader) else: data = yaml.load(sys.stdin, Loader=yaml.FullLoader) return data def card_to_tex(card, deck, rarity): """ Returns a card's LaTeX as a string. """ head = f"""\ \\documentclass{{iditacard}} \\cardtype{{{card['type']}}} \\rarity{{{rarity}}} \\deck{{{deck}}} \\begin{{document}} \\begin{{card}} \\art{{{card['image']}}} """ effect_text = "\\quad".join(card['effects'] if 'effects' in card else []) tail = f"""\ \\name{{{card['name']}}} \\text{{{effect_text}}} \\flava{{{card['flavour']}}} \\type{{{card['type']}}} \\end{{card}} \\end{{document}}\ """ costs = card["costs"] costr = "" if 'energy' in costs and costs['energy'] != 0: costr += f" \\energy{{{costs['energy']}}}\n" if 'health' in costs and costs['health'] != 0: costr += f" \\health{{{costs['health']}}}\n" if 'risk' in costs and costs['risk'] != 0: costr += f" \\risk{{{costs['risk']}}}\n" return dedent(head) + costr + dedent(tail) def leg_to_tex(leg, level): """ Returns a leg's LaTeX as a string. """ head = f"""\ \\documentclass{{iditacard}} \\leglevel{{{level}}} \\begin{{document}} \\begin{{leg}} \\legname{{{leg['name']}}} """ spaces = "" for space in range(1, 11): if str(space) in leg['spaces']: icon = f"\\legspaceicon{{{leg['spaces'][space]}}}" spaces += f" \\onlegspace{{{space}}}{{{icon}}}\n" effect_text = "\\quad".join(leg['effects'] if 'effects' in leg else []) tail = f"""\ \\legeffect{{{effect_text}}} \\end{{leg}} \\end{{document}}\ """ return dedent(head) + spaces + dedent(tail) def dump_decks_to(decks, directory): """ Dumps all tex from decks to the given directory. For each deck in decks it will generate: - a directory within the given directory with the same name - .tex files for each card in the deck in the above directory - .list file in the given directory with the same name as the deck - one line in the list file for each pdf that would go into said deck """ return 'TODO' # TODO: fill out dump_decks_to, create dump_legs_to and call them with the # appropriate directory in main (using sys.argv) # # also write a script to extract all deck names for use in the makefile (to be # assigned to the DECK_LIST/DECK_DEPENDENCIES variables def main(): """ Main entry point. """ cards = read_cards() print(card_to_tex(cards['cards'][0], "thedeck", "therarity")) if __name__ == '__main__': main()