]> git.armaanb.net Git - lightcards.git/blob - lightcards/lightcards.py
Cache the stack and headers
[lightcards.git] / lightcards / lightcards.py
1 # Markdown flashcard utility
2 # Armaan Bhojwani 2021
3
4 import argparse
5 from curses import wrapper
6 import os
7 from random import shuffle
8 import sys
9
10 from . import parse, progress
11 from .display import Display
12 from .deck import Status
13
14
15 def parse_args():
16     parser = argparse.ArgumentParser(description="Terminal flashcards from Markdown")
17     parser.add_argument("inp",
18                         metavar="input file",
19                         type=str,
20                         nargs=1)
21     parser.add_argument("-f", "--flip",
22                         action='store_true',
23                         help="show second column first")
24     parser.add_argument("-p", "--purge",
25                         action='store_true',
26                         help="don't check cached info before starting")
27     parser.add_argument("-P", "--purge-all",
28                         action='store_true',
29                         help="don't check cached info before starting")
30     parser.add_argument("-r", "--reverse",
31                         action='store_true',
32                         help="reverse card order")
33     parser.add_argument("-s", "--shuffle",
34                         action='store_true',
35                         help="shuffle card order")
36     parser.add_argument("-v", "--version",
37                         action='version',
38                         version="lightcards 0.4.0")
39     return parser.parse_args()
40
41
42 def show(args, stack, headers):
43     """
44     Manipulate deck according to passed arguments, and send it to the display
45     functions
46     """
47     if args.purge:
48         progress.purge(stack)
49     if args.purge_all:
50         progress.purge_all()
51
52     ida = progress.dive("status", stack)
53     if ida and not args.purge:
54         idx = ida
55     else:
56         idx = Status()
57
58     stackb = progress.dive("stack", stack)
59     if stackb and not args.purge:
60         stack = stackb
61
62     headerb = progress.dive("headers", stack)
63     if headerb and not args.purge:
64         headers = headerb
65
66     if args.flip:
67         for x in stack:
68             x[0], x[1] = x[1], x[0]
69         headers[0], headers[1] = headers[1], headers[0]
70     if args.shuffle:
71         shuffle(stack)
72     elif args.reverse:
73         stack.reverse()
74
75     win = Display(stack, headers, idx)
76     wrapper(win.run)
77
78
79 def reparse():
80     """Parse arguments and input file again"""
81     args = parse_args()
82     os.system(f"$EDITOR {args.inp[0]}"),
83     return parse.parse_html(parse.md2html(args.inp[0]))
84
85 def get_orig():
86     """Return original header and stack"""
87     return((headers, stack))
88
89 def main(args=sys.argv):
90     args = parse_args()
91     global headers, stack
92     (headers, stack) = parse.parse_html(parse.md2html(args.inp[0]))
93     show(args, stack, headers)
94
95
96 if __name__ == "__main__":
97     main()