]> git.plutz.net Git - invoices/commitdiff
Merge commit '5c6b7e6a4afe36fa55e046eb796e13450cd4e296' into v2
authorPaul Hänsch <paul@plutz.net>
Thu, 24 Jul 2025 18:56:06 +0000 (20:56 +0200)
committerPaul Hänsch <paul@plutz.net>
Thu, 24 Jul 2025 18:56:06 +0000 (20:56 +0200)
1  2 
cgilite/db23.sh
cgilite/markdown.awk
cgilite/tests-markdown.sh

diff --cc cgilite/db23.sh
index e8a0d64da8bf0b15c7c74398fe7200d68ad16680,0000000000000000000000000000000000000000..b7ab5485c32b1f0f4a5141303b8b875124e54d77
mode 100755,000000..100755
--- /dev/null
@@@ -1,114 -1,0 +1,122 @@@
-     check|contains) key="$(STRING "$1")" val=''
 +#!/bin/sh
 +
 +# Copyright 2023, 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
 +# copyright notice and this permission notice appear in all copies.
 +# 
 +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 +
 +[ -n "$include_db23" ] && return 0
 +include_db23="$0"
 +
 +. "${_EXEC:-.}/cgilite/storage.sh"
 +
 +DB2() {
 +  local call data file key val seq
 +  data="${BR}${1}${BR}" call="$2"
 +  shift 2
 +
 +  case $call in
 +    new|discard)
 +      printf ''
 +      ;;
 +    open|load) file="$1"
 +      cat "$file" || return 1
 +      ;;
-       [ "${key}${BR}${val}" = "${data}" ] && return 1
-       printf '%s' "${key#"${BR}"}${BR}${val%"${BR}"}"
++    check|contains) key="$(STRING "$1")"  seq="${2:-1}"
 +      val="${data##*"${BR}${key}"     }" val="${val%%"${BR}"*}"
++      [ "$val" = '' ] && return 1 || val="${val}      "
++      while [ $seq -gt 1 ]; do
++        seq=$((seq - 1)) val="${val#* }"
++      done
 +      [ "$val" = '' ] && return 1
 +      ;;
 +    count) key="$(STRING "$1")" val='' seq=0
 +      val="${data##*"${BR}${key}"     }" val="${val%%"${BR}"*}"
 +      [ "$val" = '' ] || val="${val}  "
 +      while [ "$val" != '' ]; do
 +        seq=$((seq + 1)) val="${val#* }"
 +      done
 +      printf "%i\n" "$seq"
 +      [ $seq = 0 ] && return 1
 +      ;;
 +    get) key="$(STRING "$1")" seq="${2:-1}"
 +      val="${data##*"${BR}${key}"     }" val="${val%%"${BR}"*}"
 +      [ "$val" = '' ] && return 1 || val="${val}      "
 +      while [ $seq -gt 1 ]; do
 +        seq=$((seq - 1)) val="${val#* }"
 +      done
 +      [ "$val" = '' ] && return 1
 +      UNSTRING "${val%%       *}"
 +      ;;
 +    iterate|raw) key="$(STRING "$1")"
 +      val="${data##*"${BR}${key}"     }" val="${val%%"${BR}"*}"
 +      [ "$val" = '' ] && return 1
 +      printf '%s\n' $val
 +      ;;
 +    delete|remove) key="$(STRING "$1")"
 +      val="${data#*"${BR}${key}"      *"${BR}"}"
 +      key="${data%"${BR}${key}"       *"${BR}"*}"
++      if [ "${val}" = "${data}" ]; then
++        printf %s\\n "${data}"
++        return 1
++      else
++        printf '%s' "${key#"${BR}"}${BR}${val%"${BR}"}"
++      fi
 +      ;;
 +    set|store) key="$(STRING "$1")" val=""
 +      shift 1
 +      val="$(for v in "$@"; do STRING "$v"; printf \\t; done)"
 +      if [ "${data#*"${BR}${key}"     *}" != "$data" ]; then
 +        data="${data%"${BR}${key}"    *"${BR}"*}${BR}${key}   ${val%  }${BR}${data#*"${BR}${key}"     *"${BR}"}"
 +        data="${data#"${BR}"}" data="${data%"${BR}"}"
 +      else
 +        data="${data#"${BR}"}${key}   ${val%  }${BR}"
 +        data="${data#"${BR}"}"
 +      fi
 +      printf %s\\n "${data}"
 +      ;;
 +    append) key="$(STRING "$1")" val=""
 +      val="${data##*"${BR}${key}"     }" val="${val%%"${BR}"*}"
 +      if [ "$val" = '' ]; then
 +        printf %s\\n "${data}"
 +        return 1
 +      else
 +        shift 1
 +        val="${val}$(for v in "$@"; do printf \\t; STRING "$v"; done)"
 +        data="${data%"${BR}${key}"    *"${BR}"*}${BR}${key}   ${val%  }${BR}${data#*"${BR}${key}"     *"${BR}"}"
 +        data="${data#"${BR}"}" data="${data%"${BR}"}"
 +        printf %s\\n "${data}"
 +      fi
 +      ;;
 +    flush|save|write) file="$1"
 +      data="${data#"${BR}"}" data="${data%"${BR}"}"
 +      printf '%s\n' "$data" >"$file" || return 1
 +      ;;
 +  esac
 +  return 0
 +}
 +
 +DB3() {
 +  # wrapper function that allows easyer use of DB2
 +  # by always keeping file data in $db3_data
 +
 +  case "$1" in
 +    new|discard|open|load|delete|remove|set|store|append)
 +      db3_data="$(DB2 "$db3_data" "$@")"
 +      return "$?"
 +      ;;
 +    get|count|check|contains|iterate|raw|flush|save|write)
 +      DB2 "$db3_data" "$@"
 +      return "$?"
 +      ;;
 +  esac
 +}
Simple merge
Simple merge