X-Git-Url: https://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=markdown.awk;h=63bb044e8a69c13a87c58c71194ecceaf9b381b8;hp=44d4e0d7d16aa8aaab7638da20debc775f9770c3;hb=ffe17caf6f15242bc1c0e2681d4aa5f46e15f378;hpb=970afdafe1d1125607c10d3e410abae8d2244392
diff --git a/markdown.awk b/markdown.awk
index 44d4e0d..63bb044 100755
--- a/markdown.awk
+++ b/markdown.awk
@@ -86,6 +86,20 @@ function HTML ( text ) {
return text;
}
+function URL ( text ) {
+ gsub( /&/, "%26", text );
+ gsub( /"/, "%22", text );
+ gsub( /'/, "%27", text );
+ gsub( /\?/, "%3F", text );
+ gsub( /#/, "%23", text );
+ gsub( /\[/, "%5B", text );
+ gsub( /\]/, "%5D", text );
+ gsub( / /, "%20", text );
+ gsub( / /, "%09", text );
+ gsub( /\\/, "%5C", text );
+ return text;
+}
+
function inline( line, LOCAL, len, code, href, guard ) {
nu = "(\\\\\\\\|\\\\[^\\\\]|[^\\\\_]|_[[:alnum:]])*" # not underline (except when escaped)
na = "(\\\\\\\\|\\\\[^\\\\]|[^\\\\\\*])*" # not asterisk (except when escaped)
@@ -103,7 +117,7 @@ function inline( line, LOCAL, len, code, href, guard ) {
# hard brakes
} else if ( match(line, /^ \n/) ) {
- return "
\n" inline( substr(line, RLENGTH + 1) );
+ return "
\n" inline( substr(line, RLENGTH + 1) );
# ``code spans``
} else if ( match( line, /^`+/) ) {
@@ -125,18 +139,18 @@ function inline( line, LOCAL, len, code, href, guard ) {
href = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\1", 1, substr(line, 1, len) );
text = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\3", 1, substr(line, 1, len) );
if ( ! text ) text = href;
- return "" HTML(text) "" inline( substr( line, len + 1) );
+ return "" HTML(text) "" inline( substr( line, len + 1) );
# quick links ("automatic links" in md doc)
} else if ( match( line, /^<[a-zA-Z]+:\/\/([-\.[:alnum:]]+)(:[0-9]*)?(\/[^>]*)?>/ ) ) {
len = RLENGTH;
- href = HTML( substr( line, 2, len - 2) );
+ href = URL( substr( line, 2, len - 2) );
return "" href "" inline( substr( line, len + 1) );
# quick link email
} else if ( match( line, /^<[a-zA-Z0-9.!#$%&'\''*+\/=?^_`{|}~-]+@[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*>/ ) ) {
len = RLENGTH;
- href = HTML( substr( line, 2, len - 2) );
+ href = URL( substr( line, 2, len - 2) );
return "" href "" inline( substr( line, len + 1) );
# inline links
@@ -146,9 +160,9 @@ function inline( line, LOCAL, len, code, href, guard ) {
href = gensub(/^\[([^]]+)\]\(([^"\)]+)([[:space:]]+"([^"]+)")?\)/, "\\2", 1, substr(line, 1, len) );
title = gensub(/^\[([^]]+)\]\(([^"\)]+)([[:space:]]+"([^"]+)")?\)/, "\\4", 1, substr(line, 1, len) );
if ( title ) {
- return "" inline( text ) "" inline( substr( line, len + 1) );
+ return "" inline( text ) "" inline( substr( line, len + 1) );
} else {
- return "" inline( text ) "" inline( substr( line, len + 1) );
+ return "" inline( text ) "" inline( substr( line, len + 1) );
}
# reference style links
@@ -158,9 +172,9 @@ function inline( line, LOCAL, len, code, href, guard ) {
id = gensub(/^\[([^\n]+)\] ?\[([^\n]*)\].*/, "\\2", 1, substr(line, 1, len) );
if ( ! id ) id = text;
if ( rl_href[id] && rl_title[id] ) {
- return "" inline(text) "" inline( substr( line, len + 1) );
+ return "" inline(text) "" inline( substr( line, len + 1) );
} else if ( rl_href[id] ) {
- return "" inline(text) "" inline( substr( line, len + 1) );
+ return "" inline(text) "" inline( substr( line, len + 1) );
} else {
return "" HTML(substr(line, 1, len)) inline( substr(line, len + 1) );
}
@@ -173,13 +187,17 @@ function inline( line, LOCAL, len, code, href, guard ) {
title = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\4", "g", substr(line, 1, len) );
attrib = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\6", "g", substr(line, 1, len) );
if ( title && attrib ) {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
} else if ( title ) {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
} else if ( attrib ) {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
} else {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
}
# reference style images
@@ -189,9 +207,11 @@ function inline( line, LOCAL, len, code, href, guard ) {
id = gensub(/^!\[([^\n]+)\] ?\[([^\n]*)\].*/, "\\2", 1, substr(line, 1, len) );
if ( ! id ) id = text;
if ( rl_href[id] && rl_title[id] ) {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
} else if ( rl_href[id] ) {
- return "" inline( substr( line, len + 1) );
+ return "" \
+ inline( substr( line, len + 1) );
} else {
return "" HTML(substr(line, 1, len)) inline( substr(line, len + 1) );
}
@@ -427,7 +447,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, guard, code, indent, attrib
gsub(/\n[[:space:]]+/, " ", code);
gsub(/\n\| /, "\n", code);
gsub(/^\| |\n$/, "", code);
- return "
\[ \].*/ ) { return "
" \ + } else if ( p ~ /^
\[ \].*/ ) { return "
" \ substr(p, 7) "
\[-\].*/ ) { return "
" \ + } else if ( p ~ /^
\[-\].*/ ) { return "
" \ substr(p, 7) "
\[\?\].*/ ) { return "
" \ + } else if ( p ~ /^
\[\?\].*/ ) { return "
" \ substr(p, 7) "
\[\/\].*/ ) { return "
" \ + } else if ( p ~ /^
\[\/\].*/ ) { return "
" \ substr(p, 7) "
\[[xX]\].*/ ) { return "
" \ + } else if ( p ~ /^
\[[xX]\].*/ ) { return "
" \ substr(p, 7) "