X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;ds=inline;f=tools.sh;h=b19a83d92c5c87be2005c6e3035982275aa69548;hb=20c6ce6a3de621383d1b6d985757366590722005;hp=a298394c9cf5881cb4a764587302fe4467030d67;hpb=fed4d5f078dbbb6c730ddd7ab8c0157afb460fe1;p=shellwiki diff --git a/tools.sh b/tools.sh index a298394..b19a83d 100755 --- a/tools.sh +++ b/tools.sh @@ -3,7 +3,7 @@ [ "$include_tools" ] && return 0 include_tools="$0" -# Copyright 2022 - 2023 Paul Hänsch +# Copyright 2022 - 2024 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 @@ -19,6 +19,10 @@ include_tools="$0" . "${_EXEC}/cgilite/storage.sh" +CACHE_AGE=${CACHE_AGE:-300} +export MD_MACROS="$_EXEC/macros" +export MD_HTML="${MD_HTML:-false}" + md(){ local parser @@ -57,6 +61,34 @@ mdfile(){ return 0 } +wiki() { + # Print content of a wiki page + # Get page from data or underlay dir, handle caching + local page="$(PATH "$1")" mdfile cache cachetime + + cache="$_DATA/pages/$page/#page:${LANGUAGE}.${USER_ID}.cache" + + mdfile="$(mdfile "$page")" || return 4 + acl_read "$page" || return 3 + + cachetime="$(stat -c %Y -- "$mdfile" "$cache" 2>/dev/null)" + + if [ "${cachetime#*${BR}}" -gt "${cachetime%${BR}*}" \ + -a "${cachetime#*${BR}}" -gt "$((_DATE - CACHE_AGE))" ]; then + cat "${cache}" + else + mkdir -p -- "$_DATA/pages/$page/" + # Macros expect to find page directory as working dir + ( cd -- "$_DATA/pages/$page/"; + md <"$mdfile" \ + | tee -- "${cache}.$$" + ) + grep -q '^%nocache' "$mdfile" \ + && rm -- "${cache}.$$" \ + || mv -- "${cache}.$$" "${cache}" + fi +} + size_human(){ local size="$1" @@ -185,3 +217,38 @@ has_tag() { done return 1 } + +page_title() { + local mdfile='' PAGE_TITLE='' + + if mdfile="$(mdfile "${1}")"; then + PAGE_TITLE="$( + # pick title from %title pragma + sed -nE ' + s;^%title[ \t]+([[:graph:]][[:print:]]+)\r?$;\1;p; tQ; + b; :Q q; + ' "$mdfile" + )" + [ ! "${PAGE_TITLE}" ] && PAGE_TITLE="$( + # pick title from first h1/h2 headline + MD_MACROS="" md <"$mdfile" \ + | sed -nE ' + s;^.*