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