]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
bugfix: use default _() function when translations are disabled
[shellwiki] / tools.sh
index 7069227d960f71d32fc87cc01ebd2143be8e1d27..4e93d3f4229049ef70ed84adf81eb20d81da3ffa 100755 (executable)
--- a/tools.sh
+++ b/tools.sh
@@ -3,19 +3,19 @@
 [ "$include_tools" ] && return 0
 include_tools="$0"
 
-if [ "$(which awk)" ]; then
-  md() {
-    awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
-    | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
-  }
-elif [ "$(which busybox)" ]; then
-  md() {
-    busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
-    | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
-  }
-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
@@ -83,6 +83,7 @@ attachment_glob(){
   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/}"
@@ -90,7 +91,7 @@ attachment_glob(){
 }
 
 page_glob(){
-  local pattern="${1%/}/" IFS=''
+  local pattern="${1%/}/" depth="${2:-0}" IFS=''
   local glob page pagedir
 
   case $pattern in
@@ -105,41 +106,23 @@ page_glob(){
   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
-}
+    # Not a page directory (just a metadata dir)
+    [ ! "${page%%#*}" -o ! "${page%%*/#*}" ] && continue
 
-page_children(){
-  local page="${1:-${PATH_INFO}}" depth="${2:-1}"
-  local glob pagedir IFS=''
-  page="${page%/}/"
+    # Omit "system" pages unless explicitly wanted
+    [ ! "${page%%\[*\]/*}" -o ! "${page%%*/\[*\]/*}" ] && [ "$glob_system_pages" != true ] && continue
 
-  [ "$depth" -eq 0 ] && return 0
+    # Omit translation pages if translations are enabled
+    [ ! "${page%%:*}" -o ! "${page%%*/:*}" ] && [ "$LANGUAGE_DEFAULT" ] && continue
+
+    pagedir="$(page_abs "$page")"
 
-  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))"
+      printf '%s\n' "$page"
+      if ! [ "$depth" -eq 0 ]; then
+        PATH_INFO="$pagedir" page_glob "*" "$((depth - 1))" \
+        | while read -r glob; do printf %s%s\\n "$page" "$glob"; done
+      fi
     fi
   done
 }