]> git.plutz.net Git - shellwiki/blob - tools.sh
no code: add comments warning about the mdfile override in translations handler
[shellwiki] / tools.sh
1 #!/bin/sh
2
3 [ "$include_tools" ] && return 0
4 include_tools="$0"
5
6 if [ "$(which awk)" ]; then
7   md() { awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
8 elif [ "$(which busybox)" ]; then
9   md() { busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
10 else
11   md() { cat; }
12 fi
13
14 mdfile(){
15   #  Check if page exists, if possible fall
16   #  back to default page from installation
17   local page="$(PATH "$1")"
18
19   # IMPORTANT: A Copy of this function exists
20   # in `handlers/10_translations.sh`
21   # Look into it now!
22   # Keep it synchronized, when changing anything
23
24   if   [ -f "$_DATA/pages/$page/#page.md" ]; then
25     printf %s\\n "$_DATA/pages/$page/#page.md"
26     return 0
27   elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
28     printf %s\\n "$_EXEC/pages/$page/#page.md"
29     return 0
30   else
31     return 1
32   fi 2>&-
33   #  ^^ suppress error messages produced
34   #     by printf when stdout was closed
35 }
36
37 size_human(){
38   local size="$1"
39
40   if [ $size -gt $((1024 * 1024 * 1024)) ]; then
41     size=$((size / 1024 / 1024 / 1024 * 10 + size / 1024 / 1024 % 1024 / 100))
42     printf "%i.%i GB" "$((size / 10))" "$((size % 10))"
43
44   elif [ $size -gt $((1024 * 1024)) ]; then
45     size=$((size / 1024 / 1024 * 10 + size / 1024 % 1024 / 100))
46     printf "%i.%i MB" "$((size / 10))" "$((size % 10))"
47
48   elif [ $size -gt $((1024)) ]; then
49     size=$((size / 1024 * 10 + size % 1024 / 100))
50     printf "%i.%i KB" "$((size / 10))" "$((size % 10))"
51
52   else
53     printf "%i B" "$size"
54   fi
55 }
56
57 page_glob(){
58   local pattern="${1%/}/" IFS=''
59   local glob page pagedir
60
61   case $pattern in
62   /*)
63     for glob in "$_DATA/pages"$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
64     for glob in "$_EXEC/pages"$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
65     ;;
66   *)
67     for glob in "$_DATA/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
68     for glob in "$_EXEC/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
69     ;;
70   esac \
71   | sort -u \
72   | while read -r page; do
73     case $page in
74       \#*|*/\#*) continue;;
75       *) pagedir="$(page_abs "$page")";;
76     esac
77     [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
78     && printf '%s\n' "$page"
79   done
80 }
81
82 page_children(){
83   local page="${1:-${PATH_INFO}}" depth="${2:-1}"
84   local glob pagedir IFS=''
85   page="${page%/}/"
86
87   [ "$depth" -eq 0 ] && return 0
88
89   case $page in
90   /*)
91     for glob in "$_DATA/pages/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/"}"; done
92     for glob in "$_EXEC/pages/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/"}"; done
93     ;;
94   *)
95     for glob in "$_DATA/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
96     for glob in "$_EXEC/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
97     ;;
98   esac \
99   | sort -u \
100   | while read -r page; do
101     case $page in
102       \#*|*/\#*) continue;;
103       *) pagedir="$(page_abs "$page")";;
104     esac
105     if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
106       printf %s\\n "$page"
107       page_children "$page" "$((depth - 1))"
108     fi
109   done
110 }
111
112 page_abs(){
113   case $1 in
114     /*) PATH "${1%/}/";;
115     *)  PATH "${PATH_INFO%/*}/${1%/}/";;
116   esac
117 }