From 9c901da1569d3c2ec5f4a59f57e5ad067112b4ba Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani Date: Sat, 13 Feb 2021 21:51:11 -0500 Subject: [PATCH] Add lenient option --- lightcards/parse.py | 35 ++++++++++++++--------------------- lightcards/runner.py | 8 +++++++- man/lightcards.1 | 3 +++ man/lightcards.1.md | 3 +++ 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/lightcards/parse.py b/lightcards/parse.py index 8e0d320..95319f4 100644 --- a/lightcards/parse.py +++ b/lightcards/parse.py @@ -24,35 +24,28 @@ def md2html(file): return outp -def parse_html(html): +def parse_html(html, lenient): """Use BeautifulSoup to parse the HTML""" def clean_text(inp): return inp.get_text().rstrip() - soup = BeautifulSoup(html, "html.parser").find_all("table") - outp = [] - - for table in soup: - try: - for x in table.find_all("tr"): - y = x.find_all("td") - if y: - outp.append(Card(tuple([clean_text(z) for z in y]))) - except AttributeError: - raise Exception("lightcards: No table found") from None + soup = BeautifulSoup(html, "html.parser") + outp, ths = [], [] + for table in soup.find_all("table"): ths = table.find_all("th") if len(ths) != 2: - raise Exception("lightcards: Headings malformed") + if not lenient: + raise Exception("lightcards: Headings malformed") + else: + try: + for x in table.find_all("tr"): + y = x.find_all("td") + if y: + outp.append(Card(tuple([clean_text(z) for z in y]))) + except AttributeError: + raise Exception("lightcards: No table found") from None # Return a tuple of nested lists return ([clean_text(x) for x in ths], outp) - - -def main(file): - return parse_html(md2html(file)) - - -if __name__ == "__main__": - print(main(sys.argv[1])) diff --git a/lightcards/runner.py b/lightcards/runner.py index 2154c95..fdbbf92 100644 --- a/lightcards/runner.py +++ b/lightcards/runner.py @@ -34,6 +34,12 @@ def parse_args(): help="specify which view to start in", ) parser.add_argument("inp", metavar="input_files", type=str, nargs="+") + parser.add_argument( + "-l", + "--lenient", + action="store_true", + help="don't raise exception if tables are malformed", + ) parser.add_argument( "-a", "--alphabetize", @@ -111,7 +117,7 @@ def main(args=sys.argv): sys.tracebacklimit = 0 global headers, stack - (headers, stack) = parse.parse_html(parse.md2html(args.inp)) + (headers, stack) = parse.parse_html(parse.md2html(args.inp), args.lenient) show(args, stack, headers, conf) diff --git a/man/lightcards.1 b/man/lightcards.1 index a2e421e..247b6b1 100644 --- a/man/lightcards.1 +++ b/man/lightcards.1 @@ -40,6 +40,9 @@ Specify startup view .TP \f[B]-c\f[R] [config file], \f[B]--config\f[R] [config file] Specify a custom config file +.TP +\f[B]-l\f[R], \f[B]--lenient\f[R] +Don\[cq]t raise exception if tables are malformed .SH KEYS .TP \f[B]l\f[R], \f[B]right\f[R] diff --git a/man/lightcards.1.md b/man/lightcards.1.md index 568aa5e..64b55db 100644 --- a/man/lightcards.1.md +++ b/man/lightcards.1.md @@ -42,6 +42,9 @@ lightcards \[options\] \[input files\] **-c** \[config file\], **\--config** \[config file\] : Specify a custom config file +**-l**, **\--lenient** +: Don't raise exception if tables are malformed + # KEYS **l**, **right** : Next card -- 2.39.2