From d6f2b884f3b9f094b08d2d4e66e666f5b04c46ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Tue, 19 Sep 2023 18:40:13 +0200 Subject: [PATCH] allow tag filtering in `pagelist` and `include`, allow multiple paths in `pagelist` and `include` --- macros/include | 17 +++++++++++++---- macros/pagelist | 22 +++++++++++++++------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/macros/include b/macros/include index f300584..ac72de9 100755 --- a/macros/include +++ b/macros/include @@ -18,8 +18,9 @@ . "$_EXEC/acl.sh" . "$_EXEC/tools.sh" -from='1'; to='$'; rev=''; items='$'; hl=0; link='true' +from='1'; to='$'; rev=''; items='$'; hl=0; link='true'; depth=0; tags=''; page=''; +set -- "$@" -- while [ $# -gt 0 ]; do case $1 in --from) from="$2"; shift 2;; from=*) from="${1#*=}"; shift 1;; @@ -30,7 +31,10 @@ while [ $# -gt 0 ]; do case $1 in --rev|--reverse) rev="-r"; shift 1;; --nolink) link=""; shift 1;; --hl|-hl) hl=$2; shift 2;; - *) page="$1"; shift 1;; + --depth) depth=$2; shift 2;; + \#*) tags="${tags}${tags:+ }${1}"; shift 1;; + --) shift 1; break;; + *) set -- "$@" "$1"; shift 1;; esac; done if ! printf %s\\n "$from" |grep -qEx '[0-9]+|/([^/\\]|\\/|\\.)*/'; then @@ -46,13 +50,18 @@ if ! printf %s\\n "$items" |grep -qEx '\$|[0-9]+'; then exit 1 fi -page_glob "$page" \ +for page in "$@"; do + page_glob "$page" "$depth" +done \ | sort $rev \ | sed "${items}q" \ | while read glob; do page="$(page_abs "$glob")" - acl_read "$page" || continue mdfile="$(mdfile "$page")" || continue + acl_read "$page" || continue + has_tags "$page" $tags || continue + printf %s\\n "$INCLUDE_LIST" |grep -qxF "$page" && continue + export INCLUDE_LIST="${INCLUDE_LIST}${INCLUDE_LIST:+${BR}}$page" hglob="$(HTML "$glob")" refpfx="$(printf %s\\n "$hglob" |sed 's;[\;&\;];\\&;g')" [ "$link" ] \ diff --git a/macros/pagelist b/macros/pagelist index f4be177..2971515 100755 --- a/macros/pagelist +++ b/macros/pagelist @@ -18,30 +18,38 @@ . "$_EXEC/acl.sh" . "$_EXEC/tools.sh" +tags='' dir='' depth='' glob_system_pages=false + +set -- "$@" -- while [ $# -gt 0 ]; do case $1 in --system) glob_system_pages=true; shift 1;; --depth) depth="$2" shift 2;; + \#*) tags="${tags}${tags:+ }${1###}"; shift 1;; + --) shift 1; break;; *) if [ ! "$dir" ]; then dir="$1" + set -- "$@" "$1"; shift 1; elif [ ! "$depth" ]; then - depth="$1" - fi - shift 1;; + depth="$1"; shift 1; + else + set -- "$@" "$1"; shift 1; + fi;; esac; done -[ "$dir" ] || dir=* +[ "$*" ] || set -- "*" [ "$depth" -ge 0 -o "$depth" -le 0 ] 2>&- || depth=0 printf '\n' -- 2.39.2