summaryrefslogtreecommitdiffstats
path: root/flashcards
blob: e0ba54806caa9a62fc87646fcb85702979fe3dc3 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/python3

import re
import sys
from pathlib import Path
from random import shuffle

class Color:
   PURPLE = '\033[95m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   END = '\033[0m'

#print color.BOLD + 'Hello World !' + color.END

cardRegex = "CARD: "
prefixLength = len(cardRegex)

# Returns a list of Path objects, containing the path to each valid file provided
def getFileList():
    fileList = []
    if len(sys.argv) > 1:
        for f in sys.argv[1:]:
            path = Path(f)
            if path.exists() and path.is_file():
                fileList.append(f)
        return fileList
    else:
        print("Missing arguments")
        sys.exit()

# Returns cards in the form [(front, back)]
def createCardList(files):
    cards = []
    for f in files:
        cards = cards + extractCards(f)
    return cards

# Extracts cards from a single file into a list of the form [(front, back)]
def extractCards(f):
    front = ""
    back = ""
    cards = []
    with open(f) as cardFile:
        for l in cardFile:
            match = re.match(cardRegex, l)
            if match:
                if front != "":
                    cards.append([front.strip(), back.strip()])
                    back = ""
                front = match.string[prefixLength:]
            else:
                back += l
    # do the last front-back pair before returning
    cards.append([front.strip(), back.strip()])
    return cards

# Waits for user input and reacts accordingly
def wait():
    cmd = input().strip()
    if cmd.startswith("q") or cmd.startswith("quit") or cmd.startswith("exit"):
        sys.exit(0)

# Loops serving cards to the user until the program is exited
def serveCards(cards):
    while True:
        for i, card in enumerate(cards):
            print("----------------------------------------------------------------------------(" + str(i + 1) + "/" + str(len(cards)) + ")")
            print(Color.BLUE + Color.BOLD + card[0] + Color.END)
            wait()
            print(card[1])
            wait()

def debugCards(cardList):
    for c in cardList:
        print("Front:", c[0])
        print("Back:", c[1])

def main():
    files = getFileList()
    cards = createCardList(files)
    shuffle(cards)
    serveCards(cards)

if __name__ == "__main__":
    main()