From c13b8861b2b831d4b1f251a307eb9f987bf887d8 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 11 Oct 2020 14:31:56 +0200 Subject: add ability to generate all cards defined in a data dir and build sets --- latex/Makefile | 15 ++++++++-- latex/base.tex | 59 ------------------------------------ latex/equipments.tex | 48 ------------------------------ latex/magic.tex | 68 ------------------------------------------ latex/sets/base.tex | 59 ++++++++++++++++++++++++++++++++++++ latex/sets/equipments.tex | 48 ++++++++++++++++++++++++++++++ latex/sets/magic.tex | 68 ++++++++++++++++++++++++++++++++++++++++++ scripts/generate_latex.py | 76 ++++++++++++++++++++++++++++------------------- 8 files changed, 232 insertions(+), 209 deletions(-) delete mode 100644 latex/base.tex delete mode 100644 latex/equipments.tex delete mode 100644 latex/magic.tex create mode 100644 latex/sets/base.tex create mode 100644 latex/sets/equipments.tex create mode 100644 latex/sets/magic.tex diff --git a/latex/Makefile b/latex/Makefile index 2dba3efa..76e74ab2 100644 --- a/latex/Makefile +++ b/latex/Makefile @@ -12,11 +12,15 @@ COMMON_TEX_FILES = libs.tex colors.tex tikzcards.tex CARDS_DIR = cards CARD_SOURCES = $(shell find $(CARDS_DIR) -name "*.tex") +SETS_DIR = sets +SETS_SOURCES = $(shell find $(SETS_DIR) -name "*.tex") + VERBOSE = @ PDF_DIR = ./build -CARD_PDFS = $(notdir $(CARD_SOURCES:.tex=.pdf)) -CARD_PDFS_PREFIXED = $(addprefix $(PDF_DIR)/,$(CARD_PDFS)) +ALL_SOURCES = $(CARD_SOURCES) $(SETS_SOURCES) +PDFS = $(notdir $(ALL_SOURCES:.tex=.pdf)) +PDFS_PREFIXED = $(addprefix $(PDF_DIR)/,$(PDFS)) CARD_PNGS = $(notdir $(CARD_SOURCES:.tex=.png)) CARD_PNGS_PREFIXED = $(addprefix $(PDF_DIR)/,$(CARD_PNGS)) @@ -26,7 +30,7 @@ MAKEFILE_LIST = Makefile ASSETS_PATH = ./assets PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):" -all: $(PDF_DIR)/cards.pdf $(CARD_PDFS_PREFIXED) $(CARD_PNGS_PREFIXED) +all: $(PDF_DIR)/cards.pdf $(PDFS_PREFIXED) $(CARD_PNGS_PREFIXED) $(PDF_DIR)/cards.pdf: cards.tex $(CARD_SOURCES) $(COMMON_TEX_FILES) $(MAKEFILE_LIST) @echo "building › › $@" @@ -38,6 +42,11 @@ $(PDF_DIR)/%.pdf : $(CARDS_DIR)/%.tex $(COMMON_TEX_FILES) $(MAKEFILE_LIST) @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi $(VERBOSE) $(PDFLATEX_ENV) $(PDFLATEX) --output-directory $(PDF_DIR) $(CARDS_DIR)/$*.tex +$(PDF_DIR)/%.pdf : $(SETS_DIR)/%.tex $(CARD_SOURCES) $(COMMON_TEX_FILES) $(MAKEFILE_LIST) + @echo "card › $@" + @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi + $(VERBOSE) $(PDFLATEX_ENV) $(PDFLATEX) --output-directory $(PDF_DIR) $^ + $(PDF_DIR)/%.png : $(PDF_DIR)/%.pdf $(MAKEFILE_LIST) @echo "png › $@" @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi diff --git a/latex/base.tex b/latex/base.tex deleted file mode 100644 index 8419f84a..00000000 --- a/latex/base.tex +++ /dev/null @@ -1,59 +0,0 @@ -\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} -\input{cards/sword.tex} -\hspace{5mm} -\input{cards/great_sword.tex} -\hspace{5mm} -\input{cards/shield.tex} -\hspace{5mm} -\input{cards/tower_shield.tex} -\vspace{5mm} - -\input{cards/archer.tex} -\hspace{5mm} -\input{cards/knight.tex} -\hspace{5mm} -\input{cards/fighter.tex} -\hspace{5mm} -\input{cards/pikeman.tex} -\vspace{5mm} - -\input{cards/cavalry.tex} -\hspace{5mm} -\input{cards/tax_collector.tex} -\hspace{5mm} -\input{cards/pioneer.tex} -\hspace{5mm} -\input{cards/recruiter.tex} -\vspace{5mm} - -\input{cards/recruit.tex} -\hspace{5mm} -\input{cards/missionary.tex} -\hspace{5mm} -\input{cards/advisor.tex} -\hspace{5mm} -\input{cards/cavl._archer.tex} -\vspace{5mm} - -\input{cards/palisade.tex} -\hspace{5mm} - -\end{center} -\end{document} - diff --git a/latex/equipments.tex b/latex/equipments.tex deleted file mode 100644 index 75aa6b16..00000000 --- a/latex/equipments.tex +++ /dev/null @@ -1,48 +0,0 @@ -\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} -\input{cards/armor.tex} -\hspace{5mm} -\input{cards/relic.tex} -\hspace{5mm} -\input{cards/banner.tex} -\hspace{5mm} -\input{cards/gear.tex} -\vspace{5mm} - -\input{cards/poisoned_dagger.tex} -\hspace{5mm} -\input{cards/mace.tex} -\hspace{5mm} -\input{cards/plate_armor.tex} -\hspace{5mm} -\input{cards/cloak.tex} -\vspace{5mm} - -\input{cards/spear.tex} -\hspace{5mm} -\input{cards/smith.tex} -\hspace{5mm} -\input{cards/shatter!.tex} -\hspace{5mm} -\input{cards/reclaim!.tex} -\vspace{5mm} - - -\end{center} -\end{document} - diff --git a/latex/magic.tex b/latex/magic.tex deleted file mode 100644 index d8dddcbd..00000000 --- a/latex/magic.tex +++ /dev/null @@ -1,68 +0,0 @@ -\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} -\input{cards/defense!.tex} -\hspace{5mm} -\input{cards/heal!.tex} -\hspace{5mm} -\input{cards/charge!.tex} -\hspace{5mm} -\input{cards/rush!.tex} -\vspace{5mm} - -\input{cards/attack!.tex} -\hspace{5mm} -\input{cards/move!.tex} -\hspace{5mm} -\input{cards/stumble!.tex} -\hspace{5mm} -\input{cards/more!.tex} -\vspace{5mm} - -\input{cards/select!.tex} -\hspace{5mm} -\input{cards/die!.tex} -\hspace{5mm} -\input{cards/clone!.tex} -\hspace{5mm} -\input{cards/no!.tex} -\vspace{5mm} - -\input{cards/mine!.tex} -\hspace{5mm} -\input{cards/isolate!.tex} -\hspace{5mm} -\input{cards/shroud!.tex} -\hspace{5mm} -\input{cards/pierce!.tex} -\vspace{5mm} - -\input{cards/ritual!.tex} -\hspace{5mm} -\input{cards/switch!.tex} -\hspace{5mm} -\input{cards/transmute!.tex} -\hspace{5mm} -\input{cards/appear!.tex} -\vspace{5mm} - -\input{cards/catalyst.tex} -\hspace{5mm} - -\end{center} -\end{document} - diff --git a/latex/sets/base.tex b/latex/sets/base.tex new file mode 100644 index 00000000..8419f84a --- /dev/null +++ b/latex/sets/base.tex @@ -0,0 +1,59 @@ +\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} +\input{cards/sword.tex} +\hspace{5mm} +\input{cards/great_sword.tex} +\hspace{5mm} +\input{cards/shield.tex} +\hspace{5mm} +\input{cards/tower_shield.tex} +\vspace{5mm} + +\input{cards/archer.tex} +\hspace{5mm} +\input{cards/knight.tex} +\hspace{5mm} +\input{cards/fighter.tex} +\hspace{5mm} +\input{cards/pikeman.tex} +\vspace{5mm} + +\input{cards/cavalry.tex} +\hspace{5mm} +\input{cards/tax_collector.tex} +\hspace{5mm} +\input{cards/pioneer.tex} +\hspace{5mm} +\input{cards/recruiter.tex} +\vspace{5mm} + +\input{cards/recruit.tex} +\hspace{5mm} +\input{cards/missionary.tex} +\hspace{5mm} +\input{cards/advisor.tex} +\hspace{5mm} +\input{cards/cavl._archer.tex} +\vspace{5mm} + +\input{cards/palisade.tex} +\hspace{5mm} + +\end{center} +\end{document} + diff --git a/latex/sets/equipments.tex b/latex/sets/equipments.tex new file mode 100644 index 00000000..75aa6b16 --- /dev/null +++ b/latex/sets/equipments.tex @@ -0,0 +1,48 @@ +\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} +\input{cards/armor.tex} +\hspace{5mm} +\input{cards/relic.tex} +\hspace{5mm} +\input{cards/banner.tex} +\hspace{5mm} +\input{cards/gear.tex} +\vspace{5mm} + +\input{cards/poisoned_dagger.tex} +\hspace{5mm} +\input{cards/mace.tex} +\hspace{5mm} +\input{cards/plate_armor.tex} +\hspace{5mm} +\input{cards/cloak.tex} +\vspace{5mm} + +\input{cards/spear.tex} +\hspace{5mm} +\input{cards/smith.tex} +\hspace{5mm} +\input{cards/shatter!.tex} +\hspace{5mm} +\input{cards/reclaim!.tex} +\vspace{5mm} + + +\end{center} +\end{document} + diff --git a/latex/sets/magic.tex b/latex/sets/magic.tex new file mode 100644 index 00000000..d8dddcbd --- /dev/null +++ b/latex/sets/magic.tex @@ -0,0 +1,68 @@ +\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} +\input{cards/defense!.tex} +\hspace{5mm} +\input{cards/heal!.tex} +\hspace{5mm} +\input{cards/charge!.tex} +\hspace{5mm} +\input{cards/rush!.tex} +\vspace{5mm} + +\input{cards/attack!.tex} +\hspace{5mm} +\input{cards/move!.tex} +\hspace{5mm} +\input{cards/stumble!.tex} +\hspace{5mm} +\input{cards/more!.tex} +\vspace{5mm} + +\input{cards/select!.tex} +\hspace{5mm} +\input{cards/die!.tex} +\hspace{5mm} +\input{cards/clone!.tex} +\hspace{5mm} +\input{cards/no!.tex} +\vspace{5mm} + +\input{cards/mine!.tex} +\hspace{5mm} +\input{cards/isolate!.tex} +\hspace{5mm} +\input{cards/shroud!.tex} +\hspace{5mm} +\input{cards/pierce!.tex} +\vspace{5mm} + +\input{cards/ritual!.tex} +\hspace{5mm} +\input{cards/switch!.tex} +\hspace{5mm} +\input{cards/transmute!.tex} +\hspace{5mm} +\input{cards/appear!.tex} +\vspace{5mm} + +\input{cards/catalyst.tex} +\hspace{5mm} + +\end{center} +\end{document} + diff --git a/scripts/generate_latex.py b/scripts/generate_latex.py index f9f6eb21..cabed084 100755 --- a/scripts/generate_latex.py +++ b/scripts/generate_latex.py @@ -46,7 +46,7 @@ CARD_TEMPLATE = \ \\end{{document}} """ -SET_SYMBOLS = {'base': 'base', 'magic': 'magic', 'equipments': 'equipments'} +SET_SYMBOLS = {'base': 'base', 'magic': 'magic', 'equipments': 'equipments', 'nautics': 'nautics', 'misc': ''} LATEX_ROOT = pathlib.Path(os.getcwd()) ASSETS_DIR = LATEX_ROOT / 'assets' @@ -75,11 +75,14 @@ def generate_card(card_name: str, card: MutableMapping): card_content += f'\cardbuycost{{{card["buy"]}}}\n' if card['type'] == 'unit': - health = card['health'] - movement = card['movement'] + stats = '' + if 'health' in card: + stats += f'Health: {card["health"]}' - # stats = f'\\faHeart: {health}\\\\ \\faShoePrints: {movement}' - stats = f'Health: {health}\\\\ Movement: {movement}' + if 'movement' in card: + if stats: + stats += '\\\\ ' + stats += f'Movement: {card["movement"]}' attack = card.get('attack', None) if attack: @@ -87,7 +90,9 @@ def generate_card(card_name: str, card: MutableMapping): if "Range" in attack: attack_sym = '\\ding{246}' # stats += f'\\\\ {attack_sym}: {attack}' - stats += f'\\\\ Attack: {attack}' + if stats: + stats += '\\\\ ' + stats += f'Attack: {attack}' if 'effect' in card or 'full_action' in card: ability_block = "" @@ -103,28 +108,30 @@ def generate_card(card_name: str, card: MutableMapping): ability_block += f'\\faRedo: {full_action}' card_content += f'\cardsplitcontent{{{stats}}}{{{ability_block}}}' - else: + elif stats: card_content += f'\cardcontent{{{stats}}}' card_content += '\n' - card_content += f'\cardplaycost{{{card["upkeep"]}}}' + if 'upkeep' in card: + card_content += f'\cardplaycost{{{card["upkeep"]}}}' + elif card['type'] == 'spell': card_content += f'\cardcontent{{{card["effect"]}}}\n' - card_content += f'\cardplaycost{{{card["play"]}}}\n' 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{{\\faRecycle: {card["durability"]}}}{{{card["effect"]}}}' card_content += f'\cardsplitcontent{{Durability: {card["durability"]}}}{{{card["effect"]}}}\n' - card_content += f'\cardplaycost{{{card["play"]}}}\n' else: print('WARNING: unknown card type {card["type"]}!') + if 'play' in card: + card_content += f'\cardplaycost{{{card["play"]}}}\n' + if card['set'] in SET_SYMBOLS: card_content += f'\cardmodule{{{SET_SYMBOLS[card["set"]]}}}' else: @@ -138,7 +145,7 @@ 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', help='ini file defining the card to generate') + parser.add_argument('data', help='ini file or directory containing ini files defining the cards to generate') parser.add_argument('--latex-root', help='path to the latex root directory') args = parser.parse_args() @@ -151,25 +158,32 @@ def main(): global ASSETS_DIR ASSETS_DIR = LATEX_ROOT / 'assets' - data = configparser.ConfigParser() - data.read(args.datafile) - - collection_inputs = "" - cards = [card for card in data if card != 'DEFAULT'] - for i, card in enumerate(cards): - card_content = data[card] - card_content = dict(card_content) - card_content['set'] = pathlib.Path(args.datafile).stem - generate_card(card, card_content) - 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(LATEX_ROOT / f'{collection_path.stem}.tex', 'w') as collection_file: - print(COLLECTION_TEMPLATE.format(collection_inputs), file=collection_file) + + data_files = [args.data] + data_path = pathlib.Path(args.data) + if data_path.is_dir(): + data_files = data_path.glob('*.ini') + + for f in data_files: + data = configparser.ConfigParser() + data.read(f) + + collection_inputs = "" + cards = [card for card in data if card != 'DEFAULT'] + for i, card in enumerate(cards): + card_content = data[card] + card_content = dict(card_content) + card_content['set'] = pathlib.Path(f).stem + generate_card(card, card_content) + 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(f) + with open(LATEX_ROOT / 'sets' / f'{collection_path.stem}.tex', 'w') as collection_file: + print(COLLECTION_TEMPLATE.format(collection_inputs), file=collection_file) if __name__ == '__main__': main() -- cgit v1.2.3