X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=tools.sh;h=65327d7c38f229e3815b207f173d86823245ae50;hb=e39b3e7489e5210ce3b5d5137de841c13b700d9d;hp=a85e63c5e4ca12a1bffb2b3da5220d194cb8f21a;hpb=18890d81240129f9561517ee6ae992e7a3d1e00a;p=shellwiki diff --git a/tools.sh b/tools.sh index a85e63c..65327d7 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 @@ -187,28 +187,35 @@ has_tag() { } page_title() { - local mdfile PAGE_TITLE - - if ! mdfile="$(mdfile "${1:-${PATH_INFO%/*}}")"; then - return 1 + 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;^.*]*>(.*>)?([^<]+)(<.*)?.*$;\2;; tQ; + s;^.*]*>(.*>)?([^<]+)(<.*)?.*$;\2;; tQ; + b; :Q + # reverse escapes of cgilite HTML function, + # to prevent later double escaping + # later escaping must not be omited + s/<//g; s/"/'\"'/g; s/'/'\''/g; + s/[/[/g; s/]/]/g; s/ /\r/g; s/&/\&/g; + p; q; + ' + )" fi - PAGE_TITLE="$( - sed -nE ' - s;^%title[ \t]+([[:graph:]][[:print:]]+)\r?$;\1;p; tQ; - b; :Q q; - ' "$mdfile" - )" - [ ! "${PAGE_TITLE}" ] && PAGE_TITLE="$( - MD_MACROS="" md <"$mdfile" \ - | sed -nE ' - s;^.*]*>(.*>)?([^<]+)(<.*)?.*$;\2;p; tQ; - s;^.*]*>(.*>)?([^<]+)(<.*)?.*$;\2;p; tQ; - b; :Q q; - ' - )" if [ ! "${PAGE_TITLE}" ]; then - PAGE_TITLE="${1:-${PATH_INFO}}" - PAGE_TITLE="${PAGE_TITLE%/*}" + # use last part of page URL as title + PAGE_TITLE="${1%/}" PAGE_TITLE="${PAGE_TITLE##*/}" fi printf %s\\n "$PAGE_TITLE"