wok-next annotate tazwikiss/stuff/var/www/wiki/index.sh @ rev 8285

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