diff --git a/markdown.awk b/markdown.awk index 99b6517..e689dd8 100644 --- a/markdown.awk +++ b/markdown.awk @@ -96,7 +96,7 @@ function parse_list(str, buf, result, i, ind, line, lines, indent, is_bullet) split(str, lines, "\n"); str = "" - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; if (match(line, /^[[:space:]]*[-+*][[:space:]]/) || @@ -116,7 +116,7 @@ function parse_list(str, buf, result, i, ind, line, lines, indent, is_bullet) else result = "
    \n" - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; if (match(line, "[^ ]") > indent) { @@ -182,47 +182,71 @@ function is_html_tag(str, i, sstr) { } function is_escape_sequence(str, i, sstr) { - sstr=substr(str, i, length(str) - i + 1); + sstr=substr(str, i, length(str) - i + 1); return match(sstr, /^\\[`\\*_{}\[\]()>#.!+-]/); } function extract_link(str, i, sstr) { - sstr=substr(str, i, length(str) - i + 1); + sstr=substr(str, i, length(str) - i + 1); - if (!match(sstr, /^\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/, arr)) + if (!match(sstr, /^\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/)) return ""; return substr(str, i, RLENGTH); } function parse_link(str, arr) { - if (!match(str, /^\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/, arr)) - return ""; + match(str, /^\[([^\[\]]*)\]/); + name = substr(str, 2, RLENGTH-2); + sub(/^\[([^\[\]]*)\]/, "", str); - if (arr[4] == "") { - return "" arr[1] "" + sub(/^ *\( */, "", str); + sub(/ *\) *$/, "", str); + + match(str, /^[^() ]*/); + url = substr(str, 1, RLENGTH); + + sub(/^[^() ]*/, "", str); + sub(/^ *"/, "", str); + sub(/" *$/, "", str); + title = str; + + if (title == "") { + return "" name "" } - return "" arr[1] "" + return "" name "" } function extract_image(str, i, sstr) { - sstr=substr(str, i, length(str) - i + 1); + sstr=substr(str, i, length(str) - i + 1); - if (!match(sstr, /^!\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/, arr)) + if (!match(sstr, /^!\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/)) return ""; return substr(str, i, RLENGTH); } function parse_image(str, arr) { - if (!match(str, /^!\[([^\[\]]*)\]\( *([^() ]*)( +"([^"]*)")? *\)/, arr)) - return ""; + match(str, /^!\[([^\[\]]*)\]/); + name = substr(str, 3, RLENGTH-3); + sub(/^!\[([^\[\]]*)\]/, "", str); - if (arr[4] == "") { - return "\""" + sub(/^ *\( */, "", str); + sub(/ *\) *$/, "", str); + + match(str, /^[^() ]*/); + url = substr(str, 1, RLENGTH); + + sub(/^[^() ]*/, "", str); + sub(/^ *"/, "", str); + sub(/" *$/, "", str); + title = str; + + if (title == "") { + return "\""" } - return "\""" + return "\""" } function is_link(str, i) { @@ -339,7 +363,7 @@ function parse_blockquote(str, i, lines, line, buf, result) { split(str, lines, "\n"); str = "" - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; if (match(line, /^>/)) @@ -352,7 +376,7 @@ function parse_blockquote(str, i, lines, line, buf, result) { result = "
    "; buf = ""; - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; gsub(/^> ?/, "", line); @@ -380,7 +404,7 @@ function parse_code(str, i, lines, result) { result = ""; split(str, lines, "\n"); - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; gsub(/^ /, "", line); result = result "\n" line; @@ -421,10 +445,10 @@ function parse_block(str) { function parse_body(str, body, line, lines, result, i) { split(str, lines, "\n"); - result = ""; + result = ""; body = ""; - for (i in lines) { + for (i=1; i<=length(lines); i++) { line = lines[i]; if (line_continues(body, line)) { if (body != "")