diff --git a/markdown.awk b/markdown.awk
index 476f16d..9d26583 100644
--- a/markdown.awk
+++ b/markdown.awk
@@ -7,7 +7,7 @@ function parse_header(str) {
match($0, /#+/);
hnum = RLENGTH;
- content = parse_block(substr(str, hnum + 1, length(str) - hnum ));
+ content = parse_line(substr(str, hnum + 1, length(str) - hnum ));
return "
"; + buf = ""; + for (i in lines) { + line = lines[i]; + gsub(/^> ?/, "", line); + + if (match(line, /^ *$/)) { + result = join_lines(result, parse_block(buf), "\n"); + buf = ""; + } + else { + buf = join_lines(buf, line, "\n"); + } + } + + if (buf != "") + result = join_lines(result, parse_block(buf), "\n"); + + result = result "\n" + + return result; +} + +function parse_block(str) { + if (str == "") + return ""; + + if (substr(str, 1, 1) == "#") { + return parse_header(str); + } + else if (substr(str, 1, 1) == ">") { + return parse_blockquote(str); + } + else if (match(str, /^\* /) || match(str, /^[[:digit:]]\. /)) { return parse_list(str); } else { - return "
" parse_block(str) "
"; + return "" parse_line(str) "
"; } } function parse_body(str) { - if (substr(str, 1, 1) == "#") { - print(parse_header(str)); - } - else { - print(parse_paragraph(str)); - } + print(parse_block(str)); } /^#/ { diff --git a/test.sh b/test.sh index d77e956..f6de62c 100755 --- a/test.sh +++ b/test.sh @@ -221,5 +221,28 @@ check <<-"EOF" EOF +check <<-"EOF" +> foo +> bar +--- +++EOF + +check <<-"EOF" +> foo +> +> > bar +> > baz +--- +foo bar
+
++EOF + echo echo "All tests passed"foo
+++bar baz
+