]> git.plutz.net Git - shellwiki/blob - tools.sh
Merge commit '9acd3b2b516d560f4b8ff1db6e13b4ff519abfce'
[shellwiki] / tools.sh
1 #!/bin/sh
2
3 if [ "$(which awk)" ]; then
4   md() { awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
5 elif [ "$(which busybox)" ]; then
6   md() { busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
7 else
8   md() { cat; }
9 fi
10
11 mdfile(){
12   local page="$(PATH "$1")"
13
14   if   [ -f "$_DATA/pages/$page/#page.md" ]; then
15     printf %s\\n "$_DATA/pages/$page/#page.md"
16   elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
17     printf %s\\n "$_EXEC/pages/$page/#page.md"
18   else
19     return 1
20   fi
21 }
22
23 size_human(){
24   local size="$1"
25
26   if [ $size -gt $((1024 * 1024 * 1024)) ]; then
27     size=$((size / 1024 / 1024 / 1024 * 10 + size / 1024 / 1024 % 1024 / 100))
28     printf "%i.%i GB" "$((size / 10))" "$((size % 10))"
29
30   elif [ $size -gt $((1024 * 1024)) ]; then
31     size=$((size / 1024 / 1024 * 10 + size / 1024 % 1024 / 100))
32     printf "%i.%i MB" "$((size / 10))" "$((size % 10))"
33
34   elif [ $size -gt $((1024)) ]; then
35     size=$((size / 1024 * 10 + size % 1024 / 100))
36     printf "%i.%i KB" "$((size / 10))" "$((size % 10))"
37
38   else
39     printf "%i B" "$size"
40   fi
41 }
42
43 page_glob(){
44   local pattern="${1%/}/" IFS=''
45   local glob page pagedir
46
47   case $pattern in
48   /*)
49     for glob in "$_DATA/pages"$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
50     for glob in "$_EXEC/pages"$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
51     ;;
52   *)
53     for glob in "$_DATA/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
54     for glob in "$_EXEC/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
55     ;;
56   esac \
57   | sort -u \
58   | while read -r page; do
59     case $page in
60       \#*|*/\#*) continue;;
61       *) pagedir="$(page_abs "$page")";;
62     esac
63     [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
64     && printf '%s\n' "$page"
65   done
66 }
67
68 page_children(){
69   local page="${1:-${PATH_INFO}}" depth="${2:-1}"
70   local glob pagedir IFS=''
71   page="${page%/}/"
72
73   [ "$depth" -eq 0 ] && return 0
74
75   case $page in
76   /*)
77     for glob in "$_DATA/pages/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
78     for glob in "$_EXEC/pages/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
79     ;;
80   *)
81     for glob in "$_DATA/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
82     for glob in "$_EXEC/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
83     ;;
84   esac \
85   | sort -u \
86   | while read -r page; do
87     case $page in
88       \#*|*/\#*) continue;;
89       *) pagedir="$(page_abs "$page")";;
90     esac
91     if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
92       printf %s\\n "$page"
93       page_children "$page" "$((depth - 1))"
94     fi
95   done
96 }
97
98 page_abs(){
99   case $1 in
100     /*) PATH "${1%/}/";;
101     *)  PATH "${PATH_INFO%/*}/${1%/}/";;
102   esac
103 }