3 # Set LANGUAGE_DEFAULT to enable Plugin
4 [ ! "$LANGUAGE_DEFAULT" ] && return 1
6 export LANGUAGE_DEFAULT="${LANGUAGE_DEFAULT:-en}"
7 export HTTP_REFERER="${HTTP_REFERER:-$(HEADER Referer)}"
8 export LANGUAGE ERROR_MSG
11 # Override mdfile Selection from tools.sh
12 local page="$(PATH "$1")"
16 # if PAGE Address is LANGUAGE Page, jump to regular processing
17 # else if LANGUAGE Page exists, add language tag
18 # Also the reason why `mdfile` should not be used in `acl.sh`
19 if [ "${page%/:${LANGUAGE}}" != "$page" ]; then
21 elif [ -f "$_DATA/pages/$page/:$LANGUAGE/#page.md" ]; then
22 printf %s\\n "$_DATA/pages/$page/:$LANGUAGE/#page.md"
24 elif [ -f "$_EXEC/pages/$page/:$LANGUAGE/#page.md" ]; then
25 printf %s\\n "$_EXEC/pages/$page/:$LANGUAGE/#page.md"
29 # Regular processing, keep in sync with tools.sh
30 if [ -f "$_DATA/pages/$page/#page.md" ]; then
31 printf %s\\n "$_DATA/pages/$page/#page.md"
33 elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
34 printf %s\\n "$_EXEC/pages/$page/#page.md"
39 # ^^ suppress error messages produced
40 # by printf when stdout was closed
44 # Override markdown processor from `tools.sh` to add link suffixes
45 # -> better implement a parser stack, i.e. pipeline markdown + other parser plugins
46 if [ "$(which awk)" ]; then
48 awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
49 | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
51 elif [ "$(which busybox)" ]; then
53 busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk" \
54 | sed -E 's;(<[^>]+ )href="((/[^"/]+|[^"/]+[^:/]|)/([^"/]+/)*)"([^>]*>);\1href="\2:'"${LANGUAGE}"'"\5;g'
60 case ${HTTP_REFERER} in
63 LANGUAGE_REFERRED="${HTTP_REFERER##*/:}"
67 LANGUAGE="${LANGUAGE_REFERRED:-${LANGUAGE_DEFAULT}}"
70 */:?*/\[attachment\]/?*)
71 LANGUAGE="${PATH_INFO#*/:}"
72 LANGUAGE="${LANGUAGE%%/*}"
73 PATH_INFO="${PATH_INFO%%:?*/*}${PATH_INFO#*/:?*/}"
76 LANGUAGE="${PATH_INFO#*/:}"
77 LANGUAGE="${LANGUAGE%%/*}"
78 PATH_INFO="${PATH_INFO%:?*/\[attachment\]}[attachment]"
81 :;; # Default handler, considered valid in most cases
83 :;; # Default attachment handler
84 */:?*/) # Faulty URL build
85 REDIRECT "${_BASE}${PATH_INFO%/}"
87 # */:"${LANGUAGE_DEFAULT}")
88 # REDIRECT "${_BASE}${PATH_INFO%:*}"
91 LANGUAGE="${PATH_INFO##*/:}"
93 if mdfile "${PATH_INFO}/"; then
94 # Pretend to deliver Language Page, if Language Tag is valid
95 PATH_INFO="${PATH_INFO}/"
96 elif [ "$LANGUAGE" = "$LANGUAGE_DEFAULT" ]; then
97 # Pretend Language Tag was omitted for default Language
98 PATH_INFO="${PATH_INFO%:*}"
100 # Deliver default Page if Language is not found
101 ERROR_MSG="TRANSLATION NOT FOUND"
102 PATH_INFO="${PATH_INFO%:*}"
105 /|*/*/) # Keep Language from Referer
106 if [ "$LANGUAGE_REFERRED" -a "$LANGUAGE_REFERRED" != "$LANGUAGE_DEFAULT" ]; then
107 REDIRECT "${_BASE}${PATH_INFO}:${LANGUAGE_REFERRED}"
110 */\[*\]) # Keep Language from Referer
111 if [ "$LANGUAGE_REFERRED" -a "$LANGUAGE_REFERRED" != "$LANGUAGE_DEFAULT" ]; then
112 REDIRECT "${_BASE}${PATH_INFO%\[*\]}:${LANGUAGE_REFERRED}/[${PATH_INFO##*/\[}"