1 # Markdown flashcard utility
7 from random import shuffle
10 from . import parse, progress, config
11 from .display import Display, CursesError
12 from .deck import Status
16 """Parse command line arguments"""
17 parser = argparse.ArgumentParser(
18 description="Terminal flashcards from Markdown"
23 metavar="config_file",
26 help="specify custom config file",
34 help="specify which view to start in",
36 parser.add_argument("inp", metavar="input_files", type=str, nargs="+")
41 help="don't raise exception if tables are malformed",
47 help="alphabetize card order",
53 help="delete cache before starting",
56 "-r", "--reverse", action="store_true", help="reverse card order"
59 "-s", "--shuffle", action="store_true", help="shuffle card order"
65 version=f"lightcards {pkg_resources.require('lightcards')[0].version}",
67 return parser.parse_args()
70 def show(args, stack, headers, conf):
72 Get objects from cache, manipulate deck according to passed arguments, and
73 send it to the display functions
75 # Purge caches if asked
77 progress.purge(get_orig()[1])
81 cache = progress.dive(get_orig()[1])
82 if cache and conf["cache"]:
86 if args.shuffle or conf["shuffle"]:
88 if args.alphabetize or conf["alphabetize"]:
89 stack.sort(key=lambda x: x.front)
90 if args.reverse or conf["reverse"]:
97 view = conf["default_view"]
100 win = Display(stack, headers, idx, view, args, conf)
102 curses.wrapper(win.run)
103 except curses.error as e:
104 raise CursesError() from e
108 """Return original header and stack"""
109 return (headers, stack)
112 def main(args=sys.argv):
114 conf = config.read_file(args.config)
116 if not conf["debug"]:
117 sys.tracebacklimit = 0
119 global headers, stack
120 (headers, stack) = parse.parse_html(parse.md2html(args.inp), args.lenient)
122 show(args, stack, headers, conf)
125 if __name__ == "__main__":