wok-tiny annotate wiki/stuff/var/www/wiki/index.sh @ rev 142

Remove ashism ==
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Feb 27 17:43:23 2019 +0100 (2019-02-27)
parents 48d2c4c7a227
children
rev   line source
pascal@12 1 #!/bin/sh
pascal@12 2 #
pascal@12 3 # TazWikiss - A tiny Wiki for busybox/httpd
pascal@12 4 # Licence GNU/GPLv2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
pascal@12 5 # Copyright (C) Pascal Bellard
pascal@12 6 # Based on WiKiss - http://wikiss.tuxfamily.org/
pascal@12 7
pascal@100 8 . /usr/bin/httphelper.sh
pascal@12 9
pascal@100 10 cd $(dirname $0)
pascal@100 11 CONFIG=config-${HTTP_ACCEPT_LANGUAGE%%[,;_-]*}.sh
pascal@100 12 [ -x "$CONFIG" ] || CONFIG=config.sh
pascal@12 13 . ./$CONFIG
pascal@12 14
pascal@100 15 WIKI_VERSION="Based on WiKiss 0.3"
pascal@12 16
pascal@12 17 # Initialisations
pascal@12 18 toc='' # Table Of Content
pascal@12 19 CONTENT='' # contenu de la page
pascal@12 20 HISTORY='' # lien vers l'historique
pascal@12 21 plugins_dir="plugins/" # repertoire ou stocker les plugins
pascal@12 22 template="template.html" # Fichier template
pascal@12 23 PAGE_TITLE_link=true # y-a-t-il un lien sur le titre de la page ?
pascal@12 24 editable=true # la page est editable
pascal@12 25 urlbase="$SCRIPT_NAME"
pascal@12 26 #urlbase="./"
pascal@12 27
pascal@12 28 die()
pascal@12 29 {
pascal@12 30 echo $@
pascal@12 31 exit
pascal@12 32 }
pascal@12 33
pascal@12 34 redirect()
pascal@12 35 {
pascal@12 36 awk '{ printf "%s\r\n",$0 }' <<EOT
pascal@12 37 HTTP/1.0 302 Found
pascal@12 38 location: $1
pascal@12 39
pascal@12 40 EOT
pascal@12 41 exit
pascal@12 42 }
pascal@12 43
pascal@12 44 cache_auth()
pascal@12 45 {
pascal@12 46 local tmp
pascal@12 47 tmp="$(echo $1$(date +%d) | md5sum | cut -c1-8)"
pascal@142 48 [ "$(POST sc)" = "$1" ] && AUTH=$tmp || [ "$AUTH" = "$tmp" ]
pascal@12 49 }
pascal@12 50
pascal@12 51 authentified()
pascal@12 52 {
pascal@12 53 [ -n "$PASSWORDS" ] && for i in $PASSWORDS ; do
pascal@12 54 cache_auth "$i" && return
pascal@12 55 done
pascal@12 56 cache_auth "$PASSWORD"
pascal@12 57 }
pascal@12 58
pascal@100 59 sedesc()
pascal@100 60 {
pascal@100 61 echo "$1" | sed 's|[/&"]|\\&|g' | \
pascal@100 62 sed ':a;N;$!ba;s|\n|\\n|g;s|'$(echo -en "\r")'||g'
pascal@100 63 }
pascal@100 64
pascal@12 65 plugin_call_method()
pascal@12 66 {
pascal@12 67 local status
pascal@12 68 local name
pascal@12 69 name=$1
pascal@12 70 shift
pascal@12 71 [ -d "$plugins_dir" ] || return
pascal@12 72 status=false
pascal@12 73 for i in $plugins_dir/*.sh ; do
pascal@12 74 [ -x $i ] || continue
pascal@12 75 grep -q "^$name()" $i || continue
pascal@12 76 . $i
pascal@12 77 eval $name "$@"
pascal@142 78 [ $? = 0 ] && status=true
pascal@100 79 done 2> /tmp/tazwiki$$stderr
pascal@100 80 [ -s /tmp/tazwiki$$stderr ] &&
pascal@100 81 logger -t "httpd/wiki/plugin" < /tmp/tazwiki$$stderr
pascal@100 82 rm -f /tmp/tazwiki$$stderr 2> /dev/null
pascal@12 83 $status
pascal@12 84 }
pascal@12 85
pascal@12 86 curdate()
pascal@12 87 {
pascal@100 88 date '+%Y-%m-%d %H:%M'
pascal@12 89 }
pascal@12 90
pascal@12 91 filedate()
pascal@12 92 {
pascal@12 93 stat -c %y $1 | sed -e 's|-|/|g' -e 's/\(:..\):.*/\1/'
pascal@12 94 }
pascal@12 95
pascal@12 96 AUTH=$(GET auth)
pascal@12 97 [ -n "$AUTH" ] || AUTH=$(POST auth)
pascal@12 98 PAGE_TITLE="$(GET page)"
pascal@12 99 [ -n "$PAGE_TITLE" ] || PAGE_TITLE="$(POST page)"
pascal@12 100 if [ -z "$PAGE_TITLE" ]; then
pascal@12 101 PAGE_TITLE="$START_PAGE"
pascal@12 102 case "$(GET action)" in
pascal@12 103 recent) PAGE_TITLE="$RECENT_CHANGES" ;;
pascal@12 104 search) PAGE_TITLE="$LIST"
pascal@12 105 [ -n "$(GET query)" ] && PAGE_TITLE="$SEARCH_RESULTS $(GET query)"
pascal@12 106 esac
pascal@12 107 fi
pascal@12 108 case "$PAGE_TITLE" in
pascal@12 109 */*|*\&*) PAGE_TITLE="$START_PAGE" ;;
pascal@12 110 esac
pascal@12 111 gtime=$(GET time)
pascal@12 112 case "$gtime" in
pascal@12 113 */*|*\&*) gtime="" ;;
pascal@12 114 esac
pascal@12 115 action=$(GET action)
pascal@12 116 datew="$(curdate)"
pascal@12 117 content="$(POST content)"
pascal@12 118
pascal@12 119 # Ecrire les modifications, s'il y a lieu
pascal@12 120 PAGE_txt="$PAGES_DIR$PAGE_TITLE.txt"
pascal@100 121 plugin_call_method "init" $PAGE_txt
pascal@12 122 if [ -n "$content" ]; then # content => page
pascal@12 123 if authentified; then
pascal@100 124 CR="$(echo -en '\r')"
pascal@100 125 sed 's/</\&lt;/g;s/'$CR' /'$CR'\n/g' > $PAGE_txt <<EOT
pascal@100 126 $POST_content_1
pascal@12 127 EOT
pascal@12 128 if [ -n "$BACKUP_DIR" ]; then
pascal@12 129 complete_dir_s="$BACKUP_DIR$PAGE_TITLE/"
pascal@100 130 if [ ! -d "$complete_dir_s" ]; then
pascal@12 131 mkdir -p $complete_dir_s
pascal@12 132 chmod 777 $complete_dir_s
pascal@12 133 fi
pascal@100 134 cat >> "$complete_dir_s$(curdate).bak" <<EOT
pascal@12 135
pascal@12 136 // $datew / $REMOTE_ADDR
pascal@12 137 $(cat $PAGE_txt)
pascal@12 138 EOT
pascal@12 139 fi
pascal@12 140 plugin_call_method "writedPage" $PAGE_txt
pascal@12 141 PAGE_TITLE="$PAGE_TITLE&auth=$AUTH"
pascal@12 142 else
pascal@12 143 PAGE_TITLE="$PAGE_TITLE&action=edit&error=1"
pascal@12 144 fi
pascal@12 145 redirect "$urlbase?page=$PAGE_TITLE"
pascal@12 146 fi
pascal@12 147
pascal@12 148 if [ -r "$PAGE_txt" -o -n "$action" ]; then
pascal@12 149 CONTENT=""
pascal@12 150 if [ -e "$PAGE_txt" ]; then
pascal@100 151 TIME=$(filedate "$PAGE_txt")
pascal@100 152 CONTENT="$(cat "$PAGE_txt")"
pascal@12 153 fi
pascal@12 154 # Restaurer une page
pascal@142 155 [ -n "$(GET page)" -a -n "$gtime" -a "$(GET restore)" = 1 ] &&
pascal@12 156 [ -r "$BACKUP_DIR$PAGE_TITLE/$gtime" ] &&
pascal@12 157 CONTENT="$(cat $BACKUP_DIR$PAGE_TITLE/$gtime)"
pascal@12 158 CONTENT="$(sed -e 's/\$/\&#036;/g' -e 's/\\/\&#092;/g' <<EOT
pascal@12 159 $CONTENT
pascal@12 160 EOT
pascal@12 161 )"
pascal@12 162 else
pascal@100 163 CONTENT="$(sed -e "s/%page%/$(sedesc "$PAGE_TITLE")/" <<EOT
pascal@12 164 $DEFAULT_CONTENT
pascal@12 165 EOT
pascal@12 166 )"
pascal@12 167 fi
pascal@12 168
pascal@12 169 htmldiff()
pascal@12 170 {
pascal@12 171 local files
pascal@12 172 local old
pascal@12 173 local new
pascal@12 174 old="$BACKUP_DIR$(GET page)/$1"
pascal@12 175 new="$BACKUP_DIR$(GET page)/$2"
pascal@100 176 [ -s "$old" ] || old=/dev/null
pascal@100 177 [ -n "$2" -a "$2" != "none" ] || new=$PAGES_DIR$(GET page).txt
pascal@12 178 files="$old $new"
pascal@100 179 [ "$old" -nt "$new" -a "$old" != "/dev/null" ] && files="$new $old"
pascal@12 180 diff -aU 99999 $files | sed -e '1,3d' -e '/^\\/d' -e 's|$|<br/>|' \
pascal@100 181 -e 's|^-\(.*\)$|<font color=red>\1</font>|' \
pascal@100 182 -e 's|^+\(.*\)$|<font color=green>\1</font>|'
pascal@12 183 }
pascal@12 184
pascal@12 185 # Actions speciales du Wiki
pascal@12 186 case "$action" in
pascal@12 187 edit)
pascal@12 188 editable=false
pascal@100 189 HISTORY="<a href=\"$urlbase?page=$(urlencode $PAGE_TITLE)&amp;action=history\" accesskey=\"6\" rel=\"nofollow\">$HISTORY_BUTTON</a><br />"
pascal@100 190 CONTENT="$(sed 's/%/\&#37;/g' <<EOT
pascal@100 191 $CONTENT
pascal@100 192 EOT
pascal@100 193 )"
pascal@12 194 CONTENT="<form method=\"post\" action=\"$urlbase\">
pascal@12 195 <textarea name=\"content\" cols=\"83\" rows=\"30\" style=\"width: 100%;\">
pascal@12 196 $CONTENT
pascal@12 197 </textarea>
pascal@12 198 <input type=\"hidden\" name=\"page\" value=\"$PAGE_TITLE\" /><br />
pascal@12 199 <p align=\"right\">"
pascal@12 200 if authentified; then
pascal@12 201 CONTENT="$CONTENT<input type=\"hidden\" value=\"$(POST password)\""
pascal@12 202 else
pascal@12 203 CONTENT="$CONTENT$MDP : <input type=\"password\""
pascal@12 204 fi
pascal@12 205 CONTENT="$CONTENT name=\"sc\" /> <input type=\"submit\" value=\"$DONE_BUTTON\" accesskey=\"s\" /></p></form>"
pascal@12 206 ;;
pascal@12 207 history)
pascal@12 208 complete_dir="$BACKUP_DIR$PAGE_TITLE/"
pascal@12 209 if [ -n "$gtime" ]; then
pascal@100 210 HISTORY="<a href=\"$urlbase?page=$PAGE_TITLE&amp;action=history\" rel=\"nofollow\">$HISTORY_BUTTON</a>"
pascal@12 211 if [ -r "$complete_dir$gtime" ]; then
pascal@100 212 HISTORY="$HISTORY <a href=\"$urlbase?page=$PAGE_TITLE&amp;action=edit&amp;time=$gtime&amp;restore=1\" rel=\"nofollow\">$RESTORE</a>"
pascal@12 213 CONTENT="$(cat $complete_dir$gtime | sed -e s/$(echo -ne '\r')//g -e 's|$|<br/>|g')"
pascal@12 214 else
pascal@12 215 HISTORY="$HISTORY -"
pascal@12 216 fi
pascal@12 217 else
pascal@12 218 HISTORY="$HISTORY_BUTTON"
pascal@12 219 CONTENT="$NO_HISTORY"
pascal@12 220 if [ -d $complete_dir ]; then
pascal@12 221 CONTENT="<form method=\"GET\" action=\"$urlbase\">\n<input type=hidden name=action value=diff><input type=hidden name=page value=\"$PAGE_TITLE\">"
pascal@12 222 for file in $(ls $complete_dir | sort -r); do
pascal@12 223 CONTENT="$CONTENT
pascal@12 224 <input type=radio name=f1 value=$file><input type=radio name=f2 value=$file />
pascal@12 225 <a href=\"$urlbase?page=$PAGE_TITLE&amp;action=history&amp;time=$file\">$file</a><br />
pascal@12 226 "
pascal@12 227 done
pascal@12 228 CONTENT="$CONTENT<input type=submit value=diff></form>"
pascal@12 229 fi
pascal@12 230 fi ;;
pascal@12 231 diff)
pascal@12 232 if [ -n "$(GET f1)" ]; then
pascal@100 233 HISTORY="<a href=\"$urlbase?page=$(urlencode "$PAGE_TITLE")&amp;action=history\">$HISTORY_BUTTON</a>"
pascal@100 234 CONTENT="$(htmldiff "$(GET f1)" "$(GET f2)" )"
pascal@12 235 else
pascal@12 236 # diff auto entre les 2 dernières versions
pascal@100 237 ls "$BACKUP_DIR$PAGE_TITLE/" | ( sort -r ; echo none ; echo ) | head -n 2 | while read f1 f2; do
pascal@12 238 redirect "$urlbase?page=$(urlencode "$PAGE_TITLE")&action=$action&f1=$f1&f2=$f2"
pascal@12 239 done
pascal@12 240 fi ;;
pascal@12 241 search)
pascal@12 242 PAGE_TITLE_link=false
pascal@12 243 editable=false
pascal@12 244 query="$(GET query)"
pascal@12 245 n=0
pascal@12 246 for file in $(ls $PAGES_DIR/*.txt 2> /dev/null | sort) ; do
pascal@12 247 [ -e $file ] || continue
pascal@12 248 echo $file | grep -qs "$query" $file /dev/stdin || continue
pascal@12 249 file=$(basename $file ".txt")
pascal@12 250 CONTENT="$CONTENT<a href=\"$urlbase?page=$file\">$file</a><br />
pascal@12 251 "
pascal@12 252 n=$(($n + 1))
pascal@12 253 done
pascal@12 254 PAGE_TITLE="$PAGE_TITLE ($n)" ;;
pascal@12 255 recent)
pascal@12 256 PAGE_TITLE_link=false
pascal@12 257 editable=false
pascal@12 258 n=0
pascal@12 259 for file in $(ls -l $PAGES_DIR/*.txt 2> /dev/null | awk '{ print $9 }' | tail -n 10) ; do
pascal@12 260 filename=$(basename $file ".txt")
pascal@12 261 timestamp=$(filedate $file)
pascal@12 262 CONTENT="$CONTENT<a href=\"$urlbase?page=$filename\">$filename</a> ($timestamp - <a href=\"$urlbase?page=$filename&amp;action=diff\">diff</a>)<br />
pascal@12 263 "
pascal@12 264 done ;;
pascal@12 265 '') ;;
pascal@12 266 *)
pascal@12 267 plugin_call_method "action" $action || action="" ;;
pascal@12 268 esac
pascal@12 269 if [ -z "$action" ]; then
pascal@12 270 if echo "$CONTENT" | grep -q '%html%\s'; then
pascal@12 271 CONTENT="$(sed 's/%html%\s//' <<EOT
pascal@12 272 $CONTENT
pascal@12 273 EOT
pascal@12 274 )"
pascal@12 275 else
pascal@12 276 tmpdir=/tmp/tazwiki$$
pascal@12 277 mkdir $tmpdir
pascal@12 278 unesc="$(echo "$CONTENT" | sed 's/\^\(.\)/\n^\1\n/g' | grep '\^' |\
pascal@12 279 sort | uniq | grep -v "['[!]" | hexdump -e '"" 3/1 "%d " "\n"' |\
pascal@100 280 awk '{ printf "-e '\''s/\\^%c/\\&#%d;/g'\'' ",$2,$2}' | \
pascal@100 281 sed 's/\^\([*.]\)/^\\\1/') \
pascal@12 282 -e 's/\\^'\\''/\\&#39;/g' -e 's/\^\!/\&#33;/g' \
pascal@12 283 -e 's/\^\[/\&#91;/g'"
pascal@12 284 CONTENT="$(eval sed $unesc <<EOT | \
pascal@12 285 sed -e 's/&/\&amp;/g' -e s/$(echo -ne '\r')//g \
pascal@12 286 -e 's/&amp;lt;/\&lt;/g' -e 's/&amp;#\([0-9]\)/\&#\1/g' | \
pascal@12 287 awk -v tmpdir=$tmpdir 'BEGIN { n=1; state=0 } {
pascal@12 288 s=$0
pascal@12 289 while (1) {
pascal@12 290 if (state == 0) {
pascal@12 291 if (match(s,/\{\{/)) {
pascal@12 292 printf "%s<pre><code>{{CODE%s}}</code></pre>",substr(s,1,RSTART-1),n
pascal@12 293 s=substr(s,RSTART+RLENGTH)
pascal@12 294 state=1
pascal@12 295 }
pascal@12 296 else {
pascal@12 297 print s
pascal@12 298 break
pascal@12 299 }
pascal@12 300 }
pascal@12 301 if (state == 1) {
pascal@12 302 if (match(s,/\}\}/)) {
pascal@12 303 printf "%s",substr(s,1,RSTART-1) >> tmpdir "/CODE" n
pascal@12 304 s=substr(s,RSTART+RLENGTH)
pascal@12 305 n++
pascal@12 306 state=0
pascal@12 307 }
pascal@12 308 else {
pascal@12 309 print s >> tmpdir "/CODE" n
pascal@12 310 break
pascal@12 311 }
pascal@12 312 }
pascal@12 313 }
pascal@12 314 }'
pascal@12 315 $CONTENT
pascal@12 316 EOT
pascal@12 317 )"
pascal@12 318 plugin_call_method formatBegin
pascal@12 319 CONTENT="$(sed -e 's/&lt;-->/\&harr;/g' -e 's/&lt;==>/\&hArr;/g'\
pascal@12 320 -e 's/-->/\&rarr;/g' -e 's/&lt;--/\&larr;/g' \
pascal@12 321 -e 's/==>/\&rArr;/g' -e 's/&lt;==/\&lArr;/g' \
pascal@12 322 -e 's/([eE])/\&euro;/g' -e 's/([pP])/\&pound;/g' \
pascal@12 323 -e 's/([yY])/\&yen;/g' -e 's/([tT][mM])/\&trade;/g' \
pascal@12 324 -e 's/([cC])/\&copy;/g' -e 's/([rR])/\&reg;/g' \
pascal@100 325 -e 's/([dD])/\&deg;/g' -e 's/(1\/2)/\&frac12;/g' \
pascal@100 326 -e 's/(1\/4)/\&frac14;/g' -e 's/(3\/4)/\&frac34;/g' \
pascal@100 327 -e 's/(phone)/\&#9742;/' -e 's/(wphone)/\&#9743;/' \
pascal@100 328 -e 's/(skull)/\&#9760;/' -e 's/(radioactive)/\&#9762;/' \
pascal@100 329 -e 's/(sad)/\&#9785;/' -e 's/(smile)/\&#9786;/' \
pascal@100 330 -e 's/(recycle)/\&#9842;/' -e 's/(wheelchair)/\&#9855;/' \
pascal@100 331 -e 's/(wflag)/\&#9872;/' -e 's/(bflag)/\&#9873;/' \
pascal@100 332 -e 's/(anchor)/\&#9875;/' -e 's/(flower)/\&#9880;/' \
pascal@100 333 -e 's/(gear)/\&#9881;/' -e 's/(volt)/\&#9889;/' \
pascal@100 334 -e 's/(warn)/\&#9888;/' -e 's/(star)/\&#9733;/' \
pascal@12 335 -e 's/(&lt;=)/\&le;/g' -e 's/(>=)/\&ge;/g' \
pascal@12 336 -e 's/(!=)/\&ne;/g' -e 's/(+-)/\&plusmn;/g' <<EOT
pascal@12 337 $CONTENT
pascal@12 338 EOT
pascal@12 339 )"
pascal@100 340 rg_url="[0-9a-zA-Z\.\#/~\_%=\?\&,\+\:@;!\(\)\*\$'\-]*" # TODO: verif & / &amp;
pascal@12 341 rg_link_local="$rg_url"
pascal@12 342 rg_link_http="https\?://$rg_url"
pascal@12 343 rg_img_local="$rg_url\.jpe\?g\|$rg_url\.gif\|$rg_url\.png"
pascal@12 344 rg_img_http="$rg_link_http\.jpe\?g\|$rg_link_http\.gif\|$rg_link_http\.png"
pascal@12 345
pascal@12 346 # image, image link, link, wikipedia, email ...
pascal@12 347 CONTENT="$(sed \
pascal@100 348 -e "s#\[\($rg_img_http\)\]#<img src=\"\1\" alt=\"\1\" style=\"float:\"/>#g" \
pascal@100 349 -e "s#\[\($rg_img_local\)\]#<img src=\"\1\" alt=\"\1\" style=\"float:\"/>#g" \
pascal@12 350 -e "s#\[\($rg_img_http\)|*\([a-z]*\)*\]#<img src=\"\1\" alt=\"\1\" style=\"float:\2;\"/>#g" \
pascal@12 351 -e "s#\[\($rg_img_local\)|*\([a-z]*\)*\]#<img src=\"\1\" alt=\"\1\" style=\"float:\2;\"/>#g" \
pascal@12 352 -e "s#\[\($rg_img_http\)|\($rg_link_http\)|*\([a-z]*\)*\]#<a href=\"\2\" class=\"url\"><img src=\"\1\" alt=\"\1\" title=\"\1\"style=\"float:\3;\"/></a>#g" \
pascal@12 353 -e "s#\[\($rg_img_http\)|\($rg_link_local\)|*\([a-z]*\)*\]#<a href=\"\2\" class=\"url\"><img src=\"\1\" alt=\"\1\" title=\"\1\"style=\"float:\3;\"/></a>#g" \
pascal@12 354 -e "s#\[\($rg_img_local\)|\($rg_link_http\)|*\([a-z]*\)*\]#<a href=\"\2\" class=\"url\"><img src=\"\1\" alt=\"\1\" title=\"\1\"style=\"float:\3;\"/></a>#g" \
pascal@12 355 -e "s#\[\($rg_img_local\)|\($rg_link_local\)|*\([a-z]*\)*\]#<a href=\"\2\" class=\"url\"><img src=\"\1\" alt=\"\1\" title=\"\1\"style=\"float:\3;\"/></a>#g" \
pascal@12 356 -e "s#\[\([^]]*\)|\($rg_link_http\)\]#<a href=\"\2\" class=\"url\">\1</a>#g" \
pascal@12 357 -e "s#\[\([^]]*\)|\($rg_link_local\)\]#<a href=\"\2\" class=\"url\">\1</a>#g" \
pascal@12 358 -e "s#\[\($rg_link_http\)\]#<a href=\"\1\" class=\"url\">\1</a>#g" \
pascal@12 359 -e "s#\([^>\"]\)\($rg_link_http\)#\1<a href=\"\2\" class=\"url\">\2</a>#g" \
pascal@12 360 -e "s#\[?\([^]]*\)\]#<a href=\"http://$LANG.wikipedia.org/wiki/\1\" class=\"url\" title=\"Wikipedia\">\1</a>#g" \
pascal@12 361 -e "s#\[\([^]]*\)\]#<a href=\"$urlbase?page=\1\">\1</a>#g" \
pascal@12 362 -e 's#\([0-9a-zA-Z\./~\-\_][0-9a-zA-Z\./~\-\_]*@[0-9a-zA-Z\./~\-\_][0-9a-zA-Z\./~\-\_]*\)#<a href=\"mailto:\1\">\1</a>#g' \
pascal@12 363 -e 's#^\*\*\*\(.*\)#<ul><ul><ul><li>\1</li></ul></ul></ul>#g' \
pascal@12 364 -e 's#^\*\*\(.*\)#<ul><ul><li>\1</li></ul></ul>#g' \
pascal@12 365 -e 's#^\*\(.*\)#<ul><li>\1</li></ul>#g' \
pascal@12 366 -e 's,^\#\#\#\(.*\),<ol><ol><ol><li>\1</li></ol></ol></ol>,g' \
pascal@12 367 -e 's,^\#\#\(.*\),<ol><ol><li>\1</li></ol></ol>,g' \
pascal@12 368 -e 's,^\#\(.*\),<ol><li>\1</li></ol>,g' \
pascal@12 369 -e "s/$(printf '\r')//" <<EOT | sed \
pascal@12 370 -e ':x;/<\/ol>$/{N;s/\n//;$P;$D;bx;}' | sed \
pascal@12 371 -e ':x;/<\/ul>$/{N;s/\n//;$P;$D;bx;}' | sed \
pascal@12 372 -e ':x;s/<\/ul><ul>//g;tx' -e ':x;s/<\/ol><ol>//g;tx' \
pascal@12 373 -e 's|----*$|<hr />|' -e 's|$|<br />|' \
pascal@100 374 -e 's|</ul>|&\n|g' -e 's|</ol>|&\n|g' \
pascal@12 375 -e 's#</li>#&\n#g' -e 's#\(</h[123456]>\)<br />#\1#g' \
pascal@12 376 -e "s#'--\([^']*\)--'#<del>\1</del>#g" \
pascal@12 377 -e "s#'__\([^']*\)__'#<u>\1</u>#g" \
pascal@12 378 -e "s#'''''\([^']*\)'''''#<strong><em>\1</em></strong>#g" \
pascal@12 379 -e "s#'''\([^']*\)'''#<strong>\1</strong>#g" \
pascal@12 380 -e "s#''\([^']*\)''#<em>\1</em>#g"
pascal@12 381 $CONTENT
pascal@12 382 EOT
pascal@12 383 )"
pascal@12 384 while read link; do
pascal@100 385 [ -s "$PAGES_DIR$link.txt" ] && continue
pascal@100 386 CONTENT="$(sed "s/\\?page=$(sedesc "$link")\"/& class=\"pending\"/" <<EOT
pascal@12 387 $CONTENT
pascal@12 388 EOT
pascal@12 389 )"
pascal@12 390 done <<EOT
pascal@12 391 $(grep "$urlbase?page=" <<EOM | sed -e 's/^.*\?page=\([^"]*\).*$/\1/' -e 's/&.*//'
pascal@12 392 $CONTENT
pascal@12 393 EOM
pascal@12 394 )
pascal@12 395 EOT
pascal@12 396 while echo "$CONTENT" | grep -q '^ ' ; do
pascal@12 397 CONTENT="$(sed 's/^\( *\) \([^ ]\)/\1\&nbsp;\&nbsp;\&nbsp;\&nbsp;\2/' <<EOT
pascal@12 398 $CONTENT
pascal@12 399 EOT
pascal@12 400 )"
pascal@12 401 done
pascal@100 402 read hastoc <<EOT
pascal@100 403 $CONTENT
pascal@100 404 EOT
pascal@12 405 CONTENT="$(sed -e 's/^ /\&nbsp;\&nbsp;\&nbsp;\&nbsp;/' -e '1s/^TOC//' <<EOT
pascal@12 406 $CONTENT
pascal@12 407 EOT
pascal@12 408 )"
pascal@12 409 toc='<div id="toc">'
pascal@100 410 while read line; do
pascal@100 411 [ -n "$line" ] || continue
pascal@100 412 i=$(echo "$line" | sed 's/^!\(!*\).*/\1/' | wc -c)
pascal@100 413 line="$(echo "$line" | sed 's/^!!*//')"
pascal@100 414 label="$(echo "$line" | sed 's/[^\dA-Za-z]/_/g')"
pascal@100 415 toc="$(cat <<EOT
pascal@12 416 $toc
pascal@12 417 <h$i><a href="#$label">$line</a></h$i>
pascal@12 418 EOT
pascal@12 419 )"
pascal@100 420 CONTENT="$(sed "s/^!!* *$(sedesc "$line")\$/<h$i><a name=\"$label\">$(sedesc "$line")<\/a><\/h$i>/" <<EOT
pascal@12 421 $CONTENT
pascal@12 422 EOT
pascal@12 423 )"
pascal@100 424 done <<EOT
pascal@100 425 $(grep "^!" <<EOM | sed -e 's/#/\#/g' -e 's/&/\\\&/g'
pascal@12 426 $CONTENT
pascal@12 427 EOM
pascal@12 428 )
pascal@12 429 EOT
pascal@12 430 toc="$(cat <<EOT
pascal@12 431 $toc
pascal@12 432 </div>
pascal@12 433 EOT
pascal@12 434 )"
pascal@100 435 false &&
pascal@100 436 case "$hastoc" in
pascal@100 437 TOC*) ;;
pascal@100 438 *) toc='';;
pascal@100 439 esac
pascal@12 440 CONTENT="$(awk -v tmpdir=$tmpdir '{
pascal@12 441 s=$0
pascal@12 442 while (1) {
pascal@12 443 if (match(s,/\{\{CODE[0-9]+\}\}/)) {
pascal@12 444 printf "%s" substr(s,1,RSTART-1)
pascal@12 445 system("cat " tmpdir "/" substr(s,RSTART+2,RLENGTH-4))
pascal@12 446 s=substr(s,RSTART+RLENGTH)
pascal@12 447 }
pascal@12 448 else {
pascal@12 449 print s
pascal@12 450 break
pascal@12 451 }
pascal@12 452 }
pascal@12 453 }' <<EOT
pascal@12 454 $CONTENT
pascal@12 455 EOT
pascal@12 456 )"
pascal@12 457 rm -rf $tmpdir
pascal@12 458 plugin_call_method formatEnd
pascal@12 459 fi
pascal@12 460 fi
pascal@12 461
pascal@12 462 # Remplacement dans le template
pascal@12 463 RECENT="<a href=\"$urlbase?action=recent\" accesskey=\"3\">$RECENT_CHANGES</a>"
pascal@142 464 [ "$action" = "recent" ] && RECENT=$RECENT_CHANGES
pascal@12 465 HOME="<a href=\"$urlbase?page=$START_PAGE\" accesskey=\"1\">$HOME_BUTTON</a>"
pascal@142 466 [ "$PAGE_TITLE" = "$START_PAGE" -a "$action" != "search" ] && HOME=$HOME_BUTTON
pascal@12 467 HELP="\1<a href=\"$urlbase?page=$HELP_BUTTON\" accesskey=\"2\" rel=\"nofollow\">$HELP_BUTTON</a>\2"
pascal@12 468 [ "$action" != "edit" ] && HELP=""
pascal@12 469
pascal@12 470 [ -r "$template" ] || die "'$template' is missing!"
pascal@100 471 html="$(sed -e "s/{\([^}]*\)RECENT_CHANGES\([^}]*\)}/\1$(sedesc "$RECENT")\2/" \
pascal@100 472 -e "s/{\([^}]*\)HOME\([^}]*\)}/\1$(sedesc "$HOME")\2/" \
pascal@100 473 -e "s/{\([^}]*\)HELP\([^}]*\)}/$(sedesc "$HELP")/" \
pascal@100 474 -e "s/{SEARCH}/<form method=\"get\" action=\"$(sedesc "$urlbase?page=$(urlencode "$PAGE_TITLE" | sed 's/#/\\#/g')")\"><div><input type=\"hidden\" name=\"action\" value=\"search\" \/><input type=\"text\" name=\"query\" value=\"$(sedesc "$(htmlentities $(GET query) )")\" tabindex=\"1\" \/> <input type=\"submit\" value=\"$(sedesc "$SEARCH_BUTTON")\" accesskey=\"q\" \/><\/div><\/form>/" \
pascal@12 475 < $template )"
pascal@12 476 [ "$action" != "" -a "$action" != "edit" -o ! -e "$PAGE_txt" ] && TIME="-"
pascal@12 477 plugin_call_method template
pascal@12 478 [ -n "$(GET error)" ] || ERROR=""
pascal@12 479 [ -n "$HISTORY" ] && HISTORY="\1$HISTORY\2"
pascal@12 480 PAGE_TITLE_str="$(htmlentities "$PAGE_TITLE")"
pascal@12 481 $PAGE_TITLE_link &&
pascal@12 482 PAGE_TITLE_str="<a href=\"$urlbase?page=$(urlencode "$PAGE_TITLE")\">$PAGE_TITLE_str</a>"
pascal@12 483 EDIT="$EDIT_BUTTON"
pascal@12 484 if $editable ; then
pascal@12 485 EDIT="$PROTECTED_BUTTON"
pascal@12 486 [ -w "$PAGE_txt" -o ! -e "$PAGE_txt" ] &&
pascal@100 487 EDIT="<a href=\"$urlbase?page=$(urlencode "$PAGE_TITLE")&amp;action=edit\" accesskey=\"5\" rel=\"nofollow\">$EDIT_BUTTON</a>"
pascal@12 488 fi
pascal@100 489 [ $(echo "$toc" | wc -l) -gt 2 ] && toc="\1$toc\2" || toc=""
pascal@12 490 AUTH_GET=""
pascal@12 491 AUTH_POST=""
pascal@12 492 if authentified; then
pascal@100 493 AUTH_GET="auth=$AUTH&"
pascal@12 494 AUTH_POST="\n<input type=\"hidden\" name=\"auth\" value=\"$AUTH\" />"
pascal@12 495 fi
pascal@12 496
pascal@100 497 html2="$(sed -e "s/{ERROR}/$(sedesc "$ERROR")/" \
pascal@100 498 -e "s/{WIKI_TITLE}/$(sedesc "$WIKI_TITLE")/" \
pascal@100 499 -e "s/{\([^}]*\)HISTORY\([^}]*\)}/$(sedesc "$HISTORY")/" \
pascal@100 500 -e "s/{PAGE_TITLE}/$(sedesc "$PAGE_TITLE_str")/" \
pascal@100 501 -e "s/{\([^}]*\)EDIT\([^}]*\)}/\1$(sedesc "$EDIT")\2/" \
pascal@100 502 -e "s/{\([^}]*\)TOC\([^}]*\)}/$(sedesc "$toc")/" \
pascal@100 503 -e "s/{PAGE_TITLE_BRUT}/$(sedesc "$(htmlentities "$PAGE_TITLE")")/" \
pascal@100 504 -e "s/{LAST_CHANGE}/$(sedesc "$LAST_CHANGES") :/" \
pascal@100 505 -e "s/{LANG}/$(sedesc "$LANG")/g" \
pascal@100 506 -e "s/href=\"?/href=\"$(sedesc "$urlbase?$AUTH_GET")/g" \
pascal@100 507 -e "s/action=\"$(sedesc "$urlbase")\">/&$(sedesc "$AUTH_POST")/g" \
pascal@100 508 -e "s/{WIKI_VERSION}/$(sedesc "$WIKI_VERSION")/" \
pascal@100 509 -e "s/{TIME}/$(sedesc "$TIME")/" -e "s/{DATE}/$(sedesc "$datew")/" \
pascal@100 510 -e "s/{IP}/$REMOTE_ADDR/" -e "s/{COOKIE}//" -e "s/{RSS}//" <<EOT
pascal@100 511 $html
pascal@12 512 EOT
pascal@100 513 )"
pascal@100 514 header "Content-type: text/html"
pascal@100 515 sed '/{CONTENT}/{s/{CONTENT}.*//;q}' <<EOT
pascal@100 516 $html2
pascal@100 517 EOT
pascal@100 518 cat <<EOT
pascal@12 519 $CONTENT
pascal@12 520 EOT
pascal@100 521 sed ':a;N;/{CONTENT}/!ba;s/.*{CONTENT}//;:b;N;$!bb' <<EOT
pascal@100 522 $html2
pascal@12 523 EOT