[ "$include_tools" ] && return 0
include_tools="$0"
-if [ "$(which awk)" ]; then
- md() {
- awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
- | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
- }
-elif [ "$(which busybox)" ]; then
- md() {
- busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
- | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
- }
-else
- md() { cat; }
-fi
+md(){
+ local parser
+
+ if [ "$#" = 0 ]; then
+ md "${_EXEC}"/parsers/*
+ elif [ "$#" = 1 ]; then
+ "$1"
+ else
+ parser="$1"
+ shift 1
+ "$parser" |md "$@"
+ fi
+}
mdfile(){
# Check if page exists, if possible fall
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/}"
}
page_glob(){
- local pattern="${1%/}/" IFS=''
+ local pattern="${1%/}/" depth="${2:-0}" IFS=''
local glob page pagedir
case $pattern in
esac \
| sort -u \
| while read -r page; do
- case $page in
- \#*|*/\#*) continue;;
- *) pagedir="$(page_abs "$page")";;
- esac
- [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
- && printf '%s\n' "$page"
- done
-}
+ # Not a page directory (just a metadata dir)
+ [ ! "${page%%#*}" -o ! "${page%%*/#*}" ] && continue
-page_children(){
- local page="${1:-${PATH_INFO}}" depth="${2:-1}"
- local glob pagedir IFS=''
- page="${page%/}/"
+ # Omit "system" pages unless explicitly wanted
+ [ ! "${page%%\[*\]/*}" -o ! "${page%%*/\[*\]/*}" ] && [ "$glob_system_pages" != true ] && continue
- [ "$depth" -eq 0 ] && return 0
+ # Omit translation pages if translations are enabled
+ [ ! "${page%%:*}" -o ! "${page%%*/:*}" ] && [ "$LANGUAGE_DEFAULT" ] && continue
+
+ pagedir="$(page_abs "$page")"
- case $page in
- /*)
- for glob in "$_DATA/pages/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/"}"; done
- for glob in "$_EXEC/pages/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/"}"; done
- ;;
- *)
- for glob in "$_DATA/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
- for glob in "$_EXEC/pages/$PATH_INFO/${page}"*/; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
- ;;
- esac \
- | sort -u \
- | while read -r page; do
- case $page in
- \#*|*/\#*) continue;;
- *) pagedir="$(page_abs "$page")";;
- esac
if [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ]; then
- printf %s\\n "$page"
- page_children "$page" "$((depth - 1))"
+ 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
}