X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=lightcards%2Flightcards.py;h=102a17ae7cc66cdbc0527de2f18bebe94428d22e;hb=b8e34d095fcc49e62a4724c8859512eab0d740f6;hp=968f86c51c3eb887b155d15ef78beb4931e06b97;hpb=042902947f6ab5627feb54eeb113a893c85cada7;p=lightcards.git diff --git a/lightcards/lightcards.py b/lightcards/lightcards.py old mode 100755 new mode 100644 index 968f86c..102a17a --- a/lightcards/lightcards.py +++ b/lightcards/lightcards.py @@ -1,38 +1,100 @@ -#!/usr/bin/env python # Markdown flashcard utility # Armaan Bhojwani 2021 import argparse from curses import wrapper +import os +from random import shuffle +import sys -from . import display, parse +from . import parse, progress +from .display import Display +from .deck import Status def parse_args(): - parser = argparse.ArgumentParser(description="Simple terminal flashcards") + parser = argparse.ArgumentParser( + description="Terminal flashcards from Markdown") parser.add_argument("inp", metavar="input file", type=str, - nargs="*") - parser.add_argument("-v", "--version", + nargs=1) + parser.add_argument("-a", "--alphabetize", + action='store_true', + help="alphabetize card order") + parser.add_argument("-f", "--flip", + action='store_true', + help="show second column first") + parser.add_argument("-p", "--purge", + action='store_true', + help="don't check cached info before starting") + # TODO: don't require input file when using -P + parser.add_argument("-P", "--purge-all", action='store_true', - help="print version") + help="don't check cached info before starting") + parser.add_argument("-r", "--reverse", + action='store_true', + help="reverse card order") + parser.add_argument("-s", "--shuffle", + action='store_true', + help="shuffle card order") + parser.add_argument("-v", "--version", + action='version', + version="lightcards 0.6.0") return parser.parse_args() -def show(stack): - wrapper(display.get_key, stack) +def show(args, stack, headers): + """ + Get objects from cache, manipulate deck according to passed arguments, and + send it to the display functions + """ + # Purge caches if asked + if args.purge: + progress.purge(stack) + if args.purge_all: + progress.purge_all() + # Check for caches + idx = Status() + cache = progress.dive(get_orig()) + if cache: + (stack) = cache -def main(): + # Manipulate deck + if args.shuffle: + shuffle(stack) + if args.alphabetize: + stack.sort() + if args.reverse: + stack.reverse() + if args.flip: + for x in stack: + x[0], x[1] = x[1], x[0] + headers[0], headers[1] = headers[1], headers[0] + + # Send to display + win = Display(stack, headers, idx) + wrapper(win.run) + + +def reparse(): + """Parse arguments and input file again""" args = parse_args() - if args.version: - print("0.0.0") - exit(0) + os.system(f"$EDITOR {args.inp[0]}"), + return parse.parse_html(parse.md2html(args.inp[0])) + - headers = parse.parse_html(parse.md2html(args.inp[0]))[0] - stack = parse.parse_html(parse.md2html(args.inp[0]))[1] - show(stack) +def get_orig(): + """Return original header and stack""" + return((headers, stack)) + + +def main(args=sys.argv): + args = parse_args() + global headers, stack + (headers, stack) = parse.parse_html(parse.md2html(args.inp[0])) + show(args, stack, headers) if __name__ == "__main__":