X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=handlers%2F10_translations.sh;h=ba44a7f9dc09c4e589962757bfe3f25fa92ebb8b;hb=756d5e8c0adddd6ed14833cdc246c08eba3a12ae;hp=5ae3b0c5442332e553d34607da87a4f8c47e99c1;hpb=a88a2e833916c59ea6e99e9588543a58f02b9efe;p=shellwiki diff --git a/handlers/10_translations.sh b/handlers/10_translations.sh index 5ae3b0c..ba44a7f 100755 --- a/handlers/10_translations.sh +++ b/handlers/10_translations.sh @@ -1,5 +1,21 @@ #!/bin/sh +# Copyright 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +_(){ printf %s\\n "$*"; } + # Set LANGUAGE_DEFAULT to enable Plugin [ ! "$LANGUAGE_DEFAULT" ] && return 1 @@ -7,56 +23,6 @@ export LANGUAGE_DEFAULT="${LANGUAGE_DEFAULT:-en}" export HTTP_REFERER="${HTTP_REFERER:-$(HEADER Referer)}" export LANGUAGE ERROR_MSG -mdfile(){ - # Override mdfile Selection from tools.sh - local page="$(PATH "$1")" - page="${page%/}" - - # Additional part: - # if PAGE Address is LANGUAGE Page, jump to regular processing - # else if LANGUAGE Page exists, add language tag - # Also the reason why `mdfile` should not be used in `acl.sh` - if [ "${page%/:${LANGUAGE}}" != "$page" ]; then - : - elif [ -f "$_DATA/pages/$page/:$LANGUAGE/#page.md" ]; then - printf %s\\n "$_DATA/pages/$page/:$LANGUAGE/#page.md" - return 0 - elif [ -f "$_EXEC/pages/$page/:$LANGUAGE/#page.md" ]; then - printf %s\\n "$_EXEC/pages/$page/:$LANGUAGE/#page.md" - return 0 - fi 2>&- - - # Regular processing, keep in sync with tools.sh - if [ -f "$_DATA/pages/$page/#page.md" ]; then - printf %s\\n "$_DATA/pages/$page/#page.md" - return 0 - elif [ -f "$_EXEC/pages/$page/#page.md" ]; then - printf %s\\n "$_EXEC/pages/$page/#page.md" - return 0 - else - return 1 - fi 2>&- - # ^^ suppress error messages produced - # by printf when stdout was closed -} - -# UGLY! UGLY! UGLY! -# Override markdown processor from `tools.sh` to add link suffixes -# -> better implement a parser stack, i.e. pipeline markdown + other parser plugins -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 - case ${HTTP_REFERER} in */:*/*):;; */:*) @@ -78,7 +44,13 @@ case ${PATH_INFO} in PATH_INFO="${PATH_INFO%:?*/\[attachment\]}[attachment]" ;; */:?*/\[*\]) - :;; # Default handler, considered valid in most cases + LANGUAGE="${PATH_INFO#*/:}" + LANGUAGE="${LANGUAGE%%/*}" + ;; + */:?*/:?*) + # Accidental double language link, last one stays valid! + REDIRECT "${_BASE}${PATH_INFO%/:?*/:?*}/:${PATH_INFO##*/:}" + ;; */:?*/?*) :;; # Default attachment handler */:?*/) # Faulty URL build @@ -89,18 +61,17 @@ case ${PATH_INFO} in # ;; */:?*) LANGUAGE="${PATH_INFO##*/:}" + PATH_INFO="${PATH_INFO%:*}" - if mdfile "${PATH_INFO}/"; then - # Pretend to deliver Language Page, if Language Tag is valid - PATH_INFO="${PATH_INFO}/" - elif [ "$LANGUAGE" = "$LANGUAGE_DEFAULT" ]; then - # Pretend Language Tag was omitted for default Language - PATH_INFO="${PATH_INFO%:*}" - else - # Deliver default Page if Language is not found - ERROR_MSG="TRANSLATION NOT FOUND" - PATH_INFO="${PATH_INFO%:*}" - fi + [ "$LANGUAGE" != "$LANGUAGE_DEFAULT" ] \ + && case "$(mdfile "${PATH_INFO}")" in + *"/:$LANGUAGE/#page.md") + :;; + '') + :;; + *)ERROR_MSG="TRANSLATION NOT FOUND" + ;; + esac ;; /|*/*/) # Keep Language from Referer if [ "$LANGUAGE_REFERRED" -a "$LANGUAGE_REFERRED" != "$LANGUAGE_DEFAULT" ]; then @@ -114,4 +85,6 @@ case ${PATH_INFO} in ;; esac +[ -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh" + return 1