]> git.plutz.net Git - shellwiki/blob - tools.sh
move functions to tools
[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="$(PATH "$page")";;
62       *)  pagedir="$(PATH "$PATH_INFO/$page")";;
63     esac
64     [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
65     && printf '%s\n' "$page"
66   done
67 }
68
69 page_children(){
70   local page="${1:-${PATH_INFO}}" depth="${2:-1}"
71   local glob pagedir IFS=''
72   page="${page%/}/"
73
74   [ "$depth" -eq 0 ] && return 0
75
76   case $page in
77   /*)
78     for glob in "$_DATA/pages/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
79     for glob in "$_EXEC/pages/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
80     ;;
81   *)
82     for glob in "$_DATA/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
83     for glob in "$_EXEC/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
84     ;;
85   esac \
86   | sort -u \
87   | while read -r page; do
88     case $page in
89       \#*|*/\#*) continue;;
90       /*) pagedir="$(PATH "$page")";;
91       *)  pagedir="$(PATH "$PATH_INFO/$page")";;
92     esac
93     if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
94       printf %s\\n "$page"
95       page_children "$page" "$((depth - 1))"
96     fi
97   done
98 }