]> git.plutz.net Git - shellwiki/blobdiff - tools.sh
search list: check if page content exists
[shellwiki] / tools.sh
index 4f7bc2525ff8e49cf5c5d5c72d252b8f49832be0..248a2542b2a86df0d57877cc8330a150a437d88f 100755 (executable)
--- a/tools.sh
+++ b/tools.sh
@@ -17,6 +17,8 @@ include_tools="$0"
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
+. "${_EXEC}/cgilite/storage.sh"
+
 md(){
   local parser
 
@@ -147,3 +149,66 @@ page_abs(){
     *)  PATH "${PATH_INFO%/*}/${1%/}/";;
   esac
 }
+
+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); }')"
+    dt="$(DBM "${tdir}/${tag}" get "${page}")" || return 1
+    df="$(stat -c %Y "$(mdfile "$page")")" || return 1
+    if [ "$df" -gt "$dt" ]; then
+      DBM "${tdir}/${tag}" remove "${page}"
+      return 1
+    fi
+  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
+}
+
+page_title() {
+  local mdfile PAGE_TITLE
+
+  if ! mdfile="$(mdfile "${1:-${PATH_INFO%/*}}")"; then
+    return 1
+  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;^.*<h1[^>]*>(.*>)?([^<]+)(<.*)?</h1>.*$;\2;p; tQ;
+      s;^.*<h2[^>]*>(.*>)?([^<]+)(<.*)?</h2>.*$;\2;p; tQ;
+      b; :Q q;
+    '
+  )"
+  if [ ! "${PAGE_TITLE}" ]; then
+    PAGE_TITLE="${1:-${PATH_INFO%/*}}"
+    PAGE_TITLE="${PAGE_TITLE##*/}"
+  fi
+  printf %s\\n "$PAGE_TITLE"
+}