3 [ "$include_tools" ] && return 0
6 # Copyright 2022 - 2023 Paul Hänsch
8 # Permission to use, copy, modify, and/or distribute this software for any
9 # purpose with or without fee is hereby granted, provided that the above
10 # copyright notice and this permission notice appear in all copies.
12 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 . "${_EXEC}/cgilite/storage.sh"
26 md "${_EXEC}"/parsers/*
27 elif [ "$#" = 1 ]; then
37 # Check if page exists, if possible fall
38 # back to default page from installation
39 local page="$(PATH "$1")"
42 # Regular processing, keep in sync with tools.sh
43 if [ -f "$_DATA/pages/$page/:$LANGUAGE/#page.md" ]; then
44 printf %s\\n "$_DATA/pages/$page/:$LANGUAGE/#page.md"
45 elif [ -f "$_DATA/pages/$page/#page.md" ]; then
46 printf %s\\n "$_DATA/pages/$page/#page.md"
47 elif [ -f "$_EXEC/pages/$page/:$LANGUAGE/#page.md" ]; then
48 printf %s\\n "$_EXEC/pages/$page/:$LANGUAGE/#page.md"
49 elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
50 printf %s\\n "$_EXEC/pages/$page/#page.md"
54 # ^^ suppress error messages produced
55 # by printf when stdout was closed
63 if [ $size -gt $((1024 * 1024 * 1024)) ]; then
64 size=$((size / 1024 / 1024 / 1024 * 10 + size / 1024 / 1024 % 1024 / 100))
65 printf "%i.%i GB" "$((size / 10))" "$((size % 10))"
67 elif [ $size -gt $((1024 * 1024)) ]; then
68 size=$((size / 1024 / 1024 * 10 + size / 1024 % 1024 / 100))
69 printf "%i.%i MB" "$((size / 10))" "$((size % 10))"
71 elif [ $size -gt $((1024)) ]; then
72 size=$((size / 1024 * 10 + size % 1024 / 100))
73 printf "%i.%i KB" "$((size / 10))" "$((size % 10))"
81 local pattern="${1%/}" IFS=''
82 local glob page pagedir
85 [ "$page" = "$pattern" ] && page=.
86 [ ! "$page" ] && page=/
87 pattern="${pattern##*/}"
88 [ ! "$pattern" ] && pattern="*"
92 for glob in "$_DATA/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
93 for glob in "$_EXEC/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
96 for glob in "$_DATA/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
97 for glob in "$_EXEC/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
101 | while read -r glob; do
102 [ -e "$glob" ] || continue
103 pagedir="$(page_abs "${glob%%/#attachments/*}/")"
104 [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
105 && printf '%s\n' "${glob%%/#attachments/*}/${glob#*/#attachments/}"
110 local pattern="${1%/}/" depth="${2:-0}" IFS=''
111 local glob page pagedir
115 for glob in "$_DATA/pages"$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
116 for glob in "$_EXEC/pages"$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
119 for glob in "$_DATA/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
120 for glob in "$_EXEC/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
124 | while read -r page; do
125 # Not a page directory (just a metadata dir)
126 [ ! "${page%%#*}" -o ! "${page%%*/#*}" ] && continue
128 # Omit "system" pages unless explicitly wanted
129 [ ! "${page%%\[*\]/*}" -o ! "${page%%*/\[*\]/*}" ] && [ "$glob_system_pages" != true ] && continue
131 # Omit translation pages if translations are enabled
132 [ ! "${page%%:*}" -o ! "${page%%*/:*}" ] && [ "$LANGUAGE_DEFAULT" ] && continue
134 pagedir="$(page_abs "$page")"
136 if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
137 printf '%s\n' "$page"
138 if ! [ "$depth" -eq 0 ]; then
139 PATH_INFO="$pagedir" page_glob "*" "$((depth - 1))" \
140 | while read -r glob; do printf %s%s\\n "$page" "$glob"; done
149 *) PATH "${PATH_INFO%/*}/${1%/}/";;
154 local page="$(page_abs "$1")"; shift 1;
155 local tdir="$_DATA/tags" tag dt df
158 tag="$(printf %s "$tag" |awk '{ sub(/^#/, ""); gsub(/[^[:alnum:]]/, "_"); print toupper($0); }')"
159 dt="$(DBM "${tdir}/${tag}" get "${page}")" || return 1
160 df="$(stat -c %Y "$(mdfile "$page")")" || return 1
161 if [ "$df" -gt "$dt" ]; then
162 DBM "${tdir}/${tag}" remove "${page}"