]> git.plutz.net Git - cgilite/commitdiff
md: image embedding, completing support for basic markdown
authorPaul Hänsch <paul@plutz.net>
Fri, 2 Jul 2021 11:15:30 +0000 (13:15 +0200)
committerPaul Hänsch <paul@plutz.net>
Fri, 2 Jul 2021 11:15:30 +0000 (13:15 +0200)
markdown.awk

index eb352583a7c9b9aa6e2e6cbf76531ff030542c83..98a3e8b2bda338bc58d531a4c074bcbbafaf498a 100755 (executable)
@@ -31,7 +31,7 @@
 # - [x] Reference style links
 # - [x] Emphasis *em*/**strong** (*Asterisk*, _Underscore_)
 # - [x] `code`, also ``code containing `backticks` ``
-# - [ ] Images / reference style images
+# - [x] Images / reference style images
 # - [x] <automatic links>
 # - [x] backslash escapes
 #
@@ -146,6 +146,32 @@ function inline( line, LOCAL, len, code, href, guard ) {
       return "" substr(line, 1, len) inline( substr(line, len + 1) );
     }
 
+  # inline images
+  } else if ( match(line, /^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/) ) {
+    len = RLENGTH;
+    text  = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\1", "g", line);
+    href  = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\2", "g", line);
+    title = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\4", "g", line);
+    if ( title ) {
+      return "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" title=\"" HTML(title) "\" />" inline( substr( line, len + 1) );
+    } else {
+      return "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" />" inline( substr( line, len + 1) );
+    }
+
+  # reference style images
+  } else if ( match(line, /^!\[([^]]+)\] ?\[([^]]*)\]/ ) ) {
+    len = RLENGTH;
+    text = gensub(/^!\[([^\n]+)\] ?\[([^\n]*)\].*/, "\\1", 1, line);
+      id = gensub(/^!\[([^\n]+)\] ?\[([^\n]*)\].*/, "\\2", 1, line);
+    if ( ! id ) id = text;
+    if ( rl_href[id] && rl_title[id] ) {
+      return "<img src=\"" rl_href[id] "\" alt=\"" HTML(text) "\" title=\"" rl_title[id] "\" />" inline( substr( line, len + 1) );
+    } else if ( rl_href[id] ) {
+      return "<img src=\"" rl_href[id] "\" alt=\"" HTML(text) "\" />" inline( substr( line, len + 1) );
+    } else {
+      return "" substr(line, 1, len) inline( substr(line, len + 1) );
+    }
+
   #  ~~strikeout~~ (pandoc)
   } else if ( match(line, /^~~([[:graph:]]|[[:graph:]]([^~]|~[^~])*[[:graph:]])~~/) ) {
     len = RLENGTH;