From: Paul Hänsch Date: Tue, 15 Sep 2026 13:13:22 +0000 (+0200) Subject: faster page_title function (without full md parsing) X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=d87c160cc02728f40e0b3925c35506fd58a4d4a1;p=shellwiki faster page_title function (without full md parsing) --- diff --git a/tools.sh b/tools.sh index e067e47..f0a96eb 100755 --- a/tools.sh +++ b/tools.sh @@ -227,27 +227,29 @@ 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; + s;\r$;;; + /^%title[ \t]+([[:graph:]][[:print:]]+)$/bTITLE; + /^##?[^#]+/bHHEAD; + /^(---+|===+)$/bLHEAD; + h;b; + + :TITLE + s;^%title[ \t]+;;; + p;q; + + :HHEAD + s;[ \t]*\{[ \t]*([.#]?([0-9a-zA-Z]+-)*[0-9a-zA-Z]+[ \t]+)*([.#]?([0-9a-zA-Z]+-)*[0-9a-zA-Z]+)[ \t]*\}$;;; + s;^##?[ \t]*;;; s;[ \t]*#+$;;; + /^.+$/{p; q;} + b; + + :LHEAD + x; + s;[ \t]*\{[ \t]*([.#]?([0-9a-zA-Z]+-)*[0-9a-zA-Z]+[ \t]+)*([.#]?([0-9a-zA-Z]+-)*[0-9a-zA-Z]+)[ \t]*\}$;;; + /^.+$/{p; q;} ' "$mdfile" )" - [ ! "${PAGE_TITLE}" ] && PAGE_TITLE="$( - # pick title from first h1/h2 headline - awk -f "${_EXEC}/cgilite/markdown.awk" <"$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 if [ ! "${PAGE_TITLE}" ]; then # use last part of page URL as title