]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
Merge commit 'a5df8624a4d04031ed1497b959b576c989af438f'
[shellwiki] / tools.sh
index de055fe808049e2afbc3b925a1f19f1f06413d5f..6388e3f3219b53c36fadf39511c9d88990fefd87 100755 (executable)
--- a/tools.sh
+++ b/tools.sh
@@ -3,30 +3,42 @@
 [ "$include_tools" ] && return 0
 include_tools="$0"
 
-if [ "$(which awk)" ]; then
-  md() { awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
-elif [ "$(which busybox)" ]; then
-  md() { busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
-else
-  md() { cat; }
-fi
+md(){
+  local parser
+
+  if [ "$#" = 0 ]; then
+    md "${_EXEC}"/parsers/*
+  elif [ "$#" = 1 ]; then
+    "$1"
+  else
+    parser="$1"
+    shift 1
+    "$parser" |md "$@"
+  fi
+}
 
 mdfile(){
   #  Check if page exists, if possible fall
   #  back to default page from installation
   local page="$(PATH "$1")"
+  page="${page%/}"
 
-  if   [ -f "$_DATA/pages/$page/#page.md" ]; then
+  # Regular processing, keep in sync with tools.sh
+  if   [ -f "$_DATA/pages/$page/:$LANGUAGE/#page.md"  ]; then
+    printf %s\\n "$_DATA/pages/$page/:$LANGUAGE/#page.md"
+  elif [ -f "$_DATA/pages/$page/#page.md" ]; then
     printf %s\\n "$_DATA/pages/$page/#page.md"
-    return 0
+  elif [ -f "$_EXEC/pages/$page/:$LANGUAGE/#page.md"  ]; then
+    printf %s\\n "$_EXEC/pages/$page/:$LANGUAGE/#page.md"
   elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
     printf %s\\n "$_EXEC/pages/$page/#page.md"
-    return 0
   else
     return 1
   fi 2>&-
   #  ^^ suppress error messages produced
   #     by printf when stdout was closed
+
+  return 0
 }
 
 size_human(){
@@ -49,6 +61,35 @@ size_human(){
   fi
 }
 
+attachment_glob(){
+  local pattern="${1%/}" IFS=''
+  local glob page pagedir
+
+  page="${pattern%/*}"
+  [ "$page" = "$pattern" ] && page=.
+  [ ! "$page" ] && page=/
+  pattern="${pattern##*/}"
+  [ ! "$pattern" ] && pattern="*"
+
+  case $page in
+  /*)
+    for glob in "$_DATA/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
+    for glob in "$_EXEC/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
+    ;;
+  *)
+    for glob in "$_DATA/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+    for glob in "$_EXEC/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+    ;;
+  esac \
+  | sort -u \
+  | while read -r glob; do
+    [ -e "$glob" ] || continue
+    pagedir="$(page_abs "${glob%%/#attachments/*}/")"
+    [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
+    && printf '%s\n' "${glob%%/#attachments/*}/${glob#*/#attachments/}"
+  done
+}
+
 page_glob(){
   local pattern="${1%/}/" IFS=''
   local glob page pagedir