X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=markdown.awk;h=86657adf28c4c347b49557bc77e8c2a9105efb42;hb=3d2d97555791bee190efed33f4af120ef8240189;hp=be7d723b6b96d0efa7ccdc9ecc5be38c881f1026;hpb=ae55f6f3fd50539c90fbc8237ae025edc9b17ba4;p=cgilite
diff --git a/markdown.awk b/markdown.awk
index be7d723..86657ad 100755
--- a/markdown.awk
+++ b/markdown.awk
@@ -41,6 +41,7 @@
# - [x] Automatic -wrapping (custom)
# - ? Heading identifiers (php md, pandoc)
# - [x] Heading attributes (custom)
+# - [ ]
ends section
# - [x] Automatic heading identifiers (custom)
# - [x] Fenced code blocks (php md, pandoc)
# - [x] Fenced code attributes
@@ -313,6 +314,7 @@ function headline( hlvl, htxt, attrib, LOCAL, sec, n, HL) {
for ( n = hlvl; n <= 6; n++ ) { sec = sec (HL[n]?"":""); }
HL[hlvl]++; for ( n = hlvl + 1; n <= 6; n++) { HL[n] = 0;}
+
hid = ""; for ( n = 2; n <= blvl; n++) { hid = hid BL[n] "/"; }
hid = hid HL[1]; for ( n = 2; n <= hlvl; n++) { hid = hid "." HL[n] ; }
hid = hid ":" URL(htxt, 1);
@@ -323,12 +325,11 @@ function headline( hlvl, htxt, attrib, LOCAL, sec, n, HL) {
return sec "" \
"" inline( htxt ) \
"" \
- "\n\n";
+ "\n";
}
# Nested Block, resets heading counters
-function _nblock( block, LOCAL, hlsav, sec, n ) {
- hlsav = hstack;
+function _nblock( block, LOCAL, sec, n ) {
hstack = hstack " 0 0 0 0 0 0";
# Block Level
@@ -338,12 +339,13 @@ function _nblock( block, LOCAL, hlsav, sec, n ) {
block = _block( block );
split( gensub( /^(.* )?([0-9]+( [0-9]+){5})$/, "\\2" ,"1", hstack), HL);
sec = ""; for ( n = 1; n <= 6; n++ ) { sec = sec (HL[n]?"":""); }
- hstack = hlsav; blvl--;
+
+ sub("( +[0-9]+){6} *$", "", hstack); blvl--;
return block sec;
}
-function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, attrib ) {
- gsub( /^\n+|\n+$/, "", block );
+function _block( block, LOCAL, st, len, text, title, attrib, href, guard, code, indent, list ) {
+ gsub( "(^\n+|\n+$)", "", block );
if ( block == "" ) {
return "";
@@ -514,11 +516,11 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
# Line Blocks (pandoc)
} else if ( match(block, /^\| [^\n]*(\n|$)(\| [^\n]*(\n|$)|[ \t]+[^\n[:space:]][^\n]*(\n|$))*/) ) {
len = RLENGTH; st = RSTART;
- code = substr(block, 1, len);
- gsub(/\n[[:space:]]+/, " ", code);
- gsub(/\n\| /, "\n", code);
- gsub(/^\| |\n$/, "", code);
- return "
" gensub(/\n/, "
\n", "g", inline( code )) "
\n" \
+ text = substr(block, 1, len);
+ gsub(/\n[[:space:]]+/, " ", text);
+ gsub(/\n\| /, "\n", text);
+ gsub(/^\| |\n$/, "", text);
+ return "" gensub(/\n/, "
\n", "g", inline( text )) "
\n" \
_block( substr( block, len + 1) );
# Indented Code Block
@@ -533,7 +535,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
# Fenced Divs (pandoc, custom)
} else if ( match( block, /^(:::+)/ ) ) {
guard = substr( block, 1, RLENGTH );
- code = gensub(/^[^\n]+\n/, "", 1, block);
+ code = block; sub(/^[^\n]+\n/, "", code);
attrib = gensub(/^:::+[ \t]*\{?[ \t]*([^\}\n]*)\}?[ \t]*\n.*$/, "\\1", 1, block);
gsub(/[^a-zA-Z0-9_-]+/, " ", attrib);
gsub(/(^ | $)/, "", attrib);
@@ -566,41 +568,6 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
_block( substr(block, st + len) );
}
- # Unordered list
- } else if ( match( block, "^ ? ? ?[-+*][ \t]+[^\n]+(\n|$)" \
- "(([ \t]*\n)* ? ? ?[-+*][ \t]+[^\n]+(\n|$)" \
- "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \
- "|[^\n]+(\n|$))*" ) ) {
- list = substr( block, 1, RLENGTH);
- block = substr( block, RLENGTH + 1);
- indent = length( gensub(/[-+*][ \t]+[^\n]+.*$/, "", 1, list) );
-
- gsub("(^|\n) {0," indent "}", "\n", list);
- return "\n\n" _list( substr(list, 2) ) "
\n" _block( block );
-
- # Ordered list
- } else if ( match( block, "^ ? ? ?([0-9]+|#)\\.[ \t]+[^\n]+(\n|$)" \
- "(([ \t]*\n)* ? ? ?([0-9]+|#)\\.[ \t]+[^\n]+(\n|$)" \
- "|([ \t]*\n)*( ? ? ?\t| +)[^\n]+(\n|$)" \
- "|[^\n]+(\n|$))*" ) ) {
- list = substr( block, 1, RLENGTH);
- block = substr( block, RLENGTH + 1);
- indent = length( gensub(/([0-9]+|#)\.[ \t]+[^\n]+.*$/, "", 1, list) );
-
- gsub("(^|\n) {0," indent "}", "\n", list);
- return "\n\n" _list( substr(list, 2) ) "
\n" _block( block );
-
- # Definition list
- } else if (match( block, "^(([ \t]*\n)*[^:\n \t][^\n]+\n" \
- "([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \
- "(([ \t]*\n)* ? ? ?:[ \t][^\n]+(\n|$)" \
- "|[^:\n \t][^\n]+(\n|$)" \
- "|( ? ? ?\t| +)[^\n]+(\n|$)" \
- "|([ \t]*\n)+( ? ? ?\t| +)[^\n]+(\n|$))*)+" \
- )) {
- list = substr( block, 1, RLENGTH); block = substr( block, RLENGTH + 1);
- return "\n\n" _dlist( list ) "
\n" _block( block );
-
# First Order Heading H1 + Attrib
} else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n|$)/ ) ) {
len = RLENGTH;
@@ -608,16 +575,14 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
attrib = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n===+(\n.*)?$/, "\\3", 1, block)
gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib);
- return headline(1, text, attrib) \
- _block( substr( block, len + 1 ) );
+ return headline(1, text, attrib) _block( substr( block, len + 1 ) );
# First Order Heading H1
} else if ( match( block, /^([^\n]+)\n===+(\n|$)/ ) ) {
len = RLENGTH;
text = gensub(/^([^\n]+)\n===+(\n.*)?$/, "\\1", 1, block)
- return headline(1, text, 0) \
- _block( substr( block, len + 1 ) );
+ return headline(1, text, 0) _block( substr( block, len + 1 ) );
# Second Order Heading H2 + Attrib
} else if ( match( block, /^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n|$)/ ) ) {
@@ -626,16 +591,14 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
attrib = gensub(/^([^\n]+)([ \t]*\{([^\}\n]+)\})\n---+(\n.*)?$/, "\\3", 1, block)
gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib);
- return headline(2, text, attrib) \
- _block( substr( block, len + 1) );
+ return headline(2, text, attrib) _block( substr( block, len + 1) );
# Second Order Heading H2
} else if ( match( block, /^([^\n]+)\n---+(\n|$)/ ) ) {
len = RLENGTH;
text = gensub(/^([^\n]+)\n---+(\n.*)?$/, "\\1", 1, block)
- return headline(2, text, 0) \
- _block( substr( block, len + 1) );
+ return headline(2, text, 0) _block( substr( block, len + 1) );
# Nth Order Heading H1 H2 H3 H4 H5 H6 + Attrib
} else if ( match( block, /^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n|$)/ ) ) {
@@ -645,8 +608,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
attrib = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*([ \t]*\{([a-zA-Z \t-]*)\})(\n.*)?$/, "\\5", 1, block);
gsub(/[^a-zA-Z0-9_-]+/, " ", attrib); gsub(/(^ | $)/, "", attrib);
- return headline( length(n), text, attrib ) \
- _block( substr( block, len + 1) );
+ return headline( length(n), text, attrib ) _block( substr( block, len + 1) );
# Nth Order Heading H1 H2 H3 H4 H5 H6
} else if ( match( block, /^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n|$)/ ) ) {
@@ -654,8 +616,7 @@ function _block( block, LOCAL, st, len, hlvl, htxt, sec, guard, code, indent, at
n = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n.*)?$/, "\\1", 1, block);
text = gensub(/^(#{1,6})[ \t]*(([^ \t\n]+|[ \t]+[^ \t\n#]|[ \t]+#+[ \t]*[^ \t\n#])+)[ \t]*#*(\n.*)?$/, "\\2", 1, block);
- return headline( length(n), text, 0 ) \
- _block( substr( block, len + 1) );
+ return headline( length(n), text, 0 ) _block( substr( block, len + 1) );
# block images (wrapped in