]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
universal page_title function
[shellwiki] / tools.sh
index a298394c9cf5881cb4a764587302fe4467030d67..dfa4594576d9538105afbdc7a2c9eabdded5ec92 100755 (executable)
--- a/tools.sh
+++ b/tools.sh
@@ -185,3 +185,27 @@ has_tag() {
   done
   return 1
 }
+
+page_title() {
+  local mdfile PAGE_TITLE
+
+  if  mdfile="$(mdfile "${1:-${PATH_INFO%/*}}")"; then
+    PAGE_TITLE="$(
+      sed -nE '
+        s;^%title[ \t]+([[:graph:]][[:print:]]+)\r?$;\1;p; tQ;
+        b; :Q q;
+      ' "$mdfile"
+    )"
+    [ ! "${PAGE_TITLE}" ] && PAGE_TITLE="$(
+      MD_MACROS="" md <"$mdfile" \
+      | sed -nE '
+        s;^.*<h1[^>]*>(.*>)?([^<]+)(<.*)?</h1>.*$;\2;p; tQ;
+        s;^.*<h2[^>]*>(.*>)?([^<]+)(<.*)?</h2>.*$;\2;p; tQ;
+        b; :Q q;
+      '
+    )"
+    printf %s\\n "$PAGE_TITLE"
+  else
+    return 1
+  fi
+}