s4

diff s4-funcs.sh @ 942:5d70fa029f8d

Support MathJax rendering
author HIROSE Yuuji <yuuji@gentei.org>
date Mon, 25 Oct 2021 18:39:44 +0900
parents 79c7e64884c4
children 420ad90116e6
line diff
     1.1 --- a/s4-funcs.sh	Wed Sep 22 08:39:36 2021 +0900
     1.2 +++ b/s4-funcs.sh	Mon Oct 25 18:39:44 2021 +0900
     1.3 @@ -78,6 +78,8 @@
     1.4  whatsnewdays=${WHATS_NEW_DAYS:-14}
     1.5  main_session=`date +%F-$$`
     1.6  session=$main_session
     1.7 +mathjax=${MATHJAX:-'<script>MathJax = {tex: {tags: "ams"}};</script>
     1.8 +<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script><script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>'}
     1.9  
    1.10  tconfs=""
    1.11  imgcached=cache/${S4WORLD:+$S4WORLD/}img.`date +%Y/%m`
    1.12 @@ -92,7 +94,11 @@
    1.13  logtag="($$)${S4WORLD:+{$S4WORLD\}}"
    1.14  exec 3>> $logdir/debug.out
    1.15  err() {
    1.16 -  echo "[`date +%F-%T%z`]$logtag $@" 1>&3
    1.17 +  # echo "[`date +%F-%T%z`]$logtag $@" 1>&3
    1.18 +  # Avoid backslash escape sequences
    1.19 +  cat<<EOF 1>&3
    1.20 +[`date +%F-%T%z`]$logtag $@
    1.21 +EOF
    1.22  }
    1.23  case "$HTTP_USER_AGENT" in
    1.24    *i[Pp]hone*|*[Aa]ndroid*)	touchpanel=1 ;;
    1.25 @@ -454,8 +460,8 @@
    1.26    if [ -z "$1" ]; then
    1.27      tee -a $querylog
    1.28    else
    1.29 -    echo "$@" >> $querylog
    1.30 -    echo "$@"
    1.31 +    printf '%s\n' "$@" >> $querylog
    1.32 +    printf '%s\n' "$@"
    1.33    fi  >&5
    1.34    echo ".output stdout" >&5
    1.35    cat $sqo
    1.36 @@ -801,11 +807,11 @@
    1.37        if [ x"$user" = x"$val" ]; then
    1.38  	echo $user; return
    1.39        elif ismember $user $val; then
    1.40 -	echo $val; return
    1.41 +	printf '%s' "$val"; return
    1.42        fi ;;
    1.43    esac
    1.44  ## err getpar/ret: "val=[$val]"
    1.45 -  echo "$val"
    1.46 +  printf '%s' "$val"
    1.47  }
    1.48  setskey() {
    1.49    # For quick response...(?)
    1.50 @@ -845,25 +851,25 @@
    1.51       "X'"*)			# quoted hex string
    1.52         echo $1 ;;
    1.53       *\"*)			# string including dbl-quote"
    1.54 -       v=`echo "$v"|sed -e 's/\"/\"\"/g'`
    1.55 -       echo "\"$v\""
    1.56 +       v=`printf '%s' "$v"|sed -e 's/\"/\"\"/g'`
    1.57 +       printf '%s' "\"$v\""
    1.58         return ;;
    1.59       *.*.*|*-*-*|*[Ee]*[Ee]*|[Ee]*|*[\ -,:-df-~]*) # string
    1.60 -       echo "\"$v\""
    1.61 +       printf '%s' "\"$v\""
    1.62         return ;;
    1.63       *)
    1.64         if expr "$v" : '[-0-9.Ee][-0-9.Ee]*$' >/dev/null 2>&1; then
    1.65 -	 echo $v		# MAYBE numeric, maybe...
    1.66 +	 printf '%s' $v		# MAYBE numeric, maybe...
    1.67         else
    1.68 -	 echo "\"$v\""
    1.69 +	 printf '%s' "\"$v\""
    1.70         fi ;;
    1.71     esac)
    1.72  }
    1.73  sqlquotestr() (
    1.74    case "$1" in
    1.75 -    *\'*)	v=`echo "$1"| sed "s/'/''/g"`
    1.76 -		echo "'$v'" ;;
    1.77 -    *)		echo "'$1'" ;;
    1.78 +    *\'*)	v=`printf '%s' "$1"| sed "s/'/''/g"`
    1.79 +		printf '%s' "'$v'" ;;
    1.80 +    *)		printf '%s' "'$1'" ;;
    1.81    esac
    1.82  )
    1.83  mktempd() {
    1.84 @@ -1002,7 +1008,7 @@
    1.85  	   rm -f $td/$c.count
    1.86  	   case $type in
    1.87  	     file:*)
    1.88 -	       echo "$val" \
    1.89 +	       printf '%s\n' "$val" \
    1.90  		   | while read fn; do
    1.91  		       file=$td/$fn
    1.92  		       if [ ! -s "$file" ]; then
    1.93 @@ -1021,7 +1027,7 @@
    1.94  	       ;;
    1.95  	   esac
    1.96  	 fi
    1.97 -	 echo "$val"		# Keep newlines by ""
    1.98 +	 printf '%s' "$val"
    1.99  	 return
   1.100         fi
   1.101       done
   1.102 @@ -1565,7 +1571,6 @@
   1.103  	#echo u=$us
   1.104  	#v="`echo ${us#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`"
   1.105  	v="`echo ${us#*=}|unhexize|sed -e 's/\"/\"\"/g'`"
   1.106 - # err k=$k v=$v
   1.107  	case "$k" in
   1.108  	  *:filename)
   1.109  	    mimetype=`file --mime-type - < "$tmpd/$v"|cut -d' ' -f2`
   1.110 @@ -4218,9 +4223,9 @@
   1.111  	  # Binary update line is TOO LONG to pipelining
   1.112  	  sqlfile="$tmpd/sqlf.$$"
   1.113  	  if [ -n "$transaction" ]; then
   1.114 -	    echo "$sql" >> $transaction
   1.115 +	    printf '%s' "$sql" >> $transaction
   1.116  	  else
   1.117 -	    echo "$sql" > $sqlfile
   1.118 +	    printf '%s' "$sql" > $sqlfile
   1.119  	    query ".read $sqlfile"
   1.120  	  fi
   1.121  	fi
   1.122 @@ -4235,7 +4240,8 @@
   1.123  	limit="limit 1 offset $i"
   1.124  	i=$((i+1))		# increase beforehand against continue
   1.125  	val=`getvalquote $tbl $col "$limit"`
   1.126 -	[ -z "$val" -o x"$val" = x'""' -o x"$val" = x"NULL" ] && continue
   1.127 +	##XXX [ -z "$val" -o x"$val" = x'""' -o x"$val" = x"NULL" ] && continue
   1.128 +	[ -z "$val" -o x"$val" = x'""' ] && continue
   1.129  	## err $col=$val
   1.130  	bin=NULL
   1.131  	## err partype$col=`getpartype $col "$limit"`
   1.132 @@ -4251,6 +4257,9 @@
   1.133  	  *)    type=\"string\" ;;
   1.134  	esac
   1.135  	case `gettbl_coltype $tbl/$col` in
   1.136 +	  [Cc][Hh][Ee][Cc][Kk][Bb][Oo][Xx]|[Tt][Ee][Xx][Tt])
   1.137 +	    test x"$val" = x"NULL" && val="''"
   1.138 +	    ;;
   1.139  	  password)		# special care for password
   1.140  	    # name={password,pswd1,pswd2}
   1.141  	    p1=`getpar pswd1 "$limit"`
   1.142 @@ -4284,7 +4293,7 @@
   1.143  	if [ x"$bin" = x"NULL" ]; then
   1.144  	  ## err Normal-query: `echo $sql`
   1.145  	  if [ -n "$transaction" ]; then
   1.146 -	    echo "$sql" >> $transaction
   1.147 +	    printf '%s' "$sql" >> $transaction
   1.148  	  else
   1.149  	    query "$sql"
   1.150  	  fi
   1.151 @@ -4292,9 +4301,9 @@
   1.152  	  sqlfile="$tmpd/query.$$"
   1.153  	  ## err sqlfile=`ls -lF $sqlfile`
   1.154  	  if [ -n "$transaction" ]; then
   1.155 -	    echo "$sql" >> $transaction
   1.156 +	    printf '%s' "$sql" >> $transaction
   1.157  	  else
   1.158 -	    echo "$sql" > $sqlfile
   1.159 +	    printf '%s' "$sql" > $sqlfile
   1.160  	    query ".read $sqlfile"
   1.161  	  fi
   1.162  	fi
   1.163 @@ -4347,14 +4356,14 @@
   1.164    # Image Cache dir
   1.165    ## err genform: getcache=$2/$rowid
   1.166    td=`getcachedir "$2/$rowid"`
   1.167 -  while IFS=: read prompt name keytype type args; do
   1.168 +  while IFS=: read -r prompt name keytype type args; do
   1.169      [ -z "${prompt%%\#*}" ] && continue # skip comment line(#)
   1.170      sp="${args:+ }"
   1.171      form="" val=""
   1.172      if [ -n "$rowid" ]; then
   1.173        # err genform2a: Seeking for "$2.$name, type=$type"
   1.174        rawval=`getvalbyid $2 $name $rowid $td`
   1.175 -      val=`echo "$rawval"|htmlescape`
   1.176 +      val=`printf '%s\n' "$rawval"|htmlescape`
   1.177  ## err genform3a: getvalbyid $2 $name $rowid $td
   1.178  ## err genform3b: val="[$val]" type="$type"
   1.179      fi
   1.180 @@ -4366,7 +4375,7 @@
   1.181  	cgiform=cgi_multi_$type
   1.182  	if [ -s $td/$name.count -a -n "$val" ]; then
   1.183  	  form=`$cgiform $name $td`
   1.184 -	  val=$(echo "$val"|
   1.185 +	  val=$(printf '%s\n' "$val"|
   1.186  		     while read fn; do
   1.187  		       echo "<tr><td>`cat $td/$fn|htmlescape|hreflink`
   1.188  			</td></tr>$nl"
   1.189 @@ -4374,6 +4383,7 @@
   1.190  	  val="<table>$nl$val$nl</table>"
   1.191  	else
   1.192  	  #form="<input name=\"$name\" value=\"$val\" type=\"$type\"$sp$args>$nl"
   1.193 +
   1.194  	  form=`cgi_$type $name "$rawval" "$args"`
   1.195  	fi
   1.196  	;;
   1.197 @@ -4383,7 +4393,8 @@
   1.198  \"s,\([^ =][^=]*\)=\([^= ][^= ]*\),$fh value=\\"\2\\">\1</label>,g\"`"
   1.199  	;;
   1.200        [Cc][Hh][Ee][Cc][Kk][Bb][Oo][Xx])
   1.201 -	form="<label><input type=\"checkbox\" name=\"$name\" value=\"${args#*=}\">${args%=*}</label>"
   1.202 +	checked=${val:+ checked}
   1.203 +	form="<label><input type=\"checkbox\" name=\"$name\" value=\"${args#*=}\"$checked>${args%=*}</label>"
   1.204  	;;
   1.205        [Ss][Ee][Ll][Ee][Cc][Tt])
   1.206  	fh="<select name=\"$name\">$nl"
   1.207 @@ -4484,9 +4495,11 @@
   1.208      fi
   1.209    done < $1
   1.210    # enctype="multipart/form-data"
   1.211 +  cat<<-EOF
   1.212 +<form action="${GF_ACTION:-$myname}" method="POST" enctype="multipart/form-data">
   1.213 +	EOF
   1.214 +  test -n "$rowid" && printf '%s\n' "$rm" # Workaround for utf8 buggy NetBSD sh
   1.215    cat<<EOF
   1.216 -<form action="${GF_ACTION:-$myname}" method="POST" enctype="multipart/form-data">
   1.217 -${rowid:+$rm}
   1.218   <table class="b $2">
   1.219  $forms
   1.220   </table>$hiddens