+
+attachment_glob(){
+ local pattern="${1%/}" IFS=''
+ local glob page pagedir
+
+ page="${pattern%/*}"
+ [ "$page" = "$pattern" ] && page=.
+ [ ! "$page" ] && page=/
+ pattern="${pattern##*/}"
+ [ ! "$pattern" ] && pattern="*"
+
+ case $page in
+ /*)
+ for glob in "$_DATA/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
+ for glob in "$_EXEC/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
+ ;;
+ *)
+ for glob in "$_DATA/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+ for glob in "$_EXEC/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+ ;;
+ esac \
+ | sort -u \
+ | while read -r glob; do
+ [ -e "$glob" ] || continue
+ pagedir="$(page_abs "${glob%%/#attachments/*}/")"
+ [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
+ && printf '%s\n' "${glob%%/#attachments/*}/${glob#*/#attachments/}"
+ done
+}
+
+page_glob(){
+ local pattern="${1%/}/" depth="${2:-0}" IFS=''
+ local glob page pagedir
+
+ case $pattern in
+ /*)
+ for glob in "$_DATA/pages"$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
+ for glob in "$_EXEC/pages"$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
+ ;;
+ *)
+ for glob in "$_DATA/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+ for glob in "$_EXEC/pages/$PATH_INFO"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+ ;;
+ esac \
+ | sort -u \
+ | while read -r page; do
+ # Not a page directory (just a metadata dir)
+ [ ! "${page%%#*}" -o ! "${page%%*/#*}" ] && continue
+
+ # Omit "system" pages unless explicitly wanted
+ [ ! "${page%%\[*\]/*}" -o ! "${page%%*/\[*\]/*}" ] && [ "$glob_system_pages" != true ] && continue
+
+ # Omit translation pages if translations are enabled
+ [ ! "${page%%:*}" -o ! "${page%%*/:*}" ] && [ "$LANGUAGE_DEFAULT" ] && continue
+
+ pagedir="$(page_abs "$page")"
+
+ if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
+ printf '%s\n' "$page"
+ if ! [ "$depth" -eq 0 ]; then
+ PATH_INFO="$pagedir" page_glob "*" "$((depth - 1))" \
+ | while read -r glob; do printf %s%s\\n "$page" "$glob"; done
+ fi
+ fi
+ done
+}
+
+page_abs(){
+ case $1 in
+ /*) PATH "${1%/}/";;
+ *) PATH "${PATH_INFO%/*}/${1%/}/";;
+ esac
+}