]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
Separate file for attachment edit functions. Functions to move attached files.
[shellwiki] / tools.sh
old mode 100644 (file)
new mode 100755 (executable)
index 591e9bc..c5545fb
--- a/tools.sh
+++ b/tools.sh
@@ -1,5 +1,28 @@
 #!/bin/sh
 
+[ "$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
+
+mdfile(){
+  local page="$(PATH "$1")"
+
+  if   [ -f "$_DATA/pages/$page/#page.md" ]; then
+    printf %s\\n "$_DATA/pages/$page/#page.md"
+  elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
+    printf %s\\n "$_EXEC/pages/$page/#page.md"
+  else
+    return 1
+  fi
+}
+
 size_human(){
   local size="$1"
 
@@ -19,3 +42,65 @@ size_human(){
     printf "%i B" "$size"
   fi
 }
+
+page_glob(){
+  local pattern="${1%/}/" IFS=''
+  local glob page pagedir
+
+  case $pattern in
+  /*)
+    for glob in "$_DATA/pages"$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
+    for glob in "$_EXEC/pages"$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
+    ;;
+  *)
+    for glob in "$_DATA/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+    for glob in "$_EXEC/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+    ;;
+  esac \
+  | sort -u \
+  | while read -r page; do
+    case $page in
+      \#*|*/\#*) continue;;
+      *) pagedir="$(page_abs "$page")";;
+    esac
+    [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
+    && printf '%s\n' "$page"
+  done
+}
+
+page_children(){
+  local page="${1:-${PATH_INFO}}" depth="${2:-1}"
+  local glob pagedir IFS=''
+  page="${page%/}/"
+
+  [ "$depth" -eq 0 ] && return 0
+
+  case $page in
+  /*)
+    for glob in "$_DATA/pages/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/"}"; done
+    for glob in "$_EXEC/pages/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/"}"; done
+    ;;
+  *)
+    for glob in "$_DATA/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+    for glob in "$_EXEC/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+    ;;
+  esac \
+  | sort -u \
+  | while read -r page; do
+    case $page in
+      \#*|*/\#*) continue;;
+      *) pagedir="$(page_abs "$page")";;
+    esac
+    if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
+      printf %s\\n "$page"
+      page_children "$page" "$((depth - 1))"
+    fi
+  done
+}
+
+page_abs(){
+  case $1 in
+    /*) PATH "${1%/}/";;
+    *)  PATH "${PATH_INFO%/*}/${1%/}/";;
+  esac
+}