]> git.plutz.net Git - shellwiki/commitdiff
Squashed 'cgilite/' changes from e02243e9..970afdaf
authorPaul Hänsch <paul@plutz.net>
Thu, 4 Aug 2022 23:11:43 +0000 (01:11 +0200)
committerPaul Hänsch <paul@plutz.net>
Thu, 4 Aug 2022 23:11:43 +0000 (01:11 +0200)
970afdaf inline image attributes, wiki style links
9a075962 bugfix/typo: correct transformation of header fields into web server variable names
5038774f escape CR and BR in HTML output (as previously specified)

git-subtree-dir: cgilite
git-subtree-split: 970afdafe1d1125607c10d3e410abae8d2244392

cgilite.sh
markdown.awk

index b47a3e2e683219b773af4383059a6701f2d44d46..b51ee8ec9e4c938413817bd8dff00ffdb3ab1d82 100755 (executable)
@@ -264,7 +264,7 @@ HEADER(){
     str="${str#*${BR}${1}: }"
     printf %s "${str%%${BR}*}"
   else
-    local var="HTTP_$(printf %s "$1" |tr a-z- A-Z-)"
+    local var="HTTP_$(printf %s "$1" |tr a-z- A-Z_)"
     eval "[ \"\$$var\" ] && printf %s \"\$$var\" || return 1"
     # eval "printf %s \"\$HTTP_$(printf %s "${1}" |tr a-z A-Z |tr -c A-Z _)\""
   fi
@@ -294,7 +294,7 @@ HTML(){
     \]*) out="${out}&#x5D;";      str="${str#?}";;
     "${CR}"*) out="${out}&#x0D;"; str="${str#?}";;
     "${BR}"*) out="${out}&#x0A;"; str="${str#?}";;
-    *) out="${out}${str%%[]&<>\"\'[]*}"; str="${str#"${str%%[]&<>\"\'[]*}"}";;
+    *) out="${out}${str%%[]&<>\"\'${CR}${BR}[]*}"; str="${str#"${str%%[]&<>\"\'${CR}${BR}[]*}"}";;
   esac; done
   printf %s "$out"
 }
index ccd4cde125a238cb8ddb07e7293d00347f0dbecc..44d4e0d7d16aa8aaab7638da20debc775f9770c3 100755 (executable)
@@ -62,6 +62,8 @@
 # - [x] ^Superscript^ ~Subscript~ (pandoc)
 # - [-] Bracketed spans (pandoc)
 #   - [-] Inline attributes (pandoc)
+# - [x] Image attributes (custom, pandoc inspired, inline only)
+# - [x] Wiki style links [[PageName]] / [[PageName|Link Text]]
 # - [-] TEX-Math (pandoc)
 # -  ?  Footnotes (php md)
 # -  ?  Abbreviations (php md)
@@ -117,6 +119,14 @@ function inline( line, LOCAL, len, code, href, guard ) {
       return "<code>" code "</code>" inline( substr( line, len + 1 ) )
     }
 
+  # Wiki style links
+  } else if ( match( line, /^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/) ) {
+    len = RLENGTH;
+    href = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\1", 1, substr(line, 1, len) );
+    text = gensub(/^\[\[([^\]\|]+)(\|([^\]]+))?\]\]/, "\\3", 1, substr(line, 1, len) );
+    if ( ! text ) text = href;
+    return "<a href=\"" HTML(href) "\">" HTML(text) "</a>" inline( substr( line, len + 1) );
+
   #  quick links ("automatic links" in md doc)
   } else if ( match( line, /^<[a-zA-Z]+:\/\/([-\.[:alnum:]]+)(:[0-9]*)?(\/[^>]*)?>/ ) ) {
     len = RLENGTH;
@@ -156,13 +166,18 @@ function inline( line, LOCAL, len, code, href, guard ) {
     }
 
   # inline images
-  } else if ( match(line, /^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/) ) {
+  } else if ( match(line, /^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/) ) {
     len = RLENGTH;
-    text  = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\1", "g", substr(line, 1, len) );
-    href  = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\2", "g", substr(line, 1, len) );
-    title = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)/, "\\4", "g", substr(line, 1, len) );
-    if ( title ) {
+    text   = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\1", "g", substr(line, 1, len) );
+    href   = gensub(/^!\[([^]]+)\]\(([^"\)]+)([ \t]+"([^"]+)")?\)(\{([a-zA-Z \t-]*)\})?/, "\\2", "g", substr(line, 1, len) );
+    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 "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" title=\"" HTML(title) "\" class=\"" HTML(attrib) "\"/>" inline( substr( line, len + 1) );
+    } else if ( title ) {
       return "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" title=\"" HTML(title) "\" />" inline( substr( line, len + 1) );
+    } else if ( attrib ) {
+      return "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" class=\"" HTML(attrib) "\" />" inline( substr( line, len + 1) );
     } else {
       return "<img src=\"" HTML(href) "\" alt=\"" HTML(text) "\" />" inline( substr( line, len + 1) );
     }