]> git.plutz.net Git - shellwiki/blobdiff - macros/search
bugfix query processing
[shellwiki] / macros / search
index b3d06e85a86fbc33274b48b298b4af9b926bd48b..3951e97307115804ce13f8d6c0ea2f45791d30d8 100755 (executable)
@@ -25,7 +25,7 @@ I="$_DATA/index"
 _(){ printf %s\\n "$*"; }
 [ "${LANGUAGE}" -a -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh"
 
-show_form=true show_hits='' action=''
+show_form=true show_hits='' action='' query=''
 
 set -- "$@" --
 while [ $# -gt 0 ]; do case $1 in
@@ -41,6 +41,8 @@ while [ $# -gt 0 ]; do case $1 in
   *) set -- "$@" "$1"; shift 1;;
 esac; done
 
+[ $# -gt 0 ] && query="$*" || query="$(GET q)"
+
 searchteaser() {
   local file="$1" words db3_data
   local w l nc nl hits mhits cont mcont
@@ -79,19 +81,23 @@ elif [ ! "$action" ]; then
 fi
 
 if [ "${show_form}" = true ]; then
-  printf '<form class="macro search" method="GET" action="%s">
-  <input type="search" placeholder="%s" name="q" value="%s"><button type="submit" class="search">%s</button>
-</form>' "$action" "$(_ Search)" "$([ "$show_hits" = true ] && GET q |HTML)" "$(_ Search)"
+  cat <<-EOF
+       <form class="macro search" method="GET" action="${action}">
+         <input type="search" placeholder="$(_ Search)" name="q"
+                value="$([ "$show_hits" = true ] && printf %s\\n "$query" |HTML)"
+         ><button type="submit" class="search">$(_ Search)</button>
+       </form>
+       EOF
 fi
 
 if [ "${show_hits}" = true ]; then
   { read tags; read ntags; read words; } <<-EOF
-       $(GET q | awk '
+       $(printf %s\\n "${query}" | awk '
        BEGIN { # Field separator FS should include punctuation, including Unicode Block U+2000 - U+206F
                if ( length("ยก") == 1 )  # Utf-8 aware AWK
-               FS = "([] \\t\\n\\r\"'\''()*+,./:;<=>?\\\\^_`{|}~[-]|%[0-9A-Fa-f]{2}|'"$(printf '[\342\200\200-\342\201\257]')"')+";
+               FS = "([] \\t\\n\\r\"'\''()*+,./:;<=>?\\\\^`{|}~[-]|%[0-9A-Fa-f]{2}|'"$(printf '[\342\200\200-\342\201\257]')"')+";
                else                     # UTF-8 Hack
-               FS = "([] \\t\\n\\r\"'\''()*+,./:;<=>?\\\\^_`{|}~[-]|%[0-9A-Fa-f]{2}|'"$(printf '\342\200[\200-\277]|\342\201[\201-\257]')"')+";
+               FS = "([] \\t\\n\\r\"'\''()*+,./:;<=>?\\\\^`{|}~[-]|%[0-9A-Fa-f]{2}|'"$(printf '\342\200[\200-\277]|\342\201[\201-\257]')"')+";
                fi
              }
        { t=0; for (n = 1; n <= NF; n++) if ($n  ~ /#[[:alnum:]_]+/)  tags[t++] = toupper($n);
@@ -99,7 +105,7 @@ if [ "${show_hits}" = true ]; then
          t=0; for (n = 1; n <= NF; n++) if ($n !~ /![[:alnum:]_]+/) words[t++] = tolower($n);
          for (t in  tags) { sub(/^#/, "",  tags[t]); printf "%s        ",  tags[t]; } print "";
          for (t in ntags) { sub(/^!/, "", ntags[t]); printf "%s        ", ntags[t]; } print "";
-         for (t in words) { sub(/^[!#]/, "", words[t]); printf "%s     ", words[t]; } print "";
+         for (t in words) { gsub(/[!#_ ]+/, "  ", words[t]); printf "%s        ", words[t]; } print "";
        }
        ')
        EOF