diff --git a/eorg/cmd.py b/eorg/cmd.py index 61ee144..311f60b 100644 --- a/eorg/cmd.py +++ b/eorg/cmd.py @@ -4,26 +4,29 @@ from eorg.parser import parse from eorg.generate import html - def tangle(doc): print("tangle") code = getattr(doc, 'code') print(code) + def recursive(path): for root, dirs, filenames in os.walk(path): for filename in filenames: if filename.endswith(".org"): yield root + os.sep + filename + def tokenize(doc): for item in doc: print(item) + def htmlize(doc): for item in doc: print(item) + def handler(fp, kwargs): if kwargs.s is True: tokenize(doc) @@ -37,6 +40,7 @@ def handler(fp, kwargs): values[item] = getattr(doc, item) print(' | '.join([k + ' - ' + v for k,v in values.items()])) + if __name__ == "__main__": import argparse diff --git a/eorg/generate.py b/eorg/generate.py index 4282e00..5f52ac7 100644 --- a/eorg/generate.py +++ b/eorg/generate.py @@ -15,7 +15,6 @@ def src(doc, code, cls="", root=True): lexer = get_lexer_by_name(code.attrs.get("language", "shell")) except pygments.util.ClassNotFound as e: lexer = get_lexer_by_name(code.attrs.get("language", "text")) - return highlight(code.value, lexer, HtmlFormatter(linenos=True)) @@ -48,7 +47,7 @@ def parse_bullets_html(doc, token, cls="", root=True): if token.value[0].isdigit(): bullet = 'ol' - response.write(f"<{bullet}{cls} style=\"list-style-type: decimal-leading-zero;\">") + response.write(f"<{bullet}{cls}>") for row in token.value.split("\n"): if row: text = '' diff --git a/tests/test_document_parsing.py b/tests/test_document_parsing.py new file mode 100644 index 0000000..7ff42a8 --- /dev/null +++ b/tests/test_document_parsing.py @@ -0,0 +1,139 @@ +import os +import pytest +from io import StringIO +from eorg import tokens +from eorg.tokens import Token +from eorg.parser import parse +from eorg.parser import parse_text + + +def test_emphasis(): + text = "parse emphasis *bold text* _underlined text_ /italic text/ normal text" + expected = [ + Token(token=tokens.TEXT, value="parse emphasis "), + Token(token=tokens.BOLD, value="bold text"), + Token(token=tokens.TEXT, value=" "), + Token(token=tokens.UNDERLINED, value="underlined text"), + Token(token=tokens.TEXT, value=" "), + Token(token=tokens.ITALIC, value="italic text"), + Token(tokens.TEXT, " normal text"), + ] + result = parse_text(text) + assert result[0].token == tokens.TEXT + assert expected[0].value == result[0].value + assert result[1].token == tokens.BOLD + assert expected[1].value == result[1].value + assert result[2].token == tokens.TEXT + assert expected[2].value == result[2].value + assert result[3].token == tokens.UNDERLINED + assert expected[3].value == result[3].value + assert result[4].token == tokens.TEXT + assert expected[4].value == result[4].value + assert result[5].token == tokens.ITALIC + assert expected[5].value == result[5].value + assert result[6].token == tokens.TEXT + assert expected[6].value == result[6].value + + +def test_image(): + text = "parse image [[../../test.jpg][test]] after image" + expected = [ + Token(tokens.TEXT, "parse image "), + Token(tokens.IMAGE, ["../../test.jpg", "test"]), + Token(tokens.TEXT, " after image"), + ] + result = parse_text(text) + assert result[0].value == expected[0].value + assert result[1].value == expected[1].value + assert result[2].value == expected[2].value + + +def test_link(): + text = "parse link [[../../test.html][test]] after link" + expected = [ + Token(tokens.TEXT, "parse link "), + Token(tokens.LINK, ["../../test.html", "test"]), + Token(tokens.TEXT, " after link"), + ] + result = parse_text(text) + assert result[0].value == expected[0].value + assert result[1].value == expected[1].value + assert result[2].value == expected[2].value + + +def test_example(): + text = StringIO( + """ +#+BEGIN_EXAMPLE +*I'm bold text* +/I'm italic text/ +_I'm underlined text_ +#+END_EXAMPLE""" + ) + + expected = [ + Token(tokens.BLANK, ""), + Token( + tokens.EXAMPLE, + """*I'm bold text* +/I'm italic text/ +_I'm underlined text_ +""", + ), + ] + result = parse(text).doc + assert result[0].value == expected[0].value + assert result[1].value == expected[1].value + + +def test_src_block(): + text = StringIO( + """ +#+BEGIN_SRC sh :results output drawer +head -n 5 examples/html-plain/example.py +#+END_SRC""" + ) + + expected = [ + Token(tokens.BLANK, ""), + Token(tokens.SOURCE, """head -n 5 examples/html-plain/example.py\n"""), + ] + result = parse(text).doc + assert result[0].token == tokens.BLANK + assert result[0].value == expected[0].value + assert result[1].attrs.get('language') == 'sh' + assert result[1].value == expected[1].value + + +def test_bullet_block(): + text = StringIO( + """ ++ Bullet 1 ++ Bullet 2""" + ) + + expected = [ + Token(tokens.BLANK, ""), + Token(tokens.BULLET, """+ Bullet 1\n+ Bullet 2\n"""), + ] + result = parse(text).doc + assert result[0].token == tokens.BLANK + assert result[0].value == expected[0].value + assert result[1].token == tokens.BULLET + assert result[1].value == expected[1].value + + text = StringIO( + """ +1. Bullet 1 +2. Bullet 2""" + ) + + expected = [ + Token(tokens.BLANK, ""), + Token(tokens.BULLET, """1. Bullet 1\n2. Bullet 2\n"""), + ] + result = parse(text).doc + assert result[0].token == tokens.BLANK + assert result[0].value == expected[0].value + assert result[1].token == tokens.BULLET + assert result[1].value == expected[1].value diff --git a/tests/test_html.py b/tests/test_html.py index b30d3e5..4eaebec 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1,123 +1,15 @@ import os import pytest +import snippets from io import StringIO from eorg import tokens from eorg.tokens import Token from eorg.parser import parse from eorg.parser import parse_text - - -def test_emphasis(): - text = "parse emphasis *bold text* _underlined text_ /italic text/ normal text" - expected = [ - Token(token=tokens.TEXT, value="parse emphasis "), - Token(token=tokens.BOLD, value="bold text"), - Token(token=tokens.TEXT, value=" "), - Token(token=tokens.UNDERLINED, value="underlined text"), - Token(token=tokens.TEXT, value=" "), - Token(token=tokens.ITALIC, value="italic text"), - Token(tokens.TEXT, " normal text"), - ] - result = parse_text(text) - assert result[0].token == tokens.TEXT - assert expected[0].value == result[0].value - assert result[1].token == tokens.BOLD - assert expected[1].value == result[1].value - assert result[2].token == tokens.TEXT - assert expected[2].value == result[2].value - assert result[3].token == tokens.UNDERLINED - assert expected[3].value == result[3].value - assert result[4].token == tokens.TEXT - assert expected[4].value == result[4].value - assert result[5].token == tokens.ITALIC - assert expected[5].value == result[5].value - assert result[6].token == tokens.TEXT - assert expected[6].value == result[6].value - - -def test_image(): - text = "parse image [[../../test.jpg][test]] after image" - expected = [ - Token(tokens.TEXT, "parse image "), - Token(tokens.IMAGE, ["../../test.jpg", "test"]), - Token(tokens.TEXT, " after image"), - ] - result = parse_text(text) - assert result[0].value == expected[0].value - assert result[1].value == expected[1].value - assert result[2].value == expected[2].value - - -def test_link(): - text = "parse link [[../../test.html][test]] after link" - expected = [ - Token(tokens.TEXT, "parse link "), - Token(tokens.LINK, ["../../test.html", "test"]), - Token(tokens.TEXT, " after link"), - ] - result = parse_text(text) - assert result[0].value == expected[0].value - assert result[1].value == expected[1].value - assert result[2].value == expected[2].value - - -def test_example(): - text = StringIO( - """ -#+BEGIN_EXAMPLE -*I'm bold text* -/I'm italic text/ -_I'm underlined text_ -#+END_EXAMPLE""" - ) - - expected = [ - Token(tokens.BLANK, ""), - Token( - tokens.EXAMPLE, - """*I'm bold text* -/I'm italic text/ -_I'm underlined text_ -""", - ), - ] - result = parse(text).doc - assert result[0].value == expected[0].value - assert result[1].value == expected[1].value - - -def test_src_block(): - text = StringIO( - """ -#+BEGIN_SRC sh :results output drawer -head -n 5 examples/html-plain/example.py -#+END_SRC""" - ) - - expected = [ - Token(tokens.BLANK, ""), - Token(tokens.SOURCE, """head -n 5 examples/html-plain/example.py\n"""), - ] - result = parse(text).doc - assert result[0].token == tokens.BLANK - assert result[0].value == expected[0].value - assert result[1].attrs.get('language') == 'sh' - assert result[1].value == expected[1].value +from eorg.generate import html def test_bullet_block(): - text = StringIO( - """ -+ Bullet 1 -+ Bullet 2""" - ) - - expected = [ - Token(tokens.BLANK, ""), - Token(tokens.BULLET, """+ Bullet 1\n+ Bullet 2\n"""), - ] - result = parse(text).doc - assert result[0].token == tokens.BLANK - assert result[0].value == expected[0].value - assert result[1].token == tokens.BULLET - assert result[1].value == expected[1].value + expected = """""" + result = html(parse(snippets.bullet_plus_snippet).doc) + assert result.read() == expected