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