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