aboutsummaryrefslogtreecommitdiff
path: root/scripts/generate_card_hover_links.py
blob: e86177acb8f691b35efdf2adfc27a8beb9cfa5b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python3
import argparse
import pathlib
from pathlib import Path
import re
from typing import MutableMapping, Tuple
import sys

from data import CARDS_TO_SETS

PATTERN = re.compile('\{\{(?P<card>.*?)\}\}')

CSS_STYLE = 'position: absolute; bottom: 0; left: 0; transform: translate(50%, 50%);'

HOVERABLE_LINK = \
f'''<a href="{{link_target}}"
  onmouseover="var o=document.getElementById('placeholder-{{pid}}');o.src='{{img_target}}';o.width=355;o.height=532;"
  onmouseout="var o=document.getElementById('placeholder-{{pid}}');o.src='hover-placeholder.png';o.width=1;o.height=1;"
>
{{link_text}}
<img src="hover-placeholder.png" id="placeholder-{{pid}}" width=1 height=1 style="{CSS_STYLE}" />
</a>'''

PLACEHOLDER_ID = 0


def replace_with_link(match, language) -> str:
    card = match.group('card')
    link_text = f'<em>{card}</em>'

    cannonical_name = card.lower().replace(' ', '_')
    card_listing_target = cannonical_name.replace('_', '-').replace('!', '')
    link_target = f'{language}/cards_listing.html#{card_listing_target}'
    card_img = f'latex-build/{language}/{CARDS_TO_SETS[cannonical_name]}/{cannonical_name}.png'
    global PLACEHOLDER_ID
    placeholder_id = PLACEHOLDER_ID
    PLACEHOLDER_ID += 1
    return HOVERABLE_LINK.format(link_target=link_target,
                                 pid=placeholder_id,
                                 img_target=card_img,
                                 link_text=link_text)


def replace_all_links(string: str, language='en') -> str:
    """Replace a document containing all included cards"""
    sub_func = lambda match: replace_with_link(match, language=language)

    return re.sub(PATTERN, sub_func, string)


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('markdown_file',
                        help='file in which links should be replaced',
                        nargs='?')
    parser.add_argument('--language',
                        choices=['en', 'de'],
                        default='en',
                        help='the language of the cards to output')

    args = parser.parse_args()

    if args.markdown_file:
        markdown_path = Path(args.markdown_file)

        with open(markdown_path, 'r', encoding="utf8") as markdown_file:
            content = markdown_file.read()
    else:
        content = input()

    print(replace_all_links(content, language=args.language))


if __name__ == '__main__':
    main()