]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
allow negative tag selection
[shellwiki] / tools.sh
index 57ae8274cc6d1fde2a5be157531734c8b246832d..a298394c9cf5881cb4a764587302fe4467030d67 100755 (executable)
--- a/tools.sh
+++ b/tools.sh
@@ -151,11 +151,12 @@ page_abs(){
 }
 
 has_tags() {
+  # true if PAGE is tagges with all TAGS
   local page="$(page_abs "$1")"; shift 1;
   local tdir="$_DATA/tags" tag dt df
 
   for tag in "$@"; do
-    tag="$(printf %s "$tag" |awk '{ sub(/^#/, ""); gsub(/[^[:alnum:]]/, "_"); print toupper($0); }')"
+    tag="$(printf %s "$tag" |awk '{ sub(/^[#!]/, ""); gsub(/[^[:alnum:]]/, "_"); print toupper($0); }')"
     dt="$(DBM "${tdir}/${tag}" get "${page}")" || return 1
     df="$(stat -c %Y "$(mdfile "$page")")" || return 1
     if [ "$df" -gt "$dt" ]; then
@@ -165,3 +166,22 @@ has_tags() {
   done
   return 0
 }
+
+has_tag() {
+  # true if PAGE is tagged with any of TAGS
+  local page="$(page_abs "$1")"; shift 1;
+  local tdir="$_DATA/tags" tag dt df
+
+  for tag in "$@"; do
+    tag="$(printf %s "$tag" |awk '{ sub(/^[#!]/, ""); gsub(/[^[:alnum:]]/, "_"); print toupper($0); }')"
+    dt="$(DBM "${tdir}/${tag}" get "${page}")" || continue
+    df="$(stat -c %Y "$(mdfile "$page")")" || return 1
+    if [ "$df" -gt "$dt" ]; then
+      DBM "${tdir}/${tag}" remove "${page}"
+      continue
+    else
+      return 0
+    fi
+  done
+  return 1
+}