From: Armaan Bhojwani Date: Sun, 14 Feb 2021 02:51:11 +0000 (-0500) Subject: Add lenient option X-Git-Tag: v0.7.0~12 X-Git-Url: https://git.armaanb.net/?p=lightcards.git;a=commitdiff_plain;h=9c901da1569d3c2ec5f4a59f57e5ad067112b4ba Add lenient option --- 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