#!/bin/sh
# $Id: surfraw.in,v 1.5 2001/12/23 09:23:14 proff Exp $
# Surfraw -- Shell Users' Revolutionary Front Against the World wide web
#
# (c) 2000-2001 Julian Assange, placed into the public domain
# (c) 2000 Melbourne Institute for Advanced Study, placed into the public domain
#
# see the file COPYING for further copyright details
#
# @configure_input@

surfraw_version=@VERSION@
surfraw_api_version=1.0
w3_argv0=`basename "$0"`

# defaults

w3_config_hook () {
   return 1
}

w3_config () {
prefix=@prefix@
def   SURFRAW_global_conf       @sysconfdir@/surfraw.conf
def   SURFRAW_conf              $HOME/.surfraw.conf

   test -r "$SURFRAW_global_conf" || err "couldn't source SURFRAW_global_conf ($SURFRAW_global_conf)"
   . "$SURFRAW_global_conf"
   w3_config_hook
   test -r "$SURFRAW_conf" && . "$SURFRAW_conf"
}

warn () {
   echo "$w3_argv0 WARNING: ""$@"
}

err () {
   echo "$w3_argv0 ERROR: ""$@"
   exit 1
}

yesno () {
   eval value=\$${1}
   case "$value" in
       # "yes", "true", "on", or "1"
       [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
           return 0
       ;;
       # "no", "false", "off", or "0"
       [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
           return 1
       ;;

       *)
       err "\"$1\" is not set correctly. Should be (yes|on|1|no|off|0). Is \"$value\""
       ;;
   esac
}

ifyes () {
   yesno "$@" && return 0
   return 1
}

ifno () {
   yesno "$@" && return 1
   return 0
}

ok () {
   yesno "$@"
}

null () {
   test -z "$@" && return 0
   return 1
}

def () {
   eval value=\$${1}
   test -z "$value" || return 0
   eval ${1}="$2"
   return 0
}

defyn () {
   eval value=\$${1}
   test -z "$value" && eval ${1}="$2"
   yesno "$1"
}

setopt  () {
   eval value=\$${1}
   eval ${1}="$2"
}

setoptyn () {
   eval value=\$${1}
   eval ${1}="$2"
   yesno "$1"
}

w3_find_prog () {
 prog="$1"
 old_ifs="${IFS:-\" \"}"
 IFS=":"
 path_ifs="$PATH"
 for dir in $path_ifs; do
   test -z "$dir" && dir=.
   if test -e "$dir/$prog"; then
       echo "$dir/$prog"
       IFS="$old_ifs"
       return 0
   fi
 done
 IFS="$old_ifs"
 return 1
}

w3_url_escape () {
   echo "$@" | sed 's/%/%25/g;
                    s/+/%2B/g;
#                    s/ /+/g;
                    s/ /%20/g;
                    s/"/%22/g;
                    s/#/%23/g;
                    s/\$/%24/g;
                    s/&/%26/g;
                    s/,/%2C/g;
                    s/\./%2E/g;
                    sx/x%2Fx;
                    s/:/%3A/g;
                    s/;/%3B/g;
                    s/</%3C/g;
                    s/=/%3D/g;
                    s/>/%3E/g;
                    s/?/%3F/g;
                    s/@/%40/g;
                    s/\[/%5B/g;
                    s/\\/%74/g;
                    s/\]/%5D/g;
                    s/\^/%5E/g;
                    s/{/%7B/g;
                    s/|/%7C/g;
                    s/}/%7D/g;
                    s/~/%7E/g;
                  '"s/'/%60/g"
}

w3_url_of_arg () {
   if ok SURFRAW_quote_args; then
       args=\""$@"\"
   else
       args="$@"
   fi
   if ok SURFRAW_escape_url_args; then
       w3_url_escape "$args"
   else
       echo "$@"
   fi
}

true () {
   return 0
}

false () {
   return 1
}

w3_global_usage () {
# style: keep sorted
#-------------------------------------79 cols----------------------------------
   cat <<EOF
Global options:
 -browser=EXECUTABLE           Set browser
                               Default: $SURFRAW_browser
 -elvi                         List Surfraw mechanims for conquering evil
 -escape-url-args=yes|no       Apply url escaping to arguments
                               Default: $SURFRAW_escape_url_args
                               Environment: SURFRAW_escape_url_args
 -g | -graphical               Get some windowed sin
                               Default: $SURFRAW_graphical
                               Environment: SURFRAW_graphical
 -p0rn=yes|no                  Yes, yes, harder, deeper, faster, oh baybe
                               Default: $SURFRAW_p0rn
                               Environment: SURFRAW_p0rn
 -help                         What you're reading now, dude
 -quiet=yes|no                 I can't enjoy it with you talking all the time
                               Default: $SURFRAW_quiet
                               Environment: SURFRAW_quiet
 -new[=yes|no]                 Start in a new window
                               Default: $SURFRAW_new_window
                               Environment: SURFRAW_new_window
 -t | -text                    Back to the yellow brick road
 -q | -quote                   Quote arguments with " characters
                               Default: $SURFRAW_quote_args
                               Environment: SURFRAW_quote_args
 -version                      Display Surfraw version ($surfraw_version)
Copyright:
 Copyright (c) 2000-2001 Julian Assange <[email protected]>
 Copyright (c) 2001 Australian Institute for Collaborative Research
 Copyright (c) 2000 Melbourne Institute for Advanced Study
EOF
}

w3_usage_hook () {
   echo "Usage: $w3_argv0 [options] [args...]"
   w3_global_usage
}

w3_bad_option () {
   err "bad option \"${opt}\". Try ${w3_argv0} -help for usage information"
}

w3_parse_option_hook () {
   return 1
}

w3_parse_option () {
   opt="$1"
   case "$opt" in
           -*=*) optarg=`echo "$opt" | sed 's/[-_a-zA-Z0-9]*=//'`
   esac
   w3_parse_option_hook "$opt" "$optarg" && return 0

   case "$opt" in
       -browser=*)         setopt   SURFRAW_browser            $optarg ;;
       -elvi)              cat "$SURFRAW_elvi_list"; exit 0            ;;
       -escape-url-args=*) setoptyn SURFRAW_escape_url_args    $optarg ;;
       -g | -graphical)    setoptyn SURFRAW_graphical          yes     ;;
       -p0rn=*)            setoptyn SURFRAW_p0rn               $optarg ;;
       -help | --help)     do_help=1                                   ;;
       -quiet=*)           setoptyn SURFRAW_quiet              $optarg ;;
       -q | -quote)        setoptyn SURFRAW_quote_args         yes     ;;
       -new)               setoptyn SURFRAW_new_window         yes     ;;
       -new=*)             setoptyn SURFRAW_new_window         $optarg ;;
       -t | -text)         setoptyn SURFRAW_graphical          no      ;;
       -version)           echo $surfraw_version; exit 0               ;;
       --)                 return 1                                    ;;
       -*)                 w3_bad_option "$opt"                        ;;
       *)                  return 1                                    ;;
   esac
   return 0
}

w3_parse_args () {
   w3_args=
   SURFRAW_browser=none
   SURFRAW_browser_args=none
   do_help=0
   mode=unknown
   for arg in "$@"; do
       w3_parse_option "$arg" || w3_args="$w3_args $arg"
   done
   if test $SURFRAW_browser = none; then
       if ok SURFRAW_graphical && test -n "$DISPLAY"; then
               SURFRAW_browser=$SURFRAW_graphical_browser
               SURFRAW_browser_args=$SURFRAW_graphical_browser_args
               mode=graphics
       else
               SURFRAW_browser=$SURFRAW_text_browser
               SURFRAW_browser_args=$SURFRAW_text_browser_args
               mode=text
       fi
   fi
   if ok do_help; then
       w3_usage_hook
       exit 0
   fi
}

w3_browse_url () {
  if ok SURFRAW_new_screen && test -n "$STY" && test mode = text; then
       screen=yes
  else
       screen=no
  fi
   if ok screen; then
       if test $SURFRAW_browser_args = "none"; then
               $SURFRAW_screen $SURFRAW_browser "$@"
       else
               $SURFRAW_screen $SURFRAW_browser $SURFRAW_browser_args "$@"
       fi
   else
       if ok SURFRAW_graphical_remote && test mode = graphical; then
               if ok SURFRAW_new_window; then
                       newwin=", new-window"
               else
                       newwin=""
               fi
               if test $SURFRAW_browser_args = "none"; then
                       $SURFRAW_browser -remote "openURL($*$newwin)" 2>/dev/null || $SURFRAW_browser "$@" &
               else
                       $SURFRAW_browser -remote "openURL($*$newwin)" 2>/dev/null || $SURFRAW_browser $SURFRAW_browser_args "$@" &
               fi
       else
               if test $SURFRAW_browser_args = "none"; then
                       $SURFRAW_browser "$@"
               else
                       $SURFRAW_browser $SURFRAW_browser_args "$@"
                fi
       fi

   fi
#    ifno SURFRAW_quiet && echo "Thank you for supporting the Shell Users' Revolutionary Front Rage Against the Web"
}

case "$w3_argv0" in
   surfraw)
       w3_config
       w3_parse_option -elvi ;;
esac